Subversion Repositories Kolibri OS

Rev

Rev 9208 | Rev 9295 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9208 Rev 9210
Line 44... Line 44...
44
    inter = 2;
44
    inter = 2;
Line 45... Line 45...
45
 
45
 
Line 46... Line 46...
46
 
46
 
47
TYPE
47
TYPE
48
 
48
 
Line 49... Line 49...
49
    tPoint = RECORD
49
    tPoint* = RECORD
Line 50... Line 50...
50
        X, Y: INTEGER
50
        X*, Y*: INTEGER
Line 65... Line 65...
65
    tText* = POINTER TO RECORD (List.tList)
65
    tText* = POINTER TO RECORD (List.tList)
66
        cursor, select, select2: pPoint;
66
        cursor, select, select2: pPoint;
67
        scroll: tPoint;
67
        scroll: tPoint;
68
        CurX: INTEGER;
68
        CurX: INTEGER;
69
        modified*: BOOLEAN;
69
        modified*: BOOLEAN;
70
 
-
 
71
        edition*: tGuard;
70
        edition*: tGuard;
72
        comments, numbers*, guard,
71
        comments, numbers*, guard,
73
        search, cs, whole: BOOLEAN;
72
        search, cs, whole: BOOLEAN;
74
        curLine: tLine;
73
        curLine: tLine;
75
        fileName*: RW.tFileName;
-
 
76
        lang*: INTEGER;
74
        lang*: INTEGER;
77
        enc*: INTEGER;
-
 
78
        eol*: INTEGER;
75
        enc*, eol*: INTEGER;
79
        table: Search.IdxTable;
76
        table: Search.IdxTable;
80
        foundList: List.tList;
77
        foundList: List.tList;
81
        idxData: Search.tBuffer;
78
        idxData: Search.tBuffer;
82
        foundSel: INTEGER;
79
        foundSel: INTEGER;
83
        searchText: tString;
80
        searchText: tString;
84
        chLog*: ChangeLog.tLog;
81
        chLog*: ChangeLog.tLog;
85
        maxLength*: INTEGER
82
        maxLength*: INTEGER;
-
 
83
        fileName*: RW.tFileName
86
    END;
84
    END;
Line 87... Line 85...
87
 
85
 
Line 102... Line 100...
102
    padding: RECORD left, top: INTEGER END;
100
    padding: RECORD left, top: INTEGER END;
103
    size, textsize: tPoint;
101
    size, textsize: tPoint;
104
    charWidth, charHeight: INTEGER;
102
    charWidth, charHeight: INTEGER;
Line -... Line 103...
-
 
103
 
-
 
104
 
-
 
105
PROCEDURE setLang* (text: tText; lang: INTEGER);
-
 
106
BEGIN
-
 
107
    text.lang := lang;
-
 
108
    text.comments := TRUE;
-
 
109
    Lang.setCurLang(text.lang)
-
 
110
END setLang;
105
 
111
 
106
 
112
 
107
PROCEDURE setName* (text: tText; name: RW.tFileName);
113
PROCEDURE setName* (text: tText; name: RW.tFileName);
108
VAR
114
VAR
109
    ext: RW.tFileName;
115
    ext: RW.tFileName;
110
BEGIN
116
BEGIN
111
    text.fileName := name;
117
    text.fileName := name;
112
    U.getFileName(text.fileName, ext, ".");
-
 
113
    U.upcase(ext);
-
 
114
    IF ext = "OB07" THEN
-
 
115
        text.lang := Lang.langOberon
-
 
116
    ELSIF (ext = "C") OR (ext = "H") OR (ext = "CPP") THEN
-
 
117
        text.lang := Lang.langC
-
 
118
    ELSIF (ext = "PAS") OR (ext = "PP") THEN
-
 
119
        text.lang := Lang.langPascal
-
 
120
    ELSIF ext = "ASM" THEN
-
 
121
        text.lang := Lang.langFasm
-
 
122
    ELSIF ext = "LUA" THEN
-
 
123
        text.lang := Lang.langLua
-
 
124
    ELSIF ext = "INI" THEN
-
 
125
        text.lang := Lang.langIni
-
 
126
    ELSIF ext = "JSON" THEN
-
 
127
        text.lang := Lang.langJSON
-
 
128
    ELSE
-
 
129
        text.lang := Lang.langText
118
    U.getFileName(name, ext, ".");
130
    END;
119
    U.upcase(ext);
Line 131... Line -...
131
    Lang.setCurLang(text.lang)
-
 
132
END setName;
-
 
133
 
-
 
134
 
-
 
135
PROCEDURE setLang* (text: tText; lang: INTEGER);
-
 
136
BEGIN
-
 
137
    text.lang := lang;
-
 
138
    text.comments := TRUE;
-
 
