Giter VIP home page Giter VIP logo

commonmark-helpers's Introduction

commonmark-helpers

NPM version Build Status Coveralls Status Dependency Status DevDependency Status

Even the strongest sometimes need help.

Basically, with commonmark-helpers you can find desire elements in markdown document and process them in html or plaintext format.

Bunch of helpers for working with commonmark. Also, you can be interested, why I created this module, that’s why I wrote a post about reasons.

Very important to notice, that this package is very simple and doesn’t contain any smart and/or complicated logic, that’s why it’s tightly coupled with commonmark API for AST tree. Check it out first.

Install

npm install --save commonmark-helpers

Usage

var md = require('commonmark-helpers');

md.text(md.match('# title\n\ntext', md.isHeader)); // title
md.html(`*italic*`);        // <p><em>italic</em></p>\n
md.text('**`plaintext`**'); // plaintext

function up(node) {
  if (node.literal) {
    node.literal = node.literal.toUpperCase();
  }
};

md.text(md.matchProcess('# LOOK\n\nMA', up)); // LOOK\n\nMA

Look into tests for more examples.

API

html(input)

Return html.

input

Type: string / AST

text(input)

Return plain text.

input

Type: string / AST

ast(input)

Return AST tree for current text.

input

Type: string

match(input, matcher)

Return first AST-node matched my matcher in process of walking through AST-tree. Returns undefined if no one AST-node have been matched.
The most powerful method in this collection.

input

Type: string / AST

matcher

Type: function. Receive: AST-node, event

In most cases you need only AST-node to match on.

matchRemove(input, matcher)

The same as match() but remove first matched AST-node and return AST-tree without it.

input

Type: string / AST

matcher

Type: function. Receive: AST-node, event

In most cases you need only AST-node to match on.

matchRemoveList(input, matcher1, [matcher2, […, matcherN]])

The same as matchRemove() but resulting AST-tree after matcher1 passing to matcher2, result of this to matcher3 and so on. Return AST-tree without all the matched AST-nodes.

input

Type: string / AST

matcher1, matcher2, …, matcherN

Type: function. Receive: AST-node, event

In most cases you need only AST-node to match on.

matchProcess(input, processor)

Match and process AST-nodes, return modified AST-tree.

input

Type: string / AST

processor

Type: function. Receive: AST-node, event

In most cases you need only AST-node to match on and modify.

matchProcessList(input, processor1, [processor2, […, processorN]])

The same as matchProcess() but resulting AST-tree after processor1 passing to processor2, result of this to processor3 and so on. Return AST-tree is AST-tree with all applied processors.

input

Type: string / AST

processor1, processor2, …, processorN

Type: function. Receive: AST-node, event

In most cases you need only AST-node to match on and modify.

Bunch of shortcut helpers

const isType = (node, type) => node.type === type;
const isLevel  = (node, level) => node.level === level;
const isText = node => isType(node, 'Text');
const isEmph = node => isType(node, 'Emph');
const isCode = node => isType(node, 'Code');
const isHtml = node => isType(node, 'Html');
const isLink = node => isType(node, 'Link');
const isItem = node => isType(node, 'Item');
const isList = node => isType(node, 'List');
const isImage = node => isType(node, 'Image');
const isStrong = node => isType(node, 'Strong');
const isHeader = node => isType(node, 'Header');
const isDocument = node => isType(node, 'Document');
const isCodeBlock = node => isType(node, 'CodeBlock');
const isHtmlBlock = node => isType(node, 'HtmlBlock');
const isSoftbreak = node => isType(node, 'Softbreak');
const isHardbreak = node => isType(node, 'Hardbreak');
const isParagraph = node => isType(node, 'Paragraph');
const isBlockQuote = node => isType(node, 'BlockQuote');
const isHorizontalRule = node => isType(node, 'HorizontalRule');

const isRoot  = node => node.parent && isDocument(node.parent);
const isBreak = node => isHardbreak(node) || isSoftbreak(node);

License

MIT © Vladimir Starkov

commonmark-helpers's People

Contributors

iamstarkov avatar andrepolischuk avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.