Subversion Repositories Kolibri OS

Rev

Rev 9671 | Rev 9708 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9671 Rev 9674
Line 65... Line 65...
65
        cursor, select, select2: pPoint;
65
        cursor, select, select2: pPoint;
66
        scroll: tPoint;
66
        scroll: tPoint;
67
        CurX: INTEGER;
67
        CurX: INTEGER;
68
        smallChange: INTEGER;
68
        smallChange: INTEGER;
69
        modified*, smallMove,
69
        modified*, smallMove,
70
        comments, guard,
70
        comments, guard, fasm*,
71
        search, cs, whole: BOOLEAN;
71
        search, cs, whole: BOOLEAN;
72
        edition*: tGuard;
72
        edition*: tGuard;
73
        curLine: tLine;
73
        curLine: tLine;
74
        lang*: INTEGER;
74
        lang*: INTEGER;
75
        enc, eol: INTEGER;
75
        enc, eol: INTEGER;
76
        table: Search.IdxTable;
-
 
77
        foundList: List.tList;
76
        foundList: List.tList;
78
        foundSel: INTEGER;
77
        foundSel: INTEGER;
79
        searchText: tString;
78
        searchText: tString;
80
        LinesVector: Lines.tVector;
79
        LinesVector: Lines.tVector;
81
        chLog*: ChangeLog.tLog;
80
        chLog*: ChangeLog.tLog;
Line 99... Line 98...
99
    drawCursor: BOOLEAN;
98
    drawCursor: BOOLEAN;
100
    padding: RECORD left, top: INTEGER END;
99
    padding: RECORD left, top: INTEGER END;
101
    size, textsize: tPoint;
100
    size, textsize: tPoint;
102
    charWidth, charHeight: INTEGER;
101
    charWidth, charHeight: INTEGER;
103
    autoIndents*, lineNumbers*, autoBrackets*, trimSpace*: BOOLEAN;
102
    autoIndents*, lineNumbers*, autoBrackets*, trimSpace*: BOOLEAN;
-
 
103
    idxTable: Search.IdxTable;
Line 104... Line 104...
104
 
104
 
105
 
105
 
-
 
106
PROCEDURE setLang* (text: tText; lang: INTEGER);
-
 
107
BEGIN
106
PROCEDURE setLang* (text: tText; lang: INTEGER);
108
	IF text.lang # lang THEN
-
 
109
		text.fasm := lang = Lang.langFasm;
107
BEGIN
110
		text.lang := lang
108
    text.lang := lang;
111
	END;
109
    text.comments := TRUE;
112
    text.comments := TRUE;
Line 296... Line 299...
296
	text.smallChange := 0;
299
	text.smallChange := 0;
297
	text.comments := FALSE
300
	text.comments := FALSE
298
END Comments;
301
END Comments;
Line -... Line 302...
-
 
302
 
-
 
303
 
-
 
304
PROCEDURE leadingSpaces (line: tLine): INTEGER;
-
 
305
VAR
-
 
306
    i: INTEGER;
-
 
307
BEGIN
-
 
308
    i := 0;
-
 
309
    WHILE Lines.isSpace(Lines.getChar(line, i)) DO
-
 
310
        INC(i)
-
 
311
    END
-
 
312
    RETURN i
-
 
313
END leadingSpaces;
299
 
314
 
300
 
315
 
301
PROCEDURE parse (text: tText; line: tLine; y: INTEGER; backColor: INTEGER; lang: INTEGER);
316
PROCEDURE parse (text: tText; line: tLine; y: INTEGER; backColor: INTEGER; lang: INTEGER);
302
VAR
317
VAR
303
    c: WCHAR;
318
    c: WCHAR;
Line 811... Line 826...
811
	        END
826
	        END
Line 812... Line 827...
812
 
827
 
Line 813... Line 828...
813
        ELSIF lang = Lang.langIni THEN
828
        ELSIF lang = Lang.langIni THEN
814
 
829
 