139
    Lang.setCurLang(text.lang)
120
    setLang(text, Lang.getLang(ext))
140
END setLang;
121
END setName;
141
 
122
 
142
 
123
 
143
PROCEDURE getPos* (text: tText; VAR x, y: INTEGER);
124
PROCEDURE getPos* (text: tText; VAR x, y: INTEGER);
Line 420... Line 401...
420
                PrintLex(text, line, k, i, y, colors.num, backColor)
401
                PrintLex(text, line, k, i, y, colors.num, backColor)
421
            END
402
            END
Line 422... Line 403...
422
 
403
 
Line 423... Line 404...
423
        ELSIF (lang = Lang.langC) OR (lang = Lang.langJSON) THEN
404
        ELSIF (lang = Lang.langC) OR (lang = Lang.langJSON) THEN
424
 
405
 
425
        IF depth = 0 THEN
406
	        IF depth = 0 THEN
426
            IF c = "/" THEN
407
	            IF c = "/" THEN
427
                IF cond = 0 THEN
408
	                IF cond = 0 THEN
428
                    cond := 1
409
	                    cond := 1
429
                ELSE
410
	                ELSE
430
                    PrintLex(text, line, i - 1, n, y, colors.comment, backColor);
411
	                    PrintLex(text, line, i - 1, n, y, colors.comment, backColor);
431
                    cond := 0;
-
 
432
                    i := n
-
 
433
                END
-
 
434
            ELSIF (c = "*") & (cond = 1) THEN
-
 
435
                depth := 1;
-
 
436
                INC(i);
-
 
437
                PrintComment(text, line, depth, i, 2, y, backColor);
-
 
438
                cond := 0
-
 
439
            ELSIF U.isLetter(c) OR (c = "_") OR (c = "'") OR (c = '"') THEN
-
 
440
            	k := i;
-
 
441
            	IF (c = "'") OR (c = '"') THEN
-
 
442
            		String(text, line, i, y, backColor);
-
 
443
            	ELSE
-
 
444
            		ident(text, i, i - ORD((lang = Lang.langC) & (i > 0) & (getChar(line, i - 1) = "#")), y, line, backColor, Lang.isCS(lang))
-
 
445
            	END;
-
 
446
                IF lang = Lang.langJSON THEN
-
 
447
	                WHILE Lines.isSpace(getChar(line, i + 1)) DO
-
 
448
	                	INC(i)
-
 
449
	                END;
-
 
450
	                IF getChar(line, i + 1) = ":" THEN
412
	                    cond := 0;
-
 
413
	                    i := n
-
 
414
	                END
-
 
415
	            ELSIF (c = "*") & (cond = 1) THEN
-
 
416
	                depth := 1;
-
 
417
	                INC(i);
-
 
418
	                PrintComment(text, line, depth, i, 2, y, backColor);
-
 
419
	                cond := 0
-
 
420
	            ELSIF U.isLetter(c) OR (c = "_") OR (c = "'") OR (c = '"') THEN
-
 
421
	            	k := i;
-
 
422
	            	IF (c = "'") OR (c = '"') THEN
-
 
423
	            		String(text, line, i, y, backColor);
-
 
424
	            	ELSE
-
 
425
	            		ident(text, i, i - ORD((lang = Lang.langC) & (i > 0) & (getChar(line, i - 1) = "#")), y, line, backColor, Lang.isCS(lang))
-
 
426
	            	END;
-
 
427
	                IF lang = Lang.langJSON THEN
-
 
428
		                WHILE Lines.isSpace(getChar(line, i + 1)) DO
-
 
429
		                	INC(i)
-
 
430
		                END;
-
 
431
		                IF getChar(line, i + 1) = ":" THEN
451
	                	PrintLex(text, line, k, i, y, colors.key1, backColor)
432
		                	PrintLex(text, line, k, i, y, colors.key1, backColor)
452
	                END
433
		                END
453
                END;
434
	                END;
454
                cond := 0
435
	                cond := 0
455
            ELSIF U.isDigit(c) THEN
436
	            ELSIF U.isDigit(c) THEN
456
                k := i;
437
	                k := i;
457
                INC(i);
438
	                INC(i);
458
                c := getChar(line, i);
439
	                c := getChar(line, i);
459
                IF c = "." THEN
440
	                IF c = "." THEN
460
                    DEC(i);
441
	                    DEC(i);
461
                    c := getChar(line, i)
442
	                    c := getChar(line, i)
462
                END;
443
	                END;
463
                IF (cap(c) = "X") & (getChar(line, i - 1) = "0") THEN
444
	                IF (cap(c) = "X") & (getChar(line, i - 1) = "0") THEN
464
                    REPEAT
445
	                    REPEAT
465
                        INC(i);
446
	                        INC(i);
