Skip to content

rla/prolog-markdown

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

70 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Prolog-markdown

Markdown parser implemented in Prolog. Compatible with SWI-Prolog as the output tree is for direct use by html//1. The specification for the parser was taken from http://daringfireball.net/projects/markdown/syntax (Gruber's Markdown).

Build Status

Example usage

Parse into a structure usable by html//1.

:- use_module(library(md/md_parse)).

?- md_parse_string("# Hello #", Blocks).
Blocks = [h1("Hello")].

Convert into an HTML string:

:- use_module(library(md/md_parse)).

?- md_html_string("# Hello #", Html).
Html = "<h1>Hello</h1>".

Deviations from the Gruber's Markdown

  • Some cases for tight markup (no separate lines between blocks).
  • No clever encoding for mail addresses.
  • Line break rule creates <br> not <br />.
  • No in-word emphasis with underscores.
  • Strikethrough as ~~text~~.
  • Added escape sequences \~ and \`.
  • Github-styled fenced code blocks (https://help.github.com/articles/github-flavored-markdown). No syntax highlighting is provided but the data-language attribute is set.
  • Plain link recognizion.

Performance

Example document (about 800 lines) is parsed in 80ms on 2.4GHz Q6600.

Installation

Requires SWI-Prolog 7.x.

pack_install('http://packs.rlaanemets.com/markdown/markdown-*.tgz')

API documentation

See http://packs.rlaanemets.com/markdown/doc/md_parse.html for the top-level module documentation.

Changelog

  • 2020-01-02 version 0.0.3. Fixed mode declaration in documentation.
  • 2014-02-26 version 0.0.2. Fixed HTTPS link in angled brackets. Trimmed bottom of code block.
  • 2014-01-14 version 0.0.1

Bug reports/feature requests

Please send bug reports/feature request through the GitHub project page.

License

The MIT License. See the LICENSE file.