Better syntax highlighting

This commit is contained in:
Denis Merigoux 2020-03-10 16:47:50 +01:00
parent fed849201e
commit 785d2d2311
3 changed files with 89 additions and 42 deletions

View File

@ -18,7 +18,7 @@
'begin' : '(@@)' 'begin' : '(@@)'
'beginCaptures' : { 'beginCaptures' : {
'1' : { '1' : {
'name' : 'markup.lawspec' 'name' : 'markup.heading.title.lawspec'
} }
} }
'patterns' : [ 'patterns' : [
@ -29,7 +29,7 @@
'end' : '(@@)' 'end' : '(@@)'
'endCaptures' : { 'endCaptures' : {
'1' : { '1' : {
'name' : 'markup.lawspec' 'name' : 'markup.heading.title.lawspec'
} }
} }
} }
@ -37,7 +37,7 @@
'begin' : '(@)' 'begin' : '(@)'
'beginCaptures' : { 'beginCaptures' : {
'1' : { '1' : {
'name' : 'markup.heading.lawspec' 'name' : 'markup.heading.subtitle.lawspec'
} }
} }
'patterns' : [ 'patterns' : [
@ -48,19 +48,19 @@
'end' : '(@)' 'end' : '(@)'
'endCaptures' : { 'endCaptures' : {
'1' : { '1' : {
'name' : 'markup.heading.lawspec' 'name' : 'markup.heading.subtitle.lawspec'
} }
} }
} }
{ {
'match' : '([^\\/])' 'match' : '([^\\/])'
'name' : 'text.lawspec' 'name' : 'entity.law.lawspec'
} }
{ {
'begin' : '(\\/\\*)' 'begin' : '(\\/\\*)'
'beginCaptures' : { 'beginCaptures' : {
'1' : { '1' : {
'name' : 'markup.prompt.lawspec' 'name' : 'comment.block.documentation.lawspec'
} }
} }
'patterns' : [ 'patterns' : [
@ -71,7 +71,7 @@
'end' : '(\\*\\/)' 'end' : '(\\*\\/)'
'endCaptures' : { 'endCaptures' : {
'1' : { '1' : {
'name' : 'markup.prompt.lawspec' 'name' : 'comment.block.documentation.lawspec'
} }
} }
} }
@ -81,14 +81,32 @@
'patterns' : [ 'patterns' : [
{ {
'match' : '(\\s*\\#.*$)' 'match' : '(\\s*\\#.*$)'
'name' : 'comment.lawspec' 'name' : 'comment.line.lawspec'
} }
{ {
'match' : '\\b(choix|situation|optionnel|donnée|source|de|type|règle|pour|tout|on|a|tel|que|existe|défini|comme|fonction|paramètres|renvoie|selon|sous\\s*|forme|assertion|varie|avec|décroissante|croissante|fixé|par|conséquence|condition)\\b' 'match' : '(donnée|constante)(\\s+)([a-z\\x{00e9}\\x{00e8}\\x{00e0}\\x{00e2}\\x{00f9}\\x{00ee}\\x{00ea}\\x{0153}\\x{00e7}][a-z\\x{00e9}\\x{00e8}\\x{00e0}\\x{00e2}\\x{00f9}\\x{00ee}\\x{00ea}\\x{0153}\\x{00e7}A-Z\\x{00c9}\\x{00c8}\\x{00c0}\\x{00c2}\\x{00d9}\\x{00ce}\\x{00ca}\\x{0152}\\x{00c7}0-9_\\\']*)'
'captures' : {
'1' : {
'name' : 'keyword.lawspec'
}
'2' : {
'name' : 'text.lawspec'
}
'3' : {
'name' : 'variable.lawspec'
}
}
}
{
'match' : '\\b(existe|selon|sous\\s+forme|fixé\\s+par|décroissante|croissante|varie\\s+avec|on\\s+a|tel\\s+que|pour\\s+tout)\\b'
'name' : 'keyword.control.lawspec'
}
{
'match' : '\\b(choix|situation|donnée|optionnel|source|de|type|règle|défini|comme|fonction|paramètres|renvoie|assertion|conséquence|condition|collection|constante)\\b'
'name' : 'keyword.lawspec' 'name' : 'keyword.lawspec'
} }
{ {
'match' : '(\\-\\-|;|\\.|:|\\(|\\))' 'match' : '(\\-\\-|\\;|\\.|\\,|\\:|\\(|\\))'
'name' : 'punctuation.lawspec' 'name' : 'punctuation.lawspec'
} }
{ {
@ -96,15 +114,15 @@
'name' : 'keyword.operator.lawspec' 'name' : 'keyword.operator.lawspec'
} }
{ {
'match' : '\\b(entier|booléen|date|montant)\\b' 'match' : '\\b(entier|booléen|date|montant|décret|loi|an|mois|jour)\\b'
'name' : 'entity.name.type.lawspec' 'name' : 'support.type.lawspec'
} }
{ {
'match' : '\\b([a-z\\x{00e9}\\x{00e8}\\x{00e0}\\x{00e2}\\x{00f9}\\x{00ee}\\x{00ea}\\x{0153}\\x{00e7}][a-z\\x{00e9}\\x{00e8}\\x{00e0}\\x{00e2}\\x{00f9}\\x{00ee}\\x{00ea}\\x{0153}\\x{00e7}A-Z\\x{00c9}\\x{00c8}\\x{00c0}\\x{00c2}\\x{00d9}\\x{00ce}\\x{00ca}\\x{0152}\\x{00c7}0-9_]*)\\b' 'match' : '\\b([a-z\\x{00e9}\\x{00e8}\\x{00e0}\\x{00e2}\\x{00f9}\\x{00ee}\\x{00ea}\\x{0153}\\x{00e7}][a-z\\x{00e9}\\x{00e8}\\x{00e0}\\x{00e2}\\x{00f9}\\x{00ee}\\x{00ea}\\x{0153}\\x{00e7}A-Z\\x{00c9}\\x{00c8}\\x{00c0}\\x{00c2}\\x{00d9}\\x{00ce}\\x{00ca}\\x{0152}\\x{00c7}0-9_\\\']*)\\b'
'name' : 'variable.lawspec' 'name' : 'meta.variable_id.lawspec'
} }
{ {
'match' : '\\b([A-Z\\x{00c9}\\x{00c8}\\x{00c0}\\x{00c2}\\x{00d9}\\x{00ce}\\x{00ca}\\x{0152}\\x{00c7}][a-z\\x{00e9}\\x{00e8}\\x{00e0}\\x{00e2}\\x{00f9}\\x{00ee}\\x{00ea}\\x{0153}\\x{00e7}A-Z\\x{00c9}\\x{00c8}\\x{00c0}\\x{00c2}\\x{00d9}\\x{00ce}\\x{00ca}\\x{0152}\\x{00c7}0-9_]*)\\b' 'match' : '\\b([A-Z\\x{00c9}\\x{00c8}\\x{00c0}\\x{00c2}\\x{00d9}\\x{00ce}\\x{00ca}\\x{0152}\\x{00c7}][a-z\\x{00e9}\\x{00e8}\\x{00e0}\\x{00e2}\\x{00f9}\\x{00ee}\\x{00ea}\\x{0153}\\x{00e7}A-Z\\x{00c9}\\x{00c8}\\x{00c0}\\x{00c2}\\x{00d9}\\x{00ce}\\x{00ca}\\x{0152}\\x{00c7}0-9_\\\']*)\\b'
'name' : 'entity.name.class.lawspec' 'name' : 'entity.name.class.lawspec'
} }
] ]
@ -113,7 +131,7 @@
'patterns' : [ 'patterns' : [
{ {
'match' : '(.)' 'match' : '(.)'
'name' : 'markup.lawspec' 'name' : 'markup.heading.title.lawspec'
} }
] ]
} }
@ -121,7 +139,7 @@
'patterns' : [ 'patterns' : [
{ {
'match' : '(.)' 'match' : '(.)'
'name' : 'markup.heading.lawspec' 'name' : 'markup.heading.subtitle.lawspec'
} }
] ]
} }