815
	        IF depth = 0 THEN
830
	        IF depth = 0 THEN
816
	            IF (c = ";") OR (c = "#") THEN
831
	            IF ((c = ";") OR (c = "#")) & (leadingSpaces(line) = i) THEN
817
	                PrintLex(text, line, i, n, y, colors.comment, backColor);
832
	                PrintLex(text, line, i, n, y, colors.comment, backColor);
818
	                i := n
833
	                i := n
819
	            ELSIF c = '"' THEN
834
	            ELSIF c = '"' THEN
Line 842... Line 857...
842
        INC(i)
857
        INC(i)
843
    END
858
    END
844
END parse;
859
END parse;
Line 845... Line -...
845
 
-
 
846
 
-
 
847
PROCEDURE leadingSpaces (line: tLine): INTEGER;
-
 
848
VAR
-
 
849
    i: INTEGER;
-
 
850
BEGIN
-
 
851
    i := 0;
-
 
852
    WHILE Lines.isSpace(Lines.getChar(line, i)) DO
-
 
853
        INC(i)
-
 
854
    END
-
 
855
    RETURN i
-
 
856
END leadingSpaces;
-
 
857
 
860
 
858
 
861
 
859
PROCEDURE plain (text: tText): CB.tBuffer;
862
PROCEDURE plain (text: tText): CB.tBuffer;
860
VAR
863
VAR
861
    buf: CB.tBuffer;
864
    buf: CB.tBuffer;
Line 906... Line 909...
906
	IF ~cs THEN
909
	IF ~cs THEN
907
		U.upcase16(text.searchText)
910
		U.upcase16(text.searchText)
908
	END;
911
	END;
909
	IF text.searchText # "" THEN
912
	IF text.searchText # "" THEN
910
		plainText := plain(text);
913
		plainText := plain(text);
911
		idxData := Search.index(plainText, text.table, cs);
914
		idxData := Search.index(plainText, idxTable, cs);
912
		Search.find(plainText, text.table, text.searchText, whole, text.foundList);
915
		Search.find(plainText, idxTable, text.searchText, whole, text.foundList);
913
		res := text.foundList.count > 0
916
		res := text.foundList.count > 0
914
	END;
917
	END;
915
	CB.destroy(plainText);
918
	CB.destroy(plainText);
916
	CB.destroy(idxData);
919
	CB.destroy(idxData);
917
	text.search := FALSE;
920
	text.search := FALSE;
Line 1769... Line 1772...
1769
 
1772
 
1770
PROCEDURE changeCase (text: tText; upper: BOOLEAN);
1773
PROCEDURE changeCase (text: tText; upper: BOOLEAN);
1771
VAR
1774
VAR
1772
    i: INTEGER;
1775
    i: INTEGER;
-
 
1776
    line: tLine;
1773
    line: tLine;
1777
    func: Lines.fConvert;
1774
BEGIN
1778
BEGIN
1775
    line := text.curLine;
1779
    line := text.curLine;
Line 1776... Line 1780...
1776
    i := text.cursor.X - 1;
1780
    i := text.cursor.X - 1;
1777
 
1781
 
1778
    WHILE (i >= 0) & U.isLetter(Lines.getChar(line, i)) DO
1782
    WHILE (i >= 0) & U.isLetter(Lines.getChar(line, i)) DO
Line -... Line 1783...
-
 
1783
        DEC(i)
-
 
1784
    END;
-
 
1785
 
-
 
1786
    IF upper THEN
-
 
1787
    	func := U.cap
-
 
1788
    ELSE
1779
        DEC(i)
1789
    	func := U.low
1780
    END;
1790
    END;
1781
 
1791
 
1782
    IF Lines.chCase(line, i + 1, text.cursor.X - 1, upper) THEN
1792
    IF Lines.convert(line, i + 1, text.cursor.X - 1, func) THEN
1783
    	INC(text.smallChange);
1793
    	INC(text.smallChange);
