forked from KolibriOS/kolibrios
d1bdc45e2f
git-svn-id: svn://kolibrios.org@1343 a494cfbc-eb01-0410-851d-a64ba20cac60 |
||
---|---|---|
.. | ||
info | ||
build_en.bat | ||
build_ru.bat | ||
build.bat | ||
load_lib.mac | ||
msgbox.obj | ||
readme.htm | ||
strlen.inc | ||
t_button.inc | ||
t_data.inc | ||
t_draw.inc | ||
t_edit.asm | ||
t_edit.png | ||
t_work.inc | ||
te_icon.bmp |
<html> <head> <title>Оглавление</title> <meta http-equiv="content-type" content="text/html; charset=WINDOWS-1251"> <style> body { font-size: 15px; font-family: "Bookman Old Style"; color: black; text-align: justify; } h1 { color: green; font-size: 23px; } h2 { color: green; font-size: 21px; } h3 { color: green; font-size: 19px; } h4 { color: #803f00; font-size: 17px; } i { color: #0099cc; } b { color: #0099cc; } p { text-indent: 1em; margin-top: 3px; margin-bottom: 2px; margin-left: 0px; margin-right: 0px; } ol, ul, dl{ margin-top: 3px; margin-bottom: 2px; } pre { padding: 2px; padding-left: 20px; margin-top: 5px; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; font-family: "Courier New"; font-size: 15px; color: #004000; background-color: #ffd0ff; } table { font-size: 15px; } </style> </head> <body> <h1>TextEditor версия от 29.12.2009</h1> <h2>О программе</h2> <p>Программа для работы с текстовыми файлами. Лицензия свободная.</p> <p><img src="t_edit.png"></p> <p>Внешний вид программы, с открытым текстовым файлом.</p> <p>Обсуждение программы здесь: <a href="http://board.kolibrios.org/viewtopic.php?f=9&t=1222">http://board.kolibrios.org/viewtopic.php?f=9&t=1222</a></p> <h2>Возможности</h2> <ul> <li>Открытие (Ctrl+O)/Сохранение файла.</li> <li>Редактирование: Повтор/Отмена действия (Ctrl+Z), Вырезать/Копировать (Ctrl+C)/Вставить (Ctrl+V), Поиск (Ctrl+F, F3).</li> <li>Выделение цветом слов, заданных в файле синтаксиса. Вывод справки по ним, если она есть (нажатием F1 когда курсор на слове).</li> </ul> <p>После создания программы TextEditor в Kolibri стало 2 программы для работы с текстом, у каждой из них есть свои сильные и слабые стороны. Проведу (не полное) сравнение программ TinyPad и TextEditor:</p> <table border=1> <tr><th>Действия</th><th>TinyPad</th><th>TextEditor</th><th>Комментарий</th></tr> <tr><td>Работа с несколькими документами</td> <td>есть</td><td>нет</td><td>пока не планирую сделать</td></tr> <tr><td>Поддержка кодировок KOI8M, OEM</td> <td>есть</td><td>нет</td><td>хотелось-бы сделать</td></tr> <tr><td>Подсветка синтаксиса</td> <td>подсветка заранее зашита в программу</td><td>подсветка берется из файлов, которые может указать пользователь. Также есть возможность получать справку по подсвечиваемым словам (если она есть в файлах подсветки, навести курсор на слово и нажать F1).</td><td></td></tr> <tr><td>Многократная отмена/повтор действий</td> <td>нет</td><td>есть</td><td></td></tr> <tr><td>Ограничения на размер файлов</td> <td>нет</td><td>есть</td><td></td></tr> </table> <h2>Некоторые недоработки</h2> <ul> <li>Если открыть большой файл, размер которого больше чем: maxChars equ 100002 ;(...+2) он откроется не весь, а первые maxChars-2 символов из файла (о чем выдается сообщение).</li> <li>При сохранении программа не спрашивает о замене существ. файла.</li> <li>Срабатывали кнопки под меню, потому я их сдвинул влево.</li> </ul> <h2>О работе программы</h2> <p>Раздел для программистов (и интересующихся людей), в котором расказаны некоторые идеи, на которых построена данная программа.</p> <p>Для работы с текстом программа использует структуры:</p> <pre>struct symbol c db ? ; +0 символ col db ? ; +1 цвет perv dd ? ; +2 next dd ? ; +6 указатели tc dd ? ; +10 врем. создания td dd ? ; +14 врем. удаления ends</pre> <p>Каждая из таких структур сохраняет один символ в переменной 'c'. Переменные 'perv' и 'next' хранят индексы первого и следующего символов. Благодаря чему текст создается в виде цепочки символов (двунаправленный список).</p> <p><b>'tc'</b> - время создания символа, при отмене действия текстовый редактор "знает" какие символы отображать, а какие нет (хотя все символы "висят" в памяти).</p> <p><b>'td'</b> - время удаления символа, заполняется при удалении, при отмене действия удаления символов, текст может быть восстановлен.</p> <p><b>'col'</b> - используется для цветовой разметки.</p> <p>Теперь немного о функциях:</p> <p><b>GetTexPervPos</b> - переход на предыдущий символ в цепи (через указатель 'perv')</p> <p><b>GetTexNextPos</b> - переход на следующий символ в цепи (через указатель 'next')</p> <p><b>SymbNotVis</b> - определяет видимый ли указанный символ на экране (в зависимости от значений 'tc' и 'td')</p> <p><b>IteratNext</b> - переход на следующий видимый символ в цепи. Использует для работы функции GetTexNextPos и SymbNotVis.</p> <p><b>IteratPerv</b> - переход на предедущий видимый символ в цепи.</p> <p><b>ItPoNextUc</b> - найти следующую позицию указанного символа (edx-поз. начала поиска, bl->код искомого символа)</p> <p><b>GetPosByParam</b> - берет позицию символа по координатам (esi->коорд. x, знак; ecx->коорд. y, строка)</p> <p><b>GoToPos</b> - переставляет курсор в указанную позицию, если указанная позиция находится вне экрана, то также переставляются скролинги (ecx->коорд. x, знак; edx->коорд. y, строка)</p> <h3>Формат файла подсветки *.syn</h3> <table> <tr><th>Элемент</th><th>Размер (байт)</th></tr> <tr><td>Количество цветов текста</td> <td><pre>4</pre></td></tr> <tr><td>Количество подсвечиваемых слов</td> <td><pre>4</pre></td></tr> <tr><td>Цвета интерфейса</td> <td><pre>4*6</pre></td></tr> <tr><td>Цвета для текста</td> <td><pre>4*(кол. цв. текста)</pre></td></tr> <tr><td>Структуры со свойствами и описаниями слов</td> <td><pre>sizeof(TexColViv)*(кол. слов)</pre></td></tr> <tr><td>Разделительный символ, означающий начало описаний слов (всегда равен 0)</td> <td><pre>1 байт</pre></td></tr> <tr><td>Описания слов (строки текста с 0-ми в конце)</td> <td><pre>(длинна справочного текста + 1)</pre></td></tr> </table> <h4>Замечания.</h4> <ul> <li>Все слова должны быть расположены в порядке следования их ASCII кодов. Возможно в будущих версиях формат файлов подсветки будет изменен.</li> </ul> <hr> <h2>Автор</h2> <p>Игорь А. (IgorA) - разработка программы.</p> <h2>Спасибо</h2> <ul> <li>Евтихов Максим (Maxxxx32) - элемент EditBox.</li> <li>Алексей Теплов (Lrz) - элемент EditBox, макрос load_library.</li> <li>Mario79 - элемент скроллинг.</li> <li>Diamond - за программу KlbrInWin, и помощь при написании программы.</li> <li>Insolor - за тестирование программы на ошибки.</li> <li>Leency и другим, кто помогал на форуме советами.</li> </ul> </body> </html>