/programs/develop/cedit/CEDIT |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/programs/develop/cedit/SRC/API.ob07 |
---|
File deleted |
\ No newline at end of file |
/programs/develop/cedit/SRC/RTL.ob07 |
---|
File deleted |
\ No newline at end of file |
/programs/develop/cedit/SRC/CEdit.ob07 |
---|
28,10 → 28,10 |
RW, Ini, EB := EditBox, Tabs, Toolbar, SB := StatusBar; |
CONST |
HEADER = "CEdit (22-feb-2023)"; |
HEADER = "CEdit (24-feb-2023)"; |
ShellFilter = ""; |
EditFilter = "SH|INC|TXT|ASM|OB07|C|CPP|H|PAS|PP|LUA|INI|JSON"; |
EditFilter = "sh|inc|txt|asm|ob07|c|cpp|h|pas|pp|lua|ini|json"; |
fontWidth = K.fontWidth; |
fontHeight = K.fontHeight; |
745,8 → 745,8 |
BEGIN |
n1 := name1; |
n2 := name2; |
U.upcase(n1); |
U.upcase(n2) |
U.lowcase8(n1); |
U.lowcase8(n2) |
RETURN n1 = n2 |
END nameEq; |
/programs/develop/cedit/SRC/ChangeLog.ob07 |
---|
21,6 → 21,10 |
IMPORT List, Lines, API, SYSTEM; |
CONST |
boolItemSize = 8; |
fillMap = {0..boolItemSize-1}; |
TYPE |
tIntItem = POINTER TO RECORD (List.tItem) |
cnt: INTEGER; |
28,9 → 32,13 |
END; |
tBoolItem = POINTER TO RECORD (List.tItem) |
map: SET; |
data: ARRAY boolItemSize OF |
RECORD |
line: Lines.tLine; |
adr: INTEGER; |
val, save: BOOLEAN |
END |
END; |
tUntypedPtr = POINTER TO RECORD (List.tItem) |
114,8 → 122,12 |
SYSTEM.PUT(item(tIntItem).adr[i], item(tIntItem).val[i]) |
END |
ELSIF item IS tBoolItem THEN |
SYSTEM.PUT(item(tBoolItem).adr, item(tBoolItem).val) |
FOR i := 0 TO boolItemSize - 1 DO |
IF i IN item(tBoolItem).map THEN |
SYSTEM.PUT(item(tBoolItem).data[i].adr, item(tBoolItem).data[i].val) |
END |
END |
END |
END redo; |
139,7 → 151,7 |
item: List.tItem; |
boolItem: tBoolItem; |
cur: List.tItem; |
del: BOOLEAN; |
i: INTEGER; |
BEGIN |
item := CL.Log.first; |
WHILE item # NIL DO |
154,12 → 166,15 |
WHILE cur # NIL DO |
IF cur IS tBoolItem THEN |
boolItem := cur(tBoolItem); |
del := boolItem.save & boolItem.line.modified |
ELSE |
del := FALSE |
FOR i := 0 TO boolItemSize - 1 DO |
IF (i IN boolItem.map) & boolItem.data[i].save & |
boolItem.data[i].line.modified THEN |
EXCL(boolItem.map, i) |
END |
END |
END; |
cur := cur.prev; |
IF del THEN |
IF boolItem.map = {} THEN |
List.delete(CL.Log, boolItem); |
DISPOSE(boolItem) |
END |
192,38 → 207,24 |
END changeWord; |
PROCEDURE changeBool (line: Lines.tLine; VAR v: BOOLEAN; x: BOOLEAN); |
VAR |
item: tBoolItem; |
BEGIN |
NEW(item); |
item.line := line; |
item.adr := SYSTEM.ADR(v); |
item.val := x; |
item.save := FALSE; |
IF ~CL.isLast THEN |
clear(CL.guard) |
END; |
List.append(CL.Log, item) |
END changeBool; |
PROCEDURE delSaved*; |
VAR |
boolItem: tBoolItem; |
cur: List.tItem; |
del: BOOLEAN; |
i: INTEGER; |
BEGIN |
cur := CL.guard.next; |
WHILE cur # NIL DO |
IF cur IS tBoolItem THEN |
boolItem := cur(tBoolItem); |
del := boolItem.save |
ELSE |
del := FALSE |
FOR i := 0 TO boolItemSize - 1 DO |
IF (i IN boolItem.map) & boolItem.data[i].save THEN |
EXCL(boolItem.map, i) |
END |
END |
END; |
cur := cur.next; |
IF del THEN |
IF boolItem.map = {} THEN |
List.delete(CL.Log, boolItem); |
DISPOSE(boolItem) |
END |
235,19 → 236,21 |
VAR |
boolItem: tBoolItem; |
cur: List.tItem; |
del: BOOLEAN; |
i: INTEGER; |
BEGIN |
cur := CL.guard.prev; |
WHILE (cur # NIL) & ~(cur IS tGuard) DO |
IF cur IS tBoolItem THEN |
boolItem := cur(tBoolItem); |
del := boolItem.save |
ELSE |
del := FALSE |
FOR i := 0 TO boolItemSize - 1 DO |
IF (i IN boolItem.map) & boolItem.data[i].save THEN |
SYSTEM.PUT(boolItem.data[i].adr, ~boolItem.data[i].val); |
EXCL(boolItem.map, i) |
END |
END |
END; |
cur := cur.prev; |
IF del THEN |
SYSTEM.PUT(boolItem.adr, ~boolItem.val); |
IF boolItem.map = {} THEN |
List.delete(CL.Log, boolItem); |
DISPOSE(boolItem) |
END |
255,16 → 258,61 |
END delCurSaved; |
PROCEDURE changeBool2 (line: Lines.tLine; VAR v: BOOLEAN; x: BOOLEAN); |
PROCEDURE _changeBool (fn2: BOOLEAN; line: Lines.tLine; VAR v: BOOLEAN; x: BOOLEAN); |
VAR |
item: tBoolItem; |
cur: List.tItem; |
i: INTEGER; |
BEGIN |
IF fn2 THEN |
cur := CL.guard.prev |
ELSE |
IF ~CL.isLast THEN |
clear(CL.guard) |
END; |
cur := CL.Log.last |
END; |
WHILE (cur # NIL) & ~(cur IS tGuard) & |
(~(cur IS tBoolItem) OR (cur(tBoolItem).map = fillMap)) DO |
cur := cur.prev |
END; |
IF (cur IS tBoolItem) & (cur(tBoolItem).map # fillMap) THEN |
item := cur(tBoolItem) |
ELSE |
NEW(item); |
item.line := line; |
item.adr := SYSTEM.ADR(v); |
item.val := x; |
item.save := TRUE; |
item.map := {}; |
IF fn2 THEN |
List.insert(CL.Log, CL.guard.prev, item) |
ELSE |
List.append(CL.Log, item) |
END |
END; |
i := 0; |
WHILE i < boolItemSize DO |
IF ~(i IN item.map) THEN |
item.data[i].line := line; |
item.data[i].adr := SYSTEM.ADR(v); |
item.data[i].val := x; |
item.data[i].save := fn2; |
INCL(item.map, i); |
i := boolItemSize |
END; |
INC(i) |
END |
END _changeBool; |
PROCEDURE changeBool (line: Lines.tLine; VAR v: BOOLEAN; x: BOOLEAN); |
BEGIN |
_changeBool(FALSE, line, v, x) |
END changeBool; |
PROCEDURE changeBool2 (line: Lines.tLine; VAR v: BOOLEAN; x: BOOLEAN); |
BEGIN |
_changeBool(TRUE, line, v, x) |
END changeBool2; |
/programs/develop/cedit/SRC/Languages.ob07 |
---|
141,7 → 141,7 |
REPEAT |
INC(pos); |
c := Lines.getChar(line, pos); |
IF Utils.cap(c) THEN END; |
IF Utils.upper(c) THEN END; |
IF Utils.isHex(c) THEN |
INC(k) |
ELSE |
166,7 → 166,7 |
REPEAT |
INC(pos); |
c := Lines.getChar(line, pos); |
IF Utils.cap(c) THEN END; |
IF Utils.upper(c) THEN END; |
IF Utils.isHex(c) THEN |
INC(k) |
ELSE |
457,7 → 457,7 |
key[2] := CHR(ORD("1") + i); |
getStr(lang_name, key, s); |
IF ~(lang IN csLang) THEN |
Utils.upcase(s) |
Utils.lowcase8(s) |
END; |
IF lang = langOberon THEN |
k := LENGTH(s); |
465,7 → 465,7 |
FOR j := 0 TO k - 1 DO |
s[j + k + 1] := s[j]; |
w := WCHR(ORD(s[j])); |
IF Utils.low(w) THEN |
IF Utils.lower(w) THEN |
s[j + k + 1] := CHR(ORD(w) MOD 256) |
END |
END; |
508,8 → 508,7 |
WHILE fileExt[i].lang # lang DO |
INC(i) |
END; |
COPY(fileExt[i].ext, ext); |
Utils.lowcase(ext) |
COPY(fileExt[i].ext, ext) |
END getExt; |
525,17 → 524,17 |
loadKW(langFasm, KW[langFasm], Delim[langFasm], getStr, "lang_Fasm"); |
loadKW(langJSON, KW[langJSON], Delim[langJSON], getStr, "lang_JSON"); |
fileExt[ 0].ext := "OB07"; fileExt[ 0].lang := langOberon; |
fileExt[ 1].ext := "C"; fileExt[ 1].lang := langC; |
fileExt[ 2].ext := "H"; fileExt[ 2].lang := langC; |
fileExt[ 3].ext := "CPP"; fileExt[ 3].lang := langC; |
fileExt[ 4].ext := "PAS"; fileExt[ 4].lang := langPascal; |
fileExt[ 5].ext := "PP"; fileExt[ 5].lang := langPascal; |
fileExt[ 6].ext := "ASM"; fileExt[ 6].lang := langFasm; |
fileExt[ 7].ext := "LUA"; fileExt[ 7].lang := langLua; |
fileExt[ 8].ext := "INI"; fileExt[ 8].lang := langIni; |
fileExt[ 9].ext := "JSON"; fileExt[ 9].lang := langJSON; |
fileExt[10].ext := "TXT"; fileExt[10].lang := langText; |
fileExt[ 0].ext := "ob07"; fileExt[ 0].lang := langOberon; |
fileExt[ 1].ext := "c"; fileExt[ 1].lang := langC; |
fileExt[ 2].ext := "h"; fileExt[ 2].lang := langC; |
fileExt[ 3].ext := "cpp"; fileExt[ 3].lang := langC; |
fileExt[ 4].ext := "pas"; fileExt[ 4].lang := langPascal; |
fileExt[ 5].ext := "pp"; fileExt[ 5].lang := langPascal; |
fileExt[ 6].ext := "asm"; fileExt[ 6].lang := langFasm; |
fileExt[ 7].ext := "lua"; fileExt[ 7].lang := langLua; |
fileExt[ 8].ext := "ini"; fileExt[ 8].lang := langIni; |
fileExt[ 9].ext := "json"; fileExt[ 9].lang := langJSON; |
fileExt[10].ext := "txt"; fileExt[10].lang := langText; |
END init; |
/programs/develop/cedit/SRC/Search.ob07 |
---|
22,6 → 22,8 |
IMPORT |
CB := Clipboard, List, Utils, SYSTEM; |
CONST |
itemSize = 64; |
TYPE |
tBuffer* = CB.tBuffer; |
29,7 → 31,8 |
tIdxTable = ARRAY 65536, 2 OF INTEGER; |
tPos* = POINTER TO RECORD (List.tItem) |
pos*: INTEGER |
cnt*: INTEGER; |
pos*: ARRAY itemSize OF INTEGER |
END; |
VAR |
52,7 → 55,7 |
i := cnt; |
WHILE i > 0 DO |
SYSTEM.GET(pChar, c); |
IF ~cs & Utils.cap(c) THEN |
IF ~cs & Utils.lower(c) THEN |
SYSTEM.PUT(pChar, c) |
END; |
INC(table[ORD(c), 1]); |
94,6 → 97,24 |
END index; |
PROCEDURE next* (VAR item: tPos; VAR i: INTEGER): INTEGER; |
VAR |
res: INTEGER; |
BEGIN |
IF (item # NIL) & (i >= item.cnt) THEN |
item := item.next(tPos); |
i := 0; |
END; |
IF (item # NIL ) & (i < item.cnt) THEN |
res := item.pos[i]; |
INC(i) |
ELSE |
res := -1 |
END |
RETURN res |
END next; |
PROCEDURE find* (text: tBuffer; s: ARRAY OF WCHAR; whole: BOOLEAN; list: List.tList); |
VAR |
k, pos, n, x, prev_item_pos: INTEGER; |
122,9 → 143,14 |
END; |
IF ~flag & (x >= prev_item_pos) THEN |
prev_item_pos := x + n; |
item := list.last(tPos); |
IF (item = NIL) OR (item.cnt = itemSize) THEN |
NEW(item); |
item.pos := x; |
item.cnt := 0; |
List.append(list, item) |
END; |
item.pos[item.cnt] := x; |
INC(item.cnt) |
END |
END; |
INC(pos, SYSTEM.SIZE(INTEGER)); |
/programs/develop/cedit/SRC/Tabs.ob07 |
---|
1,5 → 1,5 |
(* |
Copyright 2021, 2022 Anton Krotov |
Copyright 2021-2023 Anton Krotov |
This file is part of CEdit. |
31,12 → 31,14 |
curTabHeight = 26; |
scrWidth = 15; |
btnCloseColor* = 0EF999FH; |
modifColor = 0FF0000H; |
strLen = 30; |
TYPE |
tItem = POINTER TO RECORD (List.tItem) |
val: RW.tFileName; |
val: ARRAY strLen + 1 OF CHAR; |
modified: BOOLEAN |
END; |
91,7 → 93,7 |
K.DrawText866bk(x + K.fontWidth + K.fontWidth DIV 2, y + (height - K.fontHeight) DIV 2, textColor, color, s); |
IF modified THEN |
K.DrawText866bk(x + K.fontWidth DIV 2, y + (height - K.fontHeight) DIV 2, textColor, color, "*") |
K.DrawText866bk(x + K.fontWidth DIV 2, y + (height - K.fontHeight) DIV 2, modifColor, color, "*") |
END; |
K.CreateButton(id + ORD({30}) + btnID, x + 1, y - 1, width - 1, height - 1, 0, ""); |
left := x + width - btnCloseSize - 5; |
184,14 → 186,30 |
END draw; |
PROCEDURE setText (item: tItem; s: ARRAY OF CHAR); |
VAR |
i: INTEGER; |
BEGIN |
IF LENGTH(s) > strLen THEN |
FOR i := 0 TO strLen - 4 DO |
item.val[i] := s[i] |
END; |
item.val[strLen - 3] := 0X; |
U.append8(item.val, "...") |
ELSE |
COPY(s, item.val) |
END |
END setText; |
PROCEDURE add* (t: tTabs; s: ARRAY OF CHAR); |
VAR |
item: tItem; |
BEGIN |
NEW(item); |
item.val := s; |
setText(item, s); |
item.modified := FALSE; |
List.append(t.strings, item); |
List.append(t.strings, item) |
END add; |
212,7 → 230,7 |
item: List.tItem; |
BEGIN |
item := List.getItem(t.strings, n); |
item(tItem).val := s |
setText(item(tItem), s) |
END rename; |
/programs/develop/cedit/SRC/Text.ob07 |
---|
119,7 → 119,7 |
BEGIN |
text.fileName := name; |
U.getFileName(name, ext, "."); |
U.upcase(ext); |
U.lowcase8(ext); |
setLang(text, Lang.getLang(ext)) |
END setName; |
352,20 → 352,20 |
END PrintComment; |
PROCEDURE cap (c: WCHAR): WCHAR; |
PROCEDURE upper (c: WCHAR): WCHAR; |
BEGIN |
IF U.cap(c) THEN END |
IF U.upper(c) THEN END |
RETURN c |
END cap; |
END upper; |
PROCEDURE UL (c: WCHAR): BOOLEAN; |
RETURN (cap(c) = "U") OR (cap(c) = "L") |
RETURN (upper(c) = "U") OR (upper(c) = "L") |
END UL; |
PROCEDURE FL (c: WCHAR): BOOLEAN; |
RETURN (cap(c) = "F") OR (cap(c) = "L") |
RETURN (upper(c) = "F") OR (upper(c) = "L") |
END FL; |
384,7 → 384,7 |
DEC(i); |
lexLen := getString(line, first, i - first + 1, s); |
IF ~cs THEN |
U.upcase16(s) |
U.lowcase(s) |
END; |
IF Lang.isKey(s, text.lang, 1) THEN |
color := colors.key1 |
451,16 → 451,16 |
k := i; |
INC(i); |
c := Lines.getChar(line, i); |
IF (cap(c) = "X") & (Lines.getChar(line, i - 1) = "0") THEN |
IF (upper(c) = "X") & (Lines.getChar(line, i - 1) = "0") THEN |
INC(i); |
hex := TRUE |
END; |
WHILE U.isHex(cap(Lines.getChar(line, i))) DO |
WHILE U.isHex(upper(Lines.getChar(line, i))) DO |
INC(i) |
END; |
IF (cap(Lines.getChar(line, i)) = "H") & ~hex THEN |
IF (upper(Lines.getChar(line, i)) = "H") & ~hex THEN |
INC(i) |
END; |
508,11 → 508,11 |
DEC(i); |
c := Lines.getChar(line, i) |
END; |
IF (cap(c) = "X") & (Lines.getChar(line, i - 1) = "0") THEN |
IF (upper(c) = "X") & (Lines.getChar(line, i - 1) = "0") THEN |
REPEAT |
INC(i); |
c := Lines.getChar(line, i) |
UNTIL ~U.isHex(cap(c)); |
UNTIL ~U.isHex(upper(c)); |
IF UL(c) THEN |
INC(i) |
END |
531,7 → 531,7 |
INC(i) |
END; |
c := Lines.getChar(line, i); |
IF cap(c) = "E" THEN |
IF upper(c) = "E" THEN |
INC(i); |
c := Lines.getChar(line, i); |
IF (c = "+") OR (c = "-") THEN |
672,7 → 672,7 |
cond := 0 |
ELSIF U.isDigit(c) THEN |
k := i; |
IF (c = "0") & (cap(Lines.getChar(line, i + 1)) = "X") THEN |
IF (c = "0") & (upper(Lines.getChar(line, i + 1)) = "X") THEN |
isDgt := U.isHex; |
hex := TRUE; |
INC(i, 2) |
680,7 → 680,7 |
isDgt := U.isDigit; |
hex := FALSE |
END; |
WHILE isDgt(cap(Lines.getChar(line, i))) DO |
WHILE isDgt(upper(Lines.getChar(line, i))) DO |
INC(i) |
END; |
IF Lines.getChar(line, i) = "." THEN |
688,16 → 688,16 |
IF Lines.getChar(line, i) = "." THEN |
DEC(i) |
END; |
WHILE isDgt(cap(Lines.getChar(line, i))) DO |
WHILE isDgt(upper(Lines.getChar(line, i))) DO |
INC(i) |
END |
END; |
IF (cap(Lines.getChar(line, i)) = "E") OR hex & (cap(Lines.getChar(line, i)) = "P") THEN |
IF (upper(Lines.getChar(line, i)) = "E") OR hex & (upper(Lines.getChar(line, i)) = "P") THEN |
INC(i); |
IF (Lines.getChar(line, i) = "-") OR (Lines.getChar(line, i) = "+") THEN |
INC(i) |
END; |
WHILE isDgt(cap(Lines.getChar(line, i))) DO |
WHILE isDgt(upper(Lines.getChar(line, i))) DO |
INC(i) |
END |
END; |
771,7 → 771,7 |
END; |
k := i; |
INC(i); |
WHILE U.isHex(cap(Lines.getChar(line, i))) DO |
WHILE U.isHex(upper(Lines.getChar(line, i))) DO |
INC(i) |
END; |
DEC(i); |
790,7 → 790,7 |
WHILE U.isDigit(Lines.getChar(line, i)) DO |
INC(i) |
END; |
IF cap(Lines.getChar(line, i)) = "E" THEN |
IF upper(Lines.getChar(line, i)) = "E" THEN |
INC(i); |
IF (Lines.getChar(line, i) = "-") OR (Lines.getChar(line, i) = "+") THEN |
INC(i) |
906,7 → 906,7 |
text.cs := cs; |
text.searchText := s; |
IF ~cs THEN |
U.upcase16(text.searchText) |
U.lowcase(text.searchText) |
END; |
IF text.searchText # "" THEN |
plainText := plain(text); |
1787,9 → 1787,9 |
END; |
IF upper THEN |
func := U.cap |
func := U.upper |
ELSE |
func := U.low |
func := U.lower |
END; |
IF Lines.convert(line, i + 1, text.cursor.X - 1, func) THEN |
1815,9 → 1815,9 |
cnt := selEnd.Y - selBeg.Y; |
IF upper THEN |
func := U.cap |
func := U.upper |
ELSE |
func := U.low |
func := U.lower |
END; |
IF cnt = 0 THEN |
2293,13 → 2293,13 |
PROCEDURE draw* (text: tText); |
VAR |
y, n, cnt, i, x: INTEGER; |
y, n, cnt, i, x, pos: INTEGER; |
line, firstLine, lastLine: tLine; |
selBeg, selEnd: tPoint; |
s: ARRAY 12 OF WCHAR; |
backColor, numWidth, xNum, wNum: INTEGER; |
guard: tGuard; |
p: Search.tPos; |
guard: tGuard; |
BEGIN |
IF text.comments THEN |
Comments(text) |
2413,23 → 2413,26 |
ELSE |
lastLine := getLine2(text, MIN(text.scroll.Y + textsize.Y + 1, text.count) - 1) |
END; |
i := 0; |
p := text.foundList.first(Search.tPos); |
WHILE p # NIL DO |
pos := Search.next(p, i); |
WHILE pos # -1 DO |
y := padding.top + inter DIV 2; |
IF text.smallMove THEN |
y := y + charHeight*(text.cursor.Y - text.scroll.Y) |
END; |
IF (firstLine.pos <= p.pos) & (p.pos <= lastLine.pos + lastLine.length) THEN |
IF (firstLine.pos <= pos) & (pos <= lastLine.pos + lastLine.length) THEN |
line := firstLine; |
WHILE (line.pos <= p.pos) & (line # lastLine) DO |
WHILE (line.pos <= pos) & (line # lastLine) DO |
NextLine(line); |
INC(y, charHeight) |
END; |
IF (line # lastLine) & (line # firstLine) OR (line = lastLine) & (line.pos > p.pos) THEN |
IF (line # lastLine) & (line # firstLine) OR (line = lastLine) & (line.pos > pos) THEN |
PrevLine(line); |
DEC(y, charHeight) |
END; |
x := (p.pos - line.pos - text.scroll.X)*charWidth + padding.left; |
x := (pos - line.pos - text.scroll.X)*charWidth + padding.left; |
n := LENGTH(text.searchText)*charWidth; |
WHILE n > 0 DO |
IF x >= padding.left THEN |
2439,7 → 2442,7 |
DEC(n) |
END |
END; |
p := p.next(Search.tPos) |
pos := Search.next(p, i) |
END |
END; |
2609,40 → 2612,41 |
PROCEDURE findNext* (text: tText; prev: BOOLEAN): BOOLEAN; |
VAR |
cursorPos, x, y, X, Y, Len: INTEGER; |
p: Search.tPos; |
line: tLine; |
res: BOOLEAN; |
pos, i, pos0: INTEGER; |
p: Search.tPos; |
BEGIN |
X := text.cursor.X; |
Y := text.cursor.Y; |
text.cursor.X := MIN(text.cursor.X, text.curLine.length); |
cursorPos := text.curLine.pos + text.cursor.X - ORD(prev) - ORD(~prev & (text.foundSel = 0)); |
pos0 := -1; |
i := 0; |
p := text.foundList.first(Search.tPos); |
WHILE (p # NIL) & (p.pos <= cursorPos) DO |
p := p.next(Search.tPos) |
pos := Search.next(p, i); |
WHILE (pos # -1) & (pos <= cursorPos) DO |
pos0 := pos; |
pos := Search.next(p, i) |
END; |
IF prev THEN |
IF p = NIL THEN |
p := text.foundList.last(Search.tPos) |
ELSE |
p := p.prev(Search.tPos) |
END |
pos := pos0 |
END; |
res := p # NIL; |
res := pos # -1; |
IF res THEN |
y := 0; |
line := text.first(tLine); |
WHILE (line.pos <= p.pos) & (line.next # NIL) DO |
WHILE (line.pos <= pos) & (line.next # NIL) DO |
NextLine(line); |
INC(y) |
END; |
IF (line.next # NIL) OR (line.pos > p.pos) THEN |
IF (line.next # NIL) OR (line.pos > pos) THEN |
PrevLine(line); |
DEC(y) |
END; |
resetSelect(text); |
searchScroll(text, y); |
x := p.pos - line.pos; |
x := pos - line.pos; |
Len := LENGTH(text.searchText); |
IF x + Len > text.scroll.X + textsize.X THEN |
text.scroll.X := MAX(x + Len - textsize.X + 3, 0) |
2688,9 → 2692,9 |
PROCEDURE replaceAll* (text: tText; s: ARRAY OF WCHAR; n: INTEGER): INTEGER; |
VAR |
line: tLine; |
y, k, d, pos, y0, i, c: INTEGER; |
p: Search.tPos; |
line: tLine; |
y, k, d, pos, y0: INTEGER; |
BEGIN |
resetSelect(text); |
SetPos(text, 0, 0); |
2699,9 → 2703,11 |
y0 := -1; |
k := 0; |
d := LENGTH(s) - n; |
c := 0; |
i := 0; |
p := text.foundList.first(Search.tPos); |
WHILE p # NIL DO |
pos := p.pos; |
pos := Search.next(p, i); |
WHILE pos # -1 DO |
WHILE (line.pos <= pos) & (line.next # NIL) DO |
NextLine(line); |
INC(y) |
2719,9 → 2725,10 |
SetPos(text, pos - line.pos + k, y); |
text.foundSel := n; |
replace(text, s, n); |
p := p.next(Search.tPos) |
INC(c); |
pos := Search.next(p, i) |
END |
RETURN text.foundList.count |
RETURN c |
END replaceAll; |
/programs/develop/cedit/SRC/Utils.ob07 |
---|
1,5 → 1,5 |
(* |
Copyright 2021, 2022 Anton Krotov |
Copyright 2021-2023 Anton Krotov |
This file is part of CEdit. |
152,21 → 152,22 |
PROCEDURE isLetter* (ch: WCHAR): BOOLEAN; |
RETURN ("a" <= ch) & (ch <= "z") OR ("A" <= ch) & (ch <= "Z") |
RETURN ("a" <= ch) & (ch <= "z") OR ("A" <= ch) & (ch <= "Z") OR |
(* cyrillic *) |
(430X <= ch) & (ch <= 44FX) OR (410X <= ch) & (ch <= 42FX) OR |
(ch = 491X) OR (ch = 490X) OR (450X <= ch) & (ch <= 45FX) OR |
(400X <= ch) & (ch <= 40FX) |
END isLetter; |
PROCEDURE cap* (VAR ch: WCHAR): BOOLEAN; |
PROCEDURE upper* (VAR ch: WCHAR): BOOLEAN; |
VAR |
res: BOOLEAN; |
BEGIN |
IF ("a" <= ch) & (ch <= "z") THEN |
ch := WCHR(ORD(ch) - (ORD("z") - ORD("Z"))); |
res := TRUE |
ELSIF (430H <= ORD(ch)) & (ORD(ch) <= 44FH) THEN |
IF ("a" <= ch) & (ch <= "z") OR (430X <= ch) & (ch <= 44FX) THEN |
ch := WCHR(ORD(ch) - 20H); |
res := TRUE |
ELSIF (450H <= ORD(ch)) & (ORD(ch) <= 45FH) THEN |
ELSIF (450X <= ch) & (ch <= 45FX) THEN |
ch := WCHR(ORD(ch) - 50H); |
res := TRUE |
ELSIF ch = 491X THEN |
176,84 → 177,54 |
res := FALSE |
END |
RETURN res |
END cap; |
END upper; |
PROCEDURE cap8 (VAR ch: CHAR): BOOLEAN; |
PROCEDURE lower* (VAR ch: WCHAR): BOOLEAN; |
VAR |
res: BOOLEAN; |
BEGIN |
IF ("a" <= ch) & (ch <= "z") THEN |
ch := CHR(ORD(ch) - (ORD("z") - ORD("Z"))); |
IF ("A" <= ch) & (ch <= "Z") OR (410X <= ch) & (ch <= 42FX) THEN |
ch := WCHR(ORD(ch) + 20H); |
res := TRUE |
ELSIF (400X <= ch) & (ch <= 40FX) THEN |
ch := WCHR(ORD(ch) + 50H); |
res := TRUE |
ELSIF ch = 490X THEN |
ch := 491X; |
res := TRUE |
ELSE |
res := FALSE |
END |
RETURN res |
END cap8; |
END lower; |
PROCEDURE upcase* (VAR s: ARRAY OF CHAR); |
PROCEDURE lowcase* (VAR s: ARRAY OF WCHAR); |
VAR |
i: INTEGER; |
BEGIN |
i := LENGTH(s) - 1; |
WHILE i >= 0 DO |
IF cap8(s[i]) THEN |
IF lower(s[i]) THEN |
END; |
DEC(i) |
END |
END upcase; |
END lowcase; |
PROCEDURE upcase16* (VAR s: ARRAY OF WCHAR); |
PROCEDURE lowcase8* (VAR s: ARRAY OF CHAR); |
VAR |
i: INTEGER; |
BEGIN |
i := LENGTH(s) - 1; |
WHILE i >= 0 DO |
IF cap(s[i]) THEN |
END; |
DEC(i) |
END |
END upcase16; |
PROCEDURE low* (VAR ch: WCHAR): BOOLEAN; |
VAR |
res: BOOLEAN; |
BEGIN |
IF ("A" <= ch) & (ch <= "Z") THEN |
ch := WCHR(ORD(ch) + (ORD("z") - ORD("Z"))); |
res := TRUE |
ELSIF (410H <= ORD(ch)) & (ORD(ch) <= 42FH) THEN |
ch := WCHR(ORD(ch) + 20H); |
res := TRUE |
ELSIF (400H <= ORD(ch)) & (ORD(ch) <= 40FH) THEN |
ch := WCHR(ORD(ch) + 50H); |
res := TRUE |
ELSIF ch = 490X THEN |
ch := 491X; |
res := TRUE |
ELSE |
res := FALSE |
END |
RETURN res |
END low; |
PROCEDURE lowcase* (VAR s: ARRAY OF CHAR); |
VAR |
i: INTEGER; |
BEGIN |
i := LENGTH(s) - 1; |
WHILE i >= 0 DO |
IF ("A" <= s[i]) & (s[i] <= "Z") THEN |
s[i] := CHR(ORD(s[i]) + 32) |
s[i] := CHR(ORD(s[i]) + 20H) |
END; |
DEC(i) |
END |
END lowcase; |
END lowcase8; |
PROCEDURE str2int* (s: ARRAY OF WCHAR; VAR val: INTEGER): BOOLEAN; |
336,19 → 307,6 |
END lg10; |
PROCEDURE sgn* (x: INTEGER): INTEGER; |
BEGIN |
IF x > 0 THEN |
x := 1 |
ELSIF x < 0 THEN |
x := -1 |
ELSE |
x := 0 |
END |
RETURN x |
END sgn; |
PROCEDURE between* (a, b, c: INTEGER): BOOLEAN; |
RETURN (a <= b) & (b <= c) |
END between; |