View File

@ -10,12 +10,17 @@ styles [] {
.comment : style { .comment : style {
color = light_green color = light_green
italic = true italic = true
ace_scope = comment textmate_scope = comment.line
textmate_scope = comment pygments_scope = Comment.Single
pygments_scope = Comment
} }
.sc_id : style { .sc_id : style {
textmate_scope = meta.variable_id
pygments_scope = String
}
.var_decl : style {
color = orange
textmate_scope = variable textmate_scope = variable
pygments_scope = Name.Variable pygments_scope = Name.Variable
} }
@ -30,49 +35,61 @@ styles [] {
.law_title : style { .law_title : style {
color = yellow color = yellow
italic = false italic = false
textmate_scope = markup textmate_scope = markup.heading.title
pygments_scope = Generic pygments_scope = Generic.Heading
} }
.law_subtitle : style { .law_subtitle : style {
color = gold color = gold
italic = true italic = true
textmate_scope = markup.heading textmate_scope = markup.heading.subtitle
pygments_scope = Generic.Heading pygments_scope = Generic.Heading
} }
.law : style { .law : style {
color = light_yellow color = light_yellow
italic = false italic = false
textmate_scope = text textmate_scope = entity.law
pygments_scope = String.Doc pygments_scope = String.Doc
} }
.code_delimiter : style { .code_delimiter : style {
color = grey color = grey
italic = false italic = false
textmate_scope = markup.prompt textmate_scope = comment.block.documentation
pygments_scope = Generic.Prompt pygments_scope = Comment.Special
} }
.primitive : style { .primitive : style {
color = purple color = purple
textmate_scope = entity.name.type textmate_scope = support.type
pygments_scope = Keyword.Type pygments_scope = Keyword.Type
} }
.keyword : style { .whitespace : style {
textmate_scope = text
pygments_scope = String
}
.keyword_expression : style {
color = pink
ace_scope = keyword
textmate_scope = keyword.control
pygments_scope = Keyword
}
.keyword_rule : style {
color = cyan color = cyan
ace_scope = keyword ace_scope = keyword
textmate_scope = keyword textmate_scope = keyword
pygments_scope = Keyword pygments_scope = Keyword.Declaration
} }
.punctuation : style { .punctuation : style {
color = red_2 color = red_2
ace_scope = punctuation ace_scope = punctuation
textmate_scope = punctuation textmate_scope = punctuation
pygments_scope = Punctuation pygments_scope = Operator
} }
.operator : style { .operator : style {
@ -91,9 +108,9 @@ __LOWER_CHARS \= a-zéèàâùîêœç
__UPPER_CHARS \= A-ZÉÈÀÂÙÎÊŒÇ __UPPER_CHARS \= A-ZÉÈÀÂÙÎÊŒÇ
__SC_ID \= [$${__LOWER_CHARS}][$${__LOWER_CHARS}$${__UPPER_CHARS}0-9_]* __SC_ID \= [$${__LOWER_CHARS}][$${__LOWER_CHARS}$${__UPPER_CHARS}0-9_\']*
__CC_ID \= [$${__UPPER_CHARS}][$${__LOWER_CHARS}$${__UPPER_CHARS}0-9_]* __CC_ID \= [$${__UPPER_CHARS}][$${__LOWER_CHARS}$${__UPPER_CHARS}0-9_\']*
contexts [] { contexts [] {
@ -155,12 +172,22 @@ code : context {
} }
: pattern { : pattern {
regex \= \b(choix|situation|donnée|optionnel|source|de|type|règle|pour|tout|on|a|tel|que|existe|défini|comme|fonction|paramètres|renvoie|selon|sous\s*|forme|assertion|varie|avec|décroissante|croissante|fixé|par|conséquence|condition)\b regex \= (donnée|constante)(\s+)($${__SC_ID})
styles [] = .keyword ; styles [] = .keyword_rule, .whitespace, .var_decl;
} }
: pattern { : pattern {
regex \= (\-\-|;|\.|:|\(|\)) regex \= \b(existe|selon|sous\s+forme|fixé\s+par|décroissante|croissante|varie\s+avec|on\s+a|tel\s+que|pour\s+tout)\b
styles [] = .keyword_expression ;
}
: pattern {
regex \= \b(choix|situation|donnée|optionnel|source|de|type|règle|défini|comme|fonction|paramètres|renvoie|assertion|conséquence|condition|collection|constante)\b
styles [] = .keyword_rule ;
}
: pattern {
regex \= (\-\-|\;|\.|\,|\:|\(|\))
styles [] = .punctuation; styles [] = .punctuation;
} }
@ -170,7 +197,7 @@ code : context {
} }
: pattern { : pattern {
regex \= \b(entier|booléen|date|montant)\b regex \= \b(entier|booléen|date|montant|décret|loi|an|mois|jour)\b
styles [] = .primitive; styles [] = .primitive;
} }

View File

@ -34,13 +34,15 @@ class LawspecLexer(RegexLexer):
# ], # ],
# 'main__3' : [ # 'main__3' : [
# (u'(\\*\\/)', bygroups(Generic.Prompt), '#pop'), # (u'(\\*\\/)', bygroups(Generic.Prompt), '#pop'),
(u'(\\s*\\#.*$)', bygroups(Comment)), (u'(\\s*\\#.*$)', bygroups(Comment.Single)),
(u'\\b(choix|situation|donn\xe9e|optionnel|source|de|type|r\xe8gle|pour|tout|on|a|tel|que|existe|d\xe9fini|comme|fonction|param\xe8tres|renvoie|selon|sous\\s*|forme|assertion|varie|avec|d\xe9croissante|croissante|fix\xe9|par|cons\xe9quence|condition)\\b', bygroups(Keyword)), (u'(donn\xe9e|constante)(\\s+)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)', bygroups(Keyword.Declaration, String, Name.Variable)),
(u'(\\-\\-|;|\\.|:|\\(|\\))', bygroups(Punctuation)), (u'\\b(existe|selon|sous\\s+forme|fix\xe9\\s+par|d\xe9croissante|croissante|varie\\s+avec|on\\s+a|tel\\s+que|pour\\s+tout)\\b', bygroups(Keyword)),
(u'\\b(choix|situation|donn\xe9e|optionnel|source|de|type|r\xe8gle|d\xe9fini|comme|fonction|param\xe8tres|renvoie|assertion|cons\xe9quence|condition|collection|constante)\\b', bygroups(Keyword.Declaration)),
(u'(\\-\\-|\\;|\\.|\\,|\\:|\\(|\\))', bygroups(Operator)),
(u'(\\+|\\-|\\*|/|\\!|ou|et|=|>|<)', bygroups(Operator)), (u'(\\+|\\-|\\*|/|\\!|ou|et|=|>|<)', bygroups(Operator)),
(u'\\b(entier|bool\xe9en|date|montant)\\b', bygroups(Keyword.Type)), (u'\\b(entier|bool\xe9en|date|montant|d\xe9cret|loi|an|mois|jour)\\b', bygroups(Keyword.Type)),
(u'\\b([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_]*)\\b', bygroups(Name.Variable)), (u'\\b([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)\\b', bygroups(Text)),
(u'\\b([A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_]*)\\b', bygroups(Name.Class)), (u'\\b([A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)\\b', bygroups(Name.Class)),
('(\n|\r|\r\n)', String), ('(\n|\r|\r\n)', String),
('.', String), ('.', String),
] ]