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; |