/programs/develop/cedit/CEDIT |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/programs/develop/cedit/CEDIT.INI |
---|
1,6 → 1,12 |
[settings] |
tab=4 |
blink=70 |
line_numbers=1 |
auto_indents=1 |
auto_brackets=0 |
trim_space=1 |
font=1 |
theme=0 |
build= |
run= |
debug= |
77,7 → 83,7 |
[lang_C] |
KW1 = auto,break,case,char,const,continue,default,do,double,else,enum,extern,float,for,goto,if,int,long,register,return,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile,while,dword,byte,bool,NULL |
KW2 = define,error,include,elif,if,line,else,ifdef,pragma,endif,ifndef,undef |
KW2 = #define,#error,#include,#elif,#if,#line,#else,#ifdef,#pragma,#endif,#ifndef,#undef |
KW3 = |
[lang_Lua] |
/programs/develop/cedit/SRC/CEdit.ob07 |
---|
28,7 → 28,7 |
RW, Ini, EB := EditBox, Tabs, Toolbar, SB := StatusBar; |
CONST |
HEADER = "CEdit (25-jan-2022)"; |
HEADER = "CEdit (26-jan-2022)"; |
ShellFilter = ""; |
EditFilter = "SH|INC|TXT|ASM|OB07|C|CPP|H|PAS|PP|LUA|INI|JSON"; |
76,15 → 76,6 |
EditBox_Width = 180; |
EDITBOX_MAXCHARS = 500; |
menuFileX = Menu.MainMenuX; |
menuEditX = menuFileX + 4*fontWidth + 9; |
menuSearchX = menuEditX + 4*fontWidth + 9; |
menuEncodingX = menuSearchX + 6*fontWidth + 9; |
menuViewX = menuEncodingX + 8*fontWidth + 9; |
menuLanguageX = menuViewX + 4*fontWidth + 9; |
menuProgramX = menuLanguageX + 8*fontWidth + 9; |
menuToolsX = menuProgramX + 7*fontWidth + 9; |
menuCut = 1; |
menuCopy = 2; |
menuPaste = 3; |
107,10 → 98,9 |
menuClose = 16; |
menuExit = 17; |
menuNumbers = 20; |
menuFontSmall = 21; |
menuFontMedium = 22; |
menuFontBig = 23; |
menuFontSmall = 20; |
menuFontMedium = menuFontSmall + 1; |
menuFontLarge = menuFontMedium + 1; |
menuColors = 1000; |
menuMaxColors = menuColors + Ini.MAX_SECTIONS - 1; |
147,6 → 137,11 |
menuGoto = 83; |
menuBookmark = 130; |
menuLineNumbers = 90; |
menuAutoIndents = 91; |
menuAutoBrackets = 92; |
menuTrimSpace = 93; |
menuMoveUp = 101; |
menuMoveDown = 102; |
menuDuplicate = 103; |
202,7 → 197,7 |
replaced: INTEGER; |
context, menuFile, menuEdit, menuSearch, menuEncoding, |
menuView, menuLanguage, menuProgram, menuTools, |
menuView, menuLanguage, menuProgram, menuTools, menuOptions, |
subCurLine, subIndent, subCase, subBookmark, subEOL: Menu.tMenu; |
mainMenu: Menu.tMain; |
439,10 → 434,10 |
K.SetWinSize(winWidth, winHeight); |
K.WinSize(winWidth, winHeight); |
K.ClientSize(cliWidth, cliHeight); |
IF font # G.font2 THEN |
IF font # G.fonts[2] THEN |
SB.SetFont(font) |
ELSE |
SB.SetFont(G.font1) |
SB.SetFont(G.fonts[1]) |
END; |
BOTTOM := SB.height() + scrollWidth - 1; |
G.destroy(canvas); |
929,6 → 924,7 |
Menu.close(menuLanguage); |
Menu.close(menuProgram); |
Menu.close(menuTools); |
Menu.close(menuOptions); |
Menu.close(context) |
END CloseMenu; |
1023,8 → 1019,7 |
WHILE (i < textsCount) & ~texts[i].modified DO |
INC(i) |
END; |
Menu.setEnabled(menu, menuSaveAll, i < textsCount); |
INC(x, menuFileX) |
Menu.setEnabled(menu, menuSaveAll, i < textsCount) |
ELSIF (menu = menuEdit) OR (menu = context) THEN |
Menu.setEnabled(menu, menuUndo, ~ChangeLog.isFirstGuard(text.edition)); |
Menu.setEnabled(menu, menuRedo, ~ChangeLog.isLastGuard(text.edition)); |
1032,9 → 1027,7 |
Menu.setEnabled(menu, menuCopy, selected); |
Menu.setEnabled(menu, menuDelete, selected); |
Menu.setEnabled(menu, menuPaste, CB.available()); |
IF menu = menuEdit THEN |
INC(x, menuEditX) |
ELSE |
IF menu = context THEN |
IF y + menu.height >= canvas.height THEN |
DEC(y, menu.height) |
END; |
1041,23 → 1034,22 |
IF x + menu.width >= canvas.width THEN |
DEC(x, menu.width) |
END; |
CanvasToScreen(x, y) |
CanvasToScreen(x, y); |
menu.x := x; |
x := 0 |
END |
ELSIF menu = menuEncoding THEN |
Menu.option(menu, menuUTF8BOM, T.getEnc(text) = E.UTF8BOM); |
Menu.option(menu, menuUTF8, T.getEnc(text) = E.UTF8); |
Menu.option(menu, menuCP866, T.getEnc(text) = E.CP866); |
Menu.option(menu, menuWin1251, T.getEnc(text) = E.W1251); |
INC(x, menuEncodingX) |
Menu.option(menu, menuWin1251, T.getEnc(text) = E.W1251) |
ELSIF menu = menuView THEN |
Menu.check(menu, menuNumbers, text.numbers); |
Menu.option(menu, menuFontSmall, font = G.font0); |
Menu.option(menu, menuFontMedium, font = G.font1); |
Menu.option(menu, menuFontBig, font = G.font2); |
Menu.option(menu, menuFontSmall, font = G.fonts[0]); |
Menu.option(menu, menuFontMedium, font = G.fonts[1]); |
Menu.option(menu, menuFontLarge, font = G.fonts[2]); |
FOR i := 0 TO Ini.sections.count - 1 DO |
Menu.option(menu, menuColors + i, Ini.curSectionNum = i) |
END; |
INC(x, menuViewX) |
END |
ELSIF menu = menuLanguage THEN |
Menu.option(menu, menuText, text.lang = Languages.langText); |
Menu.option(menu, menuC, text.lang = Languages.langC); |
1067,16 → 1059,15 |
Menu.option(menu, menuLua, text.lang = Languages.langLua); |
Menu.option(menu, menuOberon, text.lang = Languages.langOberon); |
Menu.option(menu, menuPascal, text.lang = Languages.langPascal); |
INC(x, menuLanguageX) |
ELSIF menu = menuProgram THEN |
Menu.setEnabled(menu, menuBuild, buildScript # ""); |
Menu.setEnabled(menu, menuDebug, debugScript # ""); |
Menu.setEnabled(menu, menuRun, runScript # ""); |
INC(x, menuProgramX) |
ELSIF menu = menuTools THEN |
INC(x, menuToolsX) |
ELSIF menu = menuSearch THEN |
INC(x, menuSearchX) |
Menu.setEnabled(menu, menuRun, runScript # "") |
ELSIF menu = menuOptions THEN |
Menu.check(menu, menuLineNumbers, T.lineNumbers); |
Menu.check(menu, menuAutoIndents, T.autoIndents); |
Menu.check(menu, menuAutoBrackets, T.autoBrackets); |
Menu.check(menu, menuTrimSpace, T.trimSpace) |
END; |
enabled := search & (searchText # ""); |
1098,7 → 1089,7 |
IF Menu.opened(menu) THEN |
Menu.close(menu) |
END; |
Menu.open(menu, x, y); |
Menu.open(menu, menu.x + x, y); |
menuActive := TRUE |
END |
END ShowMenu; |
1175,17 → 1166,10 |
T.gotoLabel(text, TRUE) |
|menuPrevBookmark: |
T.gotoLabel(text, FALSE) |
|menuNumbers: |
T.toggleNumbers(text) |
|menuFontSmall: |
font := G.font0; |
|menuFontSmall..menuFontLarge: |
font := G.fonts[Menu.MenuItem - menuFontSmall]; |
Ini.setInt("settings", "font", Menu.MenuItem - menuFontSmall); |
resize |
|menuFontMedium: |
font := G.font1; |
resize |
|menuFontBig: |
font := G.font2; |
resize |
|menuText: |
T.setLang(text, Languages.langText) |
|menuC: |
1236,8 → 1220,21 |
K.Run("/sys/develop/board", "") |
|menuSysFunc: |
K.Run("/sys/docpack", "f") |
|menuLineNumbers: |
T.toggleNumbers; |
Ini.setInt("settings", "line_numbers", ORD(T.lineNumbers)) |
|menuAutoIndents: |
T.toggleIndents; |
Ini.setInt("settings", "auto_indents", ORD(T.autoIndents)) |
|menuAutoBrackets: |
T.toggleBrackets; |
Ini.setInt("settings", "auto_brackets", ORD(T.autoBrackets)) |
|menuTrimSpace: |
T.toggleTrimSpace; |
Ini.setInt("settings", "trim_space", ORD(T.trimSpace)) |
|menuColors..menuMaxColors: |
Ini.selectSection(Menu.MenuItem - menuColors) |
Ini.selectSection(Menu.MenuItem - menuColors); |
Ini.setInt("settings", "theme", Menu.MenuItem - menuColors) |
|menuMoveUp: |
T.MoveLines(text, FALSE) |
|menuMoveDown: |
1372,11 → 1369,9 |
idx: INTEGER; |
BEGIN |
menu := List.create(NIL); |
Menu.AddMenuItem(menu, menuNumbers, "line numbers"); |
Menu.delimiter(menu); |
Menu.AddMenuItem(menu, menuFontSmall, "small"); |
Menu.AddMenuItem(menu, menuFontMedium, "medium"); |
Menu.AddMenuItem(menu, menuFontBig, "big"); |
Menu.AddMenuItem(menu, menuFontLarge, "large"); |
Menu.delimiter(menu); |
colors := Ini.sections.first(Ini.tSection); |
1439,6 → 1434,19 |
END CreateMenuTools; |
PROCEDURE CreateMenuOptions (): Menu.tMenu; |
VAR |
menu: List.tList; |
BEGIN |
menu := List.create(NIL); |
Menu.AddMenuItem(menu, menuLineNumbers, "line numbers"); |
Menu.AddMenuItem(menu, menuAutoIndents, "automatic indents"); |
Menu.AddMenuItem(menu, menuAutoBrackets, "automatic brackets"); |
Menu.AddMenuItem(menu, menuTrimSpace, "trim trailing space"); |
RETURN Menu.create(menu) |
END CreateMenuOptions; |
PROCEDURE CreateMenuCurLine(): Menu.tMenu; |
VAR |
menu: List.tList; |
1940,7 → 1948,6 |
firstClickX, firstClickY, time, blink, i: INTEGER; |
key, scr: INTEGER; |
BEGIN |
font := G.font1; |
header := ""; |
K.GetSystemColors; |
switch := FALSE; |
1949,6 → 1956,10 |
curText := 0; |
Args.GetArg(0, AppPath); |
Ini.load(AppPath); |
Ini.getSettings; |
runScript := Ini.runScript; |
buildScript := Ini.buildScript; |
debugScript := Ini.debugScript; |
leftButton := FALSE; |
resized := FALSE; |
K.ScreenSize(winWidth, winHeight); |
1967,8 → 1978,10 |
canvas := G.CreateCanvas(winWidth - (LEFT + RIGHT + 11 + RIGHT_PADDING), winHeight - (TOP + BOTTOM + 5) - SkinHeight); |
tabs := Tabs.create(); |
Tabs.setArea(tabs, LEFT, TOP - Tabs.tabHeight, canvas.width, Tabs.tabHeight); |
font := G.fonts[Ini.font]; |
G.SetFont(canvas, font); |
T.init(resetTimer); |
T.init(resetTimer, Ini.lineNumbers, Ini.autoIndents, Ini.autoBrackets, Ini.trimSpace); |
Ini.selectSection(Ini.theme); |
T.setCanvas(canvas); |
Menu.init(resetTimer); |
1991,6 → 2004,7 |
menuLanguage := CreateMenuLanguage(); |
menuProgram := CreateMenuProgram(); |
menuTools := CreateMenuTools(); |
menuOptions := CreateMenuOptions(); |
mainMenu := Menu.CreateMain(mainMenuBtn); |
Menu.AddMainItem(mainMenu, "file", menuFile); |
2001,6 → 2015,7 |
Menu.AddMainItem(mainMenu, "language", menuLanguage); |
Menu.AddMainItem(mainMenu, "program", menuProgram); |
Menu.AddMainItem(mainMenu, "tools", menuTools); |
Menu.AddMainItem(mainMenu, "options", menuOptions); |
Shortcuts; |
Toolbar.create(toolbar, LEFT_PADDING + 5, toolbarTop); |
2019,8 → 2034,6 |
Toolbar.add(toolbar, btnBuild, 54, ""); |
Toolbar.add(toolbar, btnRun, 53, ""); |
Ini.getSettings(buildScript, runScript, debugScript); |
filePath := "/sys"; |
IF Args.argc = 1 THEN |
text := T.New(); |
/programs/develop/cedit/SRC/CheckBox.ob07 |
---|
82,7 → 82,7 |
res.mouse := FALSE; |
COPY(text, res.text); |
res.canvas := G.CreateCanvas(fontHeight + padding + LENGTH(res.text)*fontWidth, fontHeight + 1); |
G.SetFont(res.canvas, G.font1); |
G.SetFont(res.canvas, G.fonts[1]); |
chkbox := res |
END create; |
/programs/develop/cedit/SRC/Graph.ob07 |
---|
53,7 → 53,7 |
VAR |
font0*, font1*, font2*: tFont; |
fonts*: ARRAY 3 OF tFont; |
PROCEDURE getRGB* (color: INTEGER; VAR r, g, b: BYTE); |
302,7 → 302,7 |
IF c = Lines.NUL THEN |
c := 0X |
END; |
IF font = font0 THEN |
IF font = fonts[0] THEN |
ch := E.UNI[ORD(c), E.CP866]; |
IF ch = E.UNDEF THEN |
c := "?" |
354,7 → 354,7 |
BEGIN |
font0 := CreateFont(0, "", {}); |
font1 := CreateFont(1, "", {}); |
font2 := CreateFont(2, "", {}); |
fonts[0] := CreateFont(0, "", {}); |
fonts[1] := CreateFont(1, "", {}); |
fonts[2] := CreateFont(2, "", {}); |
END Graph. |
/programs/develop/cedit/SRC/Ini.ob07 |
---|
51,13 → 51,17 |
curSection*: tASCIISectionName; |
curSectionNum*: INTEGER; |
blink*: INTEGER; |
blink*, font*, theme*: INTEGER; |
buildScript*, runScript*, debugScript*: RW.tFileName; |
lineNumbers*, autoIndents*, autoBrackets*, trimSpace*: BOOLEAN; |
PROCEDURE [stdcall, "libini.obj", "ini_get_color"] get_color (f_name: RW.tFileName; sec_name: tASCIISectionName; key_name: tString; def_val: INTEGER): INTEGER; END; |
PROCEDURE [stdcall, "libini.obj", "ini_get_int"] get_int (f_name: RW.tFileName; sec_name: tASCIISectionName; key_name: tString; def_val: INTEGER): INTEGER; END; |
PROCEDURE [stdcall, "libini.obj", "ini_get_str"] get_str (f_name, sec_name, key_name, buffer, buf_len, def_val: INTEGER): INTEGER; END; |
PROCEDURE [stdcall, "libini.obj", "ini_enum_sections"] enum_sections (f_name: RW.tFileName; callback: INTEGER); END; |
PROCEDURE [stdcall-, "libini.obj", "ini_set_int"] set_int (f_name, sec_name, key_name, val: INTEGER): INTEGER; END; |
PROCEDURE getColor (key: tString; def: INTEGER): INTEGER; |
RETURN get_color(IniFileName, curSection, key, def) |
72,6 → 76,12 |
END getStr; |
PROCEDURE setInt* (secName, keyName: ARRAY OF CHAR; val: INTEGER); |
BEGIN |
set_int(SYSTEM.ADR(IniFileName[0]), SYSTEM.ADR(secName[0]), SYSTEM.ADR(keyName[0]), val) |
END setInt; |
PROCEDURE [stdcall] section_callback (fileName, sectionName: RW.tFileName): INTEGER; |
VAR |
section: tSection; |
148,13 → 158,25 |
END selectSection; |
PROCEDURE getSettings* (VAR build, run, debug: RW.tFileName); |
PROCEDURE getSettings*; |
BEGIN |
Lines.setTabs(get_int(IniFileName, "settings", "tab", 4)); |
blink := get_int(IniFileName, "settings", "blink", 70); |
getStr("settings", "build", build); |
getStr("settings", "run", run); |
getStr("settings", "debug", debug) |
lineNumbers := get_int(IniFileName, "settings", "line_numbers", 1) # 0; |
autoIndents := get_int(IniFileName, "settings", "auto_indents", 1) # 0; |
autoBrackets := get_int(IniFileName, "settings", "auto_brackets", 0) # 0; |
trimSpace := get_int(IniFileName, "settings", "trim_space", 1) # 0; |
font := get_int(IniFileName, "settings", "font", 1); |
IF ~((0 <= font) & (font <= 2)) THEN |
font := 1 |
END; |
theme := get_int(IniFileName, "settings", "theme", 0); |
IF ~((0 <= theme) & (theme <= sections.count - 1)) THEN |
theme := 0 |
END; |
getStr("settings", "build", buildScript); |
getStr("settings", "run", runScript); |
getStr("settings", "debug", debugScript); |
END getSettings; |
167,12 → 189,12 |
Utils.append8(IniFileName, fileName); |
IF ~File.Exists(IniFileName) THEN |
IniFileName := "/sys/settings/cedit.ini" |
IniFileName := "/sys/settings/" + fileName |
END; |
enum_sections(IniFileName, SYSTEM.ADR(section_callback)); |
Languages.init(getStr); |
selectSection(0); |
selectSection(theme); |
END load; |
/programs/develop/cedit/SRC/Languages.ob07 |
---|
404,7 → 404,7 |
END comments; |
PROCEDURE EnterKW (s: ARRAY OF CHAR; VAR KW: tKeyWords; CPrep: BOOLEAN); |
PROCEDURE EnterKW (s: ARRAY OF CHAR; VAR KW: tKeyWords); |
CONST |
SPACE = 20X; CR = 0DX; LF = 0AX; TAB = 9X; COMMA = ","; |
VAR |
418,8 → 418,7 |
k := KW.cnt; |
i := 0; |
REPEAT |
KW.words[k, 0] := "#"; |
j := ORD(CPrep); |
j := 0; |
WHILE (s[i] # 0X) & ~delim(s[i]) DO |
KW.words[k, j] := WCHR(ORD(s[i])); |
INC(i); |
455,7 → 454,7 |
KW[i].cnt := 0; |
key[2] := CHR(ORD("1") + i); |
getStr(lang, key, s); |
EnterKW(s, KW[i], (lang = "lang_C") & (i = 1)) |
EnterKW(s, KW[i]) |
END |
END loadKW; |
/programs/develop/cedit/SRC/Menu.ob07 |
---|
23,7 → 23,7 |
SYSTEM, G := Graph, List, K := KolibriOS; |
CONST |
fontHeight = 22; |
itemHeight = 22; |
fontWidth = 8; |
MainMenuHeight* = K.fontHeight + 7; |
61,7 → 61,7 |
active*, keyboard: BOOLEAN; |
parent*, child: tMenu; |
mainID: INTEGER; |
winX, winY, width*, height*: INTEGER; |
x*, winX, winY, width*, height*: INTEGER; |
selItem, cliItem: INTEGER; |
font: G.tFont; |
118,7 → 118,8 |
item.x := prev.x + LENGTH(prev.text)*fontWidth + 9 |
ELSE |
item.x := MainMenuX |
END |
END; |
menu.x := item.x |
END AddMainItem; |
265,9 → 266,9 |
TextColor := disSelForeColor |
END |
END; |
Y := y + (fontHeight - 16) DIV 2; |
Y := y + (itemHeight - 16) DIV 2; |
G.SetColor(canvas, BkColor); |
G.FillRect(canvas, 1, y, m.width - 1, y + fontHeight - 4); |
G.FillRect(canvas, 1, y, m.width - 1, y + itemHeight - 4); |
G.SetTextColor(canvas, TextColor); |
G.SetBkColor(canvas, BkColor); |
G.TextOut2(canvas, LEFT, Y - 2, item.text, LENGTH(item.text)); |
279,7 → 280,7 |
G.DLine(canvas, 7, 12, Y + 8, 1); |
G.DLine(canvas, 7, 12, Y + 9, 1) |
ELSIF item.check = 2 THEN |
Y1 := y + fontHeight DIV 2 - 2; |
Y1 := y + itemHeight DIV 2 - 2; |
G.FillRect(canvas, 7, Y1 - 2, 9, Y1 + 2); |
G.FillRect(canvas, 6, Y1 - 1, 10, Y1 + 1) |
END; |
289,7 → 290,7 |
G.Triangle(canvas, X, Y + 2, X, Y + 10, G.triRight) |
END; |
INC(y, fontHeight); |
INC(y, itemHeight); |
IF item.delim THEN |
G.SetColor(canvas, foreColor); |
G.HLine(canvas, y - 2, 1, m.width - 1) |
392,7 → 393,7 |
IF ~opened(item(tItem).child) THEN |
closeChild(m); |
item(tItem).child.keyboard := keyboard; |
_open(item(tItem).child, m.winX + m.width - 2, m.winY + m.selItem*fontHeight); |
_open(item(tItem).child, m.winX + m.width - 2, m.winY + m.selItem*itemHeight); |
m.child := item(tItem).child; |
END |
ELSE |
486,9 → 487,9 |
K.mouse(msState, x, y); |
IF (0 <= x) & (x < m.width) & (0 <= y) & (y < m.height) THEN |
m.active := TRUE; |
m.selItem := (y - TOP) DIV fontHeight; |
m.selItem := (y - TOP) DIV itemHeight; |
IF 8 IN msState THEN |
m.cliItem := (y - TOP) DIV fontHeight |
m.cliItem := (y - TOP) DIV itemHeight |
END; |
IF 16 IN msState THEN |
IF m.cliItem = m.selItem THEN |
640,10 → 641,10 |
item := item.next(tItem) |
END; |
m.width := maxLength*fontWidth + LEFT + RIGHT; |
m.height := items.count*fontHeight - 2; |
m.font := G.font1; |
m.height := items.count*itemHeight - 2; |
m.font := G.fonts[1]; |
m.canvas := G.CreateCanvas(m.width + 1, m.height + 1); |
G.SetFont(m.canvas, m.font); |
G.SetFont(m.canvas, m.font) |
RETURN m |
END create; |
/programs/develop/cedit/SRC/RW.ob07 |
---|
291,10 → 291,10 |
cnt := text.cnt; |
WHILE (text.cnt > 0) & (res = -1) DO |
c := text.getChar(text); |
IF CHR(c) = LF THEN |
IF c = ORD(LF) THEN |
res := E.EOL_LF |
ELSIF CHR(c) = CR THEN |
IF CHR(text.getChar(text)) = LF THEN |
ELSIF c = ORD(CR) THEN |
IF text.getChar(text) = ORD(LF) THEN |
res := E.EOL_CRLF |
ELSE |
res := E.EOL_CR |
/programs/develop/cedit/SRC/StatusBar.ob07 |
---|
122,5 → 122,5 |
BEGIN |
SB.canvas := NIL; |
font := G.font1 |
font := G.fonts[1] |
END StatusBar. |
/programs/develop/cedit/SRC/Text.ob07 |
---|
66,10 → 66,10 |
scroll: tPoint; |
CurX: INTEGER; |
smallChange: INTEGER; |
modified*, smallMove: BOOLEAN; |
modified*, smallMove, |
comments, guard, |
search, cs, whole: BOOLEAN; |
edition*: tGuard; |
comments, numbers*, guard, |
search, cs, whole: BOOLEAN; |
curLine: tLine; |
lang*: INTEGER; |
enc, eol: INTEGER; |
91,7 → 91,7 |
pdelete: PROCEDURE (text: tText); |
ShowCursor: PROCEDURE; |
colors*: RECORD |
colors: RECORD |
text, back, seltext, selback, modified, saved, curline, numtext, numback: INTEGER; |
comment, string, escape, num, delim, key1, key2, key3: INTEGER |
END; |
100,6 → 100,7 |
padding: RECORD left, top: INTEGER END; |
size, textsize: tPoint; |
charWidth, charHeight: INTEGER; |
autoIndents*, lineNumbers*, autoBrackets*, trimSpace*: BOOLEAN; |
PROCEDURE setLang* (text: tText; lang: INTEGER); |
151,12 → 152,30 |
END getTextRect; |
PROCEDURE toggleNumbers* (text: tText); |
PROCEDURE toggleNumbers*; |
BEGIN |
text.numbers := ~text.numbers |
lineNumbers := ~lineNumbers |
END toggleNumbers; |
PROCEDURE toggleIndents*; |
BEGIN |
autoIndents := ~autoIndents |
END toggleIndents; |
PROCEDURE toggleBrackets*; |
BEGIN |
autoBrackets := ~autoBrackets |
END toggleBrackets; |
PROCEDURE toggleTrimSpace*; |
BEGIN |
trimSpace := ~trimSpace |
END toggleTrimSpace; |
PROCEDURE showCursor*; |
BEGIN |
drawCursor := TRUE |
1146,7 → 1165,11 |
IF text.cursor.X > 0 THEN |
INC(text.smallChange); |
i := text.cursor.X; |
n := leadingSpaces(curLine); |
IF autoIndents THEN |
n := leadingSpaces(curLine) |
ELSE |
n := 0 |
END; |
modify(text); |
IF n < i THEN |
move(text, -1); |
1205,7 → 1228,7 |
SetPos(text, 0, text.cursor.Y + 1); |
line := text.curLine.prev(tLine); |
n := -1; |
WHILE (line # NIL) & (n = -1) DO |
WHILE (line # NIL) & (n = -1) & autoIndents DO |
IF (*line.length*)Lines.trimLength(line) # 0 THEN |
n := leadingSpaces(line); |
line2 := line |
1335,6 → 1358,20 |
delSelect(text); |
curLine := text.curLine; |
Lines.insert(curLine, text.cursor.X, WCHR(code)); |
IF autoBrackets THEN |
IF code = ORD("(") THEN |
code := ORD(")") |
ELSIF code = ORD("[") THEN |
code := ORD("]") |
ELSIF code = ORD("{") THEN |
code := ORD("}") |
ELSE |
code := -1 |
END; |
IF code # -1 THEN |
Lines.insert(curLine, text.cursor.X + 1, WCHR(code)) |
END |
END; |
Lines.modify(curLine); |
modify(text); |
SetPos(text, text.cursor.X + 1, text.cursor.Y) |
1373,6 → 1410,7 |
line: tLine; |
file: RW.tOutput; |
res: BOOLEAN; |
Len: INTEGER; |
BEGIN |
ChangeLog.setGuard(text.edition); |
file := RW.create(tempFile, text.enc, text.eol); |
1380,7 → 1418,12 |
ChangeLog.delSaved; |
line := text.first(tLine); |
WHILE line # NIL DO |
RW.putString(file, line, Lines.trimLength(line)); |
IF trimSpace THEN |
Len := Lines.trimLength(line) |
ELSE |
Len := line.length |
END; |
RW.putString(file, line, Len); |
NextLine(line); |
IF line # NIL THEN |
RW.newLine(file) |
2262,7 → 2305,7 |
G.clear(canvas) |
END; |
wNum := charWidth; |
IF text.numbers THEN |
IF lineNumbers THEN |
numWidth := U.lg10(text.count) + 2; |
xNum := numWidth*wNum - wNum DIV 2; |
setPadding(numWidth*wNum + pad_left, padding.top); |
2322,7 → 2365,7 |
y := padding.top + inter DIV 2; |
n := MIN(text.scroll.Y + textsize.Y, text.count); |
FOR i := text.scroll.Y + 1 TO n DO |
IF text.numbers THEN |
IF lineNumbers THEN |
IF (i MOD 10 = 0) OR (i - 1 = text.cursor.Y) OR line.label THEN |
U.int2str(i, s); |
G.TextOut2(canvas, (numWidth - U.lg10(i) - 1)*wNum - wNum DIV 2, y, s, LENGTH(s)) |
2346,7 → 2389,7 |
firstLine := text.curLine; |
lastLine := firstLine |
ELSE |
lastLine := getLine2(text, text.scroll.Y + textsize.Y - 1) |
lastLine := getLine2(text, MIN(text.scroll.Y + textsize.Y, text.count) - 1) |
END; |
p := text.foundList.first(Search.tPos); |
WHILE p # NIL DO |
2426,7 → 2469,6 |
text.search := TRUE; |
text.cs := FALSE; |
text.whole := FALSE; |
text.numbers := TRUE; |
text.guard := TRUE; |
text.edition := NIL; |
text.foundList := List.create(NIL); |
2674,11 → 2716,15 |
END New; |
PROCEDURE init* (pShowCursor: tProcedure); |
PROCEDURE init* (pShowCursor: tProcedure; _lineNumbers, _autoIndents, _autoBrackets, _trimSpace: BOOLEAN); |
BEGIN |
ShowCursor := pShowCursor; |
pdelete := delete; |
drawCursor := TRUE; |
lineNumbers := _lineNumbers; |
autoIndents := _autoIndents; |
autoBrackets := _autoBrackets; |
trimSpace := _trimSpace; |
padding.left := pad_left; |
padding.top := pad_top; |
END init; |