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