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

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

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


Автор: brack, Отправлено:13:36 23-08-2007
Всем доброго времени суток,

помогите новичку: нужена подсветка и api для typoscript пробовал те подсветки что уже в проге но ни одна не подошла, решил написать свой лексер. основная часть лексера списана с LexConf.cxx свой лексер назвал LexTS.cxx вот собственно код нового лексера:

Цитата:

#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdio.h>
#include <stdarg.h>

#include "Platform.h"

#include "PropSet.h"
#include "Accessor.h"
#include "KeyWords.h"
#include "Scintilla.h"
#include "SciLexer.h"

#ifdef SCI_NAMESPACE
using namespace Scintilla;
#endif

static void ColouriseTSDoc(unsigned int startPos, int length, int, WordList *keywordLists[], Accessor &styler) {
    
    int state = SCE_TS_DEFAULT;
    char chNext = styler[startPos];
    int lengthDoc = startPos+length;
    // create a buffer large enough to take the largest chunk...
    char *buffer = new char[length];
    int bufferCount = 0;

    // this assumes that we have 10 keyword list in typoscript.properties
    WordList &keywords = *keywordLists[0];
    WordList &tlo = *keywordLists[1];
    WordList &objects = *keywordLists[2];
    WordList &stdwrap = *keywordLists[3];
    WordList &imgResource = *keywordLists[4];
    WordList &imageLinkWrap = *keywordLists[5];
    WordList &textStyle = *keywordLists[6];
    WordList &encapseLines = *keywordLists[7];
    WordList &filelink = *keywordLists[8];
    WordList &conditionkeywords = *keywordLists[9];

    // go through all provided text segment
    // using the hand-written state machine shown below
    styler.StartAt(startPos);
    styler.StartSegment(startPos);
    for (int i = startPos; i < lengthDoc; i++) {
        char ch = chNext;
        chNext = styler.SafeGetCharAt(i + 1);

        switch(state) {
            case SCE_TS_DEFAULT:
                if( ch == '\n' || ch == '\r' || ch == '\t' || ch == ' ') {
                     // whitespace is simply ignored here...
                     styler.ColourTo(i,SCE_TS_DEFAULT);
                     break;
                } else if( ch == '#' || ch == '/' ) {
                     // signals the start of a comment...
                     state = SCE_TS_COMMENT;
                     styler.ColourTo(i,SCE_TS_COMMENT);
                } else if( ispunct(ch) ) {
                     // stay in TS_OPERATOR state until we find a non-alphanumeric
                     if( isalnum(ch) || (ch == '_') || (ch == '-') || (ch == '/') || (ch == '$') || (ch == '.') || (ch == '*')) {
                         buffer[bufferCount++] = static_cast<char>(tolower(ch));
                     } else {
                         state = SCE_TS_DEFAULT;
                         buffer[bufferCount] = '\0';

                         // check if the buffer contains a keyword, and highlight it if it is a keyword...
                         if(keywords.InList(buffer)) {
                             styler.ColourTo(i-1,SCE_TS_KEYWORDS );
                         } else if(tlo.InList(buffer)) {
                             styler.ColourTo(i-1,SCE_TS_TLO );
                         } else if(objects.InList(buffer)) {
                             styler.ColourTo(i-1,SCE_TS_OBJECTS );
                         } else if(stdwrap.InList(buffer)) {
                             styler.ColourTo(i-1,SCE_TS_STDWRAP );
                         } else if(imgResource.InList(buffer)) {
                             styler.ColourTo(i-1,SCE_TS_IMGRESOURCE );
                         } else if(imageLinkWrap.InList(buffer)) {
                             styler.ColourTo(i-1,SCE_TS_IMAGELINKWRAP );
                         } else if(textStyle.InList(buffer)) {
                             styler.ColourTo(i-1,SCE_TS_TEXTSTYLE );
                         } else if(encapseLines.InList(buffer)) {
                             styler.ColourTo(i-1,SCE_TS_ENCAPSELINES );
                         } else if(filelink.InList(buffer)) {
                             styler.ColourTo(i-1,SCE_TS_FILELINK );
                         } else if(conditionkeywords.InList(buffer)) {
                             styler.ColourTo(i-1,SCE_TS_CONDITIONKEYWORDS );
                         } else {
                             styler.ColourTo(i-1,SCE_TS_DEFAULT);
                         }

                         // push back the faulty character
                         chNext = styler[i--];

                     }
                } else if( isdigit(ch) ) {
                     // signals the start of a number
                     bufferCount = 0;
                     buffer[bufferCount++] = ch;
                     //styler.ColourTo(i,SCE_TS_NUMBER);
                     state = SCE_TS_NUMBER;
                } else {
                     // style it the default style..
                     styler.ColourTo(i,SCE_TS_DEFAULT);
                }
                break;

            case SCE_TS_COMMENT:
                // if we find a newline here,
                // we simply go to default state
                // else continue to work on it...
                if( ch == '\n' || ch == '\r' ) {
                     state = SCE_TS_DEFAULT;
                } else {
                     styler.ColourTo(i,SCE_TS_COMMENT);
                }
                break;

            case SCE_TS_NUMBER:
                // stay in TS_NUMBER state until we find a non-numeric
                if( isdigit(ch) || ch == '.') {
                     buffer[bufferCount++] = ch;
                } else {
                     state = SCE_TS_DEFAULT;
                     buffer[bufferCount] = '\0';

                     // Colourize here...
                     if( strchr(buffer,'.') ) {
                         // it is an IP address...
                         styler.ColourTo(i-1,SCE_TS_IP);
                     } else {
                         // normal number
                         styler.ColourTo(i-1,SCE_TS_NUMBER);
                     }

                     // push back a character
                     chNext = styler[i--];
                }
                break;
        }
    }
    delete []buffer;
}