466
                        c := getChar(line, i)
447
	                        c := getChar(line, i)
467
                    UNTIL ~U.isHex(cap(c));
448
	                    UNTIL ~U.isHex(cap(c));
468
                    IF UL(c) THEN
449
	                    IF UL(c) THEN
469
                        INC(i)
450
	                        INC(i)
470
                    END
451
	                    END
471
                ELSIF UL(c) THEN
452
	                ELSIF UL(c) THEN
472
                    INC(i)
453
	                    INC(i)
473
                ELSIF U.isDigit(c) THEN
454
	                ELSIF U.isDigit(c) THEN
474
                    REPEAT
455
	                    REPEAT
475
                        INC(i)
456
	                        INC(i)
476
                    UNTIL ~U.isDigit(getChar(line, i));
457
	                    UNTIL ~U.isDigit(getChar(line, i));
477
                    c := getChar(line, i);
458
	                    c := getChar(line, i);
478
                    IF UL(c) THEN
459
	                    IF UL(c) THEN
479
                        INC(i)
460
	                        INC(i)
480
                    ELSIF c = "." THEN
461
	                    ELSIF c = "." THEN
481
                        INC(i);
462
	                        INC(i);
482
                        WHILE U.isDigit(getChar(line, i)) DO
463
	                        WHILE U.isDigit(getChar(line, i)) DO
483
                            INC(i)
464
	                            INC(i)
484
                        END;
465
	                        END;
485
                        c := getChar(line, i);
466
	                        c := getChar(line, i);
486
                        IF cap(c) = "E" THEN
467
	                        IF cap(c) = "E" THEN
487
                            INC(i);
468
	                            INC(i);
488
                            c := getChar(line, i);
469
	                            c := getChar(line, i);
489
                            IF (c = "+") OR (c = "-") THEN
470
	                            IF (c = "+") OR (c = "-") THEN
490
                                INC(i)
471
	                                INC(i)
491
                            END;
472
	                            END;
492
                            IF U.isDigit(getChar(line, i)) THEN
473
	                            IF U.isDigit(getChar(line, i)) THEN
493
                                WHILE U.isDigit(getChar(line, i)) DO
474
	                                WHILE U.isDigit(getChar(line, i)) DO
494
                                    INC(i)
475
	                                    INC(i)
495
                                END;
476
	                                END;
496
                                c := getChar(line, i);
477
	                                c := getChar(line, i);
497
                                IF FL(c) THEN
478
	                                IF FL(c) THEN
498
                                    INC(i)
479
	                                    INC(i)
499
                                END
480
	                                END
500
                            END
481
	                            END
501
                        ELSIF FL(c) THEN
482
	                        ELSIF FL(c) THEN
502
                            INC(i)
483
	                            INC(i)
503
                        END
484
	                        END
504
                    END
485
	                    END
505
                END;
486
	                END;
506
                DEC(i);
487
	                DEC(i);
507
                PrintLex(text, line, k, i, y, colors.num, backColor);
488
	                PrintLex(text, line, k, i, y, colors.num, backColor);
508
                cond := 0
489
	                cond := 0
509
            ELSE
490
	            ELSE
510
                cond := 0
491
	                cond := 0
511
            END
492
	            END
512
        ELSIF depth = 1 THEN
493
	        ELSIF depth = 1 THEN
513
            IF c = "*" THEN
494
	            IF c = "*" THEN
514
                cond := 1
495
	                cond := 1
515
            ELSIF (c = "/") & (cond = 1) THEN
496
	            ELSIF (c = "/") & (cond = 1) THEN
516
                cond := 0;
497
	                cond := 0;
517
                depth := 0
498
	                depth := 0
518
            ELSE
499
	            ELSE
519
                cond := 0
500
	                cond := 0
Line 520... Line 501...
520
            END
501
	            END
Line 521... Line 502...
521
        END;
502
	        END
522
 
503
 
523
        ELSIF lang = Lang.langOberon THEN
504
        ELSIF lang = Lang.langOberon THEN
524
 
505
 
525
        IF (depth = 0) & (c = "/") THEN
506
	        IF (depth = 0) & (c = "/") THEN
526
            IF cond = 3 THEN
507
	            IF cond = 3 THEN
527
                PrintLex(text, line, i - 1, n, y, colors.comment, backColor);
508
	                PrintLex(text, line, i - 1, n, y, colors.comment, backColor);
528
                cond := 0;
509
	                cond := 0;
529
                i := n
510
	                i := n
530
            ELSE
511
	            ELSE
531
                cond := 3
512
	                cond := 3
532
            END
513
	            END
533
        ELSIF (depth = 0) & ((c = "'") OR (c = '"')) THEN
514
	        ELSIF (depth = 0) & ((c = "'") OR (c = '"')) THEN
