summaryrefslogtreecommitdiff
path: root/urdoc
diff options
context:
space:
mode:
Diffstat (limited to 'urdoc')
-rwxr-xr-xurdoc387
1 files changed, 387 insertions, 0 deletions
diff --git a/urdoc b/urdoc
new file mode 100755
index 0000000..b06ecbb
--- /dev/null
+++ b/urdoc
@@ -0,0 +1,387 @@
+#!/usr/bin/env python3
+
+import argparse
+import subprocess
+
+# todo: make these configurable
+docs_location = "/home/ben/urbit/docs"
+grep_tool = 'rg'
+
+def search(args):
+ p = subprocess.run([grep_tool, args.regex, docs_location],
+ stdout=subprocess.PIPE)
+ ret = p.stdout.decode()
+ print(ret)
+
+lookup_name = {
+ 'ace': ' ',
+ 'ban': '>',
+ 'bar': '|',
+ 'bat': '\\',
+ 'bus': '$',
+ 'cab': '_',
+ 'cen': '%',
+ 'col': ':',
+ 'com': ',',
+ 'dot': '.',
+ 'gap': '\n',
+ 'gap': ' ',
+ 'gap': '\t',
+ 'hax': '#',
+ 'hep': '-',
+ 'ket': '^',
+ 'lac': '[',
+ 'led': '<',
+ 'lit': '(',
+ 'lob': '{',
+ 'lus': '+',
+ 'mic': ';',
+ 'net': '/',
+ 'pad': '&',
+ 'pat': '@',
+ 'rac': ']',
+ 'rit': ')',
+ 'rob': '}',
+ 'say': '\'',
+ 'sig': '~',
+ 'tar': '*',
+ 'tec': '\`',
+ 'tis': '=',
+ 'wut': '?',
+ 'yel': '"',
+ 'zap': '!',
+}
+
+# reverse the above key/vals
+lookup_sym = {v: k for k, v in lookup_name.items()}
+
+def glyph(args):
+ print(' '.join([lookup_sym[s] for s in args.syms]))
+
+rune_cheatsheet = {
+ '|%': {'args': '<arms>',
+ 'desc': 'form a core with subject as the payload',
+ 'ireg': None},
+ '|~': {'args': '[model value]',
+ 'desc': 'form an iron gate',
+ 'ireg': None},
+ '|=': {'args': '[model value]',
+ 'desc': 'form a gate, a dry one-armed core with sample',
+ 'ireg': None},
+ '|.': {'args': 'hoon',
+ 'desc': 'form a trap, a one-armed core with one arm $',
+ 'ireg': None},
+ '|-': {'args': 'hoon',
+ 'desc': 'form a trap and kick ("call") it',
+ 'ireg': None},
+ '|_': {'args': 'model (map term foot)',
+ 'desc': 'form a door, a many-armed core with sample',
+ 'ireg': None},
+ '|*': {'args': '[model value]',
+ 'desc': 'form a gill, a we one-armed core with sample',
+ 'ireg': None},
+ '|^': {'args': 'hoon (map term foot)',
+ 'desc': 'form a core with battery and anonymous arm $ and kick it',
+ 'ireg': None},
+ '|:': {'args': '[hoon hoon]',
+ 'desc': 'form a core with burnt sample',
+ 'ireg': None},
+ '|?': {'args': 'hoon',
+ 'desc': 'form a a lead trap',
+ 'ireg': None},
+
+ '$:': {'args': '(list model)',
+ 'desc': 'form a mold to recognize a tuple',
+ 'ireg': '[a=foo b=bar c=baz]'},
+ '$=': {'args': '[@tas model]',
+ 'desc': 'mold that wraps a face around another mold',
+ 'ireg': 'foo=bar'},
+ '$%': {'args': '(list [[aura @] model])',
+ 'desc': 'mold recognizing a union tagged by depth',
+ 'ireg': None},
+ '$@': {'args': '[model model]',
+ 'desc': 'mold that normalizes a union tagged by depth',
+ 'ireg': None},
+ '$^': {'args': '[model model]',
+ 'desc': 'mold that normalizes a union tagged by head depth',
+ 'ireg': None},
+ '$?': {'args': '(list model)',
+ 'desc': 'mold that normalizes a generic union',
+ 'ireg': '?($foo $bar $baz)'},
+ '$-': {'args': '[model model]',
+ 'desc': 'mold that normalizes to an example gate',
+ 'ireg': None},
+ '$_': {'args': 'value',
+ 'desc': 'mold that normalizes to an example',
+ 'ireg': '_foo'},
+
+ '%=': {'args': '[wing (list (pair wing hoon))',
+ 'desc': 'take a wing with changes',
+ 'ireg': 'foo(x 1, y 2, z 3)'},
+ '%_': {'args': '[wing (list (pair wing hoon))',
+ 'desc': 'take a wing with changes, preserving type',
+ 'ireg': None},
+ '%~': {'args': '[wing hoon hoon)',
+ 'desc': 'call with multi-armed door',
+ 'ireg': '~(arm core arg)'},
+ '%-': {'args': '[hoon hoon)',
+ 'desc': 'call a gate (function)',
+ 'ireg': '(fun arg)'},
+ '%.': {'args': '[hoon hoon)',
+ 'desc': 'call a gate, reversed',
+ 'ireg': None},
+ '%+': {'args': '[hoon hoon hoon)',
+ 'desc': 'call a gate with pair sample',
+ 'ireg': None},
+ '%^': {'args': '[hoon hoon hoon hoon)',
+ 'desc': 'call a gate with triple sample',
+ 'ireg': None},
+ '%*': {'args': '[wing hoon (list (pair wing hoon))',
+ 'desc': 'make with arbitrary hoon',
+ 'ireg': None},
+
+ ':-': {'args': '[hoon hoon]',
+ 'desc': 'construct a cell (2-tuple)',
+ 'ireg': '[a b], a^b'},
+ ':+': {'args': '[hoon hoon hoon]',
+ 'desc': 'construct a triple (3-tuple)',
+ 'ireg': '[a b c]'},
+ ':^': {'args': '[hoon hoon hoon hoon]',
+ 'desc': 'construct a quad (4-tuple)',
+ 'ireg': '[a b c d]'},
+ ':*': {'args': '(list hoon)',
+ 'desc': 'construct an n-tuple',
+ 'ireg': '[a b c d ...]'},
+ ':~': {'args': '(list hoon)',
+ 'desc': 'construct a null-terminated list',
+ 'ireg': '~[a b c]'},
+ ':_': {'args': '[hoon hoon]',
+ 'desc': 'construct a cell, inverted',
+ 'ireg': None},
+
+ '.*': {'args': '[hoon hoon]',
+ 'desc': 'evaluate with nock 2',
+ 'ireg': None},
+ '.?': {'args': 'hoon',
+ 'desc': 'check for cell or atom with nock 3',
+ 'ireg': None},
+ '.+': {'args': 'atom',
+ 'desc': 'increment an atom with nock 4',
+ 'ireg': '+(42)'},
+ '.=': {'args': '[hoon hoon]',
+ 'desc': 'test for equality with nock 5',
+ 'ireg': '=(a b)'},
+ '.^': {'args': '[model value]',
+ 'desc': 'load from the arvo namespace with nock 11',
+ 'ireg': None},
+
+ '^+': {'args': '[value value]',
+ 'desc': 'typecast by example (value)',
+ 'ireg': None},
+ '^-': {'args': '[model value]',
+ 'desc': 'typecast by mold',
+ 'ireg': '`foo`bar'},
+ '^=': {'args': '[toga value]',
+ 'desc': 'name a value',
+ 'ireg': 'foo=bar'},
+ '^?': {'args': 'hoon',
+ 'desc': 'convert any core to a lead core (bivariant)',
+ 'ireg': None},
+ '^|': {'args': 'hoon',
+ 'desc': 'convert a gold core to an iron core (contravariant)',
+ 'ireg': None},
+ '^~': {'args': 'hoon',
+ 'desc': 'fold a constant at compile time',
+ 'ireg': None},
+
+ ';;': {'args': '[model value]',
+ 'desc': 'normalize with a mold, asserting fixpoint',
+ 'ireg': None},
+ ';~': {'args': '[hoon (list hoon)]',
+ 'desc': 'glue a pipeline together with a product-sample adapter',
+ 'ireg': None},
+ ';:': {'args': '[hoon (list hoon)]',
+ 'desc': 'call a binary function as an n-ary function',
+ 'ireg': ':(fun a b c d)'},
+ ';/': {'args': 'hoon',
+ 'desc': 'tape as XML element',
+ 'ireg': None},
+
+ '~&': {'args': '[hoon]',
+ 'desc': 'debugging printf',
+ 'ireg': None},
+ '~%': {'args': '[term wing (list [term hoon]) hoon]',
+ 'desc': 'jet registration',
+ 'ireg': None},
+ '~/': {'args': '[term hoon]',
+ 'desc': 'jet registration for gate with registered context',
+ 'ireg': None},
+ '~$': {'args': '[term hoon]',
+ 'desc': 'profiling hit counter',
+ 'ireg': None},
+ '~|': {'args': '[hoon hoon]',
+ 'desc': 'tracing printf',
+ 'ireg': None},
+ '~_': {'args': '[hoon hoon]',
+ 'desc': 'user-formatted tracing printf',
+ 'ireg': None},
+ '~?': {'args': '[hoon hoon hoon]',
+ 'desc': 'conditional debug printf',
+ 'ireg': None},
+ '~>': {'args': '$@(term [term hoon]) hoon]',
+ 'desc': 'raw hint, applied to computation',
+ 'ireg': None},
+ '~<': {'args': '$@(term [term hoon]) hoon]',
+ 'desc': 'raw hint, applied to product',
+ 'ireg': None},
+ '~+': {'args': 'hoon',
+ 'desc': 'cache a computation',
+ 'ireg': None},
+ '~=': {'args': '[hoon hoon]',
+ 'desc': 'detect duplicate',
+ 'ireg': None},
+ '~!': {'args': '[hoon hoon]',
+ 'desc': 'print type on compilation fail',
+ 'ireg': None},
+
+ '=>': {'args': '[hoon hoon]',
+ 'desc': 'compose two hoons',
+ 'ireg': None},
+ '=^': {'args': '[taco wing hoon hoon]',
+ 'desc': 'pin the head of a pair; change a leg with the tail',
+ 'ireg': None},
+ '=*': {'args': '[term hoon hoon]',
+ 'desc': 'define an alias',
+ 'ireg': None},
+ '=~': {'args': '(list hoon)',
+ 'desc': 'compose many hoons',
+ 'ireg': None},
+ '=<': {'args': '[hoon hoon]',
+ 'desc': 'combine two hoons, inverted',
+ 'ireg': 'foo:bar'},
+ '=+': {'args': '[hoon hoon]',
+ 'desc': 'combine a new noun with the subject',
+ 'ireg': None},
+ '=-': {'args': '[hoon hoon]',
+ 'desc': 'combine a new noun with the subject, inverted',
+ 'ireg': None},
+ '=|': {'args': '[model value]',
+ 'desc': 'combine a defaulted mold with the subject',
+ 'ireg': None},
+ '=/': {'args': '[taco value hoon]',
+ 'desc': 'combine a named and/or typed noun with the subject',
+ 'ireg': None},
+ '=;': {'args': '[taco value hoon]',
+ 'desc': 'combine a named and/or typed noun with the subject, inverted',
+ 'ireg': None},
+ '=.': {'args': '[wing hoon hoon]',
+ 'desc': 'change one leg in the subject',
+ 'ireg': None},
+ '=:': {'args': '[(list (pair win hoon)) hoon]',
+ 'desc': 'change multiple legs in the subject',
+ 'ireg': None},
+
+ '?:': {'args': '[hoon hoon hoon]',
+ 'desc': 'branch on a boolean test',
+ 'ireg': None},
+ '?<': {'args': '[hoon hoon]',
+ 'desc': 'negative assertion',
+ 'ireg': None},
+ '?>': {'args': '[hoon hoon]',
+ 'desc': 'positive assertion',
+ 'ireg': None},
+ '?-': {'args': '[wing (list (pair model value))]',
+ 'desc': 'switch against a union, with no default',
+ 'ireg': None},
+ '?+': {'args': '[wing value (list (pair model value))]',
+ 'desc': 'switch against a union, with a default',
+ 'ireg': None},
+ '?.': {'args': '[hoon hoon hoon]',
+ 'desc': 'branch on a boolean test, inverted',
+ 'ireg': None},
+ '?~': {'args': '[wing hoon hoon]',
+ 'desc': 'branch on whether a wing of the subject is null',
+ 'ireg': None},
+ '?@': {'args': '[wing hoon hoon]',
+ 'desc': 'branch on whether a wing of the subject is an atom',
+ 'ireg': None},
+ '?^': {'args': '[wing hoon hoon]',
+ 'desc': 'branch on whether a wing of the subject is a cell',
+ 'ireg': None},
+ '?=': {'args': '[model wing]',
+ 'desc': 'test model match',
+ 'ireg': None},
+ '?!': {'args': 'hoon',
+ 'desc': 'logical not',
+ 'ireg': '!foo'},
+ '?&': {'args': '(list hoon)',
+ 'desc': 'logical and',
+ 'ireg': '&(foo bar baz)'},
+ '?|': {'args': '(list hoon)',
+ 'desc': 'logical or',
+ 'ireg': '|(foo bar baz)'},
+
+ '!!': {'args': '$~',
+ 'desc': 'crash',
+ 'ireg': None},
+ '!>': {'args': 'hoon',
+ 'desc': 'wrap a noun in its type (create a vase)',
+ 'ireg': None},
+ '!=': {'args': 'hoon',
+ 'desc': 'make the nock formula for a hoon',
+ 'ireg': None},
+ '!?': {'args': '[@ hoon]',
+ 'desc': 'restrict the hoon version',
+ 'ireg': None},
+}
+
+rune_category = {
+ "|": "core",
+ "$": "mold",
+ "%": "call",
+ ":": "cell",
+ ".": "nock",
+ "^": "cast",
+ ";": "make",
+ "~": "hint",
+ "=": "flow",
+ "?": "test",
+ "!": "wild",
+}
+
+def rune(args):
+ if len(args.rune) == 1:
+ print('{} {}'.format(args.rune, rune_category[args.rune]))
+ elif args.rune in rune_cheatsheet:
+ info = rune_cheatsheet[args.rune]
+ print('{} {}'.format(args.rune, info['args']))
+ print('{}'.format(info['desc']))
+ if cheat['ireg'] is not None:
+ print('aka: {}'.format(info['ireg']))
+ else:
+ print('rune not found, sorry :(')
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser(description='lookup urbit docs')
+ subparser = parser.add_subparsers()
+
+ # search
+ parser_search = subparser.add_parser('search')
+ parser_search.add_argument('regex',
+ help='search terms for urbit docs')
+ parser_search.set_defaults(func=search)
+
+ # glyph translation
+ parser_glyph = subparser.add_parser('glyph')
+ parser_glyph.add_argument('syms',
+ help='ascii symbols to translate (escape bash characters or enclose in quotes)')
+ parser_glyph.set_defaults(func=glyph)
+
+ # rune cheatsheet
+ parser_rune = subparser.add_parser('rune')
+ parser_rune.add_argument('rune',
+ help='rune to lookup docs for, e.g. ^-')
+ parser_rune.set_defaults(func=rune)
+
+ args = parser.parse_args()
+ args.func(args)