static const char * const tsWordListDesc[] = {
    "Keywords",
    "Tlo",
    "Objects",
    "Stdwrap",
    "ImgResource",
    "ImageLinkWrap",
    "TextStyle",
    "EncapseLines",
    "Filelink",
    "Conditionkeywords",
    0
};

LexerModule lmTS(SCLEX_TS, ColouriseTSDoc, "TS", 0, tsWordListDesc);


Следуя рецомендациям здесь: http://scintilla.sourceforge.net/SciTELexer.html прописал лексер везде где надо, создал для него typoscript.properties и подключил в SciTEGlobal.properties соответсвующий фильтр, language menu и тд ... а включаешь... не работает. Бьюсь над этой темой уже больше недели, чего только не перепробовал, какие только лексеры не пробовал клонировать и корректировать...

Может кто посмотрит и посоветует где копать?
Автор: chupakabra, Отправлено:15:37 23-08-2007
brack
Выложи изменения в Scintilla.iface и ts.properties, попробую помочь. И тестовый файл на typoscript.
Автор: brack, Отправлено:16:45 23-08-2007
Вот мой typoscript.properties (заметьте - не ts.properties или это имеет значение?) файл:

Код:

file.patterns.TS=*.TS;*.ts
filter.TS=TypoScript|$(file.patterns.TS)|
lexer.$(file.patterns.TS)=TS
# for future implemention...
#api.$(file.patterns.TS)=TS.api

# keywords
keywords.$(file.patterns.TS)=\
typeNum \
admPanel \
index_enable \
index_externals \
doctype \
xhtml_cleaning \
inlineStyle2TempFile \
spamProtectEmailAddresses \
spamProtectEmailAddresses_atSubst \
simulateStaticDocuments \
simulateStaticDocuments_noTypeIfNoTitle \
table \
select \
pidInList \
uidInList \
userFunc \
value \
template \
file \
workOnSubpart \
marks \
subparts \
headerData

