diff options
Diffstat (limited to 'extra/layout.moon')
| -rw-r--r-- | extra/layout.moon | 150 |
1 files changed, 0 insertions, 150 deletions
diff --git a/extra/layout.moon b/extra/layout.moon deleted file mode 100644 index a0d8df1..0000000 --- a/extra/layout.moon +++ /dev/null @@ -1,150 +0,0 @@ -version = require 'alv.version' -import compile from require 'discount' - -render_meta = (meta) -> - import p, code from require 'extra.dom' - contents = {} - if meta.examples - -- table.insert contents, h4 'signature' - examples = p table.concat [code e for e in *meta.examples], ' ' - table.insert contents, examples - if meta.description - description = compile meta.description\match '^\n*(.+)\n*$' - table.insert contents, description.body - - contents - --- render an ALV Value to a HTML string -render = (name, value, prefix=nil, index=false) -> - import div, label, code, ul, li, i, a, pre from require 'extra.dom' - - id = if prefix then "#{prefix}/#{name}" else name - type = i value.type - assert value.meta, "#{id} doesn't have any metadata!" - summary = assert value.meta.summary, "#{id} doesn't have a summary!" - - if index - div { - label (a (code name), href: "##{id}"), ' (', type, '):  – ' - summary - } - else - content = switch value.type - when 'scope' - ul for k, result in opairs value!.values - li render k, result.value, id - else - render_meta value.meta - - content.class = 'nest' - div { - :id, class: 'def' - label (a (code name), href: "##{id}"), ' (', type, '):  – ' - summary - div content - } - --- generate a relative link -abs = (page) -> - if BASE - "#{BASE}#{page}" - else - assert OUT, "OUT needs to be set" - relative = assert (OUT\match '^docs/(.*)'), "unexpected output path" - _, depth = relative\gsub '/', '/' - up = string.rep '../', depth - "#{up}#{page}" - --- generate a link to a reference entry --- entry is one of --- builtin-name; mod.name/name; mod.name -link = (ref) -> - return version.web if ref == '*web*' - return version.repo if ref == '*repo*' - return version.release if ref == '*release*' - - mod, sym = ref\match '^(.+)/(.*)$' - abs "reference/#{mod or 'index'}.html##{sym or ref}" - -escape = (str) -> - (str\gsub '([*`])', '\\%1') - --- link to a reference -r = (text, ref) -> - import a, code from require 'extra.dom' - href = link ref or text - if ref - a text, :href - else - text = text\gsub '/$', '' - a (code escape text), :href - --- substitute markdown-style reference links -autoref = (str) -> - str = str\gsub '%[([^%]]-)%]%[%]', r - str = str\gsub '%[([^%]]-)%]%[:(.-):%]', r - str - -aopts = (href, pat) -> - { - href: abs href - class: if OUT\match "^docs/#{pat}" then 'active' - } - --- layout and write a doc page --- opts: --- - preamble --- - title --- - style --- - body (str or table) -layout = (opts) -> - import header, footer, nav, div, span, b, code, a, article from require 'extra.dom' - - head = header nav { - span { - b 'alive' - ' ' - a (code version.tag), href: version.release - ' documentation' - } - div class: 'grow' - a 'home', aopts 'index.html', 'index.html$' - a 'getting started', aopts 'guide.html', 'guide.html$' - a 'reference', aopts 'reference/index.html', 'reference' - a 'internals', aopts 'internals/index.html', 'ldoc' - } - body = article opts.body - title = if opts.title - "#{opts.title} - alive" - else - "alive documentation" - foot = footer div { - 'alive ' - a (code version.tag), href: version.release - ', generated ' - os.date '!%Y-%m-%d %T' - } - - "#{opts.preamble or ''} -<!DOCTYPE html> -<html> - <head> - <meta charset=\"UTF-8\"> - <meta name=\"viewport\" content=\"width=640\"> - - <title>#{title}</title> - <link rel=\"stylesheet\" href=\"#{opts.style or abs 'style.css'}\"> - </head> - <body> - #{head} - #{body} - #{foot} - </body> -</html>" - - -{ - :autoref - :render - :layout -} |
