1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185
|
<comment># Copyright (c) 2006 Hans Jeuken. All rights reserved.</comment><comment>
</comment><comment># This program is free software; you can redistribute it and/or</comment><comment>
</comment><comment># modify it under the same terms as Perl itself.</comment><comment>
</comment><normal>
</normal><keyword>package</keyword><normal> </normal><function>Syntax::Highlight</function><normal>::</normal><function>Engine</function><normal>::</normal><function>Kate</function><normal>::</normal><function>Template</function><normal>;</normal><normal>
</normal><normal>
</normal><keyword>our</keyword><normal> </normal><datatype>$VERSION</datatype><normal> = </normal><operator>'</operator><string>0.06</string><operator>'</operator><normal>;</normal><normal>
</normal><normal>
</normal><keyword>use</keyword><normal> </normal><keyword>strict</keyword><normal>;</normal><normal>
</normal><keyword>use</keyword><normal> Carp </normal><operator>qw(</operator><normal>cluck</normal><operator>)</operator><normal>;</normal><normal>
</normal><keyword>use</keyword><normal> </normal><function>Data::Dumper</function><normal>;</normal><normal>
</normal><normal>
</normal><comment>#my $regchars = '\\^.$|()[]*+?';</comment><comment>
</comment><normal>
</normal><keyword>sub </keyword><function>new</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$proto</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$class</datatype><normal> = </normal><function>ref</function><normal>(</normal><datatype>$proto</datatype><normal>) || </normal><datatype>$proto</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>%args</datatype><normal> = (</normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$debug</datatype><normal> = </normal><function>delete</function><normal> </normal><datatype>$args</datatype><normal>{</normal><operator>'</operator><string>debug</string><operator>'</operator><normal>};</normal><normal>
</normal><normal> </normal><keyword>unless</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$debug</datatype><normal>)) { </normal><datatype>$debug</datatype><normal> = 0 };</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$substitutions</datatype><normal> = </normal><function>delete</function><normal> </normal><datatype>$args</datatype><normal>{</normal><operator>'</operator><string>substitutions</string><operator>'</operator><normal>};</normal><normal>
</normal><normal> </normal><keyword>unless</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$substitutions</datatype><normal>)) { </normal><datatype>$substitutions</datatype><normal> = {} };</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$formattable</datatype><normal> = </normal><function>delete</function><normal> </normal><datatype>$args</datatype><normal>{</normal><operator>'</operator><string>format_table</string><operator>'</operator><normal>};</normal><normal>
</normal><normal> </normal><keyword>unless</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$formattable</datatype><normal>)) { </normal><datatype>$formattable</datatype><normal> = {} };</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$engine</datatype><normal> = </normal><function>delete</function><normal> </normal><datatype>$args</datatype><normal>{</normal><operator>'</operator><string>engine</string><operator>'</operator><normal>};</normal><normal>
</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = {};</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>attributes</string><operator>'</operator><normal>} = {},</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>captured</string><operator>'</operator><normal>} = [];</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>contextdata</string><operator>'</operator><normal>} = {};</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>basecontext</string><operator>'</operator><normal>} = </normal><operator>''</operator><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>debug</string><operator>'</operator><normal>} = </normal><datatype>$debug</datatype><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>deliminators</string><operator>'</operator><normal>} = </normal><operator>''</operator><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>engine</string><operator>'</operator><normal>} = </normal><operator>''</operator><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>format_table</string><operator>'</operator><normal>} = </normal><datatype>$formattable</datatype><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>keywordcase</string><operator>'</operator><normal>} = </normal><float>1</float><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>lastchar</string><operator>'</operator><normal>} = </normal><operator>''</operator><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>linesegment</string><operator>'</operator><normal>} = </normal><operator>''</operator><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>lists</string><operator>'</operator><normal>} = {};</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>linestart</string><operator>'</operator><normal>} = </normal><float>1</float><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>out</string><operator>'</operator><normal>} = [];</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>plugins</string><operator>'</operator><normal>} = {};</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>snippet</string><operator>'</operator><normal>} = </normal><operator>''</operator><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>snippetattribute</string><operator>'</operator><normal>} = </normal><operator>''</operator><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>stack</string><operator>'</operator><normal>} = [];</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>substitutions</string><operator>'</operator><normal>} = </normal><datatype>$substitutions</datatype><normal>;</normal><normal>
</normal><normal> </normal><function>bless</function><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$class</datatype><normal>);</normal><normal>
</normal><normal> </normal><keyword>unless</keyword><normal> (</normal><function>defined</function><normal> </normal><datatype>$engine</datatype><normal>) { </normal><datatype>$engine</datatype><normal> = </normal><datatype>$self</datatype><normal> };</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>engine</datatype><normal>(</normal><datatype>$engine</datatype><normal>);</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>initialize</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>;</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>attributes</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@_</datatype><normal>) { </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>attributes</string><operator>'</operator><normal>} = </normal><function>shift</function><normal>; };</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>attributes</string><operator>'</operator><normal>};</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>basecontext</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@_</datatype><normal>) { </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>basecontext</string><operator>'</operator><normal>} = </normal><function>shift</function><normal>; };</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>basecontext</string><operator>'</operator><normal>};</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>captured</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$c</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$c</datatype><normal>)) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$t</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>engine</datatype><normal>-></normal><datatype>stackTop</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$n</datatype><normal> = 0;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>@o</datatype><normal> = ();</normal><normal>
</normal><normal> </normal><keyword>while</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$c</datatype><normal>->[</normal><datatype>$n</datatype><normal>])) {</normal><normal>
</normal><normal> </normal><function>push</function><normal> </normal><datatype>@o</datatype><normal>, </normal><datatype>$c</datatype><normal>->[</normal><datatype>$n</datatype><normal>];</normal><normal>
</normal><normal> </normal><datatype>$n</datatype><normal> ++;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@o</datatype><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$t</datatype><normal>->[</normal><float>2</float><normal>] = \</normal><datatype>@o</datatype><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> };</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>capturedGet</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$num</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$s</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>engine</datatype><normal>-></normal><datatype>stack</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$s</datatype><normal>->[</normal><float>1</float><normal>])) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$c</datatype><normal> = </normal><datatype>$s</datatype><normal>->[</normal><float>1</float><normal>]</normal><operator>-</operator><normal>>[</normal><float>2</float><normal>];</normal><normal>
</normal><normal> </normal><datatype>$num</datatype><normal> -</normal><operator>-</operator><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$c</datatype><normal>)) {</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$c</datatype><normal>->[</normal><datatype>$num</datatype><normal>])) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$r</datatype><normal> = </normal><datatype>$c</datatype><normal>->[</normal><datatype>$num</datatype><normal>];</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$r</datatype><normal>;</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><function>warn</function><normal> </normal><operator>"</operator><string>capture number </string><datatype>$num</datatype><string> not defined</string><operator>"</operator><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><function>warn</function><normal> </normal><operator>"</operator><string>dynamic substitution is called for but nothing to substitute</string><char>\n</char><operator>"</operator><normal>;</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><function>undef</function><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><function>warn</function><normal> </normal><operator>"</operator><string>no parent context to take captures from</string><operator>"</operator><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><comment>#sub captured {</comment><comment>
</comment><comment># my $self = shift;</comment><comment>
</comment><comment># if (@_) { </comment><comment>
</comment><comment># $self->{'captured'} = shift;</comment><comment>
</comment><comment>## print Dumper($self->{'captured'});</comment><comment>
</comment><comment># };</comment><comment>
</comment><comment># return $self->{'captured'}</comment><comment>
</comment><comment>## my ($self, $c) = @_;</comment><comment>
</comment><comment>## if (defined($c)) {</comment><comment>
</comment><comment>## my $t = $self->engine->stackTop;</comment><comment>
</comment><comment>## my $n = 0;</comment><comment>
</comment><comment>## my @o = ();</comment><comment>
</comment><comment>## while (defined($c->[$n])) {</comment><comment>
</comment><comment>## push @o, $c->[$n];</comment><comment>
</comment><comment>## $n ++;</comment><comment>
</comment><comment>## }</comment><comment>
</comment><comment>## if (@o) {</comment><comment>
</comment><comment>## $t->[2] = \@o;</comment><comment>
</comment><comment>## }</comment><comment>
</comment><comment>## };</comment><comment>
</comment><comment>#}</comment><comment>
</comment><comment>#</comment><comment>
</comment><comment>#sub capturedGet {</comment><comment>
</comment><comment># my ($self, $num) = @_;</comment><comment>
</comment><comment># my $s = $self->captured;</comment><comment>
</comment><comment># if (defined $s) {</comment><comment>
</comment><comment># $num --;</comment><comment>
</comment><comment># if (defined($s->[$num])) {</comment><comment>
</comment><comment># return $s->[$num];</comment><comment>
</comment><comment># } else {</comment><comment>
</comment><comment># $self->logwarning("capture number $num not defined");</comment><comment>
</comment><comment># }</comment><comment>
</comment><comment># } else {</comment><comment>
</comment><comment># $self->logwarning("dynamic substitution is called for but nothing to substitute");</comment><comment>
</comment><comment># return undef;</comment><comment>
</comment><comment># }</comment><comment>
</comment><comment>#}</comment><comment>
</comment><normal>
</normal><keyword>sub </keyword><function>capturedParse</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$string</datatype><normal>, </normal><datatype>$mode</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$s</datatype><normal> = </normal><operator>''</operator><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$mode</datatype><normal>)) {</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$string</datatype><normal> =~ </normal><operator>s/</operator><char>^(</char><basen>\d</basen><char>)</char><operator>//</operator><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$s</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>capturedGet</datatype><normal>(</normal><variable>$1</variable><normal>);</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$string</datatype><normal> </normal><operator>ne</operator><normal> </normal><operator>''</operator><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>logwarning</datatype><normal>(</normal><operator>"</operator><string>character class is longer then 1 character, ignoring the rest</string><operator>"</operator><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><keyword>while</keyword><normal> (</normal><datatype>$string</datatype><normal> </normal><operator>ne</operator><normal> </normal><operator>''</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$string</datatype><normal> =~ </normal><operator>s/</operator><char>^([^</char><basen>\%</basen><char>]*)</char><others>\%</others><char>(</char><basen>\d</basen><char>)</char><operator>//</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$r</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>capturedGet</datatype><normal>(</normal><variable>$2</variable><normal>);</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$r</datatype><normal> </normal><operator>ne</operator><normal> </normal><operator>''</operator><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$s</datatype><normal> = </normal><datatype>$s</datatype><normal> . </normal><variable>$1</variable><normal> . </normal><datatype>$r</datatype><datatype>
</datatype><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><datatype>$s</datatype><normal> = </normal><datatype>$s</datatype><normal> . </normal><variable>$1</variable><normal> . </normal><operator>'</operator><string>%</string><operator>'</operator><normal> . </normal><variable>$2</variable><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>logwarning</datatype><normal>(</normal><operator>"</operator><string>target is an empty string</string><operator>"</operator><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><datatype>$string</datatype><normal> =~ </normal><operator>s/</operator><char>^(</char><others>.</others><char>)</char><operator>//</operator><normal>;</normal><normal>
</normal><normal> </normal><datatype>$s</datatype><normal> = </normal><operator>"</operator><datatype>$s</datatype><variable>$1</variable><operator>"</operator><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$s</datatype><normal>;</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>column</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><function>length</function><normal>(</normal><datatype>$self</datatype><normal>-></normal><datatype>linesegment</datatype><normal>);</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>contextdata</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@_</datatype><normal>) { </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>contextdata</string><operator>'</operator><normal>} = </normal><function>shift</function><normal>; };</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>contextdata</string><operator>'</operator><normal>};</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>contextInfo</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$context</datatype><normal>, </normal><datatype>$item</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>exists</function><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>contextdata</datatype><normal>->{</normal><datatype>$context</datatype><normal>}) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$c</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>contextdata</datatype><normal>->{</normal><datatype>$context</datatype><normal>};</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>exists</function><normal> </normal><datatype>$c</datatype><normal>->{</normal><datatype>$item</datatype><normal>}) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$c</datatype><normal>->{</normal><datatype>$item</datatype><normal>}</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><function>undef</function><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>logwarning</datatype><normal>(</normal><operator>"</operator><string>undefined context '</string><datatype>$context</datatype><operator>'"</operator><normal>);</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><function>undef</function><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>contextParse</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$plug</datatype><normal>, </normal><datatype>$context</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$context</datatype><normal> =~ </normal><operator>/</operator><char>^</char><others>#pop</others><operator>/i</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>while</keyword><normal> (</normal><datatype>$context</datatype><normal> =~ </normal><operator>s/</operator><others>#pop</others><operator>//i</operator><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>stackPull</datatype><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> } </normal><keyword>elsif</keyword><normal> (</normal><datatype>$context</datatype><normal> =~ </normal><operator>/</operator><char>^</char><others>#stay</others><operator>/i</operator><normal>) {</normal><normal>
</normal><normal> </normal><comment>#don't do anything </comment><comment>
</comment><normal> } </normal><keyword>elsif</keyword><normal> (</normal><datatype>$context</datatype><normal> =~ </normal><operator>/</operator><char>^</char><others>##</others><char>(</char><others>.</others><char>+)</char><operator>/</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$new</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>pluginGet</datatype><normal>(</normal><variable>$1</variable><normal>);</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>stackPush</datatype><normal>([</normal><datatype>$new</datatype><normal>, </normal><datatype>$new</datatype><normal>-></normal><datatype>basecontext</datatype><normal>]);</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>stackPush</datatype><normal>([</normal><datatype>$plug</datatype><normal>, </normal><datatype>$context</datatype><normal>]);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>debug</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@_</datatype><normal>) { </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>debug</string><operator>'</operator><normal>} = </normal><function>shift</function><normal>; };</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>debug</string><operator>'</operator><normal>};</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>debugTest</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@_</datatype><normal>) { </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>debugtest</string><operator>'</operator><normal>} = </normal><function>shift</function><normal>; };</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>debugtest</string><operator>'</operator><normal>};</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>deliminators</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@_</datatype><normal>) { </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>deliminators</string><operator>'</operator><normal>} = </normal><function>shift</function><normal>; };</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>deliminators</string><operator>'</operator><normal>};</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>engine</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@_</datatype><normal>) { </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>engine</string><operator>'</operator><normal>} = </normal><function>shift</function><normal>; };</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>engine</string><operator>'</operator><normal>};</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>firstnonspace</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$string</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$line</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>linesegment</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> ((</normal><datatype>$line</datatype><normal> =~ </normal><operator>/</operator><char>^</char><basen>\s</basen><char>*$</char><operator>/</operator><normal>) </normal><operator>and</operator><normal> (</normal><datatype>$string</datatype><normal> =~ </normal><operator>/</operator><char>^[^</char><basen>\s</basen><char>]</char><operator>/</operator><normal>)) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><float>1</float><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>formatTable</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@_</datatype><normal>) { </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>format_table</string><operator>'</operator><normal>} = </normal><function>shift</function><normal>; };</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>format_table</string><operator>'</operator><normal>};</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>highlight</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$text</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>snippet</datatype><normal>(</normal><operator>''</operator><normal>);</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$out</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>out</datatype><normal>;</normal><normal>
</normal><normal> </normal><datatype>@$out</datatype><normal> = ();</normal><normal>
</normal><normal> </normal><keyword>while</keyword><normal> (</normal><datatype>$text</datatype><normal> </normal><operator>ne</operator><normal> </normal><operator>''</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$top</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>stackTop</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$top</datatype><normal>)) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$plug</datatype><normal>, </normal><datatype>$context</datatype><normal>) = </normal><datatype>@$top</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$text</datatype><normal> =~ </normal><operator>s/</operator><char>^(</char><basen>\n</basen><char>)</char><operator>//</operator><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>snippetForce</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$e</datatype><normal> = </normal><datatype>$plug</datatype><normal>-></normal><datatype>contextInfo</datatype><normal>(</normal><datatype>$context</datatype><normal>, </normal><operator>'</operator><string>lineending</string><operator>'</operator><normal>);</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$e</datatype><normal>)) {</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>contextParse</datatype><normal>(</normal><datatype>$plug</datatype><normal>, </normal><datatype>$e</datatype><normal>)</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$attr</datatype><normal> = </normal><datatype>$plug</datatype><normal>-></normal><datatype>attributes</datatype><normal>->{</normal><datatype>$plug</datatype><normal>-></normal><datatype>contextInfo</datatype><normal>(</normal><datatype>$context</datatype><normal>, </normal><operator>'</operator><string>attribute</string><operator>'</operator><normal>)};</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>snippetParse</datatype><normal>(</normal><variable>$1</variable><normal>, </normal><datatype>$attr</datatype><normal>);</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>snippetForce</datatype><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>linesegment</datatype><normal>(</normal><operator>''</operator><normal>);</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$b</datatype><normal> = </normal><datatype>$plug</datatype><normal>-></normal><datatype>contextInfo</datatype><normal>(</normal><datatype>$context</datatype><normal>, </normal><operator>'</operator><string>linebeginning</string><operator>'</operator><normal>);</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$b</datatype><normal>)) {</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>contextParse</datatype><normal>(</normal><datatype>$plug</datatype><normal>, </normal><datatype>$b</datatype><normal>)</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$sub</datatype><normal> = </normal><datatype>$plug</datatype><normal>-></normal><datatype>contextInfo</datatype><normal>(</normal><datatype>$context</datatype><normal>, </normal><operator>'</operator><string>callback</string><operator>'</operator><normal>);</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$result</datatype><normal> = &</normal><datatype>$sub</datatype><normal>(</normal><datatype>$plug</datatype><normal>, \</normal><datatype>$text</datatype><normal>);</normal><normal>
</normal><normal> </normal><keyword>unless</keyword><normal>(</normal><datatype>$result</datatype><normal>) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$f</datatype><normal> = </normal><datatype>$plug</datatype><normal>-></normal><datatype>contextInfo</datatype><normal>(</normal><datatype>$context</datatype><normal>, </normal><operator>'</operator><string>fallthrough</string><operator>'</operator><normal>);</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$f</datatype><normal>)) {</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>contextParse</datatype><normal>(</normal><datatype>$plug</datatype><normal>, </normal><datatype>$f</datatype><normal>);</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><datatype>$text</datatype><normal> =~ </normal><operator>s/</operator><char>^(</char><others>.</others><char>)</char><operator>//</operator><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$attr</datatype><normal> = </normal><datatype>$plug</datatype><normal>-></normal><datatype>attributes</datatype><normal>->{</normal><datatype>$plug</datatype><normal>-></normal><datatype>contextInfo</datatype><normal>(</normal><datatype>$context</datatype><normal>, </normal><operator>'</operator><string>attribute</string><operator>'</operator><normal>)};</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>snippetParse</datatype><normal>(</normal><variable>$1</variable><normal>, </normal><datatype>$attr</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><function>push</function><normal> </normal><datatype>@$out</datatype><normal>, </normal><function>length</function><normal>(</normal><datatype>$text</datatype><normal>), </normal><operator>'</operator><string>Normal</string><operator>'</operator><normal>;</normal><normal>
</normal><normal> </normal><datatype>$text</datatype><normal> = </normal><operator>''</operator><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>snippetForce</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>@$out</datatype><normal>;</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>highlightText</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$text</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$res</datatype><normal> = </normal><operator>''</operator><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>@hl</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>highlight</datatype><normal>(</normal><datatype>$text</datatype><normal>);</normal><normal>
</normal><normal> </normal><keyword>while</keyword><normal> (</normal><datatype>@hl</datatype><normal>) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$f</datatype><normal> = </normal><function>shift</function><normal> </normal><datatype>@hl</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$t</datatype><normal> = </normal><function>shift</function><normal> </normal><datatype>@hl</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>unless</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$t</datatype><normal>)) { </normal><datatype>$t</datatype><normal> = </normal><operator>'</operator><string>Normal</string><operator>'</operator><normal> }</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$s</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>substitutions</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$rr</datatype><normal> = </normal><operator>''</operator><normal>;</normal><normal>
</normal><normal> </normal><keyword>while</keyword><normal> (</normal><datatype>$f</datatype><normal> </normal><operator>ne</operator><normal> </normal><operator>''</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$k</datatype><normal> = </normal><function>substr</function><normal>(</normal><datatype>$f</datatype><normal> , 0, </normal><float>1</float><normal>);</normal><normal>
</normal><normal> </normal><datatype>$f</datatype><normal> = </normal><function>substr</function><normal>(</normal><datatype>$f</datatype><normal>, </normal><float>1</float><normal>, </normal><function>length</function><normal>(</normal><datatype>$f</datatype><normal>) </normal><decval>-1</decval><normal>);</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>exists</function><normal> </normal><datatype>$s</datatype><normal>->{</normal><datatype>$k</datatype><normal>}) {</normal><normal>
</normal><normal> </normal><datatype>$rr</datatype><normal> = </normal><datatype>$rr</datatype><normal> . </normal><datatype>$s</datatype><normal>->{</normal><datatype>$k</datatype><normal>}</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><datatype>$rr</datatype><normal> = </normal><datatype>$rr</datatype><normal> . </normal><datatype>$k</datatype><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$rt</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>formatTable</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>exists</function><normal> </normal><datatype>$rt</datatype><normal>->{</normal><datatype>$t</datatype><normal>}) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$o</datatype><normal> = </normal><datatype>$rt</datatype><normal>->{</normal><datatype>$t</datatype><normal>};</normal><normal>
</normal><normal> </normal><datatype>$res</datatype><normal> = </normal><datatype>$res</datatype><normal> . </normal><datatype>$o</datatype><normal>->[0] . </normal><datatype>$rr</datatype><normal> . </normal><datatype>$o</datatype><normal>->[</normal><float>1</float><normal>];</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><datatype>$res</datatype><normal> = </normal><datatype>$res</datatype><normal> . </normal><datatype>$rr</datatype><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>logwarning</datatype><normal>(</normal><operator>"</operator><string>undefined format tag '</string><datatype>$t</datatype><operator>'"</operator><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$res</datatype><normal>;</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>includePlugin</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$language</datatype><normal>, </normal><datatype>$text</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$eng</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>engine</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$plug</datatype><normal> = </normal><datatype>$eng</datatype><normal>-></normal><datatype>pluginGet</datatype><normal>(</normal><datatype>$language</datatype><normal>);</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$plug</datatype><normal>)) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$context</datatype><normal> = </normal><datatype>$plug</datatype><normal>-></normal><datatype>basecontext</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$call</datatype><normal> = </normal><datatype>$plug</datatype><normal>-></normal><datatype>contextInfo</datatype><normal>(</normal><datatype>$context</datatype><normal>, </normal><operator>'</operator><string>callback</string><operator>'</operator><normal>);</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$call</datatype><normal>)) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> &</normal><datatype>$call</datatype><normal>(</normal><datatype>$plug</datatype><normal>, </normal><datatype>$text</datatype><normal>);</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>logwarning</datatype><normal>(</normal><operator>"</operator><string>cannot find callback for context '</string><datatype>$context</datatype><operator>'"</operator><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> 0;</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>includeRules</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$context</datatype><normal>, </normal><datatype>$text</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$call</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>contextInfo</datatype><normal>(</normal><datatype>$context</datatype><normal>, </normal><operator>'</operator><string>callback</string><operator>'</operator><normal>);</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$call</datatype><normal>)) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> &</normal><datatype>$call</datatype><normal>(</normal><datatype>$self</datatype><normal>, </normal><datatype>$text</datatype><normal>);</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>logwarning</datatype><normal>(</normal><operator>"</operator><string>cannot find callback for context '</string><datatype>$context</datatype><operator>'"</operator><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> 0;</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>initialize</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$self</datatype><normal>-></normal><datatype>engine</datatype><normal> </normal><operator>eq</operator><normal> </normal><datatype>$self</datatype><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>stack</datatype><normal>([[</normal><datatype>$self</datatype><normal>, </normal><datatype>$self</datatype><normal>-></normal><datatype>basecontext</datatype><normal>]]);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>keywordscase</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@_</datatype><normal>) { </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>keywordcase</string><operator>'</operator><normal>} = </normal><function>shift</function><normal>; }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>keywordscase</string><operator>'</operator><normal>}</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>languagePlug</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$cw</datatype><normal>, </normal><datatype>$name</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>%numb</datatype><normal> = (</normal><normal>
</normal><normal> </normal><operator>'</operator><string>1</string><operator>'</operator><normal> => </normal><operator>'</operator><string>One</string><operator>'</operator><normal>,</normal><normal>
</normal><normal> </normal><operator>'</operator><string>2</string><operator>'</operator><normal> => </normal><operator>'</operator><string>Two</string><operator>'</operator><normal>,</normal><normal>
</normal><normal> </normal><operator>'</operator><string>3</string><operator>'</operator><normal> => </normal><operator>'</operator><string>Three</string><operator>'</operator><normal>,</normal><normal>
</normal><normal> </normal><operator>'</operator><string>4</string><operator>'</operator><normal> => </normal><operator>'</operator><string>Four</string><operator>'</operator><normal>,</normal><normal>
</normal><normal> </normal><operator>'</operator><string>5</string><operator>'</operator><normal> => </normal><operator>'</operator><string>Five</string><operator>'</operator><normal>,</normal><normal>
</normal><normal> </normal><operator>'</operator><string>6</string><operator>'</operator><normal> => </normal><operator>'</operator><string>Six</string><operator>'</operator><normal>,</normal><normal>
</normal><normal> </normal><operator>'</operator><string>7</string><operator>'</operator><normal> => </normal><operator>'</operator><string>Seven</string><operator>'</operator><normal>,</normal><normal>
</normal><normal> </normal><operator>'</operator><string>8</string><operator>'</operator><normal> => </normal><operator>'</operator><string>Eight</string><operator>'</operator><normal>,</normal><normal>
</normal><normal> </normal><operator>'</operator><string>9</string><operator>'</operator><normal> => </normal><operator>'</operator><string>Nine</string><operator>'</operator><normal>,</normal><normal>
</normal><normal> </normal><operator>'</operator><string>0</string><operator>'</operator><normal> => </normal><operator>'</operator><string>Zero</string><operator>'</operator><normal>,</normal><normal>
</normal><normal> );</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$name</datatype><normal> =~ </normal><operator>s/</operator><char>^(</char><basen>\d</basen><char>)</char><operator>//</operator><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$name</datatype><normal> = </normal><datatype>$numb</datatype><normal>{</normal><variable>$1</variable><normal>} . </normal><datatype>$name</datatype><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><datatype>$name</datatype><normal> =~ </normal><operator>s/</operator><others>\.</others><operator>//</operator><normal>;</normal><normal>
</normal><normal> </normal><datatype>$name</datatype><normal> =~ </normal><operator>s/</operator><others>\+</others><operator>/</operator><string>plus</string><operator>/g</operator><normal>;</normal><normal>
</normal><normal> </normal><datatype>$name</datatype><normal> =~ </normal><operator>s/</operator><others>\-</others><operator>/</operator><string>minus</string><operator>/g</operator><normal>;</normal><normal>
</normal><normal> </normal><datatype>$name</datatype><normal> =~ </normal><operator>s/</operator><others>#</others><operator>/</operator><string>dash</string><operator>/g</operator><normal>;</normal><normal>
</normal><normal> </normal><datatype>$name</datatype><normal> =~ </normal><operator>s/</operator><char>[^</char><basen>0-9a-zA-Z</basen><char>]</char><operator>/</operator><string>_</string><operator>/g</operator><normal>;</normal><normal>
</normal><normal> </normal><datatype>$name</datatype><normal> =~ </normal><operator>s/</operator><others>__</others><operator>/</operator><string>_</string><operator>/g</operator><normal>;</normal><normal>
</normal><normal> </normal><datatype>$name</datatype><normal> =~ </normal><operator>s/</operator><others>_</others><char>$</char><operator>//</operator><normal>;</normal><normal>
</normal><normal> </normal><datatype>$name</datatype><normal> = </normal><function>ucfirst</function><normal>(</normal><datatype>$name</datatype><normal>);</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$name</datatype><normal>;</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>lastchar</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$l</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>linesegment</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$l</datatype><normal> </normal><operator>eq</operator><normal> </normal><operator>''</operator><normal>) { </normal><keyword>return</keyword><normal> </normal><operator>"</operator><char>\n</char><operator>"</operator><normal> } </normal><comment>#last character was a newline</comment><comment>
</comment><normal> </normal><keyword>return</keyword><normal> </normal><function>substr</function><normal>(</normal><datatype>$l</datatype><normal>, </normal><function>length</function><normal>(</normal><datatype>$l</datatype><normal>) </normal><operator>-</operator><normal> </normal><float>1</float><normal>, </normal><float>1</float><normal>);</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>lastcharDeliminator</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$deliminators</datatype><normal> = </normal><operator>'</operator><string>\s|\~|\!|\%|\^|\&|\*|\+|\(|\)|-|=|\{|\}|\[|\]|:|;|<|>|,|</string><char>\\</char><string>|\||\.|\?|\/</string><operator>'</operator><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$self</datatype><normal>-></normal><datatype>linestart</datatype><normal> </normal><operator>or</operator><normal> (</normal><datatype>$self</datatype><normal>-></normal><datatype>lastchar</datatype><normal> =~ </normal><operator>/</operator><datatype>$deliminators</datatype><operator>/</operator><normal>)) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><float>1</float><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>;</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>linesegment</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@_</datatype><normal>) { </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>linesegment</string><operator>'</operator><normal>} = </normal><function>shift</function><normal>; };</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>linesegment</string><operator>'</operator><normal>};</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>linestart</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$self</datatype><normal>-></normal><datatype>linesegment</datatype><normal> </normal><operator>eq</operator><normal> </normal><operator>''</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><float>1</float><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>;</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>lists</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@_</datatype><normal>) { </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>lists</string><operator>'</operator><normal>} = </normal><function>shift</function><normal>; }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>lists</string><operator>'</operator><normal>}</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>out</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@_</datatype><normal>) { </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>out</string><operator>'</operator><normal>} = </normal><function>shift</function><normal>; }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>out</string><operator>'</operator><normal>};</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>listAdd</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$listname</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$lst</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>lists</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@_</datatype><normal>) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>@l</datatype><normal> = </normal><function>reverse</function><normal> </normal><function>sort</function><normal> </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><datatype>$lst</datatype><normal>->{</normal><datatype>$listname</datatype><normal>} = \</normal><datatype>@l</datatype><normal>;</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><datatype>$lst</datatype><normal>->{</normal><datatype>$listname</datatype><normal>} = [];</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>logwarning</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$warning</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$top</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>engine</datatype><normal>-></normal><datatype>stackTop</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>defined</function><normal> </normal><datatype>$top</datatype><normal>) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$lang</datatype><normal> = </normal><datatype>$top</datatype><normal>->[0]</normal><operator>-</operator><normal>>language;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$context</datatype><normal> = </normal><datatype>$top</datatype><normal>->[</normal><float>1</float><normal>];</normal><normal>
</normal><normal> </normal><datatype>$warning</datatype><normal> = </normal><operator>"</operator><datatype>$warning</datatype><char>\n</char><string> Language => </string><datatype>$lang</datatype><string>, Context => </string><datatype>$context</datatype><char>\n</char><operator>"</operator><normal>;</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><datatype>$warning</datatype><normal> = </normal><operator>"</operator><datatype>$warning</datatype><char>\n</char><string> STACK IS EMPTY: PANIC</string><char>\n</char><operator>"</operator><normal>
</normal><normal> }</normal><normal>
</normal><normal> cluck(</normal><datatype>$warning</datatype><normal>);</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>parseResult</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$text</datatype><normal>, </normal><datatype>$string</datatype><normal>, </normal><datatype>$lahead</datatype><normal>, </normal><datatype>$column</datatype><normal>, </normal><datatype>$fnspace</datatype><normal>, </normal><datatype>$context</datatype><normal>, </normal><datatype>$attr</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$eng</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>engine</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$fnspace</datatype><normal>) {</normal><normal>
</normal><normal> </normal><keyword>unless</keyword><normal> (</normal><datatype>$eng</datatype><normal>-></normal><datatype>firstnonspace</datatype><normal>(</normal><datatype>$$text</datatype><normal>)) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$column</datatype><normal>)) {</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$column</datatype><normal> </normal><operator>ne</operator><normal> </normal><datatype>$eng</datatype><normal>-></normal><datatype>column</datatype><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>unless</keyword><normal> (</normal><datatype>$lahead</datatype><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$$text</datatype><normal> = </normal><function>substr</function><normal>(</normal><datatype>$$text</datatype><normal>, </normal><function>length</function><normal>(</normal><datatype>$string</datatype><normal>));</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$r</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>unless</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$attr</datatype><normal>)) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$t</datatype><normal> = </normal><datatype>$eng</datatype><normal>-></normal><datatype>stackTop</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$plug</datatype><normal>, </normal><datatype>$ctext</datatype><normal>) = </normal><datatype>@$t</datatype><normal>;</normal><normal>
</normal><normal> </normal><datatype>$r</datatype><normal> = </normal><datatype>$plug</datatype><normal>-></normal><datatype>attributes</datatype><normal>->{</normal><datatype>$plug</datatype><normal>-></normal><datatype>contextInfo</datatype><normal>(</normal><datatype>$ctext</datatype><normal>, </normal><operator>'</operator><string>attribute</string><operator>'</operator><normal>)};</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><datatype>$r</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>attributes</datatype><normal>->{</normal><datatype>$attr</datatype><normal>};</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><datatype>$eng</datatype><normal>-></normal><datatype>snippetParse</datatype><normal>(</normal><datatype>$string</datatype><normal>, </normal><datatype>$r</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><datatype>$eng</datatype><normal>-></normal><datatype>contextParse</datatype><normal>(</normal><datatype>$self</datatype><normal>, </normal><datatype>$context</datatype><normal>);</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><float>1</float><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>pluginGet</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$language</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$plugs</datatype><normal> = </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>plugins</string><operator>'</operator><normal>};</normal><normal>
</normal><normal> </normal><keyword>unless</keyword><normal> (</normal><function>exists</function><normal>(</normal><datatype>$plugs</datatype><normal>->{</normal><datatype>$language</datatype><normal>})) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$modname</datatype><normal> = </normal><operator>'</operator><string>Syntax::Highlight::Engine::Kate::</string><operator>'</operator><normal> . </normal><datatype>$self</datatype><normal>-></normal><datatype>languagePlug</datatype><normal>(</normal><datatype>$language</datatype><normal>);</normal><normal>
</normal><normal> </normal><keyword>unless</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$modname</datatype><normal>)) {</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>logwarning</datatype><normal>(</normal><operator>"</operator><string>no valid module found for language '</string><datatype>$language</datatype><operator>'"</operator><normal>);</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><function>undef</function><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$plug</datatype><normal>;</normal><normal>
</normal><normal> </normal><function>eval</function><normal> </normal><operator>"</operator><string>use </string><datatype>$modname</datatype><string>; \$plug = new </string><datatype>$modname</datatype><string>(engine => \$self);</string><operator>"</operator><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$plug</datatype><normal>)) {</normal><normal>
</normal><normal> </normal><datatype>$plugs</datatype><normal>->{</normal><datatype>$language</datatype><normal>} = </normal><datatype>$plug</datatype><normal>;</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>logwarning</datatype><normal>(</normal><operator>"</operator><string>cannot create plugin for language '</string><datatype>$language</datatype><operator>'</operator><char>\n</char><variable>$@</variable><operator>"</operator><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>exists</function><normal>(</normal><datatype>$plugs</datatype><normal>->{</normal><datatype>$language</datatype><normal>})) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$plugs</datatype><normal>->{</normal><datatype>$language</datatype><normal>};</normal><normal>
</normal><normal> } </normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><function>undef</function><normal>;</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>reset</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>stack</datatype><normal>([[</normal><datatype>$self</datatype><normal>, </normal><datatype>$self</datatype><normal>-></normal><datatype>basecontext</datatype><normal>]]);</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>out</datatype><normal>([]);</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>snippet</datatype><normal>(</normal><operator>''</operator><normal>);</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>snippet</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@_</datatype><normal>) { </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>snippet</string><operator>'</operator><normal>} = </normal><function>shift</function><normal>; }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>snippet</string><operator>'</operator><normal>};</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>snippetAppend</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$ch</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><keyword>if</keyword><normal> </normal><operator>not</operator><normal> </normal><function>defined</function><normal> </normal><datatype>$ch</datatype><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>snippet</string><operator>'</operator><normal>} = </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>snippet</string><operator>'</operator><normal>} . </normal><datatype>$ch</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$ch</datatype><normal> </normal><operator>ne</operator><normal> </normal><operator>''</operator><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>linesegment</datatype><normal>(</normal><datatype>$self</datatype><normal>-></normal><datatype>linesegment</datatype><normal> . </normal><datatype>$ch</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal>;</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>snippetAttribute</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@_</datatype><normal>) { </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>snippetattribute</string><operator>'</operator><normal>} = </normal><function>shift</function><normal>; }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>snippetattribute</string><operator>'</operator><normal>};</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>snippetForce</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$parse</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>snippet</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$parse</datatype><normal> </normal><operator>ne</operator><normal> </normal><operator>''</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$out</datatype><normal> = </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>out</string><operator>'</operator><normal>};</normal><normal>
</normal><normal> </normal><function>push</function><normal>(</normal><datatype>@$out</datatype><normal>, </normal><datatype>$parse</datatype><normal>, </normal><datatype>$self</datatype><normal>-></normal><datatype>snippetAttribute</datatype><normal>);</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>snippet</datatype><normal>(</normal><operator>''</operator><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>snippetParse</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$snip</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$attr</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> ((</normal><function>defined</function><normal> </normal><datatype>$attr</datatype><normal>) </normal><operator>and</operator><normal> (</normal><datatype>$attr</datatype><normal> </normal><operator>ne</operator><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>snippetAttribute</datatype><normal>)) { </normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>snippetForce</datatype><normal>;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>snippetAttribute</datatype><normal>(</normal><datatype>$attr</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>snippetAppend</datatype><normal>(</normal><datatype>$snip</datatype><normal>);</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>stack</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@_</datatype><normal>) { </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>stack</string><operator>'</operator><normal>} = </normal><function>shift</function><normal>; }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>stack</string><operator>'</operator><normal>};</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>stackPush</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$val</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$stack</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>stack</datatype><normal>;</normal><normal>
</normal><normal> </normal><function>unshift</function><normal>(</normal><datatype>@$stack</datatype><normal>, </normal><datatype>$val</datatype><normal>);</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>stackPull</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$val</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$stack</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>stack</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><function>shift</function><normal>(</normal><datatype>@$stack</datatype><normal>);</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>stackTop</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>stack</datatype><normal>->[0];</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>stateCompare</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> (</normal><datatype>$self</datatype><normal>, </normal><datatype>$state</datatype><normal>) = </normal><datatype>@_</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$h</datatype><normal> = [ </normal><datatype>$self</datatype><normal>-></normal><datatype>stateGet</datatype><normal> ];</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$equal</datatype><normal> = 0;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (Dumper(</normal><datatype>$h</datatype><normal>) </normal><operator>eq</operator><normal> Dumper(</normal><datatype>$state</datatype><normal>)) { </normal><datatype>$equal</datatype><normal> = </normal><float>1</float><normal> };</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$equal</datatype><normal>;</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>stateGet</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$s</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>stack</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>@$s</datatype><normal>;</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>stateSet</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$s</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>stack</datatype><normal>;</normal><normal>
</normal><normal> </normal><datatype>@$s</datatype><normal> = (</normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>substitutions</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@_</datatype><normal>) { </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>substitutions</string><operator>'</operator><normal>} = </normal><function>shift</function><normal>; }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>->{</normal><operator>'</operator><string>substitutions</string><operator>'</operator><normal>};</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>testAnyChar</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$text</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$string</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$insensitive</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$test</datatype><normal> = </normal><function>substr</function><normal>(</normal><datatype>$$text</datatype><normal>, 0, </normal><float>1</float><normal>);</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$bck</datatype><normal> = </normal><datatype>$test</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$insensitive</datatype><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$string</datatype><normal> = </normal><function>lc</function><normal>(</normal><datatype>$string</datatype><normal>);</normal><normal>
</normal><normal> </normal><datatype>$test</datatype><normal> = </normal><function>lc</function><normal>(</normal><datatype>$test</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>index</function><normal>(</normal><datatype>$string</datatype><normal>, </normal><datatype>$test</datatype><normal>) > </normal><decval>-1</decval><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><datatype>$bck</datatype><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>testDetectChar</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$text</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$char</datatype><normal> = </normal><function>shift</function><normal>; </normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$insensitive</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$dyn</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$dyn</datatype><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$char</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>capturedParse</datatype><normal>(</normal><datatype>$char</datatype><normal>, </normal><float>1</float><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$test</datatype><normal> = </normal><function>substr</function><normal>(</normal><datatype>$$text</datatype><normal>, 0, </normal><float>1</float><normal>);</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$bck</datatype><normal> = </normal><datatype>$test</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$insensitive</datatype><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$char</datatype><normal> = </normal><function>lc</function><normal>(</normal><datatype>$char</datatype><normal>);</normal><normal>
</normal><normal> </normal><datatype>$test</datatype><normal> = </normal><function>lc</function><normal>(</normal><datatype>$test</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$char</datatype><normal> </normal><operator>eq</operator><normal> </normal><datatype>$test</datatype><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><datatype>$bck</datatype><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>testDetect2Chars</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$text</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$char</datatype><normal> = </normal><function>shift</function><normal>; </normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$char1</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$insensitive</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$dyn</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$dyn</datatype><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$char</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>capturedParse</datatype><normal>(</normal><datatype>$char</datatype><normal>, </normal><float>1</float><normal>);</normal><normal>
</normal><normal> </normal><datatype>$char1</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>capturedParse</datatype><normal>(</normal><datatype>$char1</datatype><normal>, </normal><float>1</float><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$string</datatype><normal> = </normal><datatype>$char</datatype><normal> . </normal><datatype>$char1</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$test</datatype><normal> = </normal><function>substr</function><normal>(</normal><datatype>$$text</datatype><normal>, 0, </normal><float>2</float><normal>);</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$bck</datatype><normal> = </normal><datatype>$test</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$insensitive</datatype><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$string</datatype><normal> = </normal><function>lc</function><normal>(</normal><datatype>$string</datatype><normal>);</normal><normal>
</normal><normal> </normal><datatype>$test</datatype><normal> = </normal><function>lc</function><normal>(</normal><datatype>$test</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$string</datatype><normal> </normal><operator>eq</operator><normal> </normal><datatype>$test</datatype><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><datatype>$bck</datatype><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>testDetectIdentifier</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$text</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$$text</datatype><normal> =~ </normal><operator>/</operator><char>^([</char><basen>a-zA-Z_</basen><char>][</char><basen>a-zA-Z0-9_</basen><char>]+)</char><operator>/</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><variable>$1</variable><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>testDetectSpaces</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$text</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$$text</datatype><normal> =~ </normal><operator>/</operator><char>^([</char><basen>\\040|\\t</basen><char>]+)</char><operator>/</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><variable>$1</variable><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>testFloat</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$text</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$self</datatype><normal>-></normal><datatype>engine</datatype><normal>-></normal><datatype>lastcharDeliminator</datatype><normal>) {</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$$text</datatype><normal> =~ </normal><operator>/</operator><char>^((?=</char><others>\.</others><char>?</char><basen>\d</basen><char>)</char><basen>\d</basen><char>*(?:</char><others>\.</others><basen>\d</basen><char>*)?(?:[</char><basen>Ee</basen><char>][</char><basen>+-</basen><char>]?</char><basen>\d</basen><char>+)?)</char><operator>/</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><variable>$1</variable><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>testHlCChar</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$text</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$$text</datatype><normal> =~ </normal><operator>/</operator><char>^(</char><others>'.'</others><char>)</char><operator>/</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><variable>$1</variable><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>testHlCHex</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$text</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$self</datatype><normal>-></normal><datatype>engine</datatype><normal>-></normal><datatype>lastcharDeliminator</datatype><normal>) {</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$$text</datatype><normal> =~ </normal><operator>/</operator><char>^(</char><others>0x</others><char>[</char><basen>0-9a-fA-F</basen><char>]+)</char><operator>/</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><variable>$1</variable><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>testHlCOct</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$text</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$self</datatype><normal>-></normal><datatype>engine</datatype><normal>-></normal><datatype>lastcharDeliminator</datatype><normal>) {</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$$text</datatype><normal> =~ </normal><operator>/</operator><char>^(</char><others>0</others><char>[</char><basen>0-7</basen><char>]+)</char><operator>/</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><variable>$1</variable><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>testHlCStringChar</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$text</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$$text</datatype><normal> =~ </normal><operator>/</operator><char>^(</char><others>\\</others><char>[</char><basen>a|b|e|f|n|r|t|v|'|"|\?</basen><char>])</char><operator>/</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><variable>$1</variable><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$$text</datatype><normal> =~ </normal><operator>/</operator><char>^(</char><others>\\x</others><char>[</char><basen>0-9a-fA-F</basen><char>][</char><basen>0-9a-fA-F</basen><char>]?)</char><operator>/</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><variable>$1</variable><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$$text</datatype><normal> =~ </normal><operator>/</operator><char>^(</char><others>\\</others><char>[</char><basen>0-7</basen><char>][</char><basen>0-7</basen><char>]?[</char><basen>0-7</basen><char>]?)</char><operator>/</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><variable>$1</variable><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>testInt</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$text</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$self</datatype><normal>-></normal><datatype>engine</datatype><normal>-></normal><datatype>lastcharDeliminator</datatype><normal>) {</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$$text</datatype><normal> =~ </normal><operator>/</operator><char>^([</char><basen>+-</basen><char>]?</char><basen>\d</basen><char>+)</char><operator>/</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><variable>$1</variable><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>testKeyword</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$text</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$list</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$eng</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>engine</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$deliminators</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>deliminators</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> ((</normal><datatype>$eng</datatype><normal>-></normal><datatype>lastcharDeliminator</datatype><normal>) </normal><operator>and</operator><normal> (</normal><datatype>$$text</datatype><normal> =~ </normal><operator>/</operator><char>^([^</char><basen>$deliminators</basen><char>]+)</char><operator>/</operator><normal>)) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$match</datatype><normal> = </normal><variable>$1</variable><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$l</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>lists</datatype><normal>->{</normal><datatype>$list</datatype><normal>};</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$l</datatype><normal>)) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>@list</datatype><normal> = </normal><datatype>@$l</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>@rl</datatype><normal> = ();</normal><normal>
</normal><normal> </normal><keyword>unless</keyword><normal> (</normal><datatype>$self</datatype><normal>-></normal><datatype>keywordscase</datatype><normal>) {</normal><normal>
</normal><normal> </normal><datatype>@rl</datatype><normal> = </normal><function>grep</function><normal> { (</normal><function>lc</function><normal>(</normal><datatype>$match</datatype><normal>) </normal><operator>eq</operator><normal> </normal><function>lc</function><normal>(</normal><variable>$_</variable><normal>)) } </normal><datatype>@list</datatype><normal>;</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><datatype>@rl</datatype><normal> = </normal><function>grep</function><normal> { (</normal><datatype>$match</datatype><normal> </normal><operator>eq</operator><normal> </normal><variable>$_</variable><normal>) } </normal><datatype>@list</datatype><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>@rl</datatype><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><datatype>$match</datatype><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>logwarning</datatype><normal>(</normal><operator>"</operator><string>list '</string><datatype>$list</datatype><operator>'</operator><string> is not defined, failing test</string><operator>"</operator><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>testLineContinue</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$text</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$lahead</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$lahead</datatype><normal>) {</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$$text</datatype><normal> =~ </normal><operator>/</operator><char>^</char><others>\\</others><basen>\n</basen><operator>/</operator><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><operator>"</operator><string>\\</string><operator>"</operator><normal>, </normal><datatype>$lahead</datatype><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><float>1</float><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$$text</datatype><normal> =~ </normal><operator>s/</operator><char>^(</char><others>\\</others><char>)(</char><basen>\n</basen><char>)</char><operator>/</operator><variable>$2</variable><operator>/</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><operator>"</operator><string>\\</string><operator>"</operator><normal>, </normal><datatype>$lahead</datatype><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>testRangeDetect</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$text</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$char</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$char1</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$insensitive</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$string</datatype><normal> = </normal><operator>"</operator><datatype>$char</datatype><string>\[^</string><datatype>$char1</datatype><string>\]+</string><datatype>$char1</datatype><operator>"</operator><normal>;</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>testRegExpr</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><datatype>$string</datatype><normal>, </normal><datatype>$insensitive</datatype><normal>, 0, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>testRegExpr</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$text</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$reg</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$insensitive</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$dynamic</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$dynamic</datatype><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$reg</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>capturedParse</datatype><normal>(</normal><datatype>$reg</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$eng</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>engine</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$reg</datatype><normal> =~ </normal><operator>s/</operator><char>^</char><others>\^</others><operator>//</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>unless</keyword><normal> (</normal><datatype>$eng</datatype><normal>-></normal><datatype>linestart</datatype><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> } </normal><keyword>elsif</keyword><normal> (</normal><datatype>$reg</datatype><normal> =~ </normal><operator>s/</operator><char>^</char><others>\\</others><char>(</char><others>b</others><char>)</char><operator>//i</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$lastchar</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>engine</datatype><normal>-></normal><datatype>lastchar</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><variable>$1</variable><normal> </normal><operator>eq</operator><normal> </normal><operator>'</operator><string>b</string><operator>'</operator><normal>) {</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$lastchar</datatype><normal> =~ </normal><operator>/</operator><basen>\w</basen><operator>/</operator><normal>) { </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal> }</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$lastchar</datatype><normal> =~ </normal><operator>/</operator><basen>\W</basen><operator>/</operator><normal>) { </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><comment># $reg = "^($reg)";</comment><comment>
</comment><normal> </normal><datatype>$reg</datatype><normal> = </normal><operator>"</operator><string>^</string><datatype>$reg</datatype><operator>"</operator><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$pos</datatype><normal>;</normal><normal>
</normal><comment># my @cap = ();</comment><comment>
</comment><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$sample</datatype><normal> = </normal><datatype>$$text</datatype><normal>;</normal><normal>
</normal><normal>
</normal><normal> </normal><comment># emergency measurements to avoid exception (szabgab)</comment><comment>
</comment><normal> </normal><datatype>$reg</datatype><normal> = </normal><function>eval</function><normal> { </normal><operator>qr/</operator><datatype>$reg</datatype><operator>/</operator><normal> };</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><variable>$@</variable><normal>) {</normal><normal>
</normal><normal> </normal><function>warn</function><normal> </normal><variable>$@</variable><normal>;</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>;</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$insensitive</datatype><normal>) {</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$sample</datatype><normal> =~ </normal><operator>/</operator><datatype>$reg</datatype><operator>/ig</operator><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$pos</datatype><normal> = </normal><function>pos</function><normal>(</normal><datatype>$sample</datatype><normal>);</normal><normal>
</normal><comment># @cap = ($1, $2, $3, $4, $5, $6, $7, $8, $9);</comment><comment>
</comment><comment># my @cap = ();</comment><comment>
</comment><normal> </normal><keyword>if</keyword><normal> (</normal><variable>$#</variable><normal>-) {</normal><normal>
</normal><normal> </normal><keyword>no</keyword><normal> </normal><keyword>strict</keyword><normal> </normal><operator>'</operator><string>refs</string><operator>'</operator><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>@cap</datatype><normal> = </normal><function>map</function><normal> {</normal><datatype>$$_</datatype><normal>} </normal><float>1</float><normal> .. </normal><variable>$#</variable><normal>-;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>captured</datatype><normal>(\</normal><datatype>@cap</datatype><normal>)</normal><normal>
</normal><normal> }</normal><normal>
</normal><comment># my $r = 1;</comment><comment>
</comment><comment># my $c = 1;</comment><comment>
</comment><comment># my @cap = ();</comment><comment>
</comment><comment># while ($r) {</comment><comment>
</comment><comment># eval "if (defined\$$c) { push \@cap, \$$c } else { \$r = 0 }";</comment><comment>
</comment><comment># $c ++;</comment><comment>
</comment><comment># }</comment><comment>
</comment><comment># if (@cap) { $self->captured(\@cap) };</comment><comment>
</comment><normal> }</normal><normal>
</normal><normal> } </normal><keyword>else</keyword><normal> {</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$sample</datatype><normal> =~ </normal><operator>/</operator><datatype>$reg</datatype><operator>/g</operator><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$pos</datatype><normal> = </normal><function>pos</function><normal>(</normal><datatype>$sample</datatype><normal>);</normal><normal>
</normal><comment># @cap = ($1, $2, $3, $4, $5, $6, $7, $8, $9);</comment><comment>
</comment><comment># my @cap = ();</comment><comment>
</comment><normal> </normal><keyword>if</keyword><normal> (</normal><variable>$#</variable><normal>-) {</normal><normal>
</normal><normal> </normal><keyword>no</keyword><normal> </normal><keyword>strict</keyword><normal> </normal><operator>'</operator><string>refs</string><operator>'</operator><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>@cap</datatype><normal> = </normal><function>map</function><normal> {</normal><datatype>$$_</datatype><normal>} </normal><float>1</float><normal> .. </normal><variable>$#</variable><normal>-;</normal><normal>
</normal><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>captured</datatype><normal>(\</normal><datatype>@cap</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><comment># my $r = 1;</comment><comment>
</comment><comment># my $c = 1;</comment><comment>
</comment><comment># my @cap = ();</comment><comment>
</comment><comment># while ($r) {</comment><comment>
</comment><comment># eval "if (defined\$$c) { push \@cap, \$$c } else { \$r = 0 }";</comment><comment>
</comment><comment># $c ++;</comment><comment>
</comment><comment># }</comment><comment>
</comment><comment># if (@cap) { $self->captured(\@cap) };</comment><comment>
</comment><normal> }</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><function>defined</function><normal>(</normal><datatype>$pos</datatype><normal>) </normal><operator>and</operator><normal> (</normal><datatype>$pos</datatype><normal> > 0)) {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$string</datatype><normal> = </normal><function>substr</function><normal>(</normal><datatype>$$text</datatype><normal>, 0, </normal><datatype>$pos</datatype><normal>);</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><datatype>$string</datatype><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><keyword>sub </keyword><function>testStringDetect</function><normal> {</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$self</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$text</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$string</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$insensitive</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$dynamic</datatype><normal> = </normal><function>shift</function><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$dynamic</datatype><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$string</datatype><normal> = </normal><datatype>$self</datatype><normal>-></normal><datatype>capturedParse</datatype><normal>(</normal><datatype>$string</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$test</datatype><normal> = </normal><function>substr</function><normal>(</normal><datatype>$$text</datatype><normal>, 0, </normal><function>length</function><normal>(</normal><datatype>$string</datatype><normal>));</normal><normal>
</normal><normal> </normal><keyword>my</keyword><normal> </normal><datatype>$bck</datatype><normal> = </normal><datatype>$test</datatype><normal>;</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$insensitive</datatype><normal>) {</normal><normal>
</normal><normal> </normal><datatype>$string</datatype><normal> = </normal><function>lc</function><normal>(</normal><datatype>$string</datatype><normal>);</normal><normal>
</normal><normal> </normal><datatype>$test</datatype><normal> = </normal><function>lc</function><normal>(</normal><datatype>$test</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>if</keyword><normal> (</normal><datatype>$string</datatype><normal> </normal><operator>eq</operator><normal> </normal><datatype>$test</datatype><normal>) {</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><datatype>$self</datatype><normal>-></normal><datatype>parseResult</datatype><normal>(</normal><datatype>$text</datatype><normal>, </normal><datatype>$bck</datatype><normal>, </normal><datatype>@_</datatype><normal>);</normal><normal>
</normal><normal> }</normal><normal>
</normal><normal> </normal><keyword>return</keyword><normal> </normal><operator>''</operator><normal>
</normal><normal>}</normal><normal>
</normal><normal>
</normal><normal>
</normal><float>1</float><normal>;</normal><normal>
</normal><normal>
</normal><keyword>__END__</keyword><normal>
</normal><normal>
</normal><comment>=head1 NAME</comment><comment>
</comment><comment>
</comment><comment>Syntax::Highlight::Engine::Kate::Template - a template for syntax highlighting plugins</comment><comment>
</comment><comment>
</comment><comment>=head1 DESCRIPTION</comment><comment>
</comment><comment>
</comment><comment>Syntax::Highlight::Engine::Kate::Template is a framework to assist authors of plugin modules.</comment><comment>
</comment><comment>All methods to provide highlighting to the Syntax::Highlight::Engine::Kate module are there, Just</comment><comment>
</comment><comment>no syntax definitions and callbacks. An instance of Syntax::Highlight::Engine::Kate::Template </comment><comment>
</comment><comment>should never be created, it's meant to be sub classed only. </comment><comment>
</comment><comment>
</comment><comment>=head1 METHODS</comment><comment>
</comment><comment>
</comment><comment>=over 4</comment><comment>
</comment><comment>
</comment><comment>=item B<attributes>(I<?$attributesref?>);</comment><comment>
</comment><comment>
</comment><comment>Sets and returns a reference to the attributes hash.</comment><comment>
</comment><comment>
</comment><comment>=item B<basecontext>(I<?$context?>);</comment><comment>
</comment><comment>
</comment><comment>Sets and returns the basecontext instance variable. This is the context that is used when highlighting starts.</comment><comment>
</comment><comment>
</comment><comment>=item B<captured>(I<$cap>);</comment><comment>
</comment><comment>
</comment><comment>Puts $cap in the first element of the stack, the current context. Used when the context is dynamic.</comment><comment>
</comment><comment>
</comment><comment>=item B<capturedGet>(I<$num>);</comment><comment>
</comment><comment>
</comment><comment>Returns the $num'th element that was captured in the current context.</comment><comment>
</comment><comment>
</comment><comment>=item B<capturedParse>(I<$string>, I<$mode>);</comment><comment>
</comment><comment>
</comment><comment>If B<$mode> is specified, B<$string> should only be one character long and numeric.</comment><comment>
</comment><comment>B<capturedParse> will return the Nth captured element of the current context.</comment><comment>
</comment><comment>
</comment><comment>If B<$mode> is not specified, all occurences of %[1-9] will be replaced by the captured</comment><comment>
</comment><comment>element of the current context.</comment><comment>
</comment><comment>
</comment><comment>=item B<column></comment><comment>
</comment><comment>
</comment><comment>returns the column position in the line that is currently highlighted.</comment><comment>
</comment><comment>
</comment><comment>=item B<contextdata>(I<\%data>);</comment><comment>
</comment><comment>
</comment><comment>Sets and returns a reference to the contextdata hash.</comment><comment>
</comment><comment>
</comment><comment>=item B<contextInfo>(I<$context>, I<$item>);</comment><comment>
</comment><comment>
</comment><comment>returns the value of several context options. B<$item> can be B<callback>, B<attribute>, B<lineending>,</comment><comment>
</comment><comment>B<linebeginning>, B<fallthrough>.</comment><comment>
</comment><comment>
</comment><comment>=item B<contextParse>(I<$plugin>, I<$context>);</comment><comment>
</comment><comment>
</comment><comment>Called by the plugins after a test succeeds. if B<$context> has following values:</comment><comment>
</comment><comment>
</comment><comment> #pop returns to the previous context, removes to top item in the stack. Can</comment><comment>
</comment><comment> also be specified as #pop#pop etc.</comment><comment>
</comment><comment> #stay does nothing.</comment><comment>
</comment><comment> ##.... Switches to the plugin specified in .... and assumes it's basecontext.</comment><comment>
</comment><comment> .... Swtiches to the context specified in ....</comment><comment>
</comment><comment>
</comment><comment>=item B<deliminators>(I<?$delim?>);</comment><comment>
</comment><comment>
</comment><comment>Sets and returns a string that is a regular expression for detecting deliminators.</comment><comment>
</comment><comment>
</comment><comment>=item B<engine></comment><comment>
</comment><comment>
</comment><comment>Returns a reference to the Syntax::Highlight::Engine::Kate module that created this plugin.</comment><comment>
</comment><comment>
</comment><comment>=item B<firstnonspace>(I<$string>);</comment><comment>
</comment><comment>
</comment><comment>returns true if the current line did not contain a non-spatial character so far and the first </comment><comment>
</comment><comment>character in B<$string> is also a spatial character.</comment><comment>
</comment><comment>
</comment><comment>=item B<formatTable></comment><comment>
</comment><comment>
</comment><comment>sets and returns the instance variable B<format_table>. See also the option B<format_table></comment><comment>
</comment><comment>
</comment><comment>=item B<highlight>(I<$text>);</comment><comment>
</comment><comment>
</comment><comment>highlights I<$text>. It does so by selecting the proper callback</comment><comment>
</comment><comment>from the B<commands> hash and invoke it. It will do so untill</comment><comment>
</comment><comment>$text has been reduced to an empty string. returns a paired list</comment><comment>
</comment><comment>of snippets of text and the attribute with which they should be </comment><comment>
</comment><comment>highlighted.</comment><comment>
</comment><comment>
</comment><comment>=item B<highlightText>(I<$text>);</comment><comment>
</comment><comment>
</comment><comment>highlights I<$text> and reformats it using the B<format_table> and B<substitutions></comment><comment>
</comment><comment>
</comment><comment>=item B<includePlugin>(I<$language>, I<\$text>);</comment><comment>
</comment><comment>
</comment><comment>Includes the plugin for B<$language> in the highlighting.</comment><comment>
</comment><comment>
</comment><comment>=item B<includeRules>(I<$language>, I<\$text>);</comment><comment>
</comment><comment>
</comment><comment>Includes the plugin for B<$language> in the highlighting.</comment><comment>
</comment><comment>
</comment><comment>=item B<keywordscase></comment><comment>
</comment><comment>
</comment><comment>Sets and returns the keywordscase instance variable.</comment><comment>
</comment><comment>
</comment><comment>=item B<lastchar></comment><comment>
</comment><comment>
</comment><comment>return the last character that was processed.</comment><comment>
</comment><comment>
</comment><comment>=item B<lastcharDeliminator></comment><comment>
</comment><comment>
</comment><comment>returns true if the last character processed was a deliminator.</comment><comment>
</comment><comment>
</comment><comment>=item B<linesegment></comment><comment>
</comment><comment>
</comment><comment>returns the string of text in the current line that has been processed so far,</comment><comment>
</comment><comment>
</comment><comment>=item B<linestart></comment><comment>
</comment><comment>
</comment><comment>returns true if processing is currently at the beginning of a line.</comment><comment>
</comment><comment>
</comment><comment>=item B<listAdd>(I<'listname'>, I<$item1>, I<$item2> ...);</comment><comment>
</comment><comment>
</comment><comment>Adds a list to the 'lists' hash.</comment><comment>
</comment><comment>
</comment><comment>=item B<lists>(I<?\%lists?>);</comment><comment>
</comment><comment>
</comment><comment>sets and returns the instance variable 'lists'.</comment><comment>
</comment><comment>
</comment><comment>=item B<out>(I<?\@highlightedlist?>);</comment><comment>
</comment><comment>
</comment><comment>sets and returns the instance variable 'out'.</comment><comment>
</comment><comment>
</comment><comment>=item B<parseResult>(I<\$text>, I<$match>, I<$lookahaed>, I<$column>, I<$firstnonspace>, I<$context>, I<$attribute>);</comment><comment>
</comment><comment>
</comment><comment>Called by every one of the test methods below. If the test matches, it will do a couple of subtests.</comment><comment>
</comment><comment>If B<$column> is a defined numerical value it will test if the process is at the requested column.</comment><comment>
</comment><comment>If B<$firnonspace> is true, it will test this also.</comment><comment>
</comment><comment>Ig it is not a look ahead and all tests are passed, B<$match> is then parsed and removed from B<$$text>.</comment><comment>
</comment><comment>
</comment><comment>=item B<pluginGet>(I<$language>);</comment><comment>
</comment><comment>
</comment><comment>Returns a reference to a plugin object for the specified language. Creating an </comment><comment>
</comment><comment>instance if needed.</comment><comment>
</comment><comment>
</comment><comment>=item B<reset></comment><comment>
</comment><comment>
</comment><comment>Resets the highlight engine to a fresh state, does not change the syntx.</comment><comment>
</comment><comment>
</comment><comment>=item B<snippet></comment><comment>
</comment><comment>
</comment><comment>Contains the current snippet of text that will have one attribute. The moment the attribute </comment><comment>
</comment><comment>changes it will be parsed.</comment><comment>
</comment><comment>
</comment><comment>=item B<snippetAppend>(I<$string>)</comment><comment>
</comment><comment>
</comment><comment>appends I<$string> to the current snippet.</comment><comment>
</comment><comment>
</comment><comment>=item B<snippetAttribute>(I<$attribute>)</comment><comment>
</comment><comment>
</comment><comment>Sets and returns the used attribute.</comment><comment>
</comment><comment>
</comment><comment>=item B<snippetForce></comment><comment>
</comment><comment>
</comment><comment>Forces the current snippet to be parsed.</comment><comment>
</comment><comment>
</comment><comment>=item B<snippetParse>(I<$text>, I<?$attribute?>)</comment><comment>
</comment><comment>
</comment><comment>If attribute is defined and differs from the current attribute it does a snippetForce and</comment><comment>
</comment><comment>sets the current attribute to B<$attribute>. Then it does a snippetAppend of B<$text></comment><comment>
</comment><comment>
</comment><comment>=item B<stack></comment><comment>
</comment><comment>
</comment><comment>sets and returns the instance variable 'stack', a reference to an array</comment><comment>
</comment><comment>
</comment><comment>=item B<stackPull></comment><comment>
</comment><comment>
</comment><comment>retrieves the element that is on top of the stack, decrements stacksize by 1.</comment><comment>
</comment><comment>
</comment><comment>=item B<stackPush>(I<$tagname>);</comment><comment>
</comment><comment>
</comment><comment>puts I<$tagname> on top of the stack, increments stacksize by 1</comment><comment>
</comment><comment>
</comment><comment>=item B<stackTop></comment><comment>
</comment><comment>
</comment><comment>Retrieves the element that is on top of the stack.</comment><comment>
</comment><comment>
</comment><comment>=item B<stateCompare>(I<\@state>)</comment><comment>
</comment><comment>
</comment><comment>Compares two lists, \@state and the stack. returns true if they</comment><comment>
</comment><comment>match.</comment><comment>
</comment><comment>
</comment><comment>=item B<stateGet></comment><comment>
</comment><comment>
</comment><comment>Returns a list containing the entire stack.</comment><comment>
</comment><comment>
</comment><comment>=item B<stateSet>(I<@list>)</comment><comment>
</comment><comment>
</comment><comment>Accepts I<@list> as the current stack.</comment><comment>
</comment><comment>
</comment><comment>=item B<substitutions></comment><comment>
</comment><comment>
</comment><comment>sets and returns a reference to the substitutions hash.</comment><comment>
</comment><comment>
</comment><comment>=back
The methods below all return a boolean value.</comment><comment>
</comment><comment>
</comment><comment>=over 4</comment><comment>
</comment><comment>
</comment><comment>=item B<testAnyChar>(I<\$text>, I<$string>, I<$insensitive>, I<$lookahaed>, I<$column>, I<$firstnonspace>, I<$context>, I<$attribute>);</comment><comment>
</comment><comment>
</comment><comment>=item B<testDetectChar>(I<\$text>, I<$char>, I<$insensitive>, I<$dynamic>, I<$lookahaed>, I<$column>, I<$firstnonspace>, I<$context>, I<$attribute>);</comment><comment>
</comment><comment>
</comment><comment>=item B<testDetect2Chars>(I<\$text>, I<$char1>, I<$char2>, I<$insensitive>, I<$dynamic>, I<$lookahaed>, I<$column>, I<$firstnonspace>, I<$context>, I<$attribute>);</comment><comment>
</comment><comment>
</comment><comment>=item B<testDetectIdentifier>(I<\$text>, I<$lookahaed>, I<$column>, I<$firstnonspace>, I<$context>, I<$attribute>);</comment><comment>
</comment><comment>
</comment><comment>=item B<testDetectSpaces>(I<\$text>, I<$lookahaed>, I<$column>, I<$firstnonspace>, I<$context>, I<$attribute>);</comment><comment>
</comment><comment>
</comment><comment>=item B<testFloat>(I<\$text>, I<$lookahaed>, I<$column>, I<$firstnonspace>, I<$context>, I<$attribute>);</comment><comment>
</comment><comment>
</comment><comment>=item B<testHlCChar>(I<\$text>, I<$lookahaed>, I<$column>, I<$firstnonspace>, I<$context>, I<$attribute>);</comment><comment>
</comment><comment>
</comment><comment>=item B<testHlCHex>(I<\$text>, I<$lookahaed>, I<$column>, I<$firstnonspace>, I<$context>, I<$attribute>);</comment><comment>
</comment><comment>
</comment><comment>=item B<testHlCOct>(I<\$text>, I<$lookahaed>, I<$column>, I<$firstnonspace>, I<$context>, I<$attribute>);</comment><comment>
</comment><comment>
</comment><comment>=item B<testHlCStringChar>(I<\$text>, I<$lookahaed>, I<$column>, I<$firstnonspace>, I<$context>, I<$attribute>);</comment><comment>
</comment><comment>
</comment><comment>=item B<testInt>(I<\$text>, I<$lookahaed>, I<$column>, I<$firstnonspace>, I<$context>, I<$attribute>);</comment><comment>
</comment><comment>
</comment><comment>=item B<testKeyword>(I<\$text>, I<$list>, I<$insensitive>, I<$lookahaed>, I<$column>, I<$firstnonspace>, I<$context>, I<$attribute>);</comment><comment>
</comment><comment>
</comment><comment>=item B<testLineContinue>(I<\$text>, I<$lookahaed>, I<$column>, I<$firstnonspace>, I<$context>, I<$attribute>);</comment><comment>
</comment><comment>
</comment><comment>=item B<testRangeDetect>(I<\$text>, I<$char1>, I<$char2>, I<$insensitive>, I<$lookahaed>, I<$column>, I<$firstnonspace>, I<$context>, I<$attribute>);</comment><comment>
</comment><comment>
</comment><comment>=item B<testRegExpr>(I<\$text>, I<$reg>, I<$insensitive>, I<$dynamic>, I<$lookahaed>, I<$column>, I<$firstnonspace>, I<$context>, I<$attribute>);</comment><comment>
</comment><comment>
</comment><comment>=item B<testStringDetect>(I<\$text>, I<$string>, I<$insensitive>, I<$dynamic>, II<$lookahaed>, I<$column>, I<$firstnonspace>, I<$context>, I<$attribute>);</comment><comment>
</comment><comment>
</comment><comment>=back
=head1 ACKNOWLEDGEMENTS</comment><comment>
</comment><comment>
</comment><comment>All the people who wrote Kate and the syntax highlight xml files.</comment><comment>
</comment><comment>
</comment><comment>=head1 AUTHOR AND COPYRIGHT</comment><comment>
</comment><comment>
</comment><comment>This module is written and maintained by:</comment><comment>
</comment><comment>
</comment><comment>Hans Jeuken < haje at toneel dot demon dot nl ></comment><comment>
</comment><comment>
</comment><comment>Copyright (c) 2006 by Hans Jeuken, all rights reserved.</comment><comment>
</comment><comment>
</comment><comment>You may freely distribute and/or modify this module under same terms as</comment><comment>
</comment><comment>Perl itself </comment><comment>
</comment><comment>
</comment><comment>=head1 SEE ALSO</comment><comment>
</comment><comment>
</comment><comment>Synax::Highlight::Engine::Kate http:://www.kate-editor.org</comment>
|