Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Подсветка синтаксиса в "текстовых" редакторах

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
hrom



Зарегистрирован: 11.05.2005
Сообщения: 2

СообщениеДобавлено: Ср Май 11 2005 19:47    Заголовок сообщения: Подсветка синтаксиса в "текстовых" редакторах Ответить с цитатой

Как осуществить быструю подсветку синтаксиса больших текстов ?



Я делаю это в C# с компонентом System.Windows.Forms.RichTextBox так:


richTextBox1.LoadFile("text.txt",RichTextBoxStreamType.PlainText); // загружаю файл в обычном текстовом формате

char []masRtf; // обьявляю массив для текста (в формате RTF)

modRtfText=richTextBox1.Rtf.ToCharArray(); // копирую RTF текст в массив

... // в этом месте я перебираю массив []masRtf и вставляю в нужные мне места теги,
... // определяющие шрифт и цвет текста.


StringBuilder tmp=new StringBuilder(); // это для быстрого
tmp.Append(masRtf); // перевода из (char[]) в (string)

richTextBox1.Rtf=tmp.ToString(); // копирую мною перебраный текст в формате RTF в richTextBox1.Rtf,
// эта операция занимает очень много времени



Как это делают нормальные люди ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
критикан



Зарегистрирован: 18.02.2005
Сообщения: 247

СообщениеДобавлено: Чт Май 12 2005 08:39    Заголовок сообщения: события развиваются от плохого к худшему: C->CPP->C# Ответить с цитатой

нормальные люди делают это одновременно с загрузкой текста, например, читая текст из файла блоками или построчно
---------------------
события развиваются от плохого к худшему: C->CPP->C#
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
DmitryShm



Зарегистрирован: 17.11.2003
Сообщения: 211
Откуда: Казань

СообщениеДобавлено: Чт Май 12 2005 09:38    Заголовок сообщения: Re: события развиваются от плохого к худшему: C->CPP->C# Ответить с цитатой

критикан писал(а):
нормальные люди делают это одновременно с загрузкой текста, например, читая текст из файла блоками или построчно


<флейм вырезан модератором> .NET-овский компонент? Почему бы и нет! Просто почитать по нему документацию. Решение построчно и блоками не есть самое лучшее в общем-то. Надо действовать по ситуации. Но если дело только в том, что считать текст, обработать и положить куда надо, то решение, которое предложил критикан подойдет. Но еще наверное критикан имел ввиду, что это следует делать в разных потоках в рамках одного процесса.
_________________
love IT
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
критикан



Зарегистрирован: 18.02.2005
Сообщения: 247

СообщениеДобавлено: Пн Май 16 2005 11:07    Заголовок сообщения: не только от плохого к худшему, но и невозможно исправить Ответить с цитатой

<флейм вырезан модератором>
>>> .NET-овский компонент? Почему бы и нет! Просто почитать по нему документацию. Решение построчно и блоками не есть самое лучшее в общем-то. Надо действовать по ситуации. Но если дело только в том, что считать текст, обработать и положить куда надо, то решение, которое предложил критикан подойдет. <<<
Вспомним исходный вопрос: как ускорить форматирование читаемого текста? Так как на введении форматирующих тэгов не добиться ускорения, нужно постараться выполнять их во время медленной операции, а это дисковая операция (чтения). Соответственно, нужно вставить форматирование внутрь процедуры чтения. Поскольку компонент чтения файла целиком является для программиста атоммарной функцией, приходится использовать функции блочного (или строчного, но это медленнее) чтения. Вопрос становится таким: что быстрее -- однократное чтение (всего файла) или многократное чтение по кускам? Последнее оказывается более быстрым, так как:
1. преимущество физического однократного чтения перед многократным нивелируется буферированным чтением (а буферированное чтение используется по умолчанию);
2. при однократном чтении требуется большой объём памяти для промежуточного хранения, при многократным -- только память в размере блока, а операция выделения памяти из кучи -- это дорогостоящая по времени операция

