Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
832bb82
Add test suite based on MDTest and testdoc
karlb Oct 3, 2019
923433e
Refactor: remove `ul` variable
karlb Oct 9, 2019
57da294
Rename documentation to README.md
karlb Oct 9, 2019
be1eb88
Document divergence from CommonMark
karlb Oct 9, 2019
4f90ebf
Add code fences with three backticks or tildes
karlb Oct 10, 2019
a4f4226
Rename README.md to README
karlb Oct 11, 2019
f8100b0
Support empty lines in code fences
karlb Apr 26, 2020
6ecca24
Support language info strings in code fences
karlb Apr 26, 2020
d1cc0bf
Support backslashes in code spans and blocks
karlb Apr 29, 2020
23f4307
Test code fence edge cases
karlb Apr 29, 2020
f9060cf
Add current readme as additional regression test
karlb Apr 29, 2020
54ab60f
Update README
karlb Apr 29, 2020
2df9743
Add rendered version of README
karlb Apr 29, 2020
7c3f8ff
Use list start number as <ol> start number
karlb Apr 30, 2020
0e782a2
Format more according to suckless style
karlb Apr 30, 2020
7884019
Test HTML passthrough and fix line break
karlb May 2, 2020
7c2739c
Check for angular brackets later.
karlb May 2, 2020
150c350
Support all CommonMark backslash escapes
karlb May 2, 2020
2d7fb93
Handle `<>&` with doreplace instead of custom code
karlb May 2, 2020
13eb055
README: fix indentation
karlb May 2, 2020
ee6af60
Avoid potential segfault in surround
karlb May 3, 2020
9cc298f
Reduce backslash quoting in hprint
karlb May 3, 2020
fddbdb2
No backslash escaping in code blocks
karlb May 3, 2020
a109634
README: update differences to original smu
karlb May 3, 2020
62e6a10
Add basic test case for `smu -n`
karlb May 3, 2020
6a11028
Simplify `process`
karlb May 3, 2020
8b6eab9
Refactor `process`
karlb May 3, 2020
046e210
Add test for hard line breaks
karlb May 3, 2020
92c7818
Remove special case for `insert`
karlb May 3, 2020
c1a245d
Fix quoting of language class for code fences
karlb Jul 5, 2020
ae85abb
Remove comparison to upstream smu
karlb Jul 5, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ include config.mk

SRC = smu.c
OBJ = ${SRC:.c=.o}
# VALGRIND = valgrind -q --error-exitcode=1

all: options smu

Expand Down Expand Up @@ -52,4 +53,19 @@ uninstall:
@echo removing manual page from ${DESTDIR}${MANPREFIX}/man1
@rm -f ${DESTDIR}${MANPREFIX}/man1/smu.1

test: $(patsubst %.text,%.html,$(wildcard tests/*.text tests/*/*.text))
git diff -- tests

docs: docs/index.html

docs/index.html: README smu
./smu $< > $@

tests/nohtml/%.html: tests/nohtml/%.text smu
${VALGRIND} ./smu -n $< > $@

%.html: %.text smu
${VALGRIND} ./smu $< > $@

.PHONY: all options clean dist install uninstall
.DELETE_ON_ERROR:
217 changes: 217 additions & 0 deletions README
Original file line number Diff line number Diff line change
@@ -0,0 +1,217 @@
smu - a Simple Markup Language
==============================

_smu_ is a very simple and minimal markup language. It is designed for use in
wiki-like environments. smu makes it very easy to write your documents on the
fly and convert them into HTML.

smu is capable of parsing very large documents. It scales just great as long
as you avoid a huge amount of indents.

Syntax
======