Line 1789... Line 1799...
1789
PROCEDURE chCase* (text: tText; upper: BOOLEAN);
1799
PROCEDURE chCase* (text: tText; upper: BOOLEAN);
1790
VAR
1800
VAR
1791
    selBeg, selEnd: tPoint;
1801
    selBeg, selEnd: tPoint;
1792
    first, line: Lines.tLine;
1802
    first, line: Lines.tLine;
1793
    cnt: INTEGER;
1803
    cnt: INTEGER;
-
 
1804
    func: Lines.fConvert;
1794
    modified: BOOLEAN;
1805
    modified: BOOLEAN;
1795
BEGIN
1806
BEGIN
1796
    modified := FALSE;
1807
    modified := FALSE;
1797
    IF selected(text) THEN
1808
    IF selected(text) THEN
1798
        getSelect(text, selBeg, selEnd);
1809
        getSelect(text, selBeg, selEnd);
1799
        first := getLine2(text, selBeg.Y);
1810
        first := getLine2(text, selBeg.Y);
1800
        line := first;
1811
        line := first;
1801
        cnt := selEnd.Y - selBeg.Y;
1812
        cnt := selEnd.Y - selBeg.Y;
-
 
1813
 
-
 
1814
	    IF upper THEN
-
 
1815
	    	func := U.cap
-
 
1816
	    ELSE
-
 
1817
	    	func := U.low
-
 
1818
	    END;
-
 
1819
 
1802
        IF cnt = 0 THEN
1820
        IF cnt = 0 THEN
1803
            IF Lines.chCase(line, selBeg.X, selEnd.X - 1, upper) THEN
1821
            IF Lines.convert(line, selBeg.X, selEnd.X - 1, func) THEN
1804
                modified := TRUE
1822
                modified := TRUE
1805
            END
1823
            END
1806
        ELSE
1824
        ELSE
1807
            IF Lines.chCase(line, selBeg.X, line.length - 1, upper) THEN
1825
            IF Lines.convert(line, selBeg.X, line.length - 1, func) THEN
1808
                modified := TRUE
1826
                modified := TRUE
1809
            END;
1827
            END;
1810
            WHILE cnt > 1 DO
1828
            WHILE cnt > 1 DO
1811
                NextLine(line);
1829
                NextLine(line);
1812
                IF Lines.chCase(line, 0, line.length - 1, upper) THEN
1830
                IF Lines.convert(line, 0, line.length - 1, func) THEN
1813
                    modified := TRUE
1831
                    modified := TRUE
1814
                END;
1832
                END;
1815
                DEC(cnt)
1833
                DEC(cnt)
1816
            END;
1834
            END;
1817
            NextLine(line);
1835
            NextLine(line);
1818
            IF Lines.chCase(line, 0, selEnd.X - 1, upper) THEN
1836
            IF Lines.convert(line, 0, selEnd.X - 1, func) THEN
1819
                modified := TRUE
1837
                modified := TRUE
1820
            END
1838
            END
1821
        END
1839
        END
1822
    END;
1840
    END;
1823
    IF modified THEN
1841
    IF modified THEN
Line 2534... Line 2552...
2534
    DISPOSE(text.select2);
2552
    DISPOSE(text.select2);
2535
    DISPOSE(text)
2553
    DISPOSE(text)
2536
END destroy;
2554
END destroy;
Line 2537... Line 2555...
2537
 
2555
 
2538
 
2556
 
2539
PROCEDURE open* (name: RW.tFileName; VAR errno: INTEGER): tText;
2557
PROCEDURE open* (name: RW.tFileName; ptr, size: INTEGER; VAR errno: INTEGER): tText;
2540
VAR
2558
VAR
2541
    text: tText;
2559
    text: tText;
2542
    file: RW.tInput;
2560
    file: RW.tInput;
2543
    n, enc, eol: INTEGER;
2561
    n, enc, eol: INTEGER;
2544
    _eol: BOOLEAN;
2562
    _eol: BOOLEAN;
