Subversion Repositories Kolibri OS

Rev

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

Rev 9073 Rev 9174
Line 22... Line 22...
22
IMPORT
22
IMPORT
23
    List, SYSTEM, API, Utils;
23
    List, SYSTEM, API, Utils;
Line 24... Line 24...
24
 
24
 
25
CONST
25
CONST
26
    WCHAR_SIZE = 2;
26
    WCHAR_SIZE = 2;
-
 
27
    SPACE* = 20X;
-
 
28
    TAB* = 9X;
Line 27... Line 29...
27
    SPACE = 20X;
29
    TAB1* = 0FFFEX;
Line 28... Line 30...
28
 
30
 
29
TYPE
31
TYPE
Line 49... Line 51...
49
    _movBool, _movBool2: PmovBool;
51
    _movBool, _movBool2: PmovBool;
50
    _movPtr: PmovPtr;
52
    _movPtr: PmovPtr;
51
(*    _typedPtr: PTypedPtr;
53
(*    _typedPtr: PTypedPtr;
52
    _untypedPtr: PUntypedPtr;*)
54
    _untypedPtr: PUntypedPtr;*)
Line 53... Line 55...
53
 
55
 
-
 
56
    pMaxLength, tab*: INTEGER;
Line 54... Line 57...
54
    pMaxLength: INTEGER;
57
    tabs*: BOOLEAN;
55
 
58
 
56
 
59
 
Line 164... Line 167...
164
        line := NIL
167
        line := NIL
165
    END
168
    END
166
END destroy;
169
END destroy;
Line 167... Line 170...
167
 
170
 
-
 
171
 
-
 
172
PROCEDURE getChar* (line: tLine; i: INTEGER): WCHAR;
168
 
173
VAR
-
 
174
    c: WCHAR;
-
 
175
BEGIN
-
 
176
    SYSTEM.GET(line.ptr + i*WCHAR_SIZE, c)
-
 
177
    RETURN c
-
 
178
END getChar;
-
 
179
 
-
 
180
 
-
 
181
PROCEDURE tabWidth (line: tLine; pos: INTEGER): INTEGER;
-
 
182
VAR
-
 
183
    n: INTEGER;
169
PROCEDURE modify* (line: tLine);
184
BEGIN
-
 
185
    n := pos;
170
BEGIN
186
    IF getChar(line, pos) = TAB THEN
171
    IF ~line.temp THEN
187
        INC(pos);
172
        movBool(line.modified, TRUE);
188
        WHILE getChar(line, pos) = TAB1 DO
173
        movBool(line.saved, FALSE)
189
            INC(pos)
174
    END;
190
        END
175
    line.modified := TRUE;
191
    END
Line 176... Line 192...
176
    line.saved := FALSE
192
    RETURN pos - n
177
END modify;
193
END tabWidth;
178
 
194
 
Line 186... Line 202...
186
    line.modified := FALSE;
202
    line.modified := FALSE;
187
    line.saved := TRUE
203
    line.saved := TRUE
188
END save;
204
END save;
Line 189... Line 205...
189
 
205
 
190
 
-
 
191
PROCEDURE getChar* (line: tLine; i: INTEGER): WCHAR;
-
 
192
VAR
-
 
193
    c: WCHAR;
206
 
194
BEGIN
-
 
195
    SYSTEM.GET(line.ptr + i*WCHAR_SIZE, c)
207
PROCEDURE isSpace* (c: WCHAR): BOOLEAN;
Line 196... Line 208...
196
    RETURN c
208
    RETURN (c = SPACE) OR (c = TAB) OR (c = TAB1)
197
END getChar;
209
END isSpace;
198
 
210
 
199
 
211
 
200
PROCEDURE trimLength* (line: tLine): INTEGER;
212
PROCEDURE trimLength* (line: tLine): INTEGER;
201
VAR
213
VAR
202
    i: INTEGER;
214
    i: INTEGER;
203
BEGIN
215
BEGIN
204
    i := line.length - 1;
216
    i := line.length - 1;
205
    WHILE (i >= 0) & (getChar(line, i) = SPACE) DO
217
    WHILE (i >= 0) & isSpace(getChar(line, i)) DO
Line 343... Line 355...
343
        free(line, ptr)
355
        free(line, ptr)
344
    END
356
    END
345
END delCharN;
357
END delCharN;
Line -... Line 358...
-
 
358
 
-
 
359
 
-
 
360
PROCEDURE fixTabs (line: tLine);
-
 
361
VAR
-
 
362
    i, n, k: INTEGER;
-
 
363
BEGIN
-
 
364
    i := 0;
-
 
365
    WHILE i < line.length DO
-
 
366
        n := tabWidth(line, i);
-
 
367
        IF n # 0 THEN
-
 
368
            k := tab - i MOD tab;
-
 
369
            IF n > k THEN
-
 
370
                delCharN(line, i + 1, n - k)
-
 
371
            ELSIF n < k THEN
-
 
372
                DEC(k, n);
-
 
373
                insert3(line, i + 1, k);
-
 
374
                WHILE k > 0 DO
-
 
375
                    setChar(line, i + 1, TAB1);
-
 
376
                    INC(i);
-
 
377
                    DEC(k)
-
 
378
                END
-
 
379
            END
-
 
380
        END;
-
 
381
        INC(i)
-
 
382
    END
-
 
383
END fixTabs;
-
 
384
 
-
 
385
 
-
 
386
PROCEDURE modify* (line: tLine);
-
 
387
BEGIN
-
 
388
    IF ~line.temp THEN
-
 
389
        movBool(line.modified, TRUE);
-
 
390
        movBool(line.saved, FALSE)
-
 
391
    END;
-
 
392
    line.modified := TRUE;
-
 
393
    line.saved := FALSE;
-
 
394
    fixTabs(line)
-
 
395
END modify;
346
 
396
 
347
 
397
 
348
PROCEDURE wrap* (line, nextLine: tLine; pos: INTEGER);
398
PROCEDURE wrap* (line, nextLine: tLine; pos: INTEGER);
349
VAR
399
VAR
350
    ptr1, ptr2: INTEGER;
400
    ptr1, ptr2: INTEGER;
Line 437... Line 487...
437
BEGIN
487
BEGIN
438
    pMaxLength := SYSTEM.ADR(maxLength)
488
    pMaxLength := SYSTEM.ADR(maxLength)
439
END setMaxLength;
489
END setMaxLength;
Line -... Line 490...
-
 
490
 
-
 
491
 
-
 
492
PROCEDURE setTabs* (_tab: INTEGER);
-
 
493
BEGIN
-
 
494
    IF _tab = 0 THEN
-
 
495
        _tab := 4
-
 
496
    END;
-
 
497
    tabs := _tab > 0;
-
 
498
    tab := ABS(_tab)
-
 
499
END setTabs;
440
 
500
 
441
 
501
 
442
BEGIN
502
BEGIN
443
    pMaxLength := 0
503
    pMaxLength := 0