vimwiki

Personal wiki for vim
git clone https://github.com/vimwiki/vimwiki.git
Log | Files | Refs | README | LICENSE

commit 237f67db4ea7eddcd25b4322d6ca7bb0e58e51f8
parent 4f0df71d846250a2bb612f80a1ea1c3ca9b88f5a
Author: Chip Senkbeil <chip@senkbeil.org>
Date:   Fri, 30 Oct 2020 13:23:11 -0500

Revise based on comments

Diffstat:
Mdoc/specification.wiki | 244++++++++++++++++++++++++++++++++-----------------------------------------------
1 file changed, 99 insertions(+), 145 deletions(-)

diff --git a/doc/specification.wiki b/doc/specification.wiki @@ -42,7 +42,13 @@ definitions for primitive building blocks used to shape up higher-level elements. Relevant definitions are borrowed from [[https://spec.commonmark.org/0.29/#characters-and-lines|commonmark characters and lines]]. -A *character* in vimwiki is a valid UTF-8 code point. +A *character* in vimwiki is a valid UTF-8 code point. For the purposes of +this document, we further restrict a character to not include any +[[https://en.wikipedia.org/wiki/Control_character|control character]] as those will be referenced separately. + +An *alphanumeric character* is a [[#character|character]] that can only be in +the range of a-z, A-Z, or 0-9 where these represent alphabet characters +(abcdef...z) of lower and upper case as well as digits (0, 1, 2, ..., 9). A *line* is a sequence of zero or more [[#Specification#Language#Primitives#character|characters]] other than a newline (`U+000A` aka `\n`) or carriage return (`U+000D` aka `\r`), followed by @@ -52,11 +58,21 @@ A *line ending* is a newline (`U+000A` aka `\n`), a carriage return (`U+000D` aka `\r`) not followed by a newline, or a carriage return and a following newline (`\r\n`). -A line with no characters, or a line containing only spaces (`U+0020`) or tabs +A line with no [[#character|characters]], or a line containing only spaces (`U+0020`) or tabs (`U+0009`), is called a *blank line*. A *whitespace character* is a space (`U+0020`) or tab (`U+0009`). +*All characters until end of line* is any sequence of [[#character|characters]] +leading up to but not including a [[#line ending|line ending]]. + +A *user-defined content* is an arbitrary series of [[#character|characters]] or a function +that yields those characters. Its purpose is to enable users of vimwiki to +interject their own configuration into aspects of the vimwiki language. + +*User-definable* represents any language definition that can be altered to +instead be represented by one or more [[#user-defined content|user-defined content]]. + === Block Elements === The vimwiki language has a variety of syntax that represent elements within @@ -92,7 +108,7 @@ A blockquote is made of *one* or more [[#indented blockquote line|indented block An *indented blockquote line* is made of the following: 1. Four or more [[#whitespace character|whitespace characters]] -2. All characters up until a [[#line ending|line ending]] +2. All [[#character|characters]] up until a [[#line ending|line ending]] 3. A [[#line ending|line ending]] or end of input *Form 2*: @@ -132,7 +148,7 @@ zero or more [[#definition line|definition lines]] A *term line* is represented by the following: 1. Starts at the beginning of a line -2. One or more [[#inline elements|inline elements]] before the sequence `::` +2. One or more [[#inline elements|inline elements]] (except [[#tags|tags]]) before the sequence `::` 3. The sequence `::` 4. An optional one or more [[#inline elements|inline elements]] before [[#line ending|line ending]] to be the first definition @@ -217,7 +233,8 @@ A *starting list item line* is represented by the following: still associated with this list item, if a new list item is the beginning of a sublist, if a new list item is a sibling, or if a new list item is the sibling of a parent -3. One of the following prefixes that determines if the type of list item: +3. One of the following default prefixes (this is also [[#user-definable|user definable]]) + that determines the type of list item: * Hyphen (`U+002D` aka `-`) is for an unordered list * Asterisk (`U+002A` aka `*`) is for an unordered list * Pound (`U+0023` aka `#`) is for an ordered list @@ -256,7 +273,7 @@ A *companion list item line* is represented by the following: A *todo attribute* is composed of surrounding square brackets in the form of a left square bracket (`U+005B` aka `[`) and right square bracket (`U+005D` aka `]`). Inbetween the square brackets is a single character to -denote the todo status and is one of the following: +denote the todo status and is by default one of the following or [[#user-definable|user-definable]]: * A space (`U+0020` aka ' ') meaning 0% or incomplete * A period (`U+002E` aka `.`) meaning 1-33% progress * A lowercase o (`U+006F` aka `o`) meaning 34-66% progress @@ -295,16 +312,17 @@ A *beginning math block line* is represented by the following: 3. The sequence `{{$` 4. An optional [[#math environment|math environment]] 5. Zero or more [[#whitespace character|whitespace characters]] -6. A [[#line ending|line ending]] or end of input +6. A [[#line ending|line ending]] A *math environment* is represented by the following: 1. The percent sign (`U+0025` aka `%`) -2. One or more characters that are not the percent sign or [[#line ending|line ending]] +2. One or more [[#character|characters]] that are not the percent sign or [[#line ending|line ending]] 3. The percent sign (`U+0025` aka `%`) A *math block line* is a line found after a [[#beginning math block line|beginning math block line]] and before an [[#ending math block line|ending math block line]] and is -comprised of zero or more characters followed by a [[#line ending|line ending]]. +comprised of zero or more [[#character|characters]] representing [[https://en.wikipedia.org/wiki/TeX|TeX syntax]] +followed by a [[#line ending|line ending]]. An *ending math block line* is represented by the following: 1. Starts at the beginning of a line @@ -330,7 +348,7 @@ A *paragraph* is composed of one or more [[#paragraph line|paragraph lines]]. A *paragraph line* is represented by the following: 1. Starts at the beginning of a line -2. Has no [[#whitespace character|whitespace]] indentation +2. Has zero to three [[#whitespace character|whitespace]] characters for indentation 3. Is not any of the following: * [[#header|header]] * [[#definition list|definition list]] @@ -345,9 +363,6 @@ A *paragraph line* is represented by the following: 4. One or more [[#inline elements|inline elements]] 5. A [[#line ending|line ending]] or end of input -TODO ... should we combine [[#non-blank line|non-blank line]] with paragraph - by having a paragraph trim all leading [[#whitespace character|whitespace]]? - ==== Placeholder ==== A placeholder is composed of an identifier and some information. Its purpose @@ -375,8 +390,7 @@ A *title placeholder* is represented by the following: 2. A percent sign (`U+0025` aka `%`) 3. The sequence `title` 4. One or more [[#whitespace character|whitespace characters]] -5. Any sequence of [[#whitespace character|whitespace characters]] and - non-whitespace characters leading up to a [[#line ending|line ending]] +5. [[#all characters until end of line|all characters until end of line]] 6. A [[#line ending|line ending]] or end of input A *nohtml placeholder* is represented by the following: @@ -390,8 +404,7 @@ A *template placeholder* is represented by the following: 2. A percent sign (`U+0025` aka `%`) 3. The sequence `template` 4. One or more [[#whitespace character|whitespace characters]] -5. Any sequence of [[#whitespace character|whitespace characters]] and - non-whitespace characters leading up to a [[#line ending|line ending]] +5. [[#all characters until end of line|all characters until end of line]] 6. A [[#line ending|line ending]] or end of input A *date placeholder* is represented by the following: @@ -399,9 +412,10 @@ A *date placeholder* is represented by the following: 2. A percent sign (`U+0025` aka `%`) 3. The sequence `date` 4. One or more [[#whitespace character|whitespace characters]] -5. A date string in the format `YYYY-MM-DD` where `YYYY` symbolizes a - four-digit year (e.g. `1990`), `MM` symbolizes a two-digit month (e.g. - `04`), and `DD` symbolizes a two-digit day (e.g. `23`) +5. A date string in the format of [[https://en.wikipedia.org/wiki/ISO_8601|ISO 8601]] such as + `YYYY-MM-DD` where `YYYY` symbolizes a four-digit year (e.g. `1990`), + `MM` symbolizes a two-digit month (e.g. `04`), + and `DD` symbolizes a two-digit day (e.g. `23`) 6. A [[#line ending|line ending]] or end of input ==== Preformatted Text ==== @@ -418,18 +432,6 @@ fn my_func() -> u32 { \}}} }}} -TODO ... wrapping a preformatted text block with another preformatted text - isn't possible right now due to the use of `}}}` matching. We would - need some sort of escape like `\}}}` or `\{{{` that could be used to - avoid matching legit syntax but still provide the literal text - upon rendering. - -TODO ... pandoc supports more than one metadata key/value pair via spaces - such as `{{{class="something" style="else"`. Wasn't clear if vimwiki - itself supports multiple metadata. *vimwiki-server* supports this - through semicolons because it was easier `{{{class="something";style="else"` - but isn't married to that approach - ===== Syntax ===== A *preformatted text* is composed of a [[#beginning preformatted text line|beginning preformatted text line]], @@ -445,23 +447,23 @@ A *beginning preformatted text line* is represented by the following: 7. A [[#line ending|line ending]] or end of input A *preformatted language identifier* is represented by the following: -1. One or more characters that are not equals sign (`U+003D` aka `=`) -2. An optional semicolon (`U+003B` aka `;`) +1. One or more [[#character|characters]] leading up to a [[#whitespace character|whitespace characters]] +2. Is comprised of a series of any character except equals sign (`U+003D` aka `=`) A *preformatted metadata list* is composed of one or more -[[#preformatted metadata list items|preformatted metadata list items]] separated by semicolons (`U+003B` aka `;`). +[[#preformatted metadata list items|preformatted metadata list items]] separated by [[#whitespace character|whitespace characters]]. A *preformatted metadata list item* is represented by the following: -1. One or more characters leading up to an equals sign (`U+003D` aka `=`), +1. One or more [[#character|characters]] leading up to an equals sign (`U+003D` aka `=`), not including a [[#line ending|line ending]] 2. An equals sign (`U+003D` aka `=`) 3. A quotation mark (`U+0022` aka `"`) -4. One or more characters leading up to a quotation mark (`U+0022` aka `"`) +4. One or more [[#character|characters]] leading up to a quotation mark (`U+0022` aka `"`) 5. A quotation mark (`U+0022` aka `"`) A *preformatted text line* is a line found after a [[#beginning preformatted text line|beginning preformatted text line]] and before an [[#ending preformatted text line|ending preformatted text line]] and is -comprised of zero or more characters followed by a [[#line ending|line ending]]. +comprised of zero or more [[#character|characters]] followed by a [[#line ending|line ending]]. An *ending preformatted text line* is represented by the following: 1. Starts at the beginning of a line @@ -530,25 +532,6 @@ A *content cell* is represented by the following: A *cell boundary* is represented by the pipe character (`U+007C` aka `|`). -==== Non-blank Line ==== - -A non-blank line is a single line that is not a paragraph. It is used to -capture text not represented by any other element. - -{{{vimwiki - Some other text containing *bold* and [[links]]. -}}} - -===== Syntax ===== - -A *non-blank line* is represented by the following: -1. Between one and three [[#whitespace character|whitespace characters]] -2. One or more [[#inline elements|inline elements]] -3. A [[#line ending|line ending]] or end of input - -TODO ... should we combine [[#non-blank line|non-blank line]] with paragraph - by having a paragraph trim all leading [[#whitespace character|whitespace]]? - === Inline Elements === The vimwiki language also has a variety of syntax that can be used within a @@ -566,16 +549,12 @@ using the [[https://www.mathjax.org/|MathJax engine]]. $ \sum_i a_i^2 = 1 $ }}} -TODO ... is there a way to escape the `$` used to mark the beginning and end - of an inline math element? Is `$` even a concern within an - inline formula? If it is, maybe an escape sequence of `\$` would - be applicable. - ===== Syntax ===== An *inline math* element is represented by the following: 1. A dollar sign (`U+0024` aka `$`) -2. One or more characters that are not a dollar sign or [[#line ending|line ending]] +2. One or more [[#character|characters]] representing [[https://en.wikipedia.org/wiki/TeX|TeX syntax]] + that are not a dollar sign or [[#line ending|line ending]] 3. A dollar sign (`U+0024` aka `$`) *Extra Notes*: The formula within the inline element is trimmed to remove all @@ -597,13 +576,11 @@ A *tags* element is represented by the following: 2. A sequence of [[#tag|tag]] separated by [[#tag separator|tag separator]] 3. A [[#tag separator|tag separator]] -A *tag* is represented by one or more characters that are not a colon, +A *tag* is represented by one or more [[#character|characters]] that are not a colon, [[#whitespace character|whitespace]], or [[#line ending|line ending]] A *tag separator* is represented by a colon (`U+003A` aka `:`). -TODO ... should tags with whitespace be allowed? - ==== Link ==== A link is a crucial inline element of vimwiki and is able to connect pages @@ -643,7 +620,7 @@ An *interwiki link* is represented by one of the following: An *indexed interwiki link* is represented by the following: 1. A [[#link start seq|link start seq]] 2. The sequence `wiki` -3. One or more digits (`0-9`), but must be `0` or higher +3. One or more digits (`0-9`) 4. A colon (`U+003A` aka `:`) 5. A [[#link path|link path]] 6. An optional [[#link anchor|link anchor]] @@ -653,7 +630,7 @@ An *indexed interwiki link* is represented by the following: A *named interwiki link* is represented by the following: 1. A [[#link start seq|link start seq]] 2. The sequence `wn.` -3. One or more characters that are not a colon (`U+003A` aka `:`) or [[#line ending|line ending]] +3. One or more [[#alphanumeric character|alphanumeric characters]] 4. A colon (`U+003A` aka `:`) 5. A [[#link path|link path]] 6. An optional [[#link anchor|link anchor]] @@ -680,27 +657,27 @@ A *transclusion link* is represented by the following: 4. The sequence `}}` A *link key value pair* is represented by the following: -1. One or more characters that are not a pipe symbol (`U+007C` +1. One or more [[#character|characters]] that are not a pipe symbol (`U+007C` aka `|`), equals sign (`U+003D` aka `=`), `}}`, or [[#line ending|line ending]] 2. An equals sign (`U+003D` aka `=`) 3. A quotation mark (`U+0022` aka `"`) -4. One or more characters that are not a pipe symbol (`U+007C` +4. One or more [[#character|characters]] that are not a pipe symbol (`U+007C` aka `|`), quotation mark (`U+0022` aka `"`), `}}`, or [[#line ending|line ending]] 5. A quotation mark (`U+0022` aka `"`) A *link path* is represented by the following: 1. Does not start with a [[#link anchor prefix|link anchor prefix]] -2. One or more characters that are not a [[#link anchor prefix|link anchor prefix]], +2. One or more [[#character|characters]] that are not a [[#link anchor prefix|link anchor prefix]], [[#link inner separator|link inner separator]], [[#link end seq|link end seq]], or [[#line ending|line ending]] A *link description* is represented by one of the following: * A [[#link uri|link uri]] -* One or more characters that are not a [[#link end seq|link end seq]] or [[#line ending|line ending]] +* One or more [[#character|characters]] that are not a [[#link end seq|link end seq]] or [[#line ending|line ending]] A *link anchor* is represented by a series of pairs, each comprised of a [[#link anchor prefix|link anchor prefix]] and a [[#link anchor element|link anchor element]] -A *link anchor element* is represented by one or more characters that are +A *link anchor element* is represented by one or more [[#character|characters]] that are not a [[#link anchor prefix|link anchor prefix]], [[#link inner separator|link inner separator]], [[#link end seq|link end seq]], or [[#line ending|line ending]] @@ -716,10 +693,10 @@ A *link uri* is represented by the following: 1. Starts with `www.`, `//`, or a [[#link uri scheme|link uri scheme]] a. If starting with `www.`, we add a virtual prefix of `https://` going forward b. If starting with `//`, we add a virtual prefix of `file:/` going forward -2. One or more characters that are not [[#whitespace character|whitespace characters]] +2. One or more [[#character|characters]] that are not [[#whitespace character|whitespace characters]] or [[#line ending|line ending]] -A *link uri scheme* is represented by a series of alphanumeric characters +A *link uri scheme* is represented by a series of alphanumeric [[#character|characters]] (`a-z`, `A-Z`, `0-9`) as well as plus (`U+002B` aka `+`), period (`U+002E` aka `.`), and hyphen (`U+002D` aka `-`). The scheme is terminated by a colon (`U+003A` aka `:`). @@ -730,19 +707,19 @@ A *link uri scheme* is represented by a series of alphanumeric characters ==== Decorated Text ==== Decorated text supports a variety of markups across [[#link|links]], -[[#keyword|keywords]], and [[#text|text]]. It mirrors these different HTML elements: -* [[https://developer.mozilla.org/en-US/docs/Web/HTML/Element/strong|<strong>]] -* [[https://developer.mozilla.org/en-US/docs/Web/HTML/Element/em|<em>]] -* [[https://developer.mozilla.org/en-US/docs/Web/HTML/Element/s|<s>]] -* [[https://developer.mozilla.org/en-US/docs/Web/HTML/Element/code|<code>]] -* [[https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sup|<sup>]] -* [[https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sub|<sub>]] +[[#keyword|keywords]], non-repeating [[#decorated text|decorated text]], and [[#text|text]]. + +It mirrors these different HTML elements: +* [[https://developer.mozilla.org/en-US/docs/Web/HTML/Element/strong|strong]] +* [[https://developer.mozilla.org/en-US/docs/Web/HTML/Element/em|em]] +* [[https://developer.mozilla.org/en-US/docs/Web/HTML/Element/s|s]] +* [[https://developer.mozilla.org/en-US/docs/Web/HTML/Element/code|code]] +* [[https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sup|sup]] +* [[https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sub|sub]] {{{vimwiki *bold* _italic_ -*_bold italic_* -_*bold italic*_ ~~strikeout~~ `code` ^superscript^ @@ -754,7 +731,6 @@ _*bold italic*_ *Decorated text* is represented by one of the following: * [[#bold text|Bold text]] * [[#italic text|Italic text]] -* [[#bold italic text|Bold italic text]] * [[#strikeout text|Strikeout text]] * [[#code text|Code text]] * [[#superscript text|Superscript text]] @@ -762,58 +738,50 @@ _*bold italic*_ *Bold text* is represented by the following: 1. An asterisk (`U+002A` aka `*`) -2. One or more [[#link|links]], [[#keyword|keywords]], or [[#text|text]] until +2. One or more [[#link|links]], [[#keyword|keywords]], [[#non-repeated decorated text|non-repeated decorated text]], or [[#text|text]] until an asterisk (`U+002A` aka `*`) is encountered 3. An asterisk (`U+002A` aka `*`) *Italic text* is represented by the following: 1. An underscore (`U+005F` aka `_`) -2. One or more [[#link|links]], [[#keyword|keywords]], or [[#text|text]] until +2. One or more [[#link|links]], [[#keyword|keywords]], [[#non-repeated decorated text|non-repeated decorated text]], or [[#text|text]] until an underscore (`U+005F` aka `_`) is encountered 3. An underscore (`U+005F` aka `_`) -*Bold Italic text* is represented by either of the following: -* Form 1 - 1. Sequence `*_` - 2. One or more [[#link|links]], [[#keyword|keywords]], or [[#text|text]] until - an `_*` is encountered - 3. Sequence `_*` -* Form 2 - 1. Sequence `_*` - 2. One or more [[#link|links]], [[#keyword|keywords]], or [[#text|text]] until - an `*_` is encountered - 3. Sequence `*_` - *Strikeout text* is represented by the following: 1. Two tilde (`U+007E` aka `~`) -2. One or more [[#link|links]], [[#keyword|keywords]], or [[#text|text]] until +2. One or more [[#link|links]], [[#keyword|keywords]], [[#non-repeated decorated text|non-repeated decorated text]], or [[#text|text]] until two tilde (`U+007E` aka `~`) are encountered 3. Two tilde (`U+007E` aka `~`) *Code text* is represented by the following: -1. A backtick or grave accent (`U+0060`) +1. A backtick (`U+0060`) 2. Any character other than a backtick or [[#line ending|line ending]] -3. A backtick or grave accent (`U+0060`) +3. A backtick (`U+0060`) *Superscript text* is represented by the following: 1. A carrot or circumflex accent (`U+005E` aka `^`) -2. One or more [[#link|links]], [[#keyword|keywords]], or [[#text|text]] until +2. One or more [[#link|links]], [[#keyword|keywords]], [[#non-repeated decorated text|non-repeated decorated text]], or [[#text|text]] until a carrot or circumflex accent (`U+005E` aka `^`) is encountered 3. A carrot or circumflex accent (`U+005E` aka `^`) *Superscript text* is represented by the following: 1. Two commas (`U+002C` aka `,`) -2. One or more [[#link|links]], [[#keyword|keywords]], or [[#text|text]] until +2. One or more [[#link|links]], [[#keyword|keywords]], [[#non-repeated decorated text|non-repeated decorated text]], or [[#text|text]] until two commas (`U+002C` aka `,`) are encountered 3. Two commas (`U+002C` aka `,`) -TODO ... Cannot escape a backtick within code, is this something that we'd - expect to support? +*Non-repeated decorated text* is represented as [[#decorated text|decorated text]] +where no previous styling is seen again until that styling is closed. For +example, if [[#bold text|bold text]] is first seen, there will not be another +case of bold text until after the current one has ended +(`*bold *inner bold* text*` is not allowed). ==== Keyword ==== Keywords are specific, case-sensitive words that have an alternative -highlighting within vim, but serve no other special purpose. +highlighting within vim as well as provide highlighting in generated HTML +via classes. ===== Syntax ===== @@ -827,12 +795,12 @@ A *keyword* is represented as one of the following: ==== Text ==== -Text is a plain series of characters that have no special stylings applied +Text is a plain series of [[#character|characters]] that have no special stylings applied directly, but can be included in other [[#inline elements|inline elements]]. ===== Syntax ===== -A *text* is represented as one or more characters until any of the following +A *text* is represented as one or more [[#character|characters]] until any of the following is encountered: * [[#inline math|inline math]] * [[#tags|tags]] @@ -841,51 +809,36 @@ is encountered: * [[#keyword|keyword]] * [[#line ending|line ending]] -=== Comments === +==== Comments ==== + +A special type of inline element is the comment. Compared to all other inline +elements, comments are unique in that they do not render into any other +format (HTML, PDF, etc) and - in the case of multi-line comments - can span +across more than one line. -Separately from [[#block elements|block elements]] and [[#inline elements|inline elements]], -comments are another element available within vimwiki. There are two -classifications: +There are two types of comments: 1. Line comment in the form of `%%CONTENT` 2. Multi-line comment in the form of `%%+CONTENT++%` -TODO ... if comments are removed from vimwiki before all other syntax is - evaluated, we need to provide an escape mechanism, otherwise the above syntax - within inline code will be removed when rendering to HTML, parsing, etc. - -TODO ... while vimwiki, pandoc, and vimwiki server do not yet offer this, should - we consider an escape sequence to enable leaving a comment within a vimwiki - file as normal text. Something like `\%%` would leave as `%%` and `\%%+` would - leave as `%%+`. Could use the same conceal vim syntax as with bold and other - decorations to head the preceding backslash. - -==== Line Comment Syntax ==== +===== Line Comment Syntax ===== 1. A *line comment* is represented by the following: 1. The sequence `%%` 2. Any character until [[#line ending|line ending]] *Extra Notes*: A line comment does not consume a [[#line ending|line ending]], -only the characters leading up to one. If a line comment is at the beginning of +only the [[#character|characters]] leading up to one. If a line comment is at the beginning of a line, it will leave a blank line in its place. -TODO ... today, the documentation describes a line comment as starting at the - beginning of a line while pandoc and vimwiki-server support a line comment at - any position in a line. What stance do we want to take here? Would we need a - compatibility layer for people who might have leveraged %% within the middle of - a line not expecting it to be a comment? Or should this be one of the advantages - of finally defining a specification in that we can avoid hard backwards - compatibility? - -==== Multi-line Comment Syntax ==== +===== Multi-line Comment Syntax ===== 1. A *multi-line comment* is represented by the following: 1. The sequence `%%+` 2. Any character until the sequence `+%%` 3. The sequence `+%%` -*Extra Notes*: A multi-line comment consumes all characters - including +*Extra Notes*: A multi-line comment consumes all [[#character|characters]] - including [[#line ending|line ending]] - between the surrounding character sequences. It can be used to join content in separate lines together. See example below. @@ -905,18 +858,15 @@ in the text that they can match. This means that the order in which elements are evaluated can affect how a page is perceived. Additionally, the inclusion of [[#comments|comments]] further complicates the -process of parsing a file. Comments should remove any content from a file and -multi-line comments can remove [[#line ending|line ending]] characters. +process of parsing a file. Comments can be placed alongside inline elements, +which enables them to be in most locations within vimwiki. Compared to any +other element, comments yield empty text when rendered. This can result in +shortening of lines and even removal of [[#line ending|line ending]] characters. -To that end, a two-pass parser is required to support properly extracting -comments prior to parsing the full vimwiki syntax: -1. Parse all comments and remove from input -2. Parse a page that is full of [[#block elements|block elements]] +Below is a breakdown of element categorization: {{{ Comment = - | Multi Line Comment - | Line Comment Page = (Block Element)+ Block Element = | Header @@ -924,13 +874,17 @@ Block Element = | List | Table | Math Block - | Blank Line | Blockquote | Divider | Placeholder | Paragraph - | Non-blank Line +Inline Block Element = + | List Item + | Term + | Definition Inline Element = + | Multi Line Comment + | Line Comment | Math Inline | Tags | Link