>>> Но еще наверное критикан имел ввиду, что это следует делать в разных потоках в рамках одного процесса. <<<
Нет, это я не имел ввиду. Этот способ как раз был бы выгодней для чтения файла не блоками, а целиком: один поток читает, второй форматирует буфер. Но насколько я представляю, во время чтения буфер под считываемые данные блокируется от любого доступа со стороны параллельных процессов (кстати, видимо, поэтому винда до сих пор не научилась обрабатывать данные полноценным конвейером: в конвейере все задействованные программы работают по очереди), но даже если это не так, то возникнут сложности (и, естественно, задержки) с синхронизацией, что делает такой способ просто неинтересным для реализации.
----------------------------------------
не только от плохого к худшему, но и невозможно исправить
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Wladimir



Зарегистрирован: 02.03.2005
Сообщения: 150
Откуда: Ставропольский край

СообщениеДобавлено: Вт Май 17 2005 19:53    Заголовок сообщения: Ответить с цитатой

<флейм вырезан модератором>
Если нет ничего стоящего в исходнике RichEditа, можно ещё глянуть исходники библиотеки KOL ( http://bonanzas.rinet.ru/ ). Там без .Net, чисто для WinApi - но на Sad паскале.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Wladimir



Зарегистрирован: 02.03.2005
Сообщения: 150
Откуда: Ставропольский край

СообщениеДобавлено: Вт Май 17 2005 20:22    Заголовок сообщения: Ответить с цитатой

Кстати, синтаксическая подсветка актуальна не только при чтении текста из файла, но и по мере ввода. Поэтому идея подсветки по мере считывания неэффективна.

<флейм вырезан модератором>

Цитата:
буферированное чтение используется по умолчанию

Есть функции как буферизованного, так и небуферизованного чтения.

<флейм вырезан модератором>

Admin: далее буду удалять сообщения целиком.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
hrom



Зарегистрирован: 11.05.2005
Сообщения: 2

СообщениеДобавлено: Ср Май 18 2005 18:28    Заголовок сообщения: Ответить с цитатой

Да именно, это будет редактор, текст программы будет загружатся в редактор и редактироватся там, если пользовались какими нибудь редакторами для программирования вы видели как это работает.
в этих редакторах например вижуал студио и т.п. это мгновенно, я слышал есть какойто класс для этого, посему прожу более конструктивных ответов, считывать поблочно не подходит...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Wladimir



Зарегистрирован: 02.03.2005
Сообщения: 150
Откуда: Ставропольский край

СообщениеДобавлено: Ср Май 18 2005 21:47    Заголовок сообщения: Ответить с цитатой

Just предположение:
>Так, например, многие текстовые редакторы реализуют синтаксическую "подсветку" именно на основе CRC32, не вызывая при этом коллизий.
http://www.i2r.ru/static/567/out_15878.shtml
Понятно, что речь здесь идёт всего лишь о быстрой идентификации символьных последовательностей.
Видимо, имеется в виду держать в памяти map со встретившимися словами и, беря слова из изменившейся части текста, быстро сверять их с хэш-таблицей ключевых слов и проверять на соответствие заданным правилам.
Соответственно, каждое слово вначале сопоставляется с существующим элементом map. А чем является тот или иной элемент map, и как его подсвечивать, определяется только для (уникальных) элементов map, а не для каждого слова вообще. Соответственно, поскольку большинство слов в программе встречается многократно, число проверок резко сокращается..

По крайней мере, я это представляю так.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
критикан



Зарегистрирован: 18.02.2005
Сообщения: 247

СообщениеДобавлено: Чт Май 19 2005 14:53    Заголовок сообщения: размеры вопроса и ответа подчиняются правилу 95/5 Ответить с цитатой

Таким образом, требуется либо найти класс, являющийся текстовым редактором с подстветкой, либо написать его?
----------------------------
размеры вопроса и ответа подчиняются правилу 95/5
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...