#tlo
keywords2.$(file.patterns.TS)=\
PAGE \
CONFIG \
CONSTANTS \
FE_DATA \
FE_TABLE \
FRAMESET \
FRAME \
META \
COA \
COA_INT \
COBJ_ARRAY \
CARRAY \
CONTENT \
TEXT \
HTML \
FILE \
IMAGE \
IMG_RESOURCE \
CLEARGIF \
RECORDS \
CTABLE \
OTABLE \
COLUMNS \
HRULER \
IMGTEXT \
CASE \
LOAD_REGISTER \
RESTORE_REGISTER \
FORM \
SEARCHRESULT \
USER \
USER_INT \
PHP_SCRIPT \
PHP_SCRIPT_INT \
PHP_SCRIPT_EXT \
TEMPLATE \
MULTIMEDIA \
EDITPANEL \
GIFBUILDER \
HMENU \
GMENU \
GMENU_LAYERS \
GMENU_FOLDOUT \
TMENU \
TMENU_LAYERS \
IMGMENU \
JSMENU \
_LOCAL_LANG \
_CSS_DEFAULT_STYLE \
_DEFAULT_PI_VARS

#objects
keywords3.$(file.patterns.TS)=\
lib \
config \
plugin \
styles \
content \
get \
getLeft \
getRight \
getBorder \
NO \
RO \
ACT \
NOSUB

#stdwrap
keywords4.$(file.patterns.TS)=\
setContentToCurrent \
setCurrent \
lang \
parseFunc \
data \
field \
current \
cObject \
numRows \
filelist \
preUserFunc \
override \
preIfEmptyListNum \
ifEmpty \
listNum \
trim \
required \
if \
fieldRequired \
csConf \
HTMLparser \
prioriCalc \
char \
intval \
date \
strftime \
age \
case \
bytes \
substring \
removeBadHTML \
stripHtml \
crop \
rawUrlEncode \
htmlSpecialChars \
doubleBrTag \
br \
brTag \
encapsLines \
keywords \
innerWrap \
innerWrap2 \
fontTag \
addParams \
textStyle \
filelink \
preCObject \
postCObject \
wrapAlign \
spaceBefore \
spaceAfter \
space \
noTrimWrap \
wrap2 \
dataWrap \
prepend \
append \
wrap3 \
outerWrap \
insertData \
offsetWrap \
postUserFunc \
prefixComment \
editIcons \
editPanel \
debug \
debugFunc \
debugData \
stdWrap \
allWrap \
wrap \
parseFunc \
tags \
link \
typolink \
stdheader \
target \
split \
typolist

#imgResource
keywords5.$(file.patterns.TS)=\
ext \
width \
height \
params \
sample \
alternativeTempPath \
frame \
import \
maxW \
maxH \
minW \
minH \
m.mask \
m.bgImg \
m.bottomImg \
m.bottomImg_mask

#imageLinkWrap
keywords6.$(file.patterns.TS)=\
width \
height \
effects \
sample \
alternativeTempPath \
title \
bodyTag \
wrap \
target \
JSwindow \
JSwindow.expand \
JSwindow.newWindow \
JSwindow.altUrl \
typolink \
enable

#textStyle
keywords7.$(file.patterns.TS)=\
align.field \
face.field \
face.default \
size.field \
size.default \
color.field \
color.default \
color \
properties.field \
properties.default \
altWrap

#encapseLines
keywords8.$(file.patterns.TS)=\
encapsTagList \
remap.Tag \
addAttributes \
removeWrapping \
wrapNonWrappedLines \
innerStdWrap_all \
defaultAlign \
encapsLinesStdWrap \
nonWrappedTag

#filelink
keywords9.$(file.patterns.TS)=\
path \
icon \
icon_image_ext_list \
iconCObject \
icon_link \
labelStdWrap \
wrap \
ATagBeforeWrap \
file \
size \
jumpurl \
target \
stdWrap \
ATagParams \
removePrependedNumbers \
altText \
titleText \
longdescURL

#conditionkeywords
keywords10.$(file.patterns.TS)=\
end \
else \
global \
browser \
version \
system \
device \
useragent \
language \
IP \
hostname \
hour \
minute \
dayofweek \
dayofmonth \
month \
usergroup \
loginUser \
treeLevel \
PIDinRootline \
PIDupinRootline \
globalVar \
globalString \
userFunc

