сделать стартовой  |  добавить в избранное

   SciTE - редактор кода для программистов

Архив SciTE-форума


Автор: vladvro, Отправлено:16:49 04-06-2007
alrusdi81
Цитата:
Значит в SciTE.Ru_kernel_changes.txt нужно указывать какой (какие) файлы правлены.

на мой взгляд это лишнее. зачем? если можно сделать запрос на поиск по файлам в редакторе и получить намного более точный и полезный список, например:
Код:
>Internal search for "BookmarksWithSession" in "*.asm *.c *.cc *.cpp *.cxx *.cs *.h *.hh *.hxx *.hpp *.rc"
[no]C:\Programs\SciTE-develop\Source\scite\src\SciTEBase.h:911:[/no] void AddFileToBuffer(FilePath file, int pos, char bmLine[]); //!-add-[BookmarksWithSession]
[no]C:\Programs\SciTE-develop\Source\scite\src\SciTEBuffers.cxx:487:[/no]/ /!-start-[BookmarksWithSession]
[no]C:\Programs\SciTE-develop\Source\scite\src\SciTEBuffers.cxx:523:[/no]/ /!-end-[BookmarksWithSession]
[no]C:\Programs\SciTE-develop\Source\scite\src\SciTEBuffers.cxx:553:[/no]/ /!-start-[BookmarksWithSession]
[no]C:\Programs\SciTE-develop\Source\scite\src\SciTEBuffers.cxx:574:[/no]/ /!-end-[BookmarksWithSession]
[no]C:\Programs\SciTE-develop\Source\scite\src\SciTEBuffers.cxx:1049:[/no] //!-start-[BookmarksWithSession]
[no]C:\Programs\SciTE-develop\Source\scite\src\SciTEBuffers.cxx:1067:[/no] //!-end-[BookmarksWithSession]
> Time: 0.676

в котором можно кликнуть по строчке и откроется нужный файл на нужном месте...
Автор: alrusdi81, Отправлено:08:39 05-06-2007
Обещанный баг репорт о компиляции scintilla для GTK

http://alrusdi.nm.ru/debug/

Файл errors.htm - копия ошибок из терминала и мои действия по устранению. Здесь ошибок не много, но как их фиксить я не знаю.
Архив source.rar - то из чего я компилировал (оригинальные исходники scite 1.73 + файлы русской сборки) ну и скомпиленные объектные файлы и сама библиотечка scintilla (внимание > 2Mb).

...сразу косяк...
Тип HMENU не long, а
typedef void *HMENU;
Автор: vladvro, Отправлено:10:24 05-06-2007
alrusdi81
изменения вносить лучше так:
Platform.h строка 447
Код:
[no]//!-start-[SubMenu][/no]
#if PLAT_WIN
void ReleaseMenu(HMENU hMenu);
#else
void ReleaseMenu(long hMenu);
#endif
[no]//!-end-[SubMenu][/no]
Данный код внедрен в форум с помощью скрипта vladvro
такой код будет кросплатформенным и его можно будет включать в сборку.

изменение
Код:
static inline bool IsLowerCase(char ch) {
//! return isascii(ch) && islower(ch);
return 0;//IsCharLowerA(ch)!=0; //!-add-[LowerUpperCase]
}

static inline bool IsUpperCase(char ch) {
//! return isascii(ch) && isupper(ch);
return 0;//IsCharUpperA(ch)!=0; //!-add-[LowerUpperCase]
}
не верное, надо:
Document.cxx строка 37
Код:
static inline bool IsLowerCase(char ch) {
[no]//! return isascii(ch) && islower(ch);[/no]
[no]//!-start-[LowerUpperCase][/no]
#if PLAT_WIN
return IsCharLowerA(ch)!=0;
#else
return isascii(ch) && islower(ch);
#endif
[no]//!-end-[LowerUpperCase][/no]
}

static inline bool IsUpperCase(char ch) {
[no]//! return isascii(ch) && isupper(ch);[/no]
[no]//!-start-[LowerUpperCase][/no]
#if PLAT_WIN
return IsCharUpperA(ch)!=0;
#else
return isascii(ch) && isupper(ch);
#endif
[no]//!-end-[LowerUpperCase][/no]
}
Данный код внедрен в форум с помощью скрипта vladvro

предупреждения видимо надо просто игнорировать, во всяком случае я собирая с помощью MinGW именно так и делаю