534
            String(text, line, i, y, backColor);
515
	            String(text, line, i, y, backColor);
535
            cond := 0
516
	            cond := 0
536
        ELSIF (depth = 0) & U.isDigit(c) THEN
517
	        ELSIF (depth = 0) & U.isDigit(c) THEN
537
            color := colors.num;
518
	            color := colors.num;
538
            k := i;
519
	            k := i;
539
            INC(i);
520
	            INC(i);
540
            WHILE U.isHex(getChar(line, i)) DO
521
	            WHILE U.isHex(getChar(line, i)) DO
541
                INC(i)
522
	                INC(i)
542
            END;
523
	            END;
543
            IF i <= n THEN
524
	            IF i <= n THEN
544
                IF getChar(line, i) = "." THEN
525
	                IF getChar(line, i) = "." THEN
545
                    INC(i);
526
	                    INC(i);
546
                    IF getChar(line, i) = "." THEN
527
	                    IF getChar(line, i) = "." THEN
547
                        DEC(i)
528
	                        DEC(i)
548
                    END;
529
	                    END;
549
                    WHILE U.isDigit(getChar(line, i)) DO
530
	                    WHILE U.isDigit(getChar(line, i)) DO
550
                        INC(i)
531
	                        INC(i)
551
                    END;
532
	                    END;
552
                    IF getChar(line, i) = "E" THEN
533
	                    IF getChar(line, i) = "E" THEN
553
                        INC(i);
534
	                        INC(i);
554
                        IF (getChar(line, i) = "+") OR (getChar(line, i) = "-") THEN
535
	                        IF (getChar(line, i) = "+") OR (getChar(line, i) = "-") THEN
555
                            INC(i)
536
	                            INC(i)
556
                        END;
537
	                        END;
557
                        WHILE U.isDigit(getChar(line, i)) DO
538
	                        WHILE U.isDigit(getChar(line, i)) DO
558
                            INC(i)
539
	                            INC(i)
559
                        END
540
	                        END
560
                    END
541
	                    END
561
                ELSIF getChar(line, i) = "H" THEN
542
	                ELSIF getChar(line, i) = "H" THEN
562
                    INC(i)
543
	                    INC(i)
563
                ELSIF getChar(line, i) = "X" THEN
544
	                ELSIF getChar(line, i) = "X" THEN
564
                    color := colors.string;
545
	                    color := colors.string;
565
                    INC(i)
546
	                    INC(i)
566
                END
547
	                END
567
            END;
548
	            END;
568
            DEC(i);
549
	            DEC(i);
569
            PrintLex(text, line, k, i, y, color, backColor);
550
	            PrintLex(text, line, k, i, y, color, backColor);
570
            cond := 0
551
	            cond := 0
571
        ELSIF (depth = 0) & (U.isLetter(c) OR (c = "_")) THEN
552
	        ELSIF (depth = 0) & (U.isLetter(c) OR (c = "_")) THEN
572
            ident(text, i, i, y, line, backColor, Lang.isCS(lang));
553
	            ident(text, i, i, y, line, backColor, Lang.isCS(lang));
573
            cond := 0
554
	            cond := 0
574
        ELSIF c = "(" THEN
555
	        ELSIF c = "(" THEN
575
            cond := 1
556
	            cond := 1
576
        ELSIF c = "*" THEN
557
	        ELSIF c = "*" THEN
577
            IF cond = 1 THEN
558
	            IF cond = 1 THEN
578
                INC(depth);
559
	                INC(depth);
579
                INC(i);
560
	                INC(i);
580
                PrintComment(text, line, depth, i, 2, y, backColor);
561
	                PrintComment(text, line, depth, i, 2, y, backColor);
581
                cond := 0
562
	                cond := 0
582
            ELSE
563
	            ELSE
583
                cond := 2
564
	                cond := 2
584
            END
565
	            END
585
        ELSIF c = ")" THEN
566
	        ELSIF c = ")" THEN
586
            IF cond = 2 THEN
567
	            IF cond = 2 THEN
587
                IF depth > 0 THEN
568
	                IF depth > 0 THEN
588
                    DEC(depth)
569
	                    DEC(depth)
589
                END
570
	                END
590
            END;
571
	            END;
Line 591... Line 572...
591
            cond := 0
572
	            cond := 0
Line 592... Line 573...
592
        ELSE
573
	        ELSE
593
            cond := 0
574
	            cond := 0
594
        END
575
	        END
595
 
576
 
596
        ELSIF lang = Lang.langLua THEN
577
        ELSIF lang = Lang.langLua THEN
597
 
578
 
598
        IF depth = 0 THEN
579
	        IF depth = 0 THEN
599
            IF c = "-" THEN
580
	            IF c = "-" THEN
