Brand new Haml highlighter

The main features of Haml can be correctly parsed according to
http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html.

There exist some limitations inherently comming from the limitations
of state machine based highlighters (without side effects)... this parsers
sucks with multiline comments, strings etc since the indent based grouping
can't be evaluated.
This commit is contained in:
cn 2011-10-19 20:34:20 +02:00
parent 0c2921e849
commit 2b59cf9e90
3 changed files with 133 additions and 1 deletions

11
ftyperc
View File

@ -866,6 +866,15 @@
*.erb
-syntax erb
.html.erb
ERB within HTML
*.html.erb
-syntax htmlerb
Haml
*.haml
-syntax haml
-istep 2
-indentc 32
-autoindent
-smarthome
-smartbacks

115
haml.jsf Normal file
View File

@ -0,0 +1,115 @@
# JOE syntax highlight file for Haml
=Idle
=Comment green
=Constant cyan
=Escape bold cyan
=Bad bold red
=Brace magenta
=Tag fg_310
=Class yellow
=Id green
=Doctype bold magenta
=Filter blue
:line_start Idle
* idle noeat
# eat indent
" " line_start
"\\" escape_first recolor=-1
"!" doctype1
"%" tag recolor=-1
# implicit <div>
".#" after_tag noeat
"/" html_comment recolor=-1
":" filter recolor=-1
:escape_first Constant
* idle
:idle Constant
* idle
"\n" line_start
"=~-" ruby_call noeat
"&!" maybe_esc_ruby_call
"#" maybe_subst
"\\" maybe_subst_escape
:doctype1 Idle
* idle recolor=-2
"=" esc_ruby_call recolor=-2
"!" doctype2
:doctype2 Idle
* idle recolor=-3
"!" doctype3 recolor=-3
:doctype3 Doctype
* doctype3
"\n" line_start
:tag Tag
* idle noeat
"a-zA-Z0-9_-" tag
".#{(/" after_tag noeat
:after_tag Idle
* idle noeat
"." class recolor=-1
"#" id recolor=-1
"{" attrA
"(" attrB
"/" tag_close recolor=-1
:class Class
* after_tag noeat
"a-zA-Z0-9_-" class
:id Id
* after_tag noeat
"a-zA-Z0-9_-" id
:attrA Idle
* attrA
"}" after_tag
:attrB Idle
* attrB
")" after_tag
:tag_close Tag
* idle noeat
:html_comment Comment
* html_comment
"\n" line_start
:ruby_call Idle
* line_start call=ruby.ruby(haml)
:maybe_esc_ruby_call Constant
* idle
"=" esc_ruby_call recolor=-2
:esc_ruby_call Idle
* line_start call=ruby.ruby(haml)
"=" esc_ruby_call2
:esc_ruby_call2 Idle
* line_start call=ruby.ruby(haml)
:maybe_subst Constant
* idle
"{" subst recolor=-2
:subst Escape
* subst
"}" idle
:maybe_subst_escape Constant
* idle
:filter Filter
* idle
"a-zA-Z0-9_" filter

View File

@ -40,7 +40,11 @@
:rest Idle
* rest
"#" line_comment recolor=-1
.ifdef haml
"\n" NULL return
.else
"\n" idle
.endif
"{}" brace recolor=-1
"0" first_digit recolor=-1
"1-9" decimal recolor=-1
@ -183,7 +187,11 @@ done
.endif
# might be TODO label
"BFHNTX" line_comment noeat call=.comment_todo()
.ifdef haml
"\n" NULL return
.else
"\n" idle
.endif
:line_comment_maybe_erb_end Comment
">" NULL recolor=-2 return