выкладывать весь код + объектники, больше не надо, вполне достаточно только правленых тобой файлов исходников.

Добавлено:
alrusdi81
Цитата:
Тип HMENU не long, а
typedef void *HMENU;

значит так:
Platform.h строка 47
Код:
[no]//!-start-[SubMenu][/no]
#if !PLAT_WIN
typedef void *HMENU;
#endif
[no]//!-end-[SubMenu][/no]
Данный код внедрен в форум с помощью скрипта vladvro

хотя я подозреваю, что SubMenu пока что все равно работать будет только в винде, а значит надо просто сделать:
Platform.h строка 447
Код:
[no]//!-start-[SubMenu][/no]
#if PLAT_WIN
void ReleaseMenu(HMENU hMenu);
#endif
[no]//!-end-[SubMenu][/no]
Данный код внедрен в форум с помощью скрипта vladvro

Автор: Serg2308, Отправлено:13:03 05-06-2007
Доброго времени суток и все таки хотелось бы уточнить на счет подсветки операторов на Русском языке... Вообще реально это? (добавить в список операторов подсветки операторы из русских букв и чтоб они подсвечивались корректно). Может дело в кодировках???
Автор: alrusdi81, Отправлено:13:12 05-06-2007
vladvro
Ок... Поработаю еще над scintilla, возможно с этой высоты я смогу скомпилировать и scite, хотя там я не смог справится теми способами которые приведены здесь.

Суб меню очень хочется(( В принципе из-за него я и взялся компилить русскую сборку...
Ведь в других пунктах меню субменю реализованы, в том числе и создаваемые динамичеки (там где файлы настроек подсветки синтаксиса для конкретных языков). Ткните меня носом в то место кода где это делается (для GTK) - может быть я сам смогу адаптировать код...

Компилируя с помощью MinGW, ты добился полной функциональности русской сборки SciTE под Виндой или есть глюки, связанные с предупреждениями в процессе компиляции?

Что касается описания структур - думаю это не дело - нужно пользоваться штатными средствами GTK, иначе мы придем к тому, что придется ради добавления субменю внедрить в SciTEru всю функциональность Windows))

Автор: vladvro, Отправлено:14:47 05-06-2007
alrusdi81
Цитата:
Суб меню очень хочется...

согласен, ОЧЕНЬ удобная вещь
на сколько я понял то в GTK за создание меню отвечает:
void SciTEGTK::CreateMenu()
файл SciTEGTK.cxx строка 2672

Цитата:
Компилируя с помощью MinGW, ты добился полной функциональности русской сборки SciTE под Виндой или есть глюки, связанные с предупреждениями в процессе компиляции?

утверждать что полной, не могу, т.к. полного тестирования не проводил, но я пользуюсь и пока глюков не замечал.

Цитата:
Что касается описания структур - думаю это не дело - нужно пользоваться штатными средствами GTK

пользуй, теперь это твоя область
Автор: BioInfo, Отправлено:16:29 05-06-2007
vladvro

Цитата:
значит так:
Platform.h строка 47

Вах! Спокуха! Так делать не нужно!!!
Вообще в этом классе никакое ReleaseMenu не нужно!!!

Platform.h строка 441
Код:
class Menu {
MenuID id;
public:
Menu();
MenuID GetID() { return id; }
void CreatePopUp();
void Destroy();
void Show(Point pt, Window &w);
[no]//!-start-[ExtendedContextMenu][/no]
void Add(const char * label = 0, int cmd = 0, bool enabled = true);
void AddSubMenu(const char *label, Menu &subMenu);
[no]//!-end-[ExtendedContextMenu][/no]
};
Данный код внедрен в форум с помощью скрипта vladvro

