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 |