smu was started as a rewrite of
[markdown](http://daringfireball.net/projects/markdown/) but became something
more lightweight and consistent. It differs from [CommonMark](https://commonmark.org/) in the following ways:

* No support for _reference style links_
* Stricter indentation rules for lists
* Lists don't end paragraphs by themselves (blank line needed)
* Horizontal rules (`<hr>`) must use `- - -` as syntax
* Code fences have stricter syntax

Patches that increase the CommonMark compatibility are welcome as long as they don't increase the code complexity significantly.

Inline patterns
---------------

There are several patterns you can use to highlight your text:

* Emphasis
* Surround your text with `*` or `_` to get *emphasised* text:
This *is* cool.
This _is_ cool, too.
* Surround your text with `**` or `__` to get **strong** text:
This **is** cool.
This __is__ cool, too.
* Surround your text with `***` or `___` to get ***strong and emphasised*** text:
This ***is*** cool.
This ___is___ cool, too.
* But this example won't work as expected:
***Hello** you*
This is a wontfix bug because it would make the source too complex.
Use this instead:
***Hello*** *you*

* inline Code

You can produce inline code by surrounding it with backticks.

Use `rm -rf /` if you're a N00b.
Use ``rm -rf /`` if you're a N00b.
Use ```rm -rf /``` if you're a N00b.

Double and triple backticks can be used if the code itself contains backticks.


Titles
------

Creating titles in smu is very easy. There are two different syntax styles. The
first is underlining:

Heading
=======

Topic
-----

This is very intuitive and self explaining. The resulting sourcecode looks like
this:

<h1>Heading</h1>
<h2>Topic</h2>

Use the following prefixes if you don't like underlining:

# h1
## h2
### h3
#### h4
##### h5
###### h6

Links
-----

The simplest way to define a link is with simple `<>`.

<http://s01.de>

You can do the same for E-Mail addresses:

<yourname@s01.de>

If you want to define a label for the url, you have to use a different syntax

[smu - simple mark up](http://s01.de/~gottox/index.cgi/proj_smu)

The resulting HTML-Code

<a href="http://s01.de/~gottox/index.cgi/proj_smu">smu - simple mark up</a></p>

Lists
-----

Defining lists is very straightforward:

* Item 1
* Item 2
* Item 3

Result:

<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>

Defining ordered lists is also very easy:

1. Item 1
2. Item 2
3. Item 3

Only the first number in a list is meaningful. All following list items are
continously counted. If you want a list starting at 2, you could write:

2. Item 1
2. Item 2
2. Item 3

and get the following HTML which will render with the numbers 2, 3, 4:

<ol start="2">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ol>

Code & Blockquote
-----------------

Use the `> ` as a line prefix for defining blockquotes. Blockquotes are
interpreted as well. This makes it possible to embed links, headings and even
other quotes into a quote:

> Hello
> This is a quote with a [link](http://s01.de/~gottox)

Result:
<blockquote><p>
Hello
This is a quote with a <a href="http://s01.de/~gottox">link</a></p>
</blockquote>


You can define a code block with a leading Tab or with __4__ leading spaces

this.is(code)

this.is(code, too)

Result:
<pre><code>this.is(code)</code></pre>
<pre><code>this.is(code, too)
</code></pre>

Please note that you can't use HTML or smu syntax in a code block.

Another way to write code blocks is to use code fences:

```json
{"some": "code"}
```

This has two advantages:
* The optional language identifier will be turned into a `language-` class name
* You can keep the original indentation which helps when doing copy & paste

Other interesting stuff
-----------------------

* to insert a horizontal rule simple add `- - -` into an empty line:

Hello
- - -
Hello2

Result:
<p>
Hello
<hr />

Hello2</p>

* Any ASCII punctuation character may escaped by precedeing them with a
backslash to avoid them being interpreted:

!"#$%&'()*+,-./:;<=>?@[]^_`{|}~\

* To force a linebreak simple add two spaces to the end of the line:

No linebreak
here.
But here is
one.

embed HTML
----------

You can include arbitrary HTML code in your documents. The HTML will be
passed through to the resulting document without modification. This is a good
way to work around features that are missing in smu. If you don't want this
behaviour, use the `-n` flag when executing smu to stricly escape the HTML
tags.
Loading