Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2012, 10:07   #1
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию Принцип работы браузеров

Сразу скажу, что меня не интересует каким образом браузер получает информацию, что он хранит ее в кэше и то, что можно найти, скопировав, название этой темы в поисковик. По большей степени меня интересует программная сторона. В голову пришла идея осуществить легкий браузер, но столкнулся с некоторыми трудностями. Свободное общение выбрал потому, что в этой нет особой привязанности к языку.
Один из главных вопросов это парсер, пока еще, html кода. Предположим приложение получило страницу. В оперативной памяти находится весь исходный код без HTTP запроса. Начинаем парсить. Для примера возьмем такую страничку. Вообще это можно проделать и в уме, но все же так будет нагляднее.
Код HTML:
<html>
 <head>
 </head>
 <body bgcolor="#FF0000">
  <font size="+1">
   Текст
  </font>
 </body>
</html>
Находим первый тег - <html>. Зная, что html тегов примерно 91 присвоим ему номер один(т.е. у каждого тега свои идентификационный номер), Имея структуру,какую я еще не определился,но первый байт будет содержать этот идентификатор(всего сможем вместить 255 тегов, 0 - его отсутствие). Ну да ладно html атрибутов примерно 188. Я думал тоже под них отвести один байт, НО атрибутов у тега может быть несколько + их значение(в примере это <font size="+1">). Тут и возникает вопрос. Как хранить свойства и их значения. Предположим это динамический массив структур, только интересно было бы узнать как это реализовать на assembler'е. Не надо читать лекции, что жизнь слишком коротка чтобы писать на asm. Все будет нормально. Алгоритм хочу придумать так, чтобы потом можно было парсить еще и CSS(а вообще вся эта задумка из-за JavaScript), Вся проблема в хранении html содержимого. Но хранить я его хочу с возможностью динамического изменения, т.е. имелась возможность не тупо выстраивать страницу, но и изменить, например тегу body background-color, таким образом. Найти в массиве структур тег <body>(по тому принципу который предложил я - это первый байт). Потом найти свойство bgcolor(свойствам тоже определить идентификационные номера) и изменить его.
Вот как лучше организовать этот алгоритм?
Заранее благодарю.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 28.08.2012 в 11:53.
_PROGRAMM_ вне форума Ответить с цитированием
Старый 28.08.2012, 10:17   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Я думаю, перед парсингом, нужно ознакомится со стандартом
psycho-coder вне форума Ответить с цитированием
Старый 28.08.2012, 10:48   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

строиться дерево документа, но нужно помнить что html довольно хитрый, он не так строг как xml.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.08.2012, 10:58   #4
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

