Skip to content

environment-safe/tag-parser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@environment-safe/tag-parser

A buildless ESM module for parsing text markup. Successor to tag-parser and, before it, midas.

TagParser

First include the module:

import { TagParser } from '@environment-safe/tag-parser';

then, instantiate the object:

const parser = new TagParser([environments]);

where environments may contain:

  1. name :
  2. sentinels : a list of the following mixed types:
    1. an array of 2 strings, the first being the 'open' sentinel, the second, 'close'.
    2. an object containing 'opener' && 'closer'
    3. a single string that is both the opener and closer
  3. onParse : a callback allowing you to make custom modifications of an existing tag

parse with:

const parseTree = parser.parse(text);

SAXParser

A traditional, event based Simple API for XML parser which supports both emitter subscription and passed function configurations.

import { SAXParser } from '@environment-safe/tag-parser';

const parser = new SAXParser({
    onTagOpen: (tag)=>{
        //react to tag open
    },
    onTagClose: (tag)=>{
        //react to tag open
    },
    onComment: (tag)=>{
        //react to comment
    },
    onEscape: (tag)=>{
        //react to escape
    },
    onText: (text)=>{
        //react to text
    },
});
parser.parse(xml);

HTMLParser

In order to parse HTML:

import { HTMLParser } from '@environment-safe/tag-parser/html'
const parser = new HTMLParser();
const parseTree = parser.parse('<html><head><title>Awesome!</title></head><body onload="callReady()"><h1>Congrats</h1><p>It worked.</p><!--a comment--></body></html>');

which will produce:

{
    type: 'tag',
    text: 'html',
    name: 'html',
    attributes: {},
    children: [
        {
            type: 'tag',
            text: 'head',
            name: 'head',
            attributes: {},
            children: [
                {
                    type: 'tag',
                    text: 'title',
                    name: 'title',
                    attributes: {},
                    children: [
                        'Awesome!'
                    ]
                }
            ]
        },
        {
            type: 'tag',
            text: 'body onload="callReady()"',
            name: 'body',
            attributes: {
                onload : 'callReady()'
            },
            children: [
                {
                    type: 'tag',
                    text: 'h1',
                    name: 'h1',
                    attributes: {},
                    children: [
                        'Congrats!'
                    ]
                },
                {
                    type: 'tag',
                    text: 'p',
                    name: 'p',
                    attributes: {},
                    children: [
                        'It worked.'
                    ]
                },
                {
                    type: 'comment',
                    text: 'a comment',
                    children: [
                        'a comment'
                    ]
                }
            ]
        }
    ]
}

Template + TemplateParser

Parse and render simple value based ES6 template statements, but dynamically at runtime.

import { Template } from '@environment-safe/tag-parser/template';
const template = new Template(
    'I had a ${foo} but made a ${bar}, now I have some ${baz}'
);
const rendered = template.render({
    foo: 'mogwai',
    bar: 'cake',
    baz: 'gremlins'
});

UBB + UBBParser

Parse and render UBB Codes statements, but dynamically at runtime.

import { UBB } from '@environment-safe/tag-parser/ubb';
const template = new UBB(`+1!
email me at: [email]foo@bar.baz[/email]
[quote]Oh, you can’t help that. We're all mad here.[/quote]`);
const rendered = template.render();

Mustache + MustacheParser

Parse and render Mustache templates, but dynamically at runtime.

import { Mustache } from '@environment-safe/tag-parser/mustache';
const template = new Mustache('{{#repo}}<b>{{name}}</b>{{/repo}}');
const rendered = template.render({
    "repo": [
        { "name": "resque" },
        { "name": "hub" },
        { "name": "rip" }
    ]
});

Testing

Run the es module tests to test the root modules

npm run import-test

to run the same test inside the browser:

npm run browser-test

to run the same test headless in chrome:

npm run headless-browser-test

to run the same test inside docker:

npm run container-test

Run the commonjs tests against the /dist commonjs source (generated with the build-commonjs target).

npm run require-test

Development

All work is done in the .mjs files and will be transpiled on commit to commonjs and tested.

If the above tests pass, then attempt a commit which will generate .d.ts files alongside the src files and commonjs classes in dist

About

parse tags in buildless ESM

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages