From 78d5336467b6f4c70f078fdd1939747af3ee76ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rnar=20Brende=20Smestad?= Date: Sat, 7 Jun 2025 21:40:34 +0200 Subject: [PATCH 1/3] Added fenced code block syntax highlighting in markdown for every language that has syntax highlighting by default in micro --- runtime/syntax/markdown.yaml | 124 ++++++++++++++++++++++++++--------- 1 file changed, 92 insertions(+), 32 deletions(-) diff --git a/runtime/syntax/markdown.yaml b/runtime/syntax/markdown.yaml index 32c79cf7b0..860481f02c 100644 --- a/runtime/syntax/markdown.yaml +++ b/runtime/syntax/markdown.yaml @@ -1,48 +1,108 @@ filetype: markdown - detect: - filename: "\\.(livemd|md|mkd|mkdn|markdown)$" - + filename: \.(livemd|md|mkd|mkdn|markdown)$ rules: - # Tables (Github extension) - - type: ".*[ :]\\|[ :].*" +# Tables (Github extension) +- type: ".*[ :]\\|[ :].*" - # quotes - - statement: "^>.*" + # quotes +- statement: "^>.*" - # Emphasis - - type: "(^|[[:space:]])(_[^ ][^_]*_|\\*[^ ][^*]*\\*)" + # Emphasis +- type: "(^|[[:space:]])(_[^ ][^_]*_|\\*[^ ][^*]*\\*)" - # Strong emphasis - - type: "(^|[[:space:]])(__[^ ][^_]*__|\\*\\*[^ ][^*]*\\*\\*)" + # Strong emphasis +- type: "(^|[[:space:]])(__[^ ][^_]*__|\\*\\*[^ ][^*]*\\*\\*)" - # strike-through - - type: "(^|[[:space:]])~~[^ ][^~]*~~" + # strike-through +- type: "(^|[[:space:]])~~[^ ][^~]*~~" + + # horizontal rules +- special: "^(---+|===+|___+|\\*\\*\\*+)\\s*$" - # horizontal rules - - special: "^(---+|===+|___+|\\*\\*\\*+)\\s*$" + # headlines +- special: "^#{1,6}.*" - # headlines - - special: "^#{1,6}.*" + # lists +- identifier: "^[[:space:]]*[\\*+-] |^[[:space:]]*[0-9]+\\. " - # lists - - identifier: "^[[:space:]]*[\\*+-] |^[[:space:]]*[0-9]+\\. " + # misc +- preproc: "(\\(([CcRr]|[Tt][Mm])\\)|\\.{3}|(^|[[:space:]])\\-\\-($|[[:space:]]))" - # misc - - preproc: "(\\(([CcRr]|[Tt][Mm])\\)|\\.{3}|(^|[[:space:]])\\-\\-($|[[:space:]]))" + # links +- constant: "\\[[^]]+\\]" +- constant: "\\[([^][]|\\[[^]]*\\])*\\]\\([^)]+\\)" - # links - - constant: "\\[[^]]+\\]" - - constant: "\\[([^][]|\\[[^]]*\\])*\\]\\([^)]+\\)" + # images +- underlined: "!\\[[^][]*\\](\\([^)]+\\)|\\[[^]]+\\])" - # images - - underlined: "!\\[[^][]*\\](\\([^)]+\\)|\\[[^]]+\\])" + # urls +- underlined: "https?://[^ )>]+" - # urls - - underlined: "https?://[^ )>]+" +- special: "^```$" - - special: "^```$" + # Fenced code blocks for syntax highlighting +- default: + start: "(?i)^```(c)$" + end: "^```$" + rules: + - include: "c" +- default: + start: "(?i)^```(c\\+\\+|cpp)$" + end: "^```$" + rules: + - include: "c++" +- default: + start: "(?i)^```(csharp|c\\#)$" + end: "^```$" + rules: + - include: "csharp" +- default: + start: "(?i)^```(golang|go)$" + end: "^```$" + rules: + - include: "go" +- default: + start: "(?i)^```(java)$" + end: "^```$" + rules: + - include: "java" +- default: + start: "(?i)^```(javascript|js)$" + end: "^```$" + rules: + - include: "javascript" +- default: + start: "(?i)^```(php)$" + end: "^```$" + rules: + - include: "php" +- default: + start: "(?i)^```(python3|python|py)$" + end: "^```$" + rules: + - include: "python" +- default: + start: "(?i)^```(rust|rs)$" + end: "^```$" + rules: + - include: "rust" +- default: + start: "(?i)^```(sh|powershell|shell|bash)$" + end: "^```$" + rules: + - include: "shell" +- default: + start: "(?i)^```(sql)$" + end: "^```$" + rules: + - include: "sql" +- default: + start: "(?i)^```(typescript|ts)$" + end: "^```$" + rules: + - include: "typescript" - - special: - start: "`" - end: "`" +- special: + start: "`" + end: "`" From 1ddeeb640f23c688b85d687bf4847c6b3c5eca47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rnar=20Brende=20Smestad?= Date: Sun, 8 Jun 2025 20:23:40 +0200 Subject: [PATCH 2/3] Fixed indentation, added more languages, retrieved regex match group from vscode --- runtime/syntax/markdown.yaml | 211 ++++++++++++++++++++--------------- 1 file changed, 120 insertions(+), 91 deletions(-) diff --git a/runtime/syntax/markdown.yaml b/runtime/syntax/markdown.yaml index 860481f02c..0af940c76f 100644 --- a/runtime/syntax/markdown.yaml +++ b/runtime/syntax/markdown.yaml @@ -2,107 +2,136 @@ filetype: markdown detect: filename: \.(livemd|md|mkd|mkdn|markdown)$ rules: -# Tables (Github extension) -- type: ".*[ :]\\|[ :].*" + # Tables (Github extension) + - type: ".*[ :]\\|[ :].*" - # quotes -- statement: "^>.*" + # quotes + - statement: "^>.*" - # Emphasis -- type: "(^|[[:space:]])(_[^ ][^_]*_|\\*[^ ][^*]*\\*)" + # Emphasis + - type: "(^|[[:space:]])(_[^ ][^_]*_|\\*[^ ][^*]*\\*)" - # Strong emphasis -- type: "(^|[[:space:]])(__[^ ][^_]*__|\\*\\*[^ ][^*]*\\*\\*)" + # Strong emphasis + - type: "(^|[[:space:]])(__[^ ][^_]*__|\\*\\*[^ ][^*]*\\*\\*)" - # strike-through -- type: "(^|[[:space:]])~~[^ ][^~]*~~" - - # horizontal rules -- special: "^(---+|===+|___+|\\*\\*\\*+)\\s*$" + # strike-through + - type: "(^|[[:space:]])~~[^ ][^~]*~~" + + # horizontal rules + - special: "^(---+|===+|___+|\\*\\*\\*+)\\s*$" - # headlines -- special: "^#{1,6}.*" + # headlines + - special: "^#{1,6}.*" - # lists -- identifier: "^[[:space:]]*[\\*+-] |^[[:space:]]*[0-9]+\\. " + # lists + - identifier: "^[[:space:]]*[\\*+-] |^[[:space:]]*[0-9]+\\. " - # misc -- preproc: "(\\(([CcRr]|[Tt][Mm])\\)|\\.{3}|(^|[[:space:]])\\-\\-($|[[:space:]]))" + # misc + - preproc: "(\\(([CcRr]|[Tt][Mm])\\)|\\.{3}|(^|[[:space:]])\\-\\-($|[[:space:]]))" - # links -- constant: "\\[[^]]+\\]" -- constant: "\\[([^][]|\\[[^]]*\\])*\\]\\([^)]+\\)" + # links + - constant: "\\[[^]]+\\]" + - constant: "\\[([^][]|\\[[^]]*\\])*\\]\\([^)]+\\)" - # images -- underlined: "!\\[[^][]*\\](\\([^)]+\\)|\\[[^]]+\\])" + # images + - underlined: "!\\[[^][]*\\](\\([^)]+\\)|\\[[^]]+\\])" - # urls -- underlined: "https?://[^ )>]+" + # urls + - underlined: "https?://[^ )>]+" -- special: "^```$" + - special: "^```$" - # Fenced code blocks for syntax highlighting -- default: - start: "(?i)^```(c)$" - end: "^```$" - rules: - - include: "c" -- default: - start: "(?i)^```(c\\+\\+|cpp)$" - end: "^```$" - rules: - - include: "c++" -- default: - start: "(?i)^```(csharp|c\\#)$" - end: "^```$" - rules: - - include: "csharp" -- default: - start: "(?i)^```(golang|go)$" - end: "^```$" - rules: - - include: "go" -- default: - start: "(?i)^```(java)$" - end: "^```$" - rules: - - include: "java" -- default: - start: "(?i)^```(javascript|js)$" - end: "^```$" - rules: - - include: "javascript" -- default: - start: "(?i)^```(php)$" - end: "^```$" - rules: - - include: "php" -- default: - start: "(?i)^```(python3|python|py)$" - end: "^```$" - rules: - - include: "python" -- default: - start: "(?i)^```(rust|rs)$" - end: "^```$" - rules: - - include: "rust" -- default: - start: "(?i)^```(sh|powershell|shell|bash)$" - end: "^```$" - rules: - - include: "shell" -- default: - start: "(?i)^```(sql)$" - end: "^```$" - rules: - - include: "sql" -- default: - start: "(?i)^```(typescript|ts)$" - end: "^```$" - rules: - - include: "typescript" + # Fenced code blocks for syntax highlighting + - default: + start: "(?i)^```((c|h)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" + end: "^```$" + rules: + - include: "c" + - default: + start: "(?i)^```((cpp|c\\+\\+|cxx)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" + end: "^```$" + rules: + - include: "c++" + - default: + start: "(?i)^```((cs|csharp|c#)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" + end: "^```$" + rules: + - include: "csharp" + - default: + start: "(?i)^```((css|css.erb)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" + end: "^```$" + rules: + - include: "css" + - default: + start: "(?i)^```((patch|diff|rej)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" + end: "^```$" + rules: + - include: "patch" + - default: + start: "(?i)^```((go|golang)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" + end: "^```$" + rules: + - include: "go" + - default: + start: "(?i)^```((ini|conf)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" + end: "^```$" + rules: + - include: "ini" + - default: + start: "(?i)^```((java|bsh)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" + end: "^```$" + rules: + - include: "java" + - default: + start: "(?i)^```((js|jsx|javascript|es6|mjs|cjs|dataviewjs|\\{\\.js.+?\\})((\\\ + s+|:|,|\\{|\\?)[^`]*)?$)$" + end: "^```$" + rules: + - include: "javascript" + - default: + start: "(?i)^```((json|json5|sublime-settings|sublime-menu|sublime-keymap|sublime-mousemap|sublime-theme|sublime-build|sublime-project|sublime-completions)((\\\ + s+|:|,|\\{|\\?)[^`]*)?$)$" + end: "^```$" + rules: + - include: "json" + - default: + start: "(?i)^```((php|php3|php4|php5|phpt|phtml|aw|ctp)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" + end: "^```$" + rules: + - include: "php" + - default: + start: "(?i)^```((python|py|py3|rpy|pyw|cpy|SConstruct|Sconstruct|sconstruct|SConscript|gyp|gypi|\\\ + {\\.python.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)$" + end: "^```$" + rules: + - include: "python" + - default: + start: "(?i)^```((rust|rs|\\{\\.rust.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)$" + end: "^```$" + rules: + - include: "rust" + - default: + start: "(?i)^```((shell|sh|bash|zsh|bashrc|bash_profile|bash_login|profile|bash_logout|.textmate_init|\\\ + {\\.bash.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)$" + end: "^```$" + rules: + - include: "shell" + - default: + start: "(?i)^```((sql|ddl|dml)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" + end: "^```$" + rules: + - include: "sql" + - default: + start: "(?i)^```((typescript|ts)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" + end: "^```$" + rules: + - include: "typescript" + - default: + start: "(?i)^```((yaml|yml)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" + end: "^```$" + rules: + - include: "yaml" -- special: - start: "`" - end: "`" + - special: + start: "`" + end: "`" From 1f5b858d790e8b9be7b666ce9d1f1c69b965a20f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rnar=20Brende=20Smestad?= Date: Sun, 8 Jun 2025 20:26:38 +0200 Subject: [PATCH 3/3] Fixed formatting Fixed double set of ?$ Removed whitespace and renamed the syntax highlighting section Reverted dedenting of filename: Fixed indentation of include --- runtime/syntax/markdown.yaml | 280 ++++++++++++++++++----------------- 1 file changed, 143 insertions(+), 137 deletions(-) diff --git a/runtime/syntax/markdown.yaml b/runtime/syntax/markdown.yaml index 0af940c76f..5e6998fc91 100644 --- a/runtime/syntax/markdown.yaml +++ b/runtime/syntax/markdown.yaml @@ -1,137 +1,143 @@ -filetype: markdown -detect: - filename: \.(livemd|md|mkd|mkdn|markdown)$ -rules: - # Tables (Github extension) - - type: ".*[ :]\\|[ :].*" - - # quotes - - statement: "^>.*" - - # Emphasis - - type: "(^|[[:space:]])(_[^ ][^_]*_|\\*[^ ][^*]*\\*)" - - # Strong emphasis - - type: "(^|[[:space:]])(__[^ ][^_]*__|\\*\\*[^ ][^*]*\\*\\*)" - - # strike-through - - type: "(^|[[:space:]])~~[^ ][^~]*~~" - - # horizontal rules - - special: "^(---+|===+|___+|\\*\\*\\*+)\\s*$" - - # headlines - - special: "^#{1,6}.*" - - # lists - - identifier: "^[[:space:]]*[\\*+-] |^[[:space:]]*[0-9]+\\. " - - # misc - - preproc: "(\\(([CcRr]|[Tt][Mm])\\)|\\.{3}|(^|[[:space:]])\\-\\-($|[[:space:]]))" - - # links - - constant: "\\[[^]]+\\]" - - constant: "\\[([^][]|\\[[^]]*\\])*\\]\\([^)]+\\)" - - # images - - underlined: "!\\[[^][]*\\](\\([^)]+\\)|\\[[^]]+\\])" - - # urls - - underlined: "https?://[^ )>]+" - - - special: "^```$" - - # Fenced code blocks for syntax highlighting - - default: - start: "(?i)^```((c|h)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" - end: "^```$" - rules: - - include: "c" - - default: - start: "(?i)^```((cpp|c\\+\\+|cxx)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" - end: "^```$" - rules: - - include: "c++" - - default: - start: "(?i)^```((cs|csharp|c#)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" - end: "^```$" - rules: - - include: "csharp" - - default: - start: "(?i)^```((css|css.erb)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" - end: "^```$" - rules: - - include: "css" - - default: - start: "(?i)^```((patch|diff|rej)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" - end: "^```$" - rules: - - include: "patch" - - default: - start: "(?i)^```((go|golang)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" - end: "^```$" - rules: - - include: "go" - - default: - start: "(?i)^```((ini|conf)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" - end: "^```$" - rules: - - include: "ini" - - default: - start: "(?i)^```((java|bsh)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" - end: "^```$" - rules: - - include: "java" - - default: - start: "(?i)^```((js|jsx|javascript|es6|mjs|cjs|dataviewjs|\\{\\.js.+?\\})((\\\ - s+|:|,|\\{|\\?)[^`]*)?$)$" - end: "^```$" - rules: - - include: "javascript" - - default: - start: "(?i)^```((json|json5|sublime-settings|sublime-menu|sublime-keymap|sublime-mousemap|sublime-theme|sublime-build|sublime-project|sublime-completions)((\\\ - s+|:|,|\\{|\\?)[^`]*)?$)$" - end: "^```$" - rules: - - include: "json" - - default: - start: "(?i)^```((php|php3|php4|php5|phpt|phtml|aw|ctp)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" - end: "^```$" - rules: - - include: "php" - - default: - start: "(?i)^```((python|py|py3|rpy|pyw|cpy|SConstruct|Sconstruct|sconstruct|SConscript|gyp|gypi|\\\ - {\\.python.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)$" - end: "^```$" - rules: - - include: "python" - - default: - start: "(?i)^```((rust|rs|\\{\\.rust.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)$" - end: "^```$" - rules: - - include: "rust" - - default: - start: "(?i)^```((shell|sh|bash|zsh|bashrc|bash_profile|bash_login|profile|bash_logout|.textmate_init|\\\ - {\\.bash.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)$" - end: "^```$" - rules: - - include: "shell" - - default: - start: "(?i)^```((sql|ddl|dml)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" - end: "^```$" - rules: - - include: "sql" - - default: - start: "(?i)^```((typescript|ts)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" - end: "^```$" - rules: - - include: "typescript" - - default: - start: "(?i)^```((yaml|yml)((\\s+|:|,|\\{|\\?)[^`]*)?$)$" - end: "^```$" - rules: - - include: "yaml" - - - special: - start: "`" - end: "`" +filetype: markdown + +detect: + filename: \.(livemd|md|mkd|mkdn|markdown)$ + +rules: + # tables (Github extension) + - type: ".*[ :]\\|[ :].*" + + # quotes + - statement: "^>.*" + + # emphasis + - type: "(^|[[:space:]])(_[^ ][^_]*_|\\*[^ ][^*]*\\*)" + + # strong emphasis + - type: "(^|[[:space:]])(__[^ ][^_]*__|\\*\\*[^ ][^*]*\\*\\*)" + + # strike-through + - type: "(^|[[:space:]])~~[^ ][^~]*~~" + + # horizontal rules + - special: "^(---+|===+|___+|\\*\\*\\*+)\\s*$" + + # headlines + - special: "^#{1,6}.*" + + # lists + - identifier: "^[[:space:]]*[\\*+-] |^[[:space:]]*[0-9]+\\. " + + # misc + - preproc: "(\\(([CcRr]|[Tt][Mm])\\)|\\.{3}|(^|[[:space:]])\\-\\-($|[[:space:]]))" + + # links + - constant: "\\[[^]]+\\]" + - constant: "\\[([^][]|\\[[^]]*\\])*\\]\\([^)]+\\)" + + # images + - underlined: "!\\[[^][]*\\](\\([^)]+\\)|\\[[^]]+\\])" + + # urls + - underlined: "https?://[^ )>]+" + + - special: "^```$" + + # syntax highlighting of fenced code blocks + - default: + start: "(?i)^```(c|h)((\\s+|:|,|\\{|\\?)[^`]*)?$" + end: "^```$" + rules: + - include: "c" + - default: + start: "(?i)^```(cpp|c\\+\\+|cxx)((\\s+|:|,|\\{|\\?)[^`]*)?$" + end: "^```$" + rules: + - include: "c++" + - default: + start: "(?i)^```(cs|csharp|c#)((\\s+|:|,|\\{|\\?)[^`]*)?$" + end: "^```$" + rules: + - include: "csharp" + - default: + start: "(?i)^```(css|css.erb)((\\s+|:|,|\\{|\\?)[^`]*)?$" + end: "^```$" + rules: + - include: "css" + - default: + start: "(?i)^```(patch|diff|rej)((\\s+|:|,|\\{|\\?)[^`]*)?$" + end: "^```$" + rules: + - include: "patch" + - default: + start: "(?i)^```(go|golang)((\\s+|:|,|\\{|\\?)[^`]*)?$" + end: "^```$" + rules: + - include: "go" + - default: + start: "(?i)^```(ini|conf)((\\s+|:|,|\\{|\\?)[^`]*)?$" + end: "^```$" + rules: + - include: "ini" + - default: + start: "(?i)^```(java|bsh)((\\s+|:|,|\\{|\\?)[^`]*)?$" + end: "^```$" + rules: + - include: "java" + - default: + start: + "(?i)^```(js|jsx|javascript|es6|mjs|cjs|dataviewjs|\\{\\.js.+?\\})((\\\ + s+|:|,|\\{|\\?)[^`]*)?$" + end: "^```$" + rules: + - include: "javascript" + - default: + start: + "(?i)^```(json|json5|sublime-settings|sublime-menu|sublime-keymap|sublime-mousemap|sublime-theme|sublime-build|sublime-project|sublime-completions)((\\\ + s+|:|,|\\{|\\?)[^`]*)?$" + end: "^```$" + rules: + - include: "json" + - default: + start: "(?i)^```(php|php3|php4|php5|phpt|phtml|aw|ctp)((\\s+|:|,|\\{|\\?)[^`]*)?$" + end: "^```$" + rules: + - include: "php" + - default: + start: + "(?i)^```(python|py|py3|rpy|pyw|cpy|SConstruct|Sconstruct|sconstruct|SConscript|gyp|gypi|\\\ + {\\.python.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$" + end: "^```$" + rules: + - include: "python" + - default: + start: "(?i)^```(rust|rs|\\{\\.rust.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$" + end: "^```$" + rules: + - include: "rust" + - default: + start: + "(?i)^```(shell|sh|bash|zsh|bashrc|bash_profile|bash_login|profile|bash_logout|.textmate_init|\\\ + {\\.bash.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$" + end: "^```$" + rules: + - include: "shell" + - default: + start: "(?i)^```(sql|ddl|dml)((\\s+|:|,|\\{|\\?)[^`]*)?$" + end: "^```$" + rules: + - include: "sql" + - default: + start: "(?i)^```(typescript|ts)((\\s+|:|,|\\{|\\?)[^`]*)?$" + end: "^```$" + rules: + - include: "typescript" + - default: + start: "(?i)^```(yaml|yml)((\\s+|:|,|\\{|\\?)[^`]*)?$" + end: "^```$" + rules: + - include: "yaml" + + - special: + start: "`" + end: "`"