А парситься будет исключительно html3.2? Или остальные 8 основных стандартов тоже будут поддерживаться?
В вашей верстке, кстати 3 ошибки...
CSS парсится для каждого тега в отдельности, причем сохраняет всю изменяемую цепочку с событиями на момент парсинга и применяет при наступлении событий.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 28.08.2012, 11:02   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Находим первый тег - <html>. Зная, что html тегов примерно 91 присвоим ему номер один(т.е. у каждого тега свои идентификационный номер), Имея структуру,какую я еще не определился,но первый байт будет содержать этот идентификатор(всего сможем вместить 255 тегов, 0 - его отсутствие). Ну да ладно html атрибутов примерно 188. Я думал тоже под них отвести один байт, НО атрибутов у тега может быть несколько + их значение(в примере это <font size="+1">). Тут и возникает вопрос. Как хранить свойства и их значения. Предположим это динамический массив структур, только интересно было бы узнать как это реализовать на assembler'е. Не надо читать лекции, что жизнь слишком коротка чтобы писать на asm. Все будет нормально. Алгоритм хочу придумать так, чтобы потом можно было парсить еще и CSS(а вообще вся эта задумка из-за JavaScript), Вся проблема в хранении html содержимого. Но хранить я его хочу с возможностью динамического изменения, т.е. имелась возможность не тупо выстраивать страницу, но и изменить, например тегу body background-color, таким образом. Найти в массиве структур тег <body>(по тому принципу который предложил я - это первый байт). Потом найти свойство bgcolor(свойствам тоже определить идентификационные номера) и изменить его.
Вот как лучше организовать этот алгоритм?
не дочитал чего-то, вообще нельзя так делать, ключем должно быть имя тэга/аттрибута.
есть custom tags, есть собственные аттрибуты и тп.
+ все это должно быть изменяемо.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.08.2012, 14:42   #6
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Цитата:
Я думаю, перед парсингом, нужно ознакомится со стандартом
Смысл, если не можешь придумать каким образом сохранять "отпарсенную" информацию? Для начала достаточно той странички, что напечатал я. Реализация стандарта - другая опера.
Цитата:
А парситься будет исключительно html3.2? Или остальные 8 основных стандартов тоже будут поддерживаться?
Для начала 3.2 и то пока не обязательно. Главное то, ради чего я создал тему, алгоритм или точнее хранение данных удобным способом.
Цитата:
В вашей верстке, кстати 3 ошибки...
Если можно, то укажите где. Лишний div я убрал.
Цитата:
CSS парсится для каждого тега в отдельности, причем сохраняет всю изменяемую цепочку с событиями на момент парсинга и применяет при наступлении событий.
Я так и планировал делать.
Цитата:
не дочитал чего-то, вообще нельзя так делать, ключем должно быть имя тэга/аттрибута.
есть custom tags, есть собственные аттрибуты и тп.
+ все это должно быть изменяемо.
Вот теперь мы ближе к теме. В этом вся проблема. Создавая эту тему, я рассчитывал на то, что кто-нибудь поможет найти оптимальный вариант.
Хорошо. Давайте попробуем создать дерево. Из всех инструментов у нас будет только линейная память компьютера. Попробуем создать структуру и облегчить задачу.
Код:
struc tag
{
  .tagname    db 32 dup(0)  ; Сколько отвести символов под имя тэга?
  .attributes db 256 dup(0) ; Предположим атрибуты тоже хранятся в строке, но их ведь может быть много!
  .values     db 256 dup(0) ; Не уходит вопрос с размерами этой переменной а также способе хранения значений
}
На мой взгляд это не очень полезная вещь, если даже не бесполезная. Есть вариант создать такой массив структур
Код:
struc tag
{
  .tagname    db 32 dup(0)  ;
  .bgcolor    db 7 dup(0)  ; но представьте сколько будет занимать в памяти один тег
  и т.д
}
Он отличается прожорливостью памяти. Какие есть предложения? Забыл дописать в структуры переменную содержащую ссылки на Children'ов. Хотя мне такие организации не нравятся.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 28.08.2012 в 14:46.
_PROGRAMM_ вне форума Ответить с цитированием
Старый 28.08.2012, 14:47   #7
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Называется это "по научному" DOM. Это так. Ключевого слова для поиска ради.
pu4koff вне форума Ответить с цитированием
Старый 28.08.2012, 15:09   #8
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Цитата:
Называется это "по научному" DOM. Это так. Ключевого слова для поиска ради.
Знаю, а толку. В паутине я найду только принцип строения, но не реализацию.
Пока есть время хочу спросить. Имеют ли здесь место динамические массивы? Может я не в ту степь иду.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 28.08.2012 в 15:35.
_PROGRAMM_ вне форума Ответить с цитированием
Старый 28.08.2012, 15:53   #9
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
Если можно, то укажите где. Лишний div я убрал.
Осталось добавить тайтл - последняя ошибка для html3.2
Цитата:
Имеют ли здесь место динамические массивы? Может я не в ту степь иду.
Если не ошибаюсь, это массивы с изначально неизвестным кол-вом элементов? То ответ скорее "да", чем "нет" т.к. для разных стандартов разные кол-ва тегов и атрибутов.
Тут, думаю, наиболее подходящим методом было бы составление набора команд для каждого тега и применение к нему атрибутов уже по словарю.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 28.08.2012, 15:54   #10
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

http://dev.chromium.org/developers/how-tos/get-the-code
http://lynx.isc.org/current/
Levsha100 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
принцип работы SaveDialog Form_13 Общие вопросы Delphi 1 20.02.2012 00:24
принцип работы ссылки sbcd Свободное общение 0 03.06.2011 21:50
принцип работы программы sasha14486 Общие вопросы C/C++ 1 22.05.2011 12:36
Принцип работы WH_KEYBOARD_LL wwe2012 Общие вопросы C/C++ 5 01.04.2011 15:46
Принцип работы NS-серверов Ivan_32 Свободное общение 1 31.10.2010 03:38