summaryrefslogtreecommitdiff
path: root/desk/lib/cram.hoon
diff options
context:
space:
mode:
Diffstat (limited to 'desk/lib/cram.hoon')
-rw-r--r--desk/lib/cram.hoon62
1 files changed, 62 insertions, 0 deletions
diff --git a/desk/lib/cram.hoon b/desk/lib/cram.hoon
new file mode 100644
index 0000000..9081fae
--- /dev/null
+++ b/desk/lib/cram.hoon
@@ -0,0 +1,62 @@
+|%
+++ static :: freeze .mdh hoon subset
+ |= gen=hoon ^- [inf=(map term dime) elm=manx]
+ ?+ -.gen
+ =/ gen ~(open ap gen)
+ ~& >> gen=gen
+ ?: =(gen ^gen) ~|([%cram-dynamic -.gen] !!)
+ $(gen gen)
+ ::
+ %xray [~ (single (shut gen))]
+ ^ [(malt (frontmatter p.gen)) (single (shut q.gen))]
+ ==
+::
+++ single :: unwrap one-elem marl
+ |= xml=marl ^- manx
+ ?: ?=([* ~] xml) i.xml
+ ~|(%many-elems !!)
+::
+++ shut-mart :: xml attrs
+ |=([n=mane v=(list beer:hoot)] [n (turn v |=(a=beer:hoot ?^(a !! a)))])
+::
+++ shut :: as xml constant
+ |= gen=hoon ^- marl
+ ?+ -.gen ~|([%bad-xml -.gen] !!)
+ %dbug $(gen q.gen)
+ ::
+ %xray
+ [[n.g.p.gen (turn a.g.p.gen shut-mart)] $(gen [%mcts c.p.gen])]~
+ ::
+ %mcts
+ ?~ p.gen ~
+ =- (weld - $(p.gen t.p.gen))
+ ?^ -.i.p.gen $(gen [%xray i.p.gen])
+ ~| [%shut-tuna -.i.p.gen]
+ ?+ -.i.p.gen !!
+ %manx ?>(?=(%xray -.p.i.p.gen) $(gen p.i.p.gen))
+ %marl ?>(?=(%mcts -.p.i.p.gen) $(gen p.i.p.gen))
+ ==
+ ==
+::
+::
+++ frontmatter :: parse ~[[%foo 1] [%bar ~s2]]
+ |= gen=hoon ^- (list [term dime])
+ ?: ?=([%bust %null] gen) ~
+ ?: ?=(%dbug -.gen) $(gen q.gen)
+ ?. ?=(%clsg -.gen) ~|([%bad-frontmatter -.gen] !!)
+ %+ turn p.gen
+ |= gen=hoon
+ ?. ?=(^ -.gen)
+ =/ gen ~(open ap gen)
+ ?: =(gen ^gen) ~|([%bad-frontmatter-elem -.gen] !!)
+ $(gen gen)
+ =/ hed (as-dime p.gen)
+ ?. =(%tas p.hed) ~|([%bad-frontmatter-key-type p.hed] !!)
+ [q.hed (as-dime q.gen)]
+::
+++ as-dime :: %foo ~.foo 0vbar etc
+ |= gen=hoon ^- dime
+ ?: ?=(%dbug -.gen) $(gen q.gen)
+ ?. ?=([?(%rock %sand) @ @] gen) ~|([%bad-literal gen] !!)
+ +.gen
+--