diff --git a/code.md b/code.md
index 261f226..74ca568 100644
--- a/code.md
+++ b/code.md
@@ -61,27 +61,9 @@ class Person extends Thing
with Person!
.name = "MoonScript"
\say_name!
-
-export my_func
-x = 2323
-
-collection =
- height: 32434
- hats: {"tophat", "bball", "bowler"}
-
-my_func = (a) -> x + a
-
-print my_func 100
-
-import concat, insert from table
-
-double_args = (...) ->
- [x * 2 for x in *{...}]
-
-tuples = [{k, v} for k,v in ipairs my_table]
```
-## `CoffeeScript`
+## `coffeescript`
```coffeescript
author = "Wittgenstein"
@@ -90,13 +72,13 @@ quote = "A picture is a fact. -- #{ author }"
sentence = "#{ 22 / 7 } is a decent approximation of π"
```
-## `JavaScript`
+## `javascript`
```javascript
let a = "what is this?"
```
-## `Lua`
+## `lua`
```lua
local test = "this is a string"
diff --git a/plugins/pygments.moon b/plugins/pygments.moon
new file mode 100644
index 0000000..64565ad
--- /dev/null
+++ b/plugins/pygments.moon
@@ -0,0 +1,61 @@
+html = require "sitegen.html"
+
+class CustomPygments extends require "sitegen.plugins.pygments"
+ filter: (text, page) =>
+ -- require("moon").p text
+ -- super(text, page)
+ text -- pandoc output
+ super(text, page) -- plugin output
+
+ highlight: (lang, code) =>
+ -- print "HIGHLIGHT CALLED"
+ -- require("moon").p code
+ fname = os.tmpname!
+ with io.open fname, "w"
+ \write code
+ \close!
+
+ -- p = io.popen ("pygmentize -f html -l %s %s")\format lang, fname
+ -- out = p\read"*a"
+ --
+ -- -- get rid of the div and pre inserted by pygments
+ -- assert out\match('^
'),
+ -- "Failed to parse pygmentize result, is pygments installed?"
+
+ cmd = "pygmentize -f html -O style=dracula,wrapcode,classprefix=py- -l %s %s"
+
+ if lang == "moon" or lang == "moonscript"
+ p = io.popen (cmd .. " -x")\format "moonscript.py", fname
+ -- -- p = io.popen (cmd)\format "moonscript", fname
+
+ out = p\read"*a"
+ p\close!
+ -- out
+
+ -- get rid of the div and pre inserted by pygments
+ assert out\match('^'),
+ "Failed to parse pygmentize result, is pygments installed?"
+ else
+ if lang == nil or lang == "heex"
+ -- if block.classes[1] == nil
+ -- cb = pandoc.CodeBlock(block.text, class: "sourceCode")
+ -- pandoc.Div cb, class: "sourceCode"
+ -- else
+ -- block
+ -- "code(nil or heex): #{code}"
+ code
+ else
+ status, handle_or_error = pcall ->
+ io.popen (cmd)\format lang, fname
+
+ sout = handle_or_error\read"*a"
+ handle_or_error\close!
+
+ if sout\len! == 0
+ -- "code: #{code}"
+ -- raw code
+ code
+ else
+ -- get rid of the div and pre inserted by pygments
+ assert sout\match('^'),
+ "Failed to parse pygmentize result, is pygments installed?"
diff --git a/site.moon b/site.moon
index 69801d7..59b3457 100644
--- a/site.moon
+++ b/site.moon
@@ -1,6 +1,7 @@
sitegen = require "sitegen"
Site = require "sitegen.site"
Path = require "sitegen.path"
+-- PygmentsPlugin = require "sitegen.plugins.pygments"
html = require "sitegen.html"
common = require "sitegen.common"
cosmo = require "sitegen.cosmo"
@@ -16,17 +17,80 @@ Site.config.out_dir = "html/"
-- Compile lua-filter used by Pandoc to highlight MoonScript syntax
os.execute "moonc pygments.moon"
+try_compile = (text, options=implicitly_return_root: false) ->
+ to_lua text, options
+
+-- PygmentsPlugin.highlight = (lang, code) =>
+ -- fname = os.tmpname!
+ -- with io.open fname, "w"
+ -- \write code
+ -- \close!
+ --
+ -- p = io.popen ("pygmentize -f html -l %s %s")\format lang, fname
+ -- out = p\read"*a"
+ --
+ -- -- get rid of the div and pre inserted by pygments
+ -- assert out\match('^'),
+ -- "Failed to parse pygmentize result, is pygments installed?"
+
+ -- print "HIGHLIGHT CALLED"
+ --
+ -- fname = os.tmpname!
+ -- with io.open fname, "w"
+ -- \write block.text
+ -- \close!
+ --
+ -- cmd = "pygmentize -f html -O style=dracula,wrapcode,classprefix=py- -l %s %s"
+ --
+ -- if lang == "moon" or lang == "moonscript"
+ -- -- p = io.popen ("pygmentize -f html -O style=dracula,wrapcode,classprefix=py- -l moonscript.py %s -x")\format fname
+ -- p = io.popen (cmd .. " -x")\format "moonscript.py", fname
+ -- -- p = io.popen (cmd)\format "moonscript", fname
+ --
+ -- -- p = io.open fname
+ -- out = p\read"*a"
+ -- p\close!
+ -- out
+ -- -- pandoc.RawBlock "html", "moonscript"
+ -- else
+ -- if lang == nil or lang == "heex"
+ -- -- if block.classes[1] == nil
+ -- -- cb = pandoc.CodeBlock(block.text, class: "sourceCode")
+ -- -- pandoc.Div cb, class: "sourceCode"
+ -- -- else
+ -- -- block
+ --
+ -- "code: #{code}"
+ -- else
+ -- status, handle_or_error = pcall ->
+ -- io.popen (cmd)\format lang, fname
+ -- -- io.open fname
+ --
+ -- sout = handle_or_error\read"*a"
+ -- -- handle_or_error\close!
+ -- if sout\len! == 0
+ -- -- cb = pandoc.CodeBlock(block.text, class: "sourceCode")
+ -- -- pandoc.Div cb, class: "sourceCode"
+ -- "code: #{code}"
+ -- else
+ -- -- pandoc.RawBlock "html", sout
+ -- sout
+
-- Configure the command our custom renderer uses to convert markdown to html
rend = "renderers.markdown"
-require(rend).cmd = "pandoc --mathjax --lua-filter pygments.lua >"
+-- require(rend).cmd = "pandoc --mathjax --no-highlight >"
+require(rend).cmd = "pandoc --mathjax >"
+-- require(rend).cmd = "pandoc --mathjax --lua-filter pygments.lua >"
-- Insert custom renderer in the first position so it will be preferred
table.insert Site.default_renderers, 1, rend
--- Remove "pygments" plugin because it conflicts with pandoc syntax highlighting
+-- Remove "pygments" plugin
Site.default_plugins = for v in *Site.default_plugins
if v\find "pygments" then continue else v
+table.insert Site.default_plugins, 1, "plugins.pygments"
+
-- from https://github.com/leafo/sitegen/blob/v0.2/spec/sitegen_spec.moon#L9-L18
get_files = (path, prefix=path) ->
files = Path.read_exec "find", path, "-type", "f"
@@ -131,6 +195,23 @@ sitegen.create =>
publish_date: format_date date true
-- add_all files_from "docs"
+ -- with PygmentsPlugin.custom_highlighters
+ -- .moon = (code_text, page, options) =>
+ -- lua_text, err = try_compile code_text, options
+ -- return err if not lua_text
+ --
+ -- html.build ->
+ -- tag.span "moon custom highlighter"
+ --
+ -- .heex = (code_text, page, options) =>
+ -- lua_text, err = try_compile code_text, options
+ -- return err if not lua_text
+ --
+ -- html.build ->
+ -- tag.span "heex custom highlighter"
+
+
+
copy "app.css"
copy "pygments.css"
copy "moonscript.css"