npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

commonform-markup-parse

v1.1.0

Published

Parse Common Form markup, returning an object containing a form and an array of path-to-blank mappings.

Downloads

30

Readme

Parse Common Form markup, returning an object containing a form and an array of path-to-blank mappings.

Markup

Common Form markup utilizes rarely-used symbols you can type with your keyboard to structure agreements and indicate definitions, uses of defined terms, fill-in-the-blanks, and cross-references between provisions. For example:

This Agreement (this ""Agreement"") is made effective as of
[Effective Date] by and between [Seller's Legal Name] (""Seller"") and
[Buyer's Legal Name] (""Buyer"").

    \Definitions\  For purposes of this <Agreement>, the following terms
have the following meanings:

        \\  ""Capital Stock"" means the capital stock of the Company,
    including, without limitation, the <Common Stock> and the <Preferred
    Stock>.

        \\  ""Dissolution Event"" means:

            \\  a voluntary termination of operations pursuant to {Voluntary
    Shutdown};

            \\  a general assignment for the benefit of the <Company>'s
    creditors or

            \\  any other liquidation, dissolution or winding up of the
    <Company> (excluding a <Liquidity Event>), whether voluntary or
    involuntary.

Each subdivision of the form begins with \\, indented by four spaces. If the provision has a heading, it goes within the slashes, like \Definitions\ ....

Within a provision, terms being defined are set in ""double quotation marks"". Defined terms being used are typed <within angle brackets>. A cross-reference to a provision with a {Particular Heading} is with braces. [Blanks to be filled in] use square brackets.

The Parser

var parse = require('commonform-markup-parse')
parse(stringOfMarkup); // => {form: Object, directions: Array}

The parser is made of several components:

  1. a hand-coded context-tracking tokenizer (or lexer) that emits tokens for indentation and outdentation, in addition to content tokens

  2. an LALR(1) parser generated by Jison from a Bison-like BNF grammar

  3. commonform-fix-strings to convert the parser's AST to a valid common form by fixing various string-related validation issues, like extra space

  4. a tiny algorithm that removes the hints text from fill-in-the-blanks within the form, and emits path-to-hint mappings instead

The parser passes the commonform-markup-tests test suite.

If you'd like to write a parser in a different language, the test suite and this package are best places to start. Your language probably already has a Bison clone or a BNF-compatible parser combinators library.