600
                IF cond = 1 THEN
581
	                IF cond = 1 THEN
601
                    IF Lang.LuaLong(line, i + 1) >= 0 THEN
582
	                    IF Lang.LuaLong(line, i + 1) >= 0 THEN
602
                        depth := Lang.LuaLong(line, i + 1)*2 + 1;
583
	                        depth := Lang.LuaLong(line, i + 1)*2 + 1;
603
                        INC(i);
584
	                        INC(i);
604
                        PrintComment(text, line, depth, i, 2, y, backColor)
585
	                        PrintComment(text, line, depth, i, 2, y, backColor)
605
                    ELSE
586
	                    ELSE
606
                        PrintLex(text, line, i - 1, n, y, colors.comment, backColor);
587
	                        PrintLex(text, line, i - 1, n, y, colors.comment, backColor);
607
                        i := n
588
	                        i := n
608
                    END;
589
	                    END;
609
                    cond := 0
590
	                    cond := 0
610
                ELSE
591
	                ELSE
611
                    cond := 1
592
	                    cond := 1
612
                END
593
	                END
613
            ELSIF c = "[" THEN
594
	            ELSIF c = "[" THEN
614
                cond := 0;
595
	                cond := 0;
615
                k := Lang.LuaLong(line, i);
596
	                k := Lang.LuaLong(line, i);
616
                IF k >= 0 THEN
597
	                IF k >= 0 THEN
617
                    depth := (k + 1)*2;
598
	                    depth := (k + 1)*2;
618
                    INC(i, 2);
599
	                    INC(i, 2);
619
                    PrintComment(text, line, depth, i, 2, y, backColor);
600
	                    PrintComment(text, line, depth, i, 2, y, backColor);
620
                    cond := 0
601
	                    cond := 0
621
                END
602
	                END
622
            ELSIF (c = "'") OR (c = '"') THEN
603
	            ELSIF (c = "'") OR (c = '"') THEN
623
                String(text, line, i, y, backColor);
604
	                String(text, line, i, y, backColor);
624
                cond := 0
605
	                cond := 0
625
            ELSIF U.isDigit(c) THEN
606
	            ELSIF U.isDigit(c) THEN
626
                k := i;
607
	                k := i;
627
                IF (c = "0") & (cap(getChar(line, i + 1)) = "X") THEN
608
	                IF (c = "0") & (cap(getChar(line, i + 1)) = "X") THEN
628
                    isDgt := U.isHex;
609
	                    isDgt := U.isHex;
629
                    hex := TRUE;
610
	                    hex := TRUE;
630
                    INC(i, 2)
611
	                    INC(i, 2)
631
                ELSE
612
	                ELSE
632
                    isDgt := U.isDigit;
613
	                    isDgt := U.isDigit;
633
                    hex := FALSE
614
	                    hex := FALSE
634
                END;
615
	                END;
635
                WHILE isDgt(cap(getChar(line, i))) DO
616
	                WHILE isDgt(cap(getChar(line, i))) DO
636
                    INC(i)
617
	                    INC(i)
637
                END;
618
	                END;
638
                IF getChar(line, i) = "." THEN
619
	                IF getChar(line, i) = "." THEN
639
                    INC(i);
620
	                    INC(i);
640
                    IF getChar(line, i) = "." THEN
621
	                    IF getChar(line, i) = "." THEN
641
                        DEC(i)
622
	                        DEC(i)
642
                    END;
623
	                    END;
643
                    WHILE isDgt(cap(getChar(line, i))) DO
624
	                    WHILE isDgt(cap(getChar(line, i))) DO
644
                        INC(i)
625
	                        INC(i)
645
                    END
626
	                    END
646
                END;
627
	                END;
647
                IF (cap(getChar(line, i)) = "E") OR hex & (cap(getChar(line, i)) = "P") THEN
628
	                IF (cap(getChar(line, i)) = "E") OR hex & (cap(getChar(line, i)) = "P") THEN
648
                    INC(i);
629
	                    INC(i);
649
                    IF (getChar(line, i) = "-") OR (getChar(line, i) = "+") THEN
630
	                    IF (getChar(line, i) = "-") OR (getChar(line, i) = "+") THEN
650
                        INC(i)
631
	                        INC(i)
651
                    END;
632
	                    END;
652
                    WHILE isDgt(cap(getChar(line, i))) DO
633
	                    WHILE isDgt(cap(getChar(line, i))) DO
653
                        INC(i)
634
	                        INC(i)
654
                    END
635
	                    END
655
                END;
636
	                END;
656
                DEC(i);
637
	                DEC(i);
657
                PrintLex(text, line, k, i, y, colors.num, backColor);
638
	                PrintLex(text, line, k, i, y, colors.num, backColor);
658
                cond := 0
639
	                cond := 0
