From f926cb7302a510836afffb0d7debae3a2aedf2de Mon Sep 17 00:00:00 2001 From: Jessica He Date: Wed, 1 Jun 2022 10:30:11 -0400 Subject: [PATCH] progress on dtd grammar Signed-off-by: Jessica He --- syntaxes/dtd.tmLanguage.json | 126 ++++++++++++++++++++++++++++------- 1 file changed, 102 insertions(+), 24 deletions(-) diff --git a/syntaxes/dtd.tmLanguage.json b/syntaxes/dtd.tmLanguage.json index f6df471e..82b36c5c 100644 --- a/syntaxes/dtd.tmLanguage.json +++ b/syntaxes/dtd.tmLanguage.json @@ -6,42 +6,120 @@ ], "patterns": [ { - "begin": "()", + "name": "comment.block.dtd" + }, + { + "include": "#EntityDecl" + }, + { + "include": "#ElementDecl" + }, + { + "include": "#AttlistDecl" + } + ], + "repository": { + "EntityDecl": { + "begin": "()", + "patterns": [ + { + "begin": "'|\"", + "end": "'|\"", + "name": "string.quoted.double.dtd" } - }, - "end": "\\s*(>)", - "name": "meta.tag.type.dtd", + ] + }, + "ElementDecl": { + "begin": "()", "patterns": [ { - "match": "\\s+(CDATA|IDREFS|IDREF|ID|NMTOKENS|NMTOKEN|ENTITY|ENTITIES|NOTATION|SYSTEM|NDATA)", - "name": "keyword.other.data-type.dtd" + "begin": "'|\"", + "end": "'|\"", + "name": "string.quoted.double.dtd" }, { - "match": "(#[A-Z]+)|(ANY)|(EMPTY)", + "match": "((?<=\\()|(?<=,)|(?<=|))([A-Za-z]+)((?=\\)|(?=\\,)|(?=\\+)|(?=\\?)|(?=\\*)|(?<=|)))", + "name": "variable.parameter.dtd" + }, + { + "match": "(#[A-Z]+)|\\s+(ANY)|\\s+(EMPTY)", "name": "constant.language.dtd" }, + { + "match": "[+]|[?]|[*]", + "name": "keyword.operator.dtd" + } + ] + }, + "AttlistDecl": { + "patterns": [ { "begin": "'|\"", "end": "'|\"", "name": "string.quoted.double.dtd" }, { - "begin": "(%[a-zA-Z][a-zA-Z0-9_-])", - "end": ";", - "name": "variable.language.dtd" + "match": "()", + "name": "punctuation.definition.tag.dtd" + }, + { + "match": "ATTLIST", + "name": "keyword.other.entity.dtd" + }, + { + "begin": "(?<=ATTLIST)", + "end": "([A-Z]+)", + "name": "entity.name.type.dtd" + }, + { + "match": "(^|\\s+)([A-Z]+)\\s*", + "name": "variable.parameter.dtd" + }, + { + "match": "\\s*(CDATA|ID|IDREF|IDREFS|NMTOKEN|NMTOKENS|ENTITY|ENTITIES|NOTATION)\\s*", + "name": "constant.language.dtd" + }, + { + "match": "((?<=\\()|(?<=|))([A-Za-z-]+)((?=\\)|(?=\\|)|(?=\\*)))", + "name": "variable.other.dtd" + }, + { + "match": "\\s*(#REQUIRED|#IMPLIED|#FIXED)\\s*", + "name": "storage.modifier.dtd" } - ] - }, - { - "begin": "()", - "name": "comment.block.dtd" - } - ] + ] + } + } } \ No newline at end of file