summaryrefslogtreecommitdiff
path: root/context
diff options
context:
space:
mode:
authorMarius <mariausol@gmail.com>2011-11-21 19:40:15 +0200
committerMarius <mariausol@gmail.com>2011-11-21 19:40:15 +0200
commit411958915524daa27f2ef8cd6299b31191d88572 (patch)
tree38a8d7efa7a757c8afdd92bbb17af4d72d9e8d4e /context
parented9ce64970b8efbaf358d7383eb4b65277201756 (diff)
downloadcontext-411958915524daa27f2ef8cd6299b31191d88572.tar.gz
beta 2011.11.21 18:27
Diffstat (limited to 'context')
-rw-r--r--context/data/scite/lexers/scite-context-lexer-xml.lua99
1 files changed, 95 insertions, 4 deletions
diff --git a/context/data/scite/lexers/scite-context-lexer-xml.lua b/context/data/scite/lexers/scite-context-lexer-xml.lua
index 33eeaa210..3c7e30ce7 100644
--- a/context/data/scite/lexers/scite-context-lexer-xml.lua
+++ b/context/data/scite/lexers/scite-context-lexer-xml.lua
@@ -48,6 +48,15 @@ local openinstruction = P("<?")
local closeinstruction = P("?>")
local opencdata = P("<![CDATA[")
local closecdata = P("]]>")
+local opendoctype = P("<!DOCTYPE") -- could grab the whole doctype
+local closedoctype = P("]>") + P(">")
+
+-- <!DOCTYPE Something PUBLIC "... ..." "..." [ ... ] >
+-- <!DOCTYPE Something PUBLIC "... ..." "..." >
+-- <!DOCTYPE Something SYSTEM "... ..." [ ... ] >
+-- <!DOCTYPE Something SYSTEM "... ..." >
+-- <!DOCTYPE Something [ ... ] >
+-- <!DOCTYPE Something >
local entity = ampersand * (1-semicolon)^1 * semicolon
@@ -125,14 +134,95 @@ local p_dstring =
-- * token("comment",(1-closecdata)^0) -- different from context
-- * token("command",closecdata)
-local commentlexer = lexer.load("scite-context-lexer-xml-comment")
-local cdatalexer = lexer.load("scite-context-lexer-xml-cdata")
+-- maybe cdata just text (then we don't need the extra lexer as we only have one comment then)
+
+-- <!DOCTYPE Something PUBLIC "... ..." "..." [ ... ] >
+-- <!DOCTYPE Something PUBLIC "... ..." "..." >
+-- <!DOCTYPE Something SYSTEM "... ..." [ ... ] >
+-- <!DOCTYPE Something SYSTEM "... ..." >
+-- <!DOCTYPE Something [ ... ] >
+-- <!DOCTYPE Something >
+
+-- <!ENTITY xxxx SYSTEM "yyyy" NDATA zzzz>
+-- <!ENTITY xxxx PUBLIC "yyyy" >
+-- <!ENTITY xxxx "yyyy" >
+
+local p_docstr = p_dstring + p_sstring
+
+local p_docent = token("command",P("<!ENTITY"))
+ * p_optionalwhitespace
+ * token("keyword",name)
+ * p_optionalwhitespace
+ * (
+ (
+ token("constant",P("SYSTEM"))
+ * p_optionalwhitespace
+ * p_docstr
+ * p_optionalwhitespace
+ * token("constant",P("NDATA"))
+ * p_optionalwhitespace
+ * token("keyword",name)
+ ) + (
+ token("constant",P("PUBLIC"))
+ * p_optionalwhitespace
+ * p_docstr
+ ) + (
+ p_docstr
+ )
+ )
+ * p_optionalwhitespace
+ * token("command",P(">"))
+
+local p_docele = token("command",P("<!ELEMENT"))
+ * p_optionalwhitespace
+ * token("keyword",name)
+ * p_optionalwhitespace
+ * token("command",P("("))
+ * (
+ p_spacing
+ + token("constant",P("#CDATA") + P("#PCDATA") + P("ANY"))
+ + token("text",P(","))
+ + token("comment",(1-S(",)"))^1)
+ )^1
+ * token("command",P(")"))
+ * p_optionalwhitespace
+ * token("command",P(">"))
+
+local p_docset = token("command",P("["))
+ * p_optionalwhitespace
+ * ((p_optionalwhitespace * (p_docent + p_docele))^1 + token("comment",(1-P("]"))^0))
+ * p_optionalwhitespace
+ * token("command",P("]"))
+
+local p_doctype = token("command",P("<!DOCTYPE"))
+ * p_optionalwhitespace
+ * token("keyword",name)
+ * p_optionalwhitespace
+ * (
+ (
+ token("constant",P("PUBLIC"))
+ * p_optionalwhitespace
+ * p_docstr
+ * p_optionalwhitespace
+ * p_docstr
+ * p_optionalwhitespace
+ ) + (
+ token("constant",P("SYSTEM"))
+ * p_optionalwhitespace
+ * p_docstr
+ * p_optionalwhitespace
+ )
+ )^-1
+ * p_docset^-1
+ * p_optionalwhitespace
+ * token("command",P(">"))
+
+local commentlexer = lexer.load("scite-context-lexer-xml-comment") -- indirect (some issue with the lexer framework)
+local cdatalexer = lexer.load("scite-context-lexer-xml-cdata") -- indirect (some issue with the lexer framework)
lexer.embed_lexer(examplelexer, commentlexer, token("command",opencomment), token("command",closecomment))
lexer.embed_lexer(examplelexer, cdatalexer, token("command",opencdata), token("command",closecdata))
--- maybe cdata just text (then we don't need the extra lexer as we only have one comment then)
-
local p_name =
token("plain",name)
* (
@@ -197,6 +287,7 @@ _rules = {
-- { "text", p_text },
-- { "comment", p_comment },
-- { "cdata", p_cdata },
+ { "doctype", p_doctype },
{ "instruction", p_instruction },
{ "close", p_close },
{ "open", p_open },