И переделываем тут (ну это уже к люнексу не относится)
PlatWin.cxx строка 1947
Код:
[no]//!-start-[SubMenu][/no]
[no]//~ Функция для уничтожения всех подменю указанного меню[/no]
[no]/*[/no]
[no]void Menu::ReleaseMenu(HMENU hMenu) {[/no]
[no] int ptr = 0, to_check = 0;[/no]
[no] struct UserMenu {[/no]
[no] HMENU hMenu;[/no]
[no] } UMenu[100];[/no]
[no] UMenu[ptr++].hMenu = hMenu;[/no]

[no] //~ Fill the struct with pointers that must be released[/no]
[no] do {[/no]
[no] for (int i = 0; i < ::GetMenuItemCount(UMenu[to_check].hMenu); i++)[/no]
[no] UMenu[ptr++].hMenu = ::GetSubMenu(UMenu[to_check].hMenu, i);[/no]
[no] } while (++to_check<=ptr);[/no]

[no] //~ In descending order destroy all the menus[/no]
[no] for (int i = ptr-1; i >= 0; i--)[/no]
[no] ::DestroyMenu(UMenu.hMenu);[/no]
[no]}[/no]
[no]*/[/no]
[no]//!-end-[SubMenu][/no]
void Menu::Destroy() {
if (id)
{
HMENU hMenu = reinterpret_cast<HMENU>(id);
int ptr = 0, to_check = 0;
struct UserMenu {
HMENU hMenu;
} UMenu[100];
UMenu[ptr++].hMenu = hMenu;

[no]//~ Fill the struct with pointers that must be released[/no]
do {
for (int i = 0; i < ::GetMenuItemCount(UMenu[to_check].hMenu); i++)
UMenu[ptr++].hMenu = ::GetSubMenu(UMenu[to_check].hMenu, i);
} while (++to_check<=ptr);

[no]//~ In descending order destroy all the menus[/no]
for (int i = ptr-1; i >= 0; i--)
::DestroyMenu(UMenu[i].hMenu);
}
[no]//! ::DestroyMenu(reinterpret_cast<HMENU>(id));[/no]
[no]// Menu::ReleaseMenu(reinterpret_cast<HMENU>(id)); //!-add-[SubMenu][/no]
id = 0;
}
[i]Данный код внедрен в форум с помощью скрипта vladvro


Цитата:
хотя я подозреваю, что SubMenu пока что все равно работать будет только в винде


Ну дык, не долго все поправить
Автор: vladvro, Отправлено:17:30 05-06-2007
BioInfo
Цитата:
Вах! Спокуха! Так делать не нужно!!!
Вообще в этом классе никакое ReleaseMenu не нужно!!!

здравая мысль!
только я бы ее еще немного [more=доработал]PlatWin.cxx строка 1947
Код:
void Menu::Destroy() {
if (id)
[no]//! ::DestroyMenu(reinterpret_cast<HMENU>(id));[/no]
[no]//!-start-[SubMenu][/no]
[no]//~ Destroy menu with all submenus[/no]
{
HMENU hMenu = reinterpret_cast<HMENU>(id);
int ptr = 0, to_check = 0;
struct UserMenu {
HMENU hMenu;
} UMenu[100];
UMenu[ptr++].hMenu = hMenu;

[no]//~ Fill the struct with pointers that must be released[/no]
do {
for (int i = 0; i < ::GetMenuItemCount(UMenu[to_check].hMenu); i++)
UMenu[ptr++].hMenu = ::GetSubMenu(UMenu[to_check].hMenu, i);
} while (++to_check<=ptr);

[no]//~ In descending order destroy all the menus[/no]
for (int i = ptr-1; i >= 0; i--)
::DestroyMenu(UMenu[i].hMenu);
}
[no]//!-end-[SubMenu][/no]
id = 0;
}
Данный код внедрен в форум с помощью скрипта vladvro
[/more]

Автор: BioInfo, Отправлено:18:32 05-06-2007
alrusdi81
С выложенными ошибками вроде справились
Очень странно что компилятор не сказал что нет реализация для
//!-start-[ExtendedContextMenu]
void Add(const char * label = 0, int cmd = 0, bool enabled = true);
void AddSubMenu(const char *label, Menu &subMenu);
//!-end-[ExtendedContextMenu]
Реализацию Add можно посмотреть в AddToPopUp, там нужно заменить popup.GetID() на id - по идее так. Единственное что меня там смущает - это наличие this... Короче в Gtk я не шарю.
Ну а с добавление подменю вообще труба, в Windows все просто AppendMenu.
Если сделать ничего нельзя... то нужно обернуть в #if PLAT_WIN, но что-то мне не верится что в GTK нельзя использовать обычный ООП подход...
Автор: vladvro, Отправлено:19:07 05-06-2007
Serg2308
Цитата:
хотелось бы уточнить на счет подсветки операторов на Русском языке... Вообще реально это?