2545
    line: tLine;
2563
    line: tLine;
2546
BEGIN
2564
BEGIN
2547
    errno := 0;
2565
    errno := 0;
-
 
2566
    text := create(name);
2548
    text := create(name);
2567
    IF text # NIL THEN
-
 
2568
    	IF ptr = 0 THEN
-
 
2569
    		file := RW.loadFromFile(name, enc, eol)
-
 
2570
    	ELSE
2549
    IF text # NIL THEN
2571
    		file := RW.loadFromMem(ptr, size, enc, eol)
2550
    	file := RW.load(name, enc, eol);
2572
    	END;
2551
    	IF file = NIL THEN
2573
    	IF file = NIL THEN
2552
    		destroy(text)
2574
    		destroy(text)
2553
    	END
2575
    	END
Line 2697... Line 2719...
2697
    END
2719
    END
2698
    RETURN text.foundList.count
2720
    RETURN text.foundList.count
2699
END replaceAll;
2721
END replaceAll;
Line -... Line 2722...
-
 
2722
 
-
 
2723
 
-
 
2724
PROCEDURE conv (VAR c: WCHAR; cp: E.CP; enc: INTEGER): BOOLEAN;
-
 
2725
VAR
-
 
2726
	code: INTEGER;
-
 
2727
	res: BOOLEAN;
-
 
2728
BEGIN
-
 
2729
	res := FALSE;
-
 
2730
	IF (c # 0X) & (c # Lines.NUL) & (c # Lines.TAB1) THEN
-
 
2731
		code := E.UNI[ORD(c), enc];
-
 
2732
		IF (0 <= code) & (code <= 255) THEN
-
 
2733
			code := cp[code]
-
 
2734
		ELSE
-
 
2735
			code := ORD(c)
-
 
2736
		END;
-
 
2737
		res := WCHR(code) # c;
-
 
2738
		c := WCHR(code)
-
 
2739
	END
-
 
2740
	RETURN res
-
 
2741
END conv;
-
 
2742
 
-
 
2743
 
-
 
2744
PROCEDURE conv1251to866 (VAR c: WCHAR): BOOLEAN;
-
 
2745
	RETURN conv(c, E.cp866, E.W1251)
-
 
2746
END conv1251to866;
-
 
2747
 
-
 
2748
 
-
 
2749
PROCEDURE conv866to1251 (VAR c: WCHAR): BOOLEAN;
-
 
2750
	RETURN conv(c, E.cp1251, E.CP866)
-
 
2751
END conv866to1251;
-
 
2752
 
-
 
2753
 
-
 
2754
PROCEDURE convert* (text: tText; cp: E.CP; enc: INTEGER);
-
 
2755
VAR
-
 
2756
	line: tLine;
-
 
2757
	func: Lines.fConvert;
-
 
2758
	modified: BOOLEAN;
-
 
2759
BEGIN
-
 
2760
	modified := FALSE;
-
 
2761
	line := text.first(tLine);
-
 
2762
	IF enc = E.CP866 THEN
-
 
2763
		func := conv866to1251
-
 
2764
	ELSIF enc = E.W1251 THEN
-
 
2765
		func := conv1251to866
-
 
2766
	ELSE
-
 
2767
		line := NIL
-
 
2768
	END;
-
 
2769
 
-
 
2770
	WHILE line # NIL DO
-
 
2771
		IF Lines.convert(line, 0, line.length - 1, func) THEN
-
 
2772
			modified := TRUE
-
 
2773
		END;
-
 
2774
		NextLine(line)
-
 
2775
	END;
-
 
2776
 
-
 
2777
	IF modified THEN
-
 
2778
		modify(text)
-
 
2779
	END
-
 
2780
END convert;
2700
 
2781
 
2701
 
2782
 
2702
PROCEDURE New* (): tText;
2783
PROCEDURE New* (): tText;
2703
VAR
2784
VAR
2704
    text: tText;
2785
    text: tText;