1 """
2 MoinMoin - Fortran90 Source Parser
3
4 @copyright: 2006 Christian Meisenbichler
5 @license: GNU GPL, see COPYING for details.
6
7 css:
8
9 pre.cpparea { font-style: sans-serif; color: #000000; }
10
11 pre.cpparea span.ID { color: #000000; }
12 pre.cpparea span.Char { color: #004080; }
13 pre.cpparea span.Comment { color: #808080; }
14 pre.cpparea span.Number { color: #008080; font-weight: bold; }
15 pre.cpparea span.String { color: #004080; }
16 pre.cpparea span.SPChar { color: #0000C0; }
17 pre.cpparea span.ResWord { color: #4040ff; font-weight: bold; }
18 pre.cpparea span.ConsWord { color: #008080; font-weight: bold; }
19 pre.cpparea span.ResWord2 { color: #0080ff; font-weight: bold; }
20 pre.cpparea span.Special { color: #0000ff; }
21 pre.cpparea span.Preprc { color: #804000; }
22
23 """
24
25 from MoinMoin.util.ParserBase import ParserBase
26
27 Dependencies = []
28
29 class Parser(ParserBase):
30
31 parsername = "ColorizedFortran90"
32 extensions = ['.f90', '.F90', '.f']
33 Dependencies = []
34
35 def setupRules(self):
36 ParserBase.setupRules(self)
37
38
39 self.addRule("Comment","!.*$")
40 self.addRulePair("String",'L?"',r'$|[^\\](\\\\)*"')
41 self.addRule("Char",r"'\\.'|'[^\\]'")
42 self.addRule("Number",r"[0-9](\.[0-9]*)?(eE[+-][0-9])?[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?")
43 self.addRule("Preprc",r"^\s*#(.*\\\n)*(.*(?!\\))$")
44 self.addRule("ID","[a-zA-Z_][0-9a-zA-Z_]*")
45 self.addRule("SPChar",r"[~!%^&*()+=|\[\]:;,.<>/?{}-]")
46
47 reserved_words = ['ACCEPT','accept','ASSIGN','assign','AUTOMATIC',
48 'automatic','BACKSPACE','backspace','BLOCK','block','CALL','call',
49 'CLOSE','close','COMMON','common','CONTINUE','continue',
50 'DATA','data','DECODE','decode','DELETE','delete','DIMENSION',
51 'dimension','DO','do','ELSE','else','ELSEIF','elseif','ENCODE',
52 'encode','END *FILE','end *file','ENDFILE','endfile','END',
53 'end','ENDIF','endif','ENTRY','entry','EQUIVALENCE','equivalence',
54 'EXIT','exit','EXTERNAL','external','FORMAT','format','FUNCTION',
55 'function','GOTO','goto','IF','if','IMPLICIT','implicit',
56 'INCLUDE','include','INQUIRE','inquire','INTRINSIC','intrinsic',
57 'LOGICAL','logical','MAP','map','NONE','none','ON','on','OPEN',
58 'open','PARAMETER','parameter','PAUSE','pause','POINTER','pointer'
59 ,'PRINT','print','PROGRAM','program','READ','read','RECORD',
60 'record','RETURN','return','REWIND','rewind','SAVE','save',
61 'STATIC','static','STOP','stop','STRUCTURE','structure',
62 'SUBROUTINE','subroutine','SYSTEM','system','THEN','then','TO',
63 'to','TYPE','type','UNION','union','UNLOCK','unlock',
64 'VIRTUAL','virtual','VOLATILE','volatile','WHILE','while',
65 'WRITE','write']
66 reserved_words2 = ['ALLOCATABLE','allocatable','ALLOCATE','allocate',
67 'CASE','case','CONTAINS','contains','CYCLE','cycle',
68 'DEALLOCATE','deallocate','ELSEWHERE','elsewhere','ENDWHERE',
69 'endwhere','INTENT','intent','INTERFACE','interface','MODULE',
70 'module','NAMELIST','namelist','OPTIONAL','optional','PRIVATE',
71 'private','PROCEDURE','procedure','PUBLIC','public','REWRITE',
72 'rewrite','SELECT',r'select','USE','use','WHERE','where']
73
74 special_words = ['BYTE','byte','CHARACTER','character','COMPLEX',
75 'complex','DOUBLE COMPLEX','double complex','DOUBLE PRECISION'
76 ,'double *precision','DOUBLE','double','INTEGER','integer',
77 'REAL','real']
78 constant_words = ['.true.','.false.','NULL']
79
80 self.addReserved(reserved_words)
81 self.addConstant(constant_words)
82
83 self.addWords(reserved_words2,'ResWord2')
84 self.addWords(special_words,'Special')