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')

MoinMoin: parser/fortran90.py (last edited 2007-10-29 19:11:02 by localhost)