packages feed

anatomy-0.4: lib/pretty.atomo

-- root URL for links
define: docs-root as: ""

-- current pretty-printer indentation level
define: indent-level as: 0

-- allow multiline pretty-printing
define: multiline-pretty? as: False

-- context for a pretty-print
define: context as: @top

-- output as values? (i.e. <expression 1 + 1> instead of 1 + 1)
define: value-output? as: False


-- indent s up to the current indentation level
indented: (s: String) :=
  ($  repeat: (indent-level * 2)) .. s

-- an empty line, followed by (indentation - 1) indentation
unindent :=
  "\n" .. ($  repeat: ((indent-level - 1) * 2))


-- default pretty-printer; just do @show
(a: A) pretty: o := a highlight: o show
(a: A) pretty: (e: Expression) :=
  if: value-output?
    then: { a highlight: e show }
    else: {
      a highlight: e pretty-expression render
    }

-- find a url for an expression, and link it with t as the text
(a: A) linked: (e: Expression) as: (t: String) :=
  a (url-for: e) match: {
    @none -> t escape
    @(ok: u) ->
      t escape in-tag: ("a href=\"" .. docs-root .. u .. "\"")
  }