diff options
-rw-r--r-- | cnm-specification.cnm | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/cnm-specification.cnm b/cnm-specification.cnm new file mode 100644 index 0000000..8808481 --- /dev/null +++ b/cnm-specification.cnm @@ -0,0 +1,169 @@ +title + CNM 0.1 + +content + text fmt + This is an archived copy of the original draft of the ContNet Markup from 2013. It has never been implemented and contains numerous flaws. + + raw text/cnm + title + Title goes here + + links + http://whatever.com/ Whatever.com on HTTP + cnp://something.net/else/ + ../another-link + + site + page1 Page 1 + another-page Just Another Page + test This maps to /test + foo and this to /test/foo + bar.txt this is /test/foo/bar.txt file + baz.jpg again in /test/foo/baz.jpg + quux + qwe the above page is shown as "quux" + + references + cnp://this.is/a/reference ref1 Explanation of the reference + /some/file ref2 + + content + section The format + This is the ContNet content format. It is designed to be easy to write and parse, + as well as to be readable without any formatting. + + section Features + list + - simple to parse by computers + - simple to generate with scripts + - easy to write manually + - raw documents are readable + - no layout definitions, only content + - sections + - lists + - [[/some/page/ links]] + - [[@ref1 references]] + - [[#Features section references]] + - UTF-8 with LF newlines + + section Layout + The document is split into several blocks. + + Each block is indented by a tab character. The block lasts until the first + line that contains something besides tabs that has lesser or equal + indentation to the block declaration. Indenting a block with more than one + tab is an error. Blank lines can be indented or not and will act the same + (end the paragraph). + + A block declaration is the line after which a new indentation level is added. + + section Top level blocks + The outtermost block can contain only the top-level blocks and these can + only appear in that block: + list + - title: The page title, a single string (optionally even multiline). + - links: A list of URLs and paths that can point to anywhere. + These could be displayed in, for example, the top menu below the title. + - site: A map of the current website. Consists of the basename of the file + or folder optionally followed by a name to show instead of the filename. + Each entry can have other entries nested. + - references: A list of URLs and paths with identifiers. These can be + later referenced in the link context with the identifier prefixed by the @ + character. When used without link text, references could be rendered as, + for example, Wikipedia-style [1] references. The reference's URL can be + #, the empty bookmark, if the reference doesn't contain a link. + - content: Contains the main section of the page. The top level of content + can contain only sections. + + Multiple top-level blocks of the same type are concatenated together as if + they were one block. This may be undesirable for the title block, as it will + add a newline. + + section Content blocks + list + - section: Optionally named section of the content. Can be nested in other + sections. This is the only block that can be on the top level. If a name + is provided, it is displayed as the section title and can be referenced + as an in-page bookmark in the link context using the name identifier + prefixed with the # character. A section is a generic container for other + blocks or text. + - table: Defines a table. The first line in the table defines the table + header, the rest are cells. Columns are prefixed with the | character. + Each row ends in a newline. To omit the header, leave its cells blank. + The number of columns in the table is equal to the longest row's. If a + line does not begin with |, it's considered to be a continuation of the + previous row's last cell. That way, multi-paragraph cells are possible. + - code: All text inside this block is displayed as it is, without any + parsing being done. This includes additional indents. Optionally, the + language can be specified as a parameter to the block definition, so that + a client that supports syntax highlighting can format that code. The + language name should be the lowercase primary filename extension for a file + containing such source code, such as "c", "js", "cpp", "cob" and "cl". + - list: An unordered list. Each item starts with a - on the start of a + line and lasts until the next item or the end of the list block. Each + list item acts as a section, so it's possible to nest blocks in them. + + section Paragraphs + A paragraph is text that is not a block. It lasts until a blank line, the + end of the current block or the start of a new block. The lines within a + paragraph will be joined with spaces. Paragraphs can be in any text + context, such as in list items, table cells, link text, etc. + + section Text + Text appears within paragraph. It should be UTF-8 encoded. It can contain + any characters that are not part of the syntax. Notably, the only + characters that can't be included by escaping are tabs on start of a line + and the newline character. Whitespace is collapsed. + + Text can be bold (toggle with \*\*) and italic (\_\_). Once toggled, the + style will last until it is toggled again or the end of the paragraph. + + section Tables + This format supports tables: + + table + | column1 | column2 + | row | 1 + | row | 2 + + section Links + A link can be added inline using the link context: + + code + [[path text to display]] + + The "path" can be an URL or a CNP relative or absolute path, as well as + a reference when prefixed with @ and a bookmark when prefixed with #. + + "text to display" is the text to which the link is added. If omitted or + blank, the path will be shown. + + section Escaping + URLs, both cnp:// and others, have to be escaped using the standard URL + escaping. + + CNP paths have to be escaped just like in the ContNet protocol: + table + | character | escape sequence + | space | \\_ + | newline | \\n + | NUL | \\0 + | backslash | \\\\ + + Various parts of the syntax can be escaped too: + table + | character | escape sequence + | table \| | \\| + | list - | \\- + | asterisk | \\* + | underscore | \\_ + | link \[ | \\\[ + | link \] | \\\] + | backslash | \\\\ + + section TODO + list + - Embedded content + - Metadata + - TODO |