659
            ELSIF U.isLetter(c) OR (c = "_") THEN
640
	            ELSIF U.isLetter(c) OR (c = "_") THEN
660
                ident(text, i, i, y, line, backColor, Lang.isCS(lang));
641
	                ident(text, i, i, y, line, backColor, Lang.isCS(lang));
661
                cond := 0
642
	                cond := 0
662
            ELSE
643
	            ELSE
663
                cond := 0
644
	                cond := 0
664
            END
645
	            END
665
 
646
 
666
        ELSIF depth > 0 THEN
647
	        ELSIF depth > 0 THEN
667
            IF (cond = 0) & (c = "]") THEN
648
	            IF (cond = 0) & (c = "]") THEN
668
                cond := 1
649
	                cond := 1
669
            ELSIF (cond >= 1) & (c = "=") THEN
650
	            ELSIF (cond >= 1) & (c = "=") THEN
670
                INC(cond)
651
	                INC(cond)
671
            ELSIF (cond >= 1) & (c = "]") & (cond * 2 - depth MOD 2 = depth) THEN
652
	            ELSIF (cond >= 1) & (c = "]") & (cond * 2 - depth MOD 2 = depth) THEN
Line 672... Line 653...
672
                depth := 0;
653
	                depth := 0;
Line 673... Line 654...
673
                cond := 0
654
	                cond := 0
674
            ELSE
655
	            ELSE
675
                cond := 0
656
	                cond := 0
676
            END
657
	            END
677
        END
658
	        END
678
 
659
 
679
        ELSIF lang = Lang.langPascal THEN
660
        ELSIF lang = Lang.langPascal THEN
680
 
661
 
681
        IF depth = 0 THEN
662
	        IF depth = 0 THEN
682
            IF c = "(" THEN
663
	            IF c = "(" THEN
683
                cond := 1
664
	                cond := 1
684
            ELSIF (c = "*") & (cond = 1) THEN
665
	            ELSIF (c = "*") & (cond = 1) THEN
685
                depth := 2;
666
	                depth := 2;
686
                INC(i);
667
	                INC(i);
687
                PrintComment(text, line, depth, i, 2, y, backColor);
668
	                PrintComment(text, line, depth, i, 2, y, backColor);
688
                cond := 0
669
	                cond := 0
689
            ELSIF c = "/" THEN
670
	            ELSIF c = "/" THEN
690
                IF cond = 2 THEN
671
	                IF cond = 2 THEN
691
                    PrintLex(text, line, i - 1, n, y, colors.comment, backColor);
672
	                    PrintLex(text, line, i - 1, n, y, colors.comment, backColor);
692
                    cond := 0;
673
	                    cond := 0;
693
                    i := n
674
	                    i := n
694
                ELSE
675
	                ELSE
695
                    cond := 2
676
	                    cond := 2
696
                END
677
	                END
697
            ELSIF c = "'" THEN
678
	            ELSIF c = "'" THEN
698
                String(text, line, i, y, backColor);
679
	                String(text, line, i, y, backColor);
699
                cond := 0
680
	                cond := 0
700
            ELSIF c = "{" THEN
681
	            ELSIF c = "{" THEN
701
                IF getChar(line, i + 1) = "$" THEN
682
	                IF getChar(line, i + 1) = "$" THEN
702
                    depth := 3
683
	                    depth := 3
703
                ELSE
684
	                ELSE
704
                    depth := 1
685
	                    depth := 1
705
                END;
686
	                END;
706
                INC(i);
687
	                INC(i);
707
                PrintComment(text, line, depth, i, 1, y, backColor);
688
	                PrintComment(text, line, depth, i, 1, y, backColor);
708
                cond := 0
689
	                cond := 0
709
            ELSIF c = "#" THEN
690
	            ELSIF c = "#" THEN
710
                k := i;
691
	                k := i;
711
                INC(i);
692
	                INC(i);
712
                WHILE U.isDigit(getChar(line, i)) DO
693
	                WHILE U.isDigit(getChar(line, i)) DO
713
                    INC(i)
694
	                    INC(i)
714
                END;
695
	                END;
715
                DEC(i);
696
	                DEC(i);
716
                PrintLex(text, line, k, i, y, colors.string, backColor);
697
	                PrintLex(text, line, k, i, y, colors.string, backColor);
717
                cond := 0
698
	                cond := 0
718
            ELSIF c = "$" THEN
699
	            ELSIF c = "$" THEN
719
                IF (i > 0 ) & (getChar(line, i - 1) = "#") THEN
700
	                IF (i > 0 ) & (getChar(line, i - 1) = "#") THEN
720
                    color := colors.string
701
	                    color := colors.string
721
                ELSE
702
	                ELSE
722
                    color := colors.num
703
	                    color := colors.num
