fortran.jsf (13457B)
1 # JOE syntax highlight file for FORTRAN 2 # Heavily improved by: Malte Thoma (thoma@uni-muenster.de) 3 4 # Bugs: 5 # in: 4. eq. -- does not recognize the .eq. 6 # needs more intrinsics. 7 8 =Idle 9 =Ident 10 =Comment 11 =Constant 12 =Number +Constant 13 =Boolean +Constant 14 =String +Constant 15 =Type 16 =Keyword 17 =Operator +Keyword 18 =Statement +Keyword 19 =Builtin +DefinedFunction 20 =Loop +Statement 21 =Conditional +Statement 22 =Label +Statement 23 =Preproc 24 =Bad 25 26 # First character of line... 27 28 :reset Idle 29 * idle noeat 30 "\n" reset 31 "cC*" comment recolor=-1 32 "#" pre recolor=-1 33 34 :pre Preproc 35 * pre 36 "\n" reset 37 38 :comment Comment comment 39 * comment 40 "BFHNTX" comment noeat call=comment_todo.comment_todo() 41 "\n" reset 42 43 :idle Idle 44 * idle 45 "!" comment recolor=-1 46 "\n" reset 47 "0-9" first_number recolor=-1 48 "." have_dot 49 "'" string recolor=-1 50 "a-zA-Z_" ident buffer 51 52 :first_number Number 53 * idle noeat 54 "0-9" first_number 55 "." second_start 56 "eEdD" epart 57 58 :have_dot Number 59 * idle recolor=-2 noeat 60 "0-9" second_number recolor=-2 61 " \ta-zA-Z" operator1 noeat recolor=-2 62 63 # Color the left . 64 65 :operator1 Operator 66 * operator buffer noeat 67 " \t" operator1 68 69 # Default color is Idle for unknown operator 70 71 :operator Idle 72 * idle noeat 73 "a-zA-Z" operator 74 ". \t" unknown noeat istrings 75 "gt" op 76 "ge" op 77 "eq" op 78 "le" op 79 "ne" op 80 "lt" op 81 "and" op 82 "or" op 83 "llt" op 84 "lle" op 85 "lgt" op 86 "lge" op 87 "not" op 88 "false" bool 89 "true" bool 90 done 91 92 # Eat the right . 93 94 :unknown Operator 95 * idle 96 " \t" unknown 97 98 :op Operator 99 * idle 100 " \t" op 101 102 :bool Boolean 103 * idle 104 "." op noeat 105 " \t" const 106 107 # For distrinuishing between 4.e1 and 4.eq. 108 109 :second_start Number 110 * idle noeat 111 "a-zA-Z" operator1 noeat recolor=-2 112 "dD" epart 113 "eE" epart1 114 "0-9" second_number 115 116 :epart1 Number 117 * idle noeat 118 "q" epart2 119 "0-9+\-" enum 120 121 :epart2 Idle 122 * idle noeat 123 ". \t" op noeat recolor=-4 124 125 :second_number Number 126 * idle noeat 127 "eEdD" epart 128 "0-9" second_number 129 130 :epart Number 131 * idle noeat 132 "0-9+\-" enum 133 134 :enum Number 135 * idle noeat 136 "0-9" enum 137 138 :string String string 139 * string 140 "\n" reset 141 "'" maybe_end_string 142 143 :maybe_end_string String string 144 * idle noeat 145 "'" string 146 147 :ident Ident 148 * idle noeat istrings 149 "allocate" kw 150 "allocatable" kw 151 "assign" kw 152 "assignment" kw 153 "backspace" kw 154 "block" kw 155 "blockdata" kw 156 "call" kw 157 "case" label 158 "character" type 159 "close" kw 160 "common" kw 161 "complex" type 162 "contains" kw 163 "continue" loop 164 "cycle" kw 165 "data" kw 166 "deallocate" kw 167 "default" label 168 "dimension" type 169 "do" loop 170 "double" type 171 "doubleprecision" type 172 "elemental" kw 173 "else" cond 174 "elseif" cond 175 "elsewhere" cond 176 "end" kw 177 "endblock" kw 178 "endblockdata" kw 179 "enddo" loop 180 "endfile" kw 181 "endforall" loop 182 "endif" cond 183 "endinterface" kw 184 "endmodule" kw 185 "endselect" cond 186 "endtype" kw 187 "endwhere" kw 188 "entry" kw 189 "equivalence" kw 190 "exit" kw 191 "external" kw 192 "forall" loop 193 "format" kw 194 "function" kw 195 "go" loop 196 "goto" loop 197 "if" cond 198 "implicit" kw 199 "in" kw 200 "inout" kw 201 "inquire" kw 202 "integer" type 203 "intent" kw 204 "interface" kw 205 "intrinsic" kw 206 "iolength" kw 207 "kind" kw 208 "logical" type 209 "module" kw 210 "namelist" kw 211 "none" kw 212 "nullify" kw 213 "only" kw 214 "open" kw 215 "optional" kw 216 "out" kw 217 "parameter" kw 218 "pause" kw 219 "pointer" kw 220 "precision" type 221 "print" kw 222 "private" kw 223 "procedure" kw 224 "program" kw 225 "publc" kw 226 "public" kw 227 "pure" kw 228 "read" kw 229 "real" type 230 "recursive" kw 231 "result" kw 232 "return" kw 233 "rewind" kw 234 "save" kw 235 "select" cond 236 "selectcase" cond 237 "sequence" kw 238 "stat" kw 239 "stop" kw 240 "subroutine" kw 241 "target" kw 242 "then" cond 243 "to" loop 244 "type" kw 245 "use" kw 246 "where" kw 247 "while" loop 248 "write" kw 249 done 250 "(" idle noeat istrings 251 # Keywords have to be duplicated here... 252 "allocate" kw 253 "allocatable" kw 254 "assign" kw 255 "assignment" kw 256 "backspace" kw 257 "block" kw 258 "blockdata" kw 259 "call" kw 260 "case" label 261 "character" type 262 "close" kw 263 "common" kw 264 "complex" type 265 "contains" kw 266 "continue" loop 267 "cycle" kw 268 "data" kw 269 "deallocate" kw 270 "default" label 271 "dimension" type 272 "do" loop 273 "double" type 274 "doubleprecision" type 275 "elemental" kw 276 "else" cond 277 "elseif" cond 278 "elsewhere" cond 279 "end" kw 280 "endblock" kw 281 "endblockdata" kw 282 "enddo" loop 283 "endfile" kw 284 "endforall" loop 285 "endif" cond 286 "endinterface" kw 287 "endmodule" kw 288 "endselect" cond 289 "endtype" kw 290 "endwhere" kw 291 "entry" kw 292 "equivalence" kw 293 "exit" kw 294 "external" kw 295 "forall" loop 296 "format" kw 297 "function" kw 298 "go" loop 299 "goto" loop 300 "if" cond 301 "implicit" kw 302 "in" kw 303 "inout" kw 304 "inquire" kw 305 "integer" type 306 "intent" kw 307 "interface" kw 308 "intrinsic" kw 309 "iolength" kw 310 "kind" kw 311 "logical" type 312 "module" kw 313 "namelist" kw 314 "none" kw 315 "nullify" kw 316 "only" kw 317 "open" kw 318 "optional" kw 319 "out" kw 320 "parameter" kw 321 "pause" kw 322 "pointer" kw 323 "precision" type 324 "print" kw 325 "private" kw 326 "procedure" kw 327 "program" kw 328 "publc" kw 329 "public" kw 330 "pure" kw 331 "read" kw 332 "real" kw 333 "recursive" kw 334 "result" kw 335 "return" kw 336 "rewind" kw 337 "save" kw 338 "select" cond 339 "selectcase" cond 340 "sequence" kw 341 "stat" kw 342 "stop" kw 343 "subroutine" kw 344 "target" kw 345 "then" cond 346 "to" loop 347 "type" kw 348 "use" kw 349 "where" kw 350 "while" loop 351 "write" kw 352 # Here are instrinsics 353 "abs" intrinsic 354 "achar" intrinsic 355 "acos" intrinsic 356 "adjustl" intrinsic 357 "adjustr" intrinsic 358 "aimag" intrinsic 359 "aint" intrinsic 360 "all" intrinsic 361 "allocated" intrinsic 362 "alog" intrinsic 363 "alog10" intrinsic 364 "anint" intrinsic 365 "any" intrinsic 366 "asin" intrinsic 367 "associated" intrinsic 368 "atan" intrinsic 369 "atan2" intrinsic 370 "bit_size" intrinsic 371 "btest" intrinsic 372 "ceiling" intrinsic 373 "char" intrinsic 374 "cmplx" intrinsic 375 "conjg" intrinsic 376 "cos" intrinsic 377 "cosh" intrinsic 378 "count" intrinsic 379 "cpu_time" intrinsic 380 "cshift" intrinsic 381 "date_and_time" intrinsic 382 "dble" intrinsic 383 "digits" intrinsic 384 "dim" intrinsic 385 "dot_product" intrinsic 386 "dprod" intrinsic 387 "eoshift" intrinsic 388 "epsilon" intrinsic 389 "exp" intrinsic 390 "exponent" intrinsic 391 "false" bool 392 "floor" intrinsic 393 "float" intrinsic 394 "fraction" intrinsic 395 "huge" intrinsic 396 "iachar" intrinsic 397 "iand" intrinsic 398 "ibclr" intrinsic 399 "ibits" intrinsic 400 "ibset" intrinsic 401 "ichar" intrinsic 402 "ieor" intrinsic 403 "index" intrinsic 404 "int" intrinsic 405 "int2" intrinsic 406 "ior" intrinsic 407 "ishft" intrinsic 408 "ishftc" intrinsic 409 "kind" intrinsic 410 "lbound" intrinsic 411 "len" intrinsic 412 "len_trim" intrinsic 413 "lge" intrinsic 414 "lgt" intrinsic 415 "lle" intrinsic 416 "llt" intrinsic 417 "log" intrinsic 418 "log10" intrinsic 419 "matmul" intrinsic 420 "max" intrinsic 421 "maxexponent" intrinsic 422 "maxloc" intrinsic 423 "maxval" intrinsic 424 "merge" intrinsic 425 "min" intrinsic 426 "minexponent" intrinsic 427 "minloc" intrinsic 428 "minval" intrinsic 429 "mod" intrinsic 430 "modulo" intrinsic 431 "mvbits" intrinsic 432 "nearest" intrinsic 433 "nint" intrinsic 434 "not" intrinsic 435 "null" intrinsic 436 "pack" intrinsic 437 "present" intrinsic 438 "product" intrinsic 439 "radix" intrinsic 440 "random_number" intrinsic 441 "random_seed" intrinsic 442 "range" intrinsic 443 "real" intrinsic 444 "repeat" intrinsic 445 "reshape" intrinsic 446 "rrspacing" intrinsic 447 "scale" intrinsic 448 "scan" intrinsic 449 "selected_int_kind" intrinsic 450 "selected_real_kind" intrinsic 451 "set_exponent" intrinsic 452 "shape" intrinsic 453 "sign" intrinsic 454 "sin" intrinsic 455 "sinh" intrinsic 456 "size" intrinsic 457 "spacing" intrinsic 458 "spread" intrinsic 459 "sqrt" intrinsic 460 "sum" intrinsic 461 "system_clock" intrinsic 462 "tan" intrinsic 463 "tanh" intrinsic 464 "tiny" intrinsic 465 "transfer" intrinsic 466 "transpose" intrinsic 467 "trim" intrinsic 468 "true" intrinsic 469 "ubound" intrinsic 470 "unpack" intrinsic 471 "verify" intrinsic 472 done 473 "a-zA-Z0-9_" ident 474 " \t" ws_ident hold 475 476 477 # Whitespace after an identifier... we wait to see if there is a "(" 478 :ws_ident Idle 479 * idle noeat istrings 480 "allocate" kw 481 "allocatable" kw 482 "assign" kw 483 "assignment" kw 484 "backspace" kw 485 "block" kw 486 "blockdata" kw 487 "call" kw 488 "case" label 489 "character" type 490 "close" kw 491 "common" kw 492 "complex" type 493 "contains" kw 494 "continue" loop 495 "cycle" kw 496 "data" kw 497 "deallocate" kw 498 "default" label 499 "dimension" type 500 "do" loop 501 "double" type 502 "doubleprecision" type 503 "elemental" kw 504 "else" cond 505 "elseif" cond 506 "elsewhere" cond 507 "end" kw 508 "endblock" kw 509 "endblockdata" kw 510 "enddo" loop 511 "endfile" kw 512 "endforall" loop 513 "endif" cond 514 "endinterface" kw 515 "endmodule" kw 516 "endselect" cond 517 "endtype" kw 518 "endwhere" kw 519 "entry" kw 520 "equivalence" kw 521 "exit" kw 522 "external" kw 523 "forall" loop 524 "format" kw 525 "function" kw 526 "go" loop 527 "goto" loop 528 "if" cond 529 "implicit" kw 530 "in" kw 531 "inout" kw 532 "inquire" kw 533 "integer" type 534 "intent" kw 535 "interface" kw 536 "intrinsic" kw 537 "iolength" kw 538 "kind" kw 539 "logical" type 540 "module" kw 541 "namelist" kw 542 "none" kw 543 "nullify" kw 544 "only" kw 545 "open" kw 546 "optional" kw 547 "out" kw 548 "parameter" kw 549 "pause" kw 550 "pointer" kw 551 "precision" type 552 "print" kw 553 "private" kw 554 "procedure" kw 555 "program" kw 556 "publc" kw 557 "public" kw 558 "pure" kw 559 "read" kw 560 "real" type 561 "recursive" kw 562 "result" kw 563 "return" kw 564 "rewind" kw 565 "save" kw 566 "select" cond 567 "selectcase" cond 568 "sequence" kw 569 "stat" kw 570 "stop" kw 571 "subroutine" kw 572 "target" kw 573 "then" cond 574 "to" loop 575 "type" kw 576 "use" kw 577 "where" kw 578 "while" loop 579 "write" kw 580 done 581 "(" idle noeat istrings 582 # Keywords have to be duplicated here... 583 "allocate" kw 584 "allocatable" kw 585 "assign" kw 586 "assignment" kw 587 "backspace" kw 588 "block" kw 589 "blockdata" kw 590 "call" kw 591 "case" label 592 "character" type 593 "close" kw 594 "common" kw 595 "complex" type 596 "contains" kw 597 "continue" loop 598 "cycle" kw 599 "data" kw 600 "deallocate" kw 601 "default" label 602 "dimension" type 603 "do" loop 604 "double" type 605 "doubleprecision" type 606 "elemental" kw 607 "else" cond 608 "elseif" cond 609 "elsewhere" cond 610 "end" kw 611 "endblock" kw 612 "endblockdata" kw 613 "enddo" loop 614 "endfile" kw 615 "endforall" loop 616 "endif" cond 617 "endinterface" kw 618 "endmodule" kw 619 "endselect" cond 620 "endtype" kw 621 "endwhere" kw 622 "entry" kw 623 "equivalence" kw 624 "exit" kw 625 "external" kw 626 "forall" loop 627 "format" kw 628 "function" kw 629 "go" loop 630 "goto" loop 631 "if" cond 632 "implicit" kw 633 "in" kw 634 "inout" kw 635 "inquire" kw 636 "integer" kw 637 "intent" kw 638 "interface" kw 639 "intrinsic" kw 640 "iolength" kw 641 "kind" kw 642 "logical" type 643 "module" kw 644 "namelist" kw 645 "none" kw 646 "nullify" kw 647 "only" kw 648 "open" kw 649 "optional" kw 650 "out" kw 651 "parameter" kw 652 "pause" kw 653 "pointer" kw 654 "precision" type 655 "print" kw 656 "private" kw 657 "procedure" kw 658 "program" kw 659 "publc" kw 660 "public" kw 661 "pure" kw 662 "read" kw 663 "real" type 664 "recursive" kw 665 "result" kw 666 "return" kw 667 "rewind" kw 668 "save" kw 669 "select" cond 670 "selectcase" cond 671 "sequence" kw 672 "stat" kw 673 "stop" kw 674 "subroutine" kw 675 "target" kw 676 "then" cond 677 "to" loop 678 "type" kw 679 "use" kw 680 "where" kw 681 "while" loop 682 "write" kw 683 # Here are instrinsics 684 "abs" intrinsic 685 "achar" intrinsic 686 "acos" intrinsic 687 "adjustl" intrinsic 688 "adjustr" intrinsic 689 "aimag" intrinsic 690 "aint" intrinsic 691 "all" intrinsic 692 "allocated" intrinsic 693 "alog" intrinsic 694 "alog10" intrinsic 695 "anint" intrinsic 696 "any" intrinsic 697 "asin" intrinsic 698 "associated" intrinsic 699 "atan" intrinsic 700 "atan2" intrinsic 701 "bit_size" intrinsic 702 "btest" intrinsic 703 "ceiling" intrinsic 704 "char" intrinsic 705 "cmplx" intrinsic 706 "conjg" intrinsic 707 "cos" intrinsic 708 "cosh" intrinsic 709 "count" intrinsic 710 "cpu_time" intrinsic 711 "cshift" intrinsic 712 "date_and_time" intrinsic 713 "dble" intrinsic 714 "digits" intrinsic 715 "dim" intrinsic 716 "dot_product" intrinsic 717 "dprod" intrinsic 718 "eoshift" intrinsic 719 "epsilon" intrinsic 720 "exp" intrinsic 721 "exponent" intrinsic 722 "false" intrinsic 723 "floor" intrinsic 724 "float" intrinsic 725 "fraction" intrinsic 726 "huge" intrinsic 727 "iachar" intrinsic 728 "iand" intrinsic 729 "ibclr" intrinsic 730 "ibits" intrinsic 731 "ibset" intrinsic 732 "ichar" intrinsic 733 "ieor" intrinsic 734 "index" intrinsic 735 "int" intrinsic 736 "int2" intrinsic 737 "ior" intrinsic 738 "ishft" intrinsic 739 "ishftc" intrinsic 740 "kind" intrinsic 741 "lbound" intrinsic 742 "len" intrinsic 743 "len_trim" intrinsic 744 "lge" intrinsic 745 "lgt" intrinsic 746 "lle" intrinsic 747 "llt" intrinsic 748 "log" intrinsic 749 "log10" intrinsic 750 "matmul" intrinsic 751 "max" intrinsic 752 "maxexponent" intrinsic 753 "maxloc" intrinsic 754 "maxval" intrinsic 755 "merge" intrinsic 756 "min" intrinsic 757 "minexponent" intrinsic 758 "minloc" intrinsic 759 "minval" intrinsic 760 "mod" intrinsic 761 "modulo" intrinsic 762 "mvbits" intrinsic 763 "nearest" intrinsic 764 "nint" intrinsic 765 "not" intrinsic 766 "null" intrinsic 767 "pack" intrinsic 768 "present" intrinsic 769 "product" intrinsic 770 "radix" intrinsic 771 "random_number" intrinsic 772 "random_seed" intrinsic 773 "range" intrinsic 774 "real" intrinsic 775 "repeat" intrinsic 776 "reshape" intrinsic 777 "rrspacing" intrinsic 778 "scale" intrinsic 779 "scan" intrinsic 780 "selected_int_kind" intrinsic 781 "selected_real_kind" intrinsic 782 "set_exponent" intrinsic 783 "shape" intrinsic 784 "sign" intrinsic 785 "sin" intrinsic 786 "sinh" intrinsic 787 "size" intrinsic 788 "spacing" intrinsic 789 "spread" intrinsic 790 "sqrt" intrinsic 791 "sum" intrinsic 792 "system_clock" intrinsic 793 "tan" intrinsic 794 "tanh" intrinsic 795 "tiny" intrinsic 796 "transfer" intrinsic 797 "transpose" intrinsic 798 "trim" intrinsic 799 "true" bool 800 "ubound" intrinsic 801 "unpack" intrinsic 802 "verify" intrinsic 803 done 804 " \t" ws_ident 805 806 :intrinsic Builtin 807 * idle noeat 808 809 :kw Keyword 810 * idle noeat 811 812 :type Type 813 * idle noeat 814 815 :label Label 816 * idle noeat 817 818 :cond Conditional 819 * idle noeat 820 821 :loop Loop 822 * idle noeat