Subversion Repositories Kolibri OS

Rev

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

Rev 9902 Rev 9903
Line 20... Line 20...
20
MODULE Search;
20
MODULE Search;
Line 21... Line 21...
21
 
21
 
22
IMPORT
22
IMPORT
Line -... Line 23...
-
 
23
	CB := Clipboard, List, Utils, SYSTEM;
-
 
24
 
Line 23... Line 25...
23
    CB := Clipboard, List, Utils, SYSTEM;
25
CONST
24
 
26
	itemSize = 64;
Line 25... Line 27...
25
 
27
 
Line 26... Line 28...
26
TYPE
28
TYPE
27
    tBuffer* = CB.tBuffer;
29
	tBuffer* = CB.tBuffer;
-
 
30
 
28
 
31
	tIdxTable = ARRAY 65536, 2 OF INTEGER;
Line 29... Line 32...
29
    tIdxTable = ARRAY 65536, 2 OF INTEGER;
32
 
30
 
33
	tPos* = POINTER TO RECORD (List.tItem)
Line 50... Line 53...
50
    END;
53
	END;
Line 51... Line 54...
51
 
54
 
52
    i := cnt;
55
	i := cnt;
53
    WHILE i > 0 DO
56
	WHILE i > 0 DO
54
        SYSTEM.GET(pChar, c);
57
		SYSTEM.GET(pChar, c);
55
        IF ~cs & Utils.cap(c) THEN
58
		IF ~cs & Utils.lower(c) THEN
56
            SYSTEM.PUT(pChar, c)
59
			SYSTEM.PUT(pChar, c)
57
        END;
60
		END;
58
        INC(table[ORD(c), 1]);
61
		INC(table[ORD(c), 1]);
59
        INC(pChar, SYSTEM.SIZE(WCHAR));
62
		INC(pChar, SYSTEM.SIZE(WCHAR));
Line 92... Line 95...
92
	END
95
	END
93
	RETURN _index(text, cs, table.data)
96
	RETURN _index(text, cs, table.data)
94
END index;
97
END index;
Line -... Line 98...
-
 
98
 
-
 
99
 
-
 
100
PROCEDURE next* (VAR item: tPos; VAR i: INTEGER): INTEGER;
-
 
101
VAR
-
 
102
	res: INTEGER;
-
 
103
BEGIN
-
 
104
	IF (item # NIL) & (i >= item.cnt) THEN
-
 
105
		item := item.next(tPos);
-
 
106
		i := 0;
-
 
107
	END;
-
 
108
	IF (item # NIL ) & (i < item.cnt) THEN
-
 
109
		res := item.pos[i];
-
 
110
		INC(i)
-
 
111
	ELSE
-
 
112
		res := -1
-
 
113
	END
-
 
114
	RETURN res
-
 
115
END next;
95
 
116
 
96
 
117
 
97
PROCEDURE find* (text: tBuffer; s: ARRAY OF WCHAR; whole: BOOLEAN; list: List.tList);
118
PROCEDURE find* (text: tBuffer; s: ARRAY OF WCHAR; whole: BOOLEAN; list: List.tList);
98
VAR
119
VAR
99
    k, pos, n, x, prev_item_pos: INTEGER;
120
	k, pos, n, x, prev_item_pos: INTEGER;
Line 120... Line 141...
120
                flag := Utils.isLetter(c1) OR Utils.isLetter(c2) OR Utils.isDigit(c1) OR Utils.isDigit(c2) OR
141
				flag := Utils.isLetter(c1) OR Utils.isLetter(c2) OR Utils.isDigit(c1) OR Utils.isDigit(c2) OR
121
                	(c1 = "_") OR (c2 = "_")
142
					(c1 = "_") OR (c2 = "_")
122
            END;
143
			END;
123
            IF ~flag & (x >= prev_item_pos) THEN
144
			IF ~flag & (x >= prev_item_pos) THEN
124
                prev_item_pos := x + n;
145
				prev_item_pos := x + n;
-
 
146
				item := list.last(tPos);
-
 
147
				IF (item = NIL) OR (item.cnt = itemSize) THEN
125
                NEW(item);
148
					NEW(item);
126
                item.pos := x;
149
					item.cnt := 0;
127
                List.append(list, item)
150
					List.append(list, item)
-
 
151
				END;
-
 
152
				item.pos[item.cnt] := x;
-
 
153
				INC(item.cnt)
128
            END
154
			END
129
        END;
155
		END;
130
        INC(pos, SYSTEM.SIZE(INTEGER));
156
		INC(pos, SYSTEM.SIZE(INTEGER));
131
        DEC(k)
157
		DEC(k)
132
    END
158
	END