723
                END;
704
	                END;
724
                k := i;
705
	                k := i;
725
                INC(i);
706
	                INC(i);
726
                WHILE U.isHex(cap(getChar(line, i))) DO
707
	                WHILE U.isHex(cap(getChar(line, i))) DO
727
                    INC(i)
708
	                    INC(i)
728
                END;
709
	                END;
729
                DEC(i);
710
	                DEC(i);
730
                PrintLex(text, line, k, i, y, color, backColor);
711
	                PrintLex(text, line, k, i, y, color, backColor);
731
                cond := 0
712
	                cond := 0
732
            ELSIF U.isDigit(c) THEN
713
	            ELSIF U.isDigit(c) THEN
733
                k := i;
714
	                k := i;
734
                WHILE U.isDigit(getChar(line, i)) DO
715
	                WHILE U.isDigit(getChar(line, i)) DO
735
                    INC(i)
716
	                    INC(i)
736
                END;
717
	                END;
737
                IF getChar(line, i) = "." THEN
718
	                IF getChar(line, i) = "." THEN
738
                    INC(i);
719
	                    INC(i);
739
                    IF getChar(line, i) = "." THEN
720
	                    IF getChar(line, i) = "." THEN
740
                        DEC(i)
721
	                        DEC(i)
741
                    END;
722
	                    END;
742
                    WHILE U.isDigit(getChar(line, i)) DO
723
	                    WHILE U.isDigit(getChar(line, i)) DO
743
                        INC(i)
724
	                        INC(i)
744
                    END;
725
	                    END;
745
                    IF cap(getChar(line, i)) = "E" THEN
726
	                    IF cap(getChar(line, i)) = "E" THEN
746
                        INC(i);
727
	                        INC(i);
747
                        IF (getChar(line, i) = "-") OR (getChar(line, i) = "+") THEN
728
	                        IF (getChar(line, i) = "-") OR (getChar(line, i) = "+") THEN
748
                            INC(i)
729
	                            INC(i)
749
                        END;
730
	                        END;
750
                        WHILE U.isDigit(getChar(line, i)) DO
731
	                        WHILE U.isDigit(getChar(line, i)) DO
751
                            INC(i)
732
	                            INC(i)
752
                        END
733
	                        END
753
                    END
734
	                    END
754
                END;
735
	                END;
755
                DEC(i);
736
	                DEC(i);
756
                PrintLex(text, line, k, i, y, colors.num, backColor);
737
	                PrintLex(text, line, k, i, y, colors.num, backColor);
757
                cond := 0
738
	                cond := 0
758
            ELSIF (U.isLetter(c) OR (c = "_")) THEN
739
	            ELSIF (U.isLetter(c) OR (c = "_")) THEN
759
                ident(text, i, i, y, line, backColor, Lang.isCS(lang));
740
	                ident(text, i, i, y, line, backColor, Lang.isCS(lang));
760
                cond := 0
741
	                cond := 0
761
            ELSE
742
	            ELSE
762
                cond := 0
743
	                cond := 0
763
            END
744
	            END
764
        ELSIF depth IN {1, 3} THEN
745
	        ELSIF depth IN {1, 3} THEN
765
            IF c = "}" THEN
746
	            IF c = "}" THEN
766
                depth := 0
747
	                depth := 0
767
            END
748
	            END
768
        ELSIF depth = 2 THEN
749
	        ELSIF depth = 2 THEN
769
            IF c = "*" THEN
750
	            IF c = "*" THEN
Line 770... Line 751...
770
                cond := 1
751
	                cond := 1
Line 771... Line 752...
771
            ELSIF (c = ")") & (cond = 1) THEN
752
	            ELSIF (c = ")") & (cond = 1) THEN
772
                depth := 0;
753
	                depth := 0;
773
                cond := 0
754
	                cond := 0
774
            ELSE
755
	            ELSE
775
                cond := 0
756
	                cond := 0
776
            END
757
	            END
777
        END
758
	        END
778
 
759
 
779
        ELSIF lang = Lang.langIni THEN
760
        ELSIF lang = Lang.langIni THEN
780
 
761
 
781
        IF depth = 0 THEN
762
	        IF depth = 0 THEN
782
            IF (c = ";") OR (c = "#") THEN
763
	            IF (c = ";") OR (c = "#") THEN
783
                PrintLex(text, line, i, n, y, colors.comment, backColor);
764
	                PrintLex(text, line, i, n, y, colors.comment, backColor);
784
                i := n
765
	                i := n
785
            ELSIF c = '"' THEN
766
	            ELSIF c = '"' THEN
786
                String(text, line, i, y, backColor)
767
	                String(text, line, i, y, backColor)
787
            ELSIF c = "[" THEN
768
	            ELSIF c = "[" THEN