# whitespace (SCE_TS_DEFAULT)
style.TS.0=fore:#808080,$(font.base)
# comments (SCE_TS_COMMENT)
style.TS.1=
# number (SCE_TS_NUMBER)
style.TS.2=
# ip number (SCE_TS_IP)
style.TS.3=
# keywords (SCE_TS_KEYWORDS)
style.TS.4=
# TLO (SCE_TS_TLO)
style.TS.5=
# objects (SCE_TS_OBJECTS)
style.TS.6=
# stdwrap (SCE_TS_STDWRAP)
style.TS.7=
# imgResors (SCE_TS_IMGRESOURCE)
style.TS.8=
# imageLinkWrap (SCE_TS_IMAGELINKWRAP)
style.TS.9=
# textStyle (SCE_TS_TEXTSTYLE)
style.TS.10=
# encapseLines (SCE_TS_ENCAPSELINES)
style.TS.11=
# fileLink (SCE_TS_FILELINK)
style.TS.12=
# conditionKeyWords (SCE_TS_CONDITIONKEYWORDS)
style.TS.13=


а здесь изменения в Scintilla.iface :

Код:

...
val SCLEX_TS=84
...
# Lexical states for SCLEX_TS
lex TS=SCLEX_TS SCE_TS_
val SCE_TS_DEFAULT=0
val SCE_TS_COMMENT=1
val SCE_TS_NUMBER=2
val SCE_TS_IP=3
val SCE_TS_KEYWORDS=4
val SCE_TS_TLO=5
val SCE_TS_OBJECTS=6
val SCE_TS_STDWRAP=7
val SCE_TS_IMGRESOURCE=8
val SCE_TS_IMAGELINKWRAP=9
val SCE_TS_TEXTSTYLE=10
val SCE_TS_ENCAPSELINES=11
val SCE_TS_FILELINK=12
val SCE_TS_CONDITIONKEYWORDS=13
...


ну и наконец файл setup.TS на typoscript :

Код:

plugin.tx_automaketemplate_pi1 {
content = FILE
content.file = template_1.html

# configuring translation of elements of HTML language (tags)
elements {
BODY.all = 1
BODY.all.subpartMarker = DOCUMENT_BODY

HEAD.all = 1
HEAD.all.subpartMarker = DOCUMENT_HEADER
HEAD.rmTagSection = title

TD.all = 1
}
# Insert this prefix before all relative pathes
relPathPrefix = fileadmin/templates/
}

# template of menu part where HMENU object is general menu and TMENU is particular menu item
temp.main_menu = HMENU
temp.main_menu.1 = TMENU
temp.main_menu.1 {
NO.allWrap = <div class="menu_level1_no"> | </div>
NO.stdWrap.htmlSpecialChars = 1

ACT = 1
ACT.allWrap = <div class="menu_level1_act"> | </div>
ACT.stdWrap.htmlSpecialChars = 1
}
temp.main_menu.2 = TMENU
temp.main_menu.2 {
NO.allWrap = <div class="menu_level2_no"> | </div>
NO.stdWrap.htmlSpecialChars = 1

ACT = 1
ACT.allWrap = <div class="menu_level2_act"> | </div>
ACT.stdWrap.htmlSpecialChars = 1
}

# template of main content
temp.mainTemplate = TEMPLATE
temp.mainTemplate {
template =< plugin.tx_automaketemplate_pi1
#template.file = test.html
workOnSubpart = DOCUMENT_BODY
subparts.main_menu < temp.main_menu

subparts.main_content1 < styles.content.get
}

# template of header block
temp.headerTemplate = TEMPLATE
temp.headerTemplate {
template =< plugin.tx_automaketemplate_pi1
workOnSubpart = DOCUMENT_HEADER
}

# default PAGE object
page = PAGE
page.typeNum = 0
page.config.doctype = xhtml_trans
page.10 < temp.mainTemplate
page.headerData.10 < temp.headerTemplate


И огромное СПАСИБО за желание помочь.

Добавлено:
там у меня пустые стайлы в typoscript.properties но на самом деле они у меня заполнены, вот порция файла с заполненными стилями:

Код:

# whitespace (SCE_TS_DEFAULT)
style.TS.0=fore:#808080,$(font.base)
# comments (SCE_TS_COMMENT)
style.TS.1=fore:#B6ACAC,italics
# number (SCE_TS_NUMBER)
style.TS.2=fore:#8072D4,bold
# ip number (SCE_TS_IP)
style.TS.3=$(style.TS.2)
# keywords (SCE_TS_KEYWORDS)
style.TS.4=$(style.TS.2)
# TLO (SCE_TS_TLO)
style.TS.5=fore:#B9534F,bold
# objects (SCE_TS_OBJECTS)
style.TS.6=fore:#B9534F
# stdwrap (SCE_TS_STDWRAP)
style.TS.7=fore:#9597B3
# imgResors (SCE_TS_IMGRESOURCE)
style.TS.8=$(style.TS.7)
# imageLinkWrap (SCE_TS_IMAGELINKWRAP)
style.TS.9=$(style.TS.7)
# textStyle (SCE_TS_TEXTSTYLE)
style.TS.10=$(style.TS.7)
# encapseLines (SCE_TS_ENCAPSELINES)
style.TS.11=fore:#95B1B3
# fileLink (SCE_TS_FILELINK)
style.TS.12=fore:#95B1B3,bold
# conditionKeyWords (SCE_TS_CONDITIONKEYWORDS)
style.TS.13=$(style.TS.2),italics


Добавлено:
Только что перекомпилировал все заново и получил неожиданный резултат: как только я пытаюсь открыть вышеуказанный setup.ts файл прога закрывается с ошибкой "Segmentation fault (core dumped)"
Автор: chupakabra, Отправлено:18:10 23-08-2007

Цитата:
прога закрывается с ошибкой "Segmentation fault (core dumped)"

Это происходит из-за того, что у тебя определено (и твой лексер ожидает) 10 списков ключевых слов, тогда как максимум загружается 9 (это значение жестко ограничено константой KEYWORDSET_MAX).

P.S. Используй тег more когда постишь большие куски текста, иначе читать топик тяжело становится.

Добавлено:
brack, в общем, твой лексер подключается как надо, с этим все в порядке. Поменяй значение KEYWORDSET_MAX в Scintilla.iface на 9 чтобы использовать 10 списков ключевых слов. Правда мне так и не удалось раскрасить тестовый файл, лексер подвешивает SciTE, но это просто ошибка алгоритма в твоем коде, дело поправимое.
Автор: brack, Отправлено:00:59 24-08-2007
вот и я о том же, сейчас опять бился над кодом но... файл раскрасить пока не удалось. после изменения KEYWORDSET_MAX на 9 ошибда исчезла но результат остался неизменным так что возвращаюсь к первой части моего первого послания ... включаешь не работает ... Чтото в моем коде на так, не в синтаксе а скорее в алгоритме chupakabra прав.

по поводу команды more прошу прощения не ведал.
Автор: brack, Отправлено:17:40 24-08-2007
У меня тоже подвешивается, кто нидь поможет?
Автор: chupakabra, Отправлено:20:48 24-08-2007
brack
Пара наблюдений: у тебя бесконечный цикл, for() увеличивает i на единицу, строчка chNext = styler[i--] - уменьшает, соответственно цикл крутится бесконечно. И еще, если ispunct(ch) вернул истину, то нет смысла вызывать isalnum(ch), который заведомо вернет ложь.
А вообще рекомендую научиться пользоваться отладчиком.
Автор: brack, Отправлено:00:03 25-08-2007
По поводу isalnum(ch) согласен, но ведь chNext = styler[i--] вставлен в циклы многих лексеров (LexConf.cxx, LexInno.cxx и тд) и там этот отход на символ, работает.
Автор: Bonart, Отправлено:10:49 30-08-2007
Не подскажете наиболее подходящий лексер для раскраски кода Haskell?
Хочу сделать файл для подсветки его синтаксиса.
Особенность - фолдинг как по отступам, так и по {}
Попытался взять за основу файл подсветки OCAML, но соответствующий лексер в текущую версию еще не встроен
Автор: 8AleX8, Отправлено:11:27 30-08-2007
Bonart

