From aedd7f485397b322fc88c60241fa1e5e684fd2b4 Mon Sep 17 00:00:00 2001 From: s-ol Date: Fri, 17 Apr 2020 16:08:45 +0200 Subject: move extra/ to docs/gen/ and split up --- extra/docs.moon | 270 --------------------------------------------------- extra/dom.moon | 68 ------------- extra/git-version.sh | 25 ----- extra/layout.moon | 150 ---------------------------- 4 files changed, 513 deletions(-) delete mode 100644 extra/docs.moon delete mode 100644 extra/dom.moon delete mode 100755 extra/git-version.sh delete mode 100644 extra/layout.moon (limited to 'extra') diff --git a/extra/docs.moon b/extra/docs.moon deleted file mode 100644 index 6ed5ea0..0000000 --- a/extra/docs.moon +++ /dev/null @@ -1,270 +0,0 @@ -import ValueStream, Scope from require 'alv' -import render, layout, autoref from require 'extra.layout' -import section, h1, h2, h3, p, ul, li, a, code, r from require 'extra.dom' - -export OUT, BASE, require -{ OUT, command } = arg - -slurp = (file) -> - file = io.open file, 'r' - with file\read '*all' - file\close! - -spit = (file, str) -> - file = io.open file, 'w' - file\write str - file\close! - -spit OUT, switch command - when 'module' - { _, _, module, name } = arg - - require = do - old_require = require - blacklist = {k, true for k in *{'osc', 'socket', 'system', 'luartmidi'}} - (mod, ...) -> - return {} if blacklist[mod] - old_require mod, ... - - name or= module - module = Scope.from_table require module - - layout - title: "#{name} reference" - body: section { - h2 (code name), ' module reference' - h3 'index' - ul for key, res in opairs module.values - li render key, res.value, nil, true - h3 'details' - ul for key, res in opairs module.values - li render key, res.value - } - - when 'reference' - layout - title: 'reference' - body: { - h1 (code 'alive'), " language reference" - p "This section documents all builtins and modules that are currently - available in the alive programming language." - p autoref "If you are new to alive, the [getting started guide][:../guide/:] is - the recommended place to start. If you are looking for - information on adding your own module or contributing to alive, check - out the [developer documentation][:../internals/index/:]." - section { - id: 'modules' - h2 a "module index", href: '#modules' - p autoref "These modules can be imported using [require][], " .. - "[import][] and [import*][]." - ul for file in *arg[3,] - path = file\match '^alv%-lib/(.*)%.moon$' - name = path\gsub '/', '.' - li a (code name), href: "#{path}.html" - } - section { - id: 'builtins' - h2 a "builtins", href: '#builtins' - p "These definitions are automatically loaded into the global Scope of - every alive session." - ul for key, val in opairs require 'alv.builtin' - li render key, ValueStream.wrap val - } - } - - when 'markdown' - import compile from require 'discount' - - { _, _, file } = arg - contents = slurp file - require 'discount' - - layout compile (autoref contents), 'githubtags', 'fencedcode' - - when 'ldoc' - BASE = '$(base)' - layout - style: '$(ldoc.css)' - title: '$(ldoc.title)' - class: 'ldoc' - preamble: ' -# local iter = ldoc.modules.iter -# local M = ldoc.markup -# local function display_name(item) -# if item.type == "function" then -# return item.name:gsub(":new$", "")..item.args -# else return item.name end -# end -# local function use_li(ls) -# if #ls > 1 then return "
  • ","
  • " else return "","" end -# end -# local base = module and "../../" or "../"' - body: { - class: 'ldoc' - ' -# if ldoc.body then - $(ldoc.body) -# elseif not module then -# if ldoc.description then -

    $(M(ldoc.description))

    -# end -# if ldoc.full_description then -

    $(M(ldoc.full_description))

    -#end - -# for kind, mods in ldoc.kinds() do -# kind = kind:lower() -

    $(kind)

    - -# end -# else -

    $(ldoc.module_typename(module):lower()) $(module.name)

    -

    $(M(module.summary, module))

    -

    $(M(module.description, module))

    - -# if module.see then -# local li,il = use_li(module.see) -

    see also:

    - -# end - -# if module.kinds()() then -

    index

    -# for kind, items in module.kinds() do -# kind = kind:lower() -

    $(kind)

    - -# end - -

    details

    -# for kind, items in module.kinds() do -# kind = kind:lower() -

    $(kind)

    - -# end -# end -# end -' - } - else - error "unknown command '#{command}'" diff --git a/extra/dom.moon b/extra/dom.moon deleted file mode 100644 index 7541fbd..0000000 --- a/extra/dom.moon +++ /dev/null @@ -1,68 +0,0 @@ --- mmm.dom --- see https://mmm.s-ol.nu/meta/mmm.dom/ - -export opairs - --- ordered table iterator, for stable(r) renderers -sort = (t, order_fn, only_strings) -> - with index = [k for k,v in pairs t when (not only_strings) or 'string' == type k] - table.sort index, order_fn - --- ordered next(t) -onext = (state, key) -> - state.i += state.step - { :t, :index, :i } = state - - if key = index[i] - key, t[key] - --- ordered pairs(t). --- order_fn is optional; see table.sort -opairs = (t, order_fn, only_strings=false) -> - state = { :t, i: 0, step: 1, index: sort t, order_fn, only_strings } - onext, state, nil - -void_tags = { 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr' } -void_tags = { t,t for t in *void_tags } - -element = (element) -> (...) -> - children = { ... } - - -- attributes are last arguments but mustn't be a ReactiveVar - attributes = children[#children] - if 'table' == (type attributes) and not attributes.node - table.remove children - else - attributes = {} - - b = "<#{element}" - for k,v in opairs attributes, nil, true - if k == 'style' and 'table' == type v - tmp = '' - for kk, vv in opairs v - tmp ..= "#{kk}: #{vv}; " - v = tmp - b ..= " #{k}=\"#{v}\"" - - -- if there is only one argument, - -- children can be in attributes table too - if #children == 0 - children = attributes - - for i,v in ipairs children - if 'string' != type v - print v - error "wrong type: #{type v}" - children[i] = '' unless v - - if void_tags[element] - assert #children == 0, "void tag #{element} cannot have children!" - b .. ">" - else - b ..= ">" .. table.concat children, '' - b ..= "" - b - -setmetatable {}, __index: (name) => - with val = element name - @[name] = val diff --git a/extra/git-version.sh b/extra/git-version.sh deleted file mode 100755 index 495b679..0000000 --- a/extra/git-version.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -TAG=$(git describe --abbrev=0 HEAD) -# REV_SHORT=$(git rev-parse --short HEAD) -# REV_LONG=$(git rev-parse HEAD) - -cat < - 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 ''} - - - - - - - #{title} - - - - #{head} - #{body} - #{foot} - -" - - -{ - :autoref - :render - :layout -} -- cgit v1.2.3