788
                depth := 1;
769
	                depth := 1;
789
                INC(i);
770
	                INC(i);
790
                PrintComment(text, line, depth, i, 1, y, backColor)
771
	                PrintComment(text, line, depth, i, 1, y, backColor)
791
            ELSIF U.isDigit(c) THEN
772
	            ELSIF U.isDigit(c) THEN
792
                k := i;
773
	                k := i;
793
                WHILE U.isDigit(getChar(line, i)) DO
774
	                WHILE U.isDigit(getChar(line, i)) DO
794
                    INC(i)
775
	                    INC(i)
795
                END;
776
	                END;
Line 796... Line 777...
796
                DEC(i);
777
	                DEC(i);
797
                PrintLex(text, line, k, i, y, colors.num, backColor)
778
	                PrintLex(text, line, k, i, y, colors.num, backColor)
798
            ELSIF (U.isLetter(c) OR (c = "_")) THEN
779
	            ELSIF (U.isLetter(c) OR (c = "_")) THEN
799
                ident(text, i, i, y, line, backColor, Lang.isCS(lang))
780
	                ident(text, i, i, y, line, backColor, Lang.isCS(lang))
Line 2087... Line 2068...
2087
    y := padding.top + inter DIV 2;
2068
    y := padding.top + inter DIV 2;
2088
    n := text.scroll.Y;
2069
    n := text.scroll.Y;
2089
    line := getLine(text, n);
2070
    line := getLine(text, n);
2090
    firstLine := line;
2071
    firstLine := line;
2091
    cnt := 0;
2072
    cnt := 0;
2092
    WHILE (line # NIL) & (cnt <= textsize.Y) DO
2073
    WHILE (line # NIL) & (cnt < textsize.Y) DO
2093
        backColor := colors.back;
2074
        backColor := colors.back;
2094
        IF (line = text.curLine) & ~selected(text) THEN
2075
        IF (line = text.curLine) & ~selected(text) THEN
2095
            G.SetColor(canvas, colors.curline);
2076
            G.SetColor(canvas, colors.curline);
2096
            G.FillRect(canvas, padding.left - 2, y - inter DIV 2, size.X - 1, y - inter DIV 2 + charHeight);
2077
            G.FillRect(canvas, padding.left - 2, y - inter DIV 2, size.X - 1, y - inter DIV 2 + charHeight);
2097
            backColor := colors.curline
2078
            backColor := colors.curline
Line 2120... Line 2101...
2120
    G.SetColor(canvas, colors.numback);
2101
    G.SetColor(canvas, colors.numback);
2121
    G.FillRect(canvas, 0, 0, padding.left - pad_left (*+ 1*), size.Y - 1);
2102
    G.FillRect(canvas, 0, 0, padding.left - pad_left (*+ 1*), size.Y - 1);
2122
    line := firstLine;
2103
    line := firstLine;
2123
    SetColor(colors.numtext, colors.numback);
2104
    SetColor(colors.numtext, colors.numback);
2124
    y := padding.top + inter DIV 2;
2105
    y := padding.top + inter DIV 2;
2125
    n := MIN(text.scroll.Y + textsize.Y + 1, text.count);
2106
    n := MIN(text.scroll.Y + textsize.Y, text.count);
2126
    FOR i := text.scroll.Y + 1 TO n DO
2107
    FOR i := text.scroll.Y + 1 TO n DO
2127
        IF text.numbers THEN
2108
        IF text.numbers THEN
2128
            IF (i MOD 10 = 0) OR (i - 1 = text.cursor.Y) OR line.label THEN
2109
            IF (i MOD 10 = 0) OR (i - 1 = text.cursor.Y) OR line.label THEN
2129
                U.int2str(i, s);
2110
                U.int2str(i, s);
2130
                G.TextOut2(canvas, (numWidth - U.lg10(i) - 1)*wNum - wNum DIV 2, y, s, LENGTH(s))
2111
                G.TextOut2(canvas, (numWidth - U.lg10(i) - 1)*wNum - wNum DIV 2, y, s, LENGTH(s))
Line 2145... Line 2126...
2145
 
2126
 
2146
    IF text.searchText # "" THEN
2127
    IF text.searchText # "" THEN
2147
        cnt := 0;
2128
        cnt := 0;
2148
        line := firstLine;
2129
        line := firstLine;
2149
        lastLine := line;
2130
        lastLine := line;
2150
        WHILE (line # NIL) & (cnt <= textsize.Y) DO
2131
        WHILE (line # NIL) & (cnt < textsize.Y) DO
2151
            lastLine := line;
2132
            lastLine := line;
2152
            NextLine(line);
2133
            NextLine(line);
2153
            INC(cnt)
2134
            INC(cnt)
2154
        END;
2135
        END;