Цитата:
Не подскажете наиболее подходящий лексер для раскраски кода Haskell?

http://www4.in.tum.de/~haftmann/resources/haskell.properties

Автор: Bonart, Отправлено:14:00 30-08-2007
8AleX8
Спасибо!
Будет исходным материалом - ибо фолдинга нет.
Автор: sv75, Отправлено:00:43 01-09-2007
Есть желание использовать SciTE для эпизодического набивания текстов в Latex. Хотелось бы знать, может ли работать autocompletion с русскими словами (UTF) и что для этого надо сделать. У меня штатные сборки из Убунты и Дебиана, там не пашет.
Автор: euheny, Отправлено:08:52 02-09-2007
Можно ли выделять вертикальные блоки текста ?
Есть ли проблемы с русскими кодировками ?
Автор: juvaforza, Отправлено:13:32 02-09-2007
euheny
Выделять можно. Проблем с русскими кодировками быть не должно.
Автор: alexeyr222, Отправлено:18:52 03-09-2007
Здравствуйте!
1) Как научить Scite компилировать Erlang файлы? Есть ли какие-то скрипты, улучшающие работу с Erlang?
2) В какой директории Scite ищет SciteUser.properties -- в $HOME или в $HOMEDRIVE/$HOMEPATH?
Автор: mozers, Отправлено:22:54 05-09-2007
alexeyr222
1) SciTE сам ничего не компилирует, просто на соответствующие клавиши вешается вызов внешнего компилятора (см. описание ключей command.compile, command.build, command.go)
Скрипты для такого экзотического языка надо писать самому или подстраивать существующие.
SciTE - самый настраиваемый в мире редактор, только настраивать его придется самому
2) Оригинальный SciTE - в %USERPROFILE%. SciTE-Ru - в каталоге, определенном ключом scite.userhome
Автор: alexeyr222, Отправлено:00:06 06-09-2007

Цитата:
Скрипты для такого экзотического языка надо писать самому или подстраивать существующие.

Написал следующее, вроде работает:
command.compile.$(file.patterns.erlang)=erlc $(FileName)
command.compile.subsystem.$(file.patterns.erlang)=0
command.go.$(file.patterns.erlang)=erl $(FileName)
command.go.subsystem.$(file.patterns.erlang)=0
command.build.$(file.patterns.erlang)=erl -make $(FileName)
command.build.subsystem.$(file.patterns.erlang)=0

Цитата:
SciTE - самый настраиваемый в мире редактор, только настраивать его придется самому

Ну насчет самого настраиваемого не знаю. Когда на нем будет аналог AUCTeX, Gnus или ERC, можно будет поговорить.

Цитата:
Оригинальный SciTE - в %USERPROFILE%. SciTE-Ru - в каталоге, определенном ключом scite.userhome

Ясно, спасибо.
Автор: sandrey, Отправлено:08:14 06-09-2007
Каждый раз когда запускаю программу выбираю меню "Вид" и убираю галочку "Поле сворачивания блоков текста". Можно ли это делать автоматом?
(Совсем фолдинг я отключать не хочу - я его использую, но мне достаточно горячих клавиш. визуализации не нужно)
Автор: SpoinT, Отправлено:09:04 06-09-2007
sandrey
Что-то несовсем ясно. Если ты не хочешь, чтобы сворачивание при открытии файла было, то убери в настройках соответствующее расширение файлов.
Автор: sandrey, Отправлено:10:13 06-09-2007
Да нет, же.
Вот я открываю файл SciTEGlobal.properties. Все секции ("[Main]", "[Position]" и т.д.) свернуты. Меня это устраивает. Я могу развернуть/свернуть любую секцию нажатием Ctrl+*. Это меня тоже устраивает.
А вот не устраивает меня поле сворачивания блоков текста - слева находится (прямогульнички с плюсиком, минусом там) - я не хочу что бы оно отображалось. Сделать это можно выбрав "Вид", "Поле сворачивания блоков текста". Галочка с этого пункта снимается, поле слева пропадает. Но при новом запуске программы это поле вновь отображается.



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