2 " Language: Speedup, plant simulator from AspenTech
3 " Maintainer: Stefan.Schwarzer <s.schwarzer@ndh.net>
4 " URL: http://www.ndh.net/home/sschwarzer/download/spup.vim
5 " Last Change: 2003 May 11
9 " - in the appropriate sections keywords are always highlighted
10 " even if they are not used with the appropriate meaning;
15 " both "area" are highlighted as spupType.
17 " If you encounter problems or have questions or suggestions, mail me
19 " Remove old syntax stuff
20 " For version 5.x: Clear all syntax items
21 " For version 6.x: Quit when a syntax file was already loaded
24 elseif exists("b:current_syntax")
28 " don't hightlight several keywords like subsections
29 "let strict_subsections = 1
31 " highlight types usually found in DECLARE section
32 if !exists("hightlight_types")
33 let highlight_types = 1
36 " one line comment syntax (# comments)
37 " 1. allow appended code after comment, do not complain
38 " 2. show code beginnig with the second # as an error
39 " 3. show whole lines with more than one # as an error
40 if !exists("oneline_comments")
41 let oneline_comments = 2
44 " Speedup SECTION regions
46 syn region spupCdi matchgroup=spupSection start="^CDI" end="^\*\*\*\*" contains=spupCdiSubs,@spupOrdinary
47 syn region spupConditions matchgroup=spupSection start="^CONDITIONS" end="^\*\*\*\*" contains=spupConditionsSubs,@spupOrdinary,spupConditional,spupOperator,spupCode
48 syn region spupDeclare matchgroup=spupSection start="^DECLARE" end="^\*\*\*\*" contains=spupDeclareSubs,@spupOrdinary,spupTypes,spupCode
49 syn region spupEstimation matchgroup=spupSection start="^ESTIMATION" end="^\*\*\*\*" contains=spupEstimationSubs,@spupOrdinary
50 syn region spupExternal matchgroup=spupSection start="^EXTERNAL" end="^\*\*\*\*" contains=spupExternalSubs,@spupOrdinary
51 syn region spupFlowsheet matchgroup=spupSection start="^FLOWSHEET" end="^\*\*\*\*" contains=spupFlowsheetSubs,@spupOrdinary,spupStreams,@spupTextproc
52 syn region spupFunction matchgroup=spupSection start="^FUNCTION" end="^\*\*\*\*" contains=spupFunctionSubs,@spupOrdinary,spupHelp,spupCode,spupTypes
53 syn region spupGlobal matchgroup=spupSection start="^GLOBAL" end="^\*\*\*\*" contains=spupGlobalSubs,@spupOrdinary
54 syn region spupHomotopy matchgroup=spupSection start="^HOMOTOPY" end="^\*\*\*\*" contains=spupHomotopySubs,@spupOrdinary
55 syn region spupMacro matchgroup=spupSection start="^MACRO" end="^\*\*\*\*" contains=spupMacroSubs,@spupOrdinary,@spupTextproc,spupTypes,spupStreams,spupOperator
56 syn region spupModel matchgroup=spupSection start="^MODEL" end="^\*\*\*\*" contains=spupModelSubs,@spupOrdinary,spupConditional,spupOperator,spupTypes,spupStreams,@spupTextproc,spupHelp
57 syn region spupOperation matchgroup=spupSection start="^OPERATION" end="^\*\*\*\*" contains=spupOperationSubs,@spupOrdinary,@spupTextproc
58 syn region spupOptions matchgroup=spupSection start="^OPTIONS" end="^\*\*\*\*" contains=spupOptionsSubs,@spupOrdinary
59 syn region spupProcedure matchgroup=spupSection start="^PROCEDURE" end="^\*\*\*\*" contains=spupProcedureSubs,@spupOrdinary,spupHelp,spupCode,spupTypes
60 syn region spupProfiles matchgroup=spupSection start="^PROFILES" end="^\*\*\*\*" contains=@spupOrdinary,@spupTextproc
61 syn region spupReport matchgroup=spupSection start="^REPORT" end="^\*\*\*\*" contains=spupReportSubs,@spupOrdinary,spupHelp,@spupTextproc
62 syn region spupTitle matchgroup=spupSection start="^TITLE" end="^\*\*\*\*" contains=spupTitleSubs,spupComment,spupConstant,spupError
63 syn region spupUnit matchgroup=spupSection start="^UNIT" end="^\*\*\*\*" contains=spupUnitSubs,@spupOrdinary
66 syn keyword spupCdiSubs INPUT FREE OUTPUT LINEARTIME MINNONZERO CALCULATE FILES SCALING contained
67 syn keyword spupDeclareSubs TYPE STREAM contained
68 syn keyword spupEstimationSubs ESTIMATE SSEXP DYNEXP RESULT contained
69 syn keyword spupExternalSubs TRANSMIT RECEIVE contained
70 syn keyword spupFlowsheetSubs STREAM contained
71 syn keyword spupFunctionSubs INPUT OUTPUT contained
72 syn keyword spupGlobalSubs VARIABLES MAXIMIZE MINIMIZE CONSTRAINT contained
73 syn keyword spupHomotopySubs VARY OPTIONS contained
74 syn keyword spupMacroSubs MODEL FLOWSHEET contained
75 syn keyword spupModelSubs CATEGORY SET TYPE STREAM EQUATION PROCEDURE contained
76 syn keyword spupOperationSubs SET PRESET INITIAL SSTATE FREE contained
77 syn keyword spupOptionsSubs ROUTINES TRANSLATE EXECUTION contained
78 syn keyword spupProcedureSubs INPUT OUTPUT SPACE PRECALL POSTCALL DERIVATIVE STREAM contained
79 " no subsections for Profiles
80 syn keyword spupReportSubs SET INITIAL FIELDS FIELDMARK DISPLAY WITHIN contained
81 syn keyword spupUnitSubs ROUTINES SET contained
83 " additional keywords for subsections
84 if !exists( "strict_subsections" )
85 syn keyword spupConditionsSubs STOP PRINT contained
86 syn keyword spupDeclareSubs UNIT SET COMPONENTS THERMO OPTIONS contained
87 syn keyword spupEstimationSubs VARY MEASURE INITIAL contained
88 syn keyword spupFlowsheetSubs TYPE FEED PRODUCT INPUT OUTPUT CONNECTION OF IS contained
89 syn keyword spupMacroSubs CONNECTION STREAM SET INPUT OUTPUT OF IS FEED PRODUCT TYPE contained
90 syn keyword spupModelSubs AS ARRAY OF INPUT OUTPUT CONNECTION contained
91 syn keyword spupOperationSubs WITHIN contained
92 syn keyword spupReportSubs LEFT RIGHT CENTER CENTRE UOM TIME DATE VERSION RELDATE contained
93 syn keyword spupUnitSubs IS A contained
97 if exists( "highlight_types" )
98 syn keyword spupTypes act_coeff_liq area coefficient concentration contained
99 syn keyword spupTypes control_signal cond_liq cond_vap cp_mass_liq contained
100 syn keyword spupTypes cp_mol_liq cp_mol_vap cv_mol_liq cv_mol_vap contained
101 syn keyword spupTypes diffus_liq diffus_vap delta_p dens_mass contained
102 syn keyword spupTypes dens_mass_sol dens_mass_liq dens_mass_vap dens_mol contained
103 syn keyword spupTypes dens_mol_sol dens_mol_liq dens_mol_vap enthflow contained
104 syn keyword spupTypes enth_mass enth_mass_liq enth_mass_vap enth_mol contained
105 syn keyword spupTypes enth_mol_sol enth_mol_liq enth_mol_vap entr_mol contained
106 syn keyword spupTypes entr_mol_sol entr_mol_liq entr_mol_vap fraction contained
107 syn keyword spupTypes flow_mass flow_mass_liq flow_mass_vap flow_mol contained
108 syn keyword spupTypes flow_mol_vap flow_mol_liq flow_vol flow_vol_vap contained
109 syn keyword spupTypes flow_vol_liq fuga_vap fuga_liq fuga_sol contained
110 syn keyword spupTypes gibb_mol_sol heat_react heat_trans_coeff contained
111 syn keyword spupTypes holdup_heat holdup_heat_liq holdup_heat_vap contained
112 syn keyword spupTypes holdup_mass holdup_mass_liq holdup_mass_vap contained
113 syn keyword spupTypes holdup_mol holdup_mol_liq holdup_mol_vap k_value contained
114 syn keyword spupTypes length length_delta length_short liqfraction contained
115 syn keyword spupTypes liqmassfraction mass massfraction molefraction contained
116 syn keyword spupTypes molweight moment_inertia negative notype percent contained
117 syn keyword spupTypes positive pressure press_diff press_drop press_rise contained
118 syn keyword spupTypes ratio reaction reaction_mass rotation surf_tens contained
119 syn keyword spupTypes temperature temperature_abs temp_diff temp_drop contained
120 syn keyword spupTypes temp_rise time vapfraction vapmassfraction contained
121 syn keyword spupTypes velocity visc_liq visc_vap volume zmom_rate contained
122 syn keyword spupTypes seg_rate smom_rate tmom_rate zmom_mass seg_mass contained
123 syn keyword spupTypes smom_mass tmom_mass zmom_holdup seg_holdup contained
124 syn keyword spupTypes smom_holdup tmom_holdup contained
128 syn keyword spupStreams mainstream vapour liquid contained
130 " "conditional" keywords
131 syn keyword spupConditional IF THEN ELSE ENDIF contained
132 " Operators, symbols etc.
133 syn keyword spupOperator AND OR NOT contained
134 syn match spupSymbol "[,\-+=:;*/\"<>@%()]" contained
135 syn match spupSpecial "[&\$?]" contained
136 " Surprisingly, Speedup allows no unary + instead of the -
137 syn match spupError "[(=+\-*/]\s*+\d\+\([ed][+-]\=\d\+\)\=\>"lc=1 contained
138 syn match spupError "[(=+\-*/]\s*+\d\+\.\([ed][+-]\=\d\+\)\=\>"lc=1 contained
139 syn match spupError "[(=+\-*/]\s*+\d*\.\d\+\([ed][+-]\=\d\+\)\=\>"lc=1 contained
141 syn region spupString start=+"+ end=+"+ oneline contained
142 syn region spupString start=+'+ end=+'+ oneline contained
144 syn match spupIdentifier "\<[a-z][a-z0-9_]*\>" contained
145 " Textprocessor directives
146 syn match spupTextprocGeneric "?[a-z][a-z0-9_]*\>" contained
147 syn region spupTextprocError matchgroup=spupTextprocGeneric start="?ERROR" end="?END"he=s-1 contained
148 " Number, without decimal point
149 syn match spupNumber "-\=\d\+\([ed][+-]\=\d\+\)\=" contained
150 " Number, allows 1. before exponent
151 syn match spupNumber "-\=\d\+\.\([ed][+-]\=\d\+\)\=" contained
152 " Number allows .1 before exponent
153 syn match spupNumber "-\=\d*\.\d\+\([ed][+-]\=\d\+\)\=" contained
155 syn region spupHelp start="^HELP"hs=e+1 end="^\$ENDHELP"he=s-1 contained
157 syn region spupCode start="^CODE"hs=e+1 end="^\$ENDCODE"he=s-1 contained
159 if oneline_comments > 3
160 oneline_comments = 2 " default
162 if oneline_comments == 1
163 syn match spupComment "#[^#]*#\="
164 elseif oneline_comments == 2
165 syn match spupError "#.*$"
166 syn match spupComment "#[^#]*" nextgroup=spupError
167 elseif oneline_comments == 3
168 syn match spupComment "#[^#]*"
169 syn match spupError "#[^#]*#.*"
172 syn match spupOpenBrace "{" contained
173 syn match spupError "}"
174 syn region spupComment matchgroup=spupComment2 start="{" end="}" keepend contains=spupOpenBrace
176 syn cluster spupOrdinary contains=spupNumber,spupIdentifier,spupSymbol
177 syn cluster spupOrdinary add=spupError,spupString,spupComment
178 syn cluster spupTextproc contains=spupTextprocGeneric,spupTextprocError
180 " define syncronizing; especially OPERATION sections can become very large
182 syn sync minlines=100
183 syn sync maxlines=500
185 syn sync match spupSyncOperation grouphere spupOperation "^OPERATION"
186 syn sync match spupSyncCdi grouphere spupCdi "^CDI"
187 syn sync match spupSyncConditions grouphere spupConditions "^CONDITIONS"
188 syn sync match spupSyncDeclare grouphere spupDeclare "^DECLARE"
189 syn sync match spupSyncEstimation grouphere spupEstimation "^ESTIMATION"
190 syn sync match spupSyncExternal grouphere spupExternal "^EXTERNAL"
191 syn sync match spupSyncFlowsheet grouphere spupFlowsheet "^FLOWSHEET"
192 syn sync match spupSyncFunction grouphere spupFunction "^FUNCTION"
193 syn sync match spupSyncGlobal grouphere spupGlobal "^GLOBAL"
194 syn sync match spupSyncHomotopy grouphere spupHomotopy "^HOMOTOPY"
195 syn sync match spupSyncMacro grouphere spupMacro "^MACRO"
196 syn sync match spupSyncModel grouphere spupModel "^MODEL"
197 syn sync match spupSyncOperation grouphere spupOperation "^OPERATION"
198 syn sync match spupSyncOptions grouphere spupOptions "^OPTIONS"
199 syn sync match spupSyncProcedure grouphere spupProcedure "^PROCEDURE"
200 syn sync match spupSyncProfiles grouphere spupProfiles "^PROFILES"
201 syn sync match spupSyncReport grouphere spupReport "^REPORT"
202 syn sync match spupSyncTitle grouphere spupTitle "^TITLE"
203 syn sync match spupSyncUnit grouphere spupUnit "^UNIT"
205 " Define the default highlighting.
206 " For version 5.7 and earlier: only when not done already
207 " For version 5.8 and later: only when an item doesn't have highlighting yet
208 if version >= 508 || !exists("did_spup_syn_inits")
210 let did_spup_syn_inits = 1
211 command -nargs=+ HiLink hi link <args>
213 command -nargs=+ HiLink hi def link <args>
216 HiLink spupCdi spupSection
217 HiLink spupConditions spupSection
218 HiLink spupDeclare spupSection
219 HiLink spupEstimation spupSection
220 HiLink spupExternal spupSection
221 HiLink spupFlowsheet spupSection
222 HiLink spupFunction spupSection
223 HiLink spupGlobal spupSection
224 HiLink spupHomotopy spupSection
225 HiLink spupMacro spupSection
226 HiLink spupModel spupSection
227 HiLink spupOperation spupSection
228 HiLink spupOptions spupSection
229 HiLink spupProcedure spupSection
230 HiLink spupProfiles spupSection
231 HiLink spupReport spupSection
232 HiLink spupTitle spupConstant " this is correct, truly ;)
233 HiLink spupUnit spupSection
235 HiLink spupCdiSubs spupSubs
236 HiLink spupConditionsSubs spupSubs
237 HiLink spupDeclareSubs spupSubs
238 HiLink spupEstimationSubs spupSubs
239 HiLink spupExternalSubs spupSubs
240 HiLink spupFlowsheetSubs spupSubs
241 HiLink spupFunctionSubs spupSubs
242 HiLink spupHomotopySubs spupSubs
243 HiLink spupMacroSubs spupSubs
244 HiLink spupModelSubs spupSubs
245 HiLink spupOperationSubs spupSubs
246 HiLink spupOptionsSubs spupSubs
247 HiLink spupProcedureSubs spupSubs
248 HiLink spupReportSubs spupSubs
249 HiLink spupUnitSubs spupSubs
251 HiLink spupCode Normal
252 HiLink spupComment Comment
253 HiLink spupComment2 spupComment
254 HiLink spupConditional Statement
255 HiLink spupConstant Constant
256 HiLink spupError Error
257 HiLink spupHelp Normal
258 HiLink spupIdentifier Identifier
259 HiLink spupNumber Constant
260 HiLink spupOperator Special
261 HiLink spupOpenBrace spupError
262 HiLink spupSection Statement
263 HiLink spupSpecial spupTextprocGeneric
264 HiLink spupStreams Type
265 HiLink spupString Constant
266 HiLink spupSubs Statement
267 HiLink spupSymbol Special
268 HiLink spupTextprocError Normal
269 HiLink spupTextprocGeneric PreProc
270 HiLink spupTypes Type
275 let b:current_syntax = "spup"