нашел в чем проблема и как ее исправить, конечно надо править исходники:
PropSet.cxx строка 870
Код:
bool WordList::InList(const char *s) {
if (0 == words)
return false;
if (!sorted) {
sorted = true;
SortWordList(words, len);
for (unsigned int k = 0; k < (sizeof(starts) / sizeof(starts[0])); k++)
starts[k] = -1;
for (int l = len - 1; l >= 0; l--) {
unsigned char indexChar = words[l][0];
starts[indexChar] = l;
}
}
unsigned char firstChar = s[0];
int j = starts[firstChar];
if (j >= 0) {
while ((unsigned char)words[j][0] == firstChar) { [no]//!-change-[CirillicKeywords][/no]
if (s[1] == words[j][1]) {
Данный код внедрен в форум с помощью скрипта vladvro

Автор: alrusdi81, Отправлено:07:29 06-06-2007
BioInfo
Да ругался он... Я ведь только ошибки scintilla здесь привел. Вчера компилил scite, заняло это часа два, зато в итоге я получил рабочую SciTEru, но практически все дополнения пришлось прятать в теги прекомпилятора. Дело было ночью, поэтому теги я мог расставить с ошибками. Под линуксом работает, а вот в Винде...

В общем, кто-нибудь найдет возможность сегодня откомпилить нижеследующие сорцы под Виндой и доложить о моих косяках - буду очинно благодарен
http://alrusdi.nm.ru/debug/scite173ru.rar (1,2 Mb)
Автор: BioInfo, Отправлено:16:40 06-06-2007
alrusdi81

Цитата:
В общем, кто-нибудь найдет возможность сегодня откомпилить нижеследующие сорцы под Виндой и доложить о моих косяках - буду очинно благодарен

Блин, так точно не пойдет... Слишком уж много расхождений...
Нужно все по порядку делать наверное. Самое верное решение доводить SciTE под GTK до нашего уровня.
Вот смотрю в SciTEBase.cxx там я делал контекстное меню. Давай сделаем? И будет в GTK полностью настраиваемое контекстное меню со вложенностью.
Как это сделать полностью расскажу - я просто функции GTK не знаю, пиши в приват.

Добавлено:
vladvro
Скомпилил последнюю сборку (выслал mozers)... Чегото не раскрашивается у меня поиск. Там где-то какие-то опции нужны?
И еще попутно вопрос, можно сделать так чтобы в результатах поиска он не выводил первые табы и пробелы в строке (отступы в начале)?

Так выдает результат сейчас:

Код:
>Internal search for "SCI_CUT" in "*.asm *.c *.cc *.cpp *.cxx *.cs *.h *.hh *.hxx *.hpp"
C:\...\scite\src\SciTEBase.cxx:435: case SCI_CUT:
C:\...\scite\src\SciTEBase.cxx:3918: SendPane(source, SCI_CUT);
> Time: 0.615
Данный код внедрен в форум с помощью скрипта vladvro

А нужно бы

Код:
>Internal search for "SCI_CUT" in "*.asm *.c *.cc *.cpp *.cxx *.cs *.h *.hh *.hxx *.hpp"
C:\...\scite\src\SciTEBase.cxx:435: case SCI_CUT:
C:\...\scite\src\SciTEBase.cxx:3918: SendPane(source, SCI_CUT);
> Time: 0.615
Данный код внедрен в форум с помощью скрипта vladvro

Хреново, на форуме не видно как табы раскидывают результат по всей консоли... Думаю, понятно чего мне хочется?
Еще бы классно было бы если бы он обрезал пути тремя точками (я вручную сделал), двух папок последнего уровня вполне достаточно. Ну или чтобы опционально можно было задавать - обрезать или нет пути при поиске. По двойному клику все равно ведь переходит.
Автор: vladvro, Отправлено:17:25 06-06-2007
BioInfo
Цитата:
Чегото не раскрашивается у меня поиск. Там где-то какие-то опции нужны?

конечно нужны:
lexer.errorlist.findliststyle=1 (было тут)
style.errorlist.30=fore:#000000,bold (было тут)

Цитата:
можно сделать так чтобы в результатах поиска он не выводил первые табы и пробелы в строке (отступы в начале)?

вполне, строка формируется тут:
SciTEIO.cxx строка 1127
Код:
void SciTEBase::GrepRecursive(GrepFlags gf, FilePath baseDir, const char *searchString, const char *fileTypes) {
...
if (match) {
os.append(fPath.AsFileSystem());
os.append([no]":"[/no]);
SString lNumber(fr.LineNumber());
os.append(lNumber.c_str());
os.append([no]":"[/no]);
os.append(fr.Original());
os.append([no]"\n"[/no]);
}
Данный код внедрен в форум с помощью скрипта vladvro

Цитата:
Еще бы классно было бы если бы он обрезал пути тремя точками (я вручную сделал), двух папок уровня вполне достаточно. Ну или чтобы опционально можно было задавать - обрезать или нет пути при поиске. По двойному клику все равно ведь переходит.

я думал об этом, вот только он НЕ переходит на файл если нет полного пути, да оно и понятно, откуда он возьмет информацию о том, где же искать этот файл...


Цитата:
Скомпилил последнюю сборку (выслал mozers)..

не удолось скомпилить с помощью MinGW:
Код:
../src/Containers.h: In member function `void TArray<TYPE, ARG_TYPE>::InsertAt(int, ARG_TYPE, int)':
../src/Containers.h:280: error: expected `;' before "pos"


Автор: BioInfo, Отправлено:17:40 06-06-2007
vladvro

Цитата:
не удолось скомпилить с помощью MinGW

Попробуй так:
Containers.h строка 278
Код:
[no]// Operations that move elements around[/no]
void InsertAt(int nIndex, ARG_TYPE newElement, int nCount = 1) {
POSITION pos = m_ArrayData.FindIndex(nIndex);
for (int i=0; i<nCount; i++)
m_ArrayData.InsertBefore(pos,newElement);
}
Данный код внедрен в форум с помощью скрипта vladvro

Автор: mozers, Отправлено:18:40 06-06-2007

Цитата:
Скомпилил последнюю сборку (выслал mozers)..
Чтобы никто не чуствовал себя оторванным от общего дела, выкладываю текущие исходники (непричесанные, со всеми ошибками и багами) но последние.
Кто что поправит - шлите мне измененные файлы, а я буду обновлять этот файл.
Так у всех, кто старается на общее дело всегда будет самая последняя версия.
Пока - так.
Может потом что получше придумаем...
Автор: BioInfo, Отправлено:18:53 06-06-2007

Цитата:
И еще попутно вопрос, можно сделать так чтобы в результатах поиска он не выводил первые табы и пробелы в строке (отступы в начале)?

С этим [more=разобрался]SciTEIO.cxx строка 1161
Код:
[no]//os.append(fr.Original());[/no]
[no]//!-begin-[FindResultListStyle][/no]
lNumber = fr.Original();
lNumber.substitute([no]'\t'[/no],[no]' '[/no]);
lNumber.trimleft([no]"\n\r "[/no]);
lNumber.insert(0,[no]" "[/no],1);
os.append(lNumber.c_str());
[no]//!-end-[FindResultListStyle][/no]
Данный код внедрен в форум с помощью скрипта vladvro
Ну и по этому поводу расширил функционал SString
SString.h строка 265
Код:
[no]//!-begin-[FindResultListStyle][/no]
void trimleft(const char *prefix) {
if (s && sLen && prefix && strlen(prefix)) {
lenpos_t preflen = strlen(prefix);
bool bContinue;
do
{
bContinue = false;
for (lenpos_t i=0; i<preflen; i++) {
if (*(prefix+i) == *s) {
remove(0, 1);
bContinue = true;
}
}
} while(bContinue);
}
}

void trimright(const char *prefix) {
if (s && sLen && prefix && strlen(prefix)) {
lenpos_t preflen = strlen(prefix);
bool bContinue;
do
{
bContinue = false;
for (lenpos_t i=0; i<preflen; i++) {
if (*(prefix+i) == *(s+sLen-1)) {
remove(sLen-1, 1);
bContinue = true;
}
}
} while(bContinue);
}
}
[no]//!-end-[FindResultListStyle][/no]
Данный код внедрен в форум с помощью скрипта vladvro
[/more]
Изменения: в найденной строке убирает в начале пробелы и табы, ставит 1 пробел (после ':'), и вообще по всей строке заменяет табы на пробелы. Соответственно вывод более нагляднее становится.

Добавлено:
vladvro

Цитата:
конечно нужны:
lexer.errorlist.findliststyle=1 (было тут )
style.errorlist.30=fore:#000000,bold (было тут )

Сорри, я поторопился
Насколько я понял, данные строчки нужно добавить в others_.properties
Добавил вроде работает, нужно в сборку включить - красотища!

Цитата:
я думал об этом, вот только он НЕ переходит на файл если нет полного пути, да оно и понятно, откуда он возьмет информацию о том, где же искать этот файл...

Я думал это делает редактор... Это что из скрипта вызывается? Тогда действительно не получится... Чегото я этого скрипта не нашел...
З.Ы. Контейнеры откомпилились?

Добавлено:
vladvro
Я чуть было с тобой не согласился! И вот компилю SciTE (через SciTE), в консоли значит ворнинг:
..\src\SciTEBase.cxx(2320) : warning C4702: unreachable code
Два раза кликаю по нему открывается нужный файл, на нужной строке.
Так что не все так безнадежно!
Автор: mozers, Отправлено:21:46 06-06-2007
ALL
Чувствую как негодуют те, для кого 90% предыдущих диалогов были вообще не понятны
Думаю, что время разделиться, наконец то - пришло!
С радостью открываю новую тему и всем творцам, для обсуждения проблемных вопросов прошу перейи туда.

Эту тему оставим для пользователей - все общие вопросы, скрипты, все, что не связано с тонкостями компиляции и функционирования кода - все пусть остается тут.

Я думаю что следить за активностью в двух темах не будет большой обузой для завсегдатаев нашего топика
Автор: mozers, Отправлено:11:05 07-06-2007
BioInfo
Цитата:
И вот компилю SciTE (через SciTE), в консоли значит ворнинг:
..\src\SciTEBase.cxx(2320) : warning C4702: unreachable code
Два раза кликаю по нему открывается нужный файл, на нужной строке.
SciTE понимает относительные пути.
Вот если бы было просто
Код:
SciTEBase.cxx(2320) : warning C4702: unreachable code
то нужный файл открылся бы только если файл SciTEBase.cxx найден в текущем каталоге.

Автор: mozers, Отправлено:15:08 07-06-2007
Уря! SciTE.RuTeam.RU заработал!

Добавлено:
правда, не все еще mirk восстановил после пожара...
Автор: mirk, Отправлено:15:48 07-06-2007

Цитата:
правда, не все еще mirk восстановил после пожара...
чего конкретно не хватает? Похерено было очень много, так-что запросто мог и пропустить что-нибудь.



1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17 / 18 / 19 / 20 / 21 / 22 / 23 / 24 / 25 / 26 / 27 / 28 / 29 / 30 / 31 / 32 / 33 / 34 / 35 / 36 / 37 / 38 / 39 / 40 / 41 / 42 / 43 / 44 / 45 / 46 / 47 / 48 / 49 / 50 / 51 / 52 / 53 / 54 / 55 / 56 / 57 / 58 / 59 / 60 / 61 / 62 / 63 / 64 / 65 / 66 / 67 / 68 / 69 / 70 / 71 / 72 / 73 / 74 / 75 / 76 / 77 / 78 / 79 / 80 / 81 / 82 / 83 / 84 / 85 / 86 / 87 / 88 / 89 / 90 / 91 / 92 / 93 / 94 / 95 / 96 / 97 / 98 / 99 / 100 / 101 / 102 / 103 / 104 / 105 / 106 / 107 / 108 / 109 / 110 / 111 / 112 / 113 / 114 / 115 / 116 / 117 / 118 / 119 / 120 / 121 / 122 / 123 / 124 / 125 / 126 / 127 / 128 / 129 / 130 / 131 / 132 / 133 / 134 / 135 / 136 / 137 / 138 / 139 / 140 / 141 / 142 / 143 / 144 / 145 / 146 / 147 / 148 / 149 / 150 / 151 / 152 / 153 / 154 / 155 / 156 / 157 / 158 / 159 / 160 / 161 / 162 / 163 / 164 / 165 / 166 / 167 / 168 / 169 / 170 / 171 / 172 / 173 / 174 / 175 / 176 / 177 / 178 / 179 / 180 / 181 / 182 / 183 / 184 / 185 / 186 / 187 / 188 / 189 / 190 / 191 / 192 / 193 / 194 / 195 / 196 / 197 / 198 / 199 / 200 / 201 / 202 / 203 / 204 / 205 / 206 / 207 / 208 / 209 / 210 / 211 / 212 / 213 /
SciTE © 2004 - 2011