added comment stripper preprocessor
This commit is contained in:
parent
abbebab00f
commit
5066ff2437
|
@ -28,9 +28,14 @@ GENERICIMAGE_PATTERN = r'!\[(.*?)\]\((.*?)\)'
|
|||
OBSLINK_PATTERN = r'\[\[(.*?)\]\]'
|
||||
GENERICLINK_PATTERN = r'\[(.*?)\]\((.*?)\)'
|
||||
|
||||
# Inline footnote reference pattern.
|
||||
INLINE_FOOTNOTE_REF_PREFIX = STX + "erbosoft_fnref:"
|
||||
INLINE_FOOTNOTE_REF_PATTERN = INLINE_FOOTNOTE_REF_PREFIX + "{}" + ETX
|
||||
|
||||
# Obsidian comment marker
|
||||
COMMENT_MARKER = '%%'
|
||||
|
||||
|
||||
def is_proper_url(s: str) -> bool:
|
||||
"""
|
||||
Checks to see if a string is a "proper" URL.
|
||||
|
@ -322,6 +327,53 @@ class ObsidianInlines(Extension):
|
|||
md.inlinePatterns.register(SimpleTagInlineProcessor(r'()\=\=(.*?)\=\=', 'ins'), 'highlight', PRIO_BASE + 1)
|
||||
|
||||
|
||||
class ObsidianComments(Extension):
|
||||
"""An extension that removes Obsidian-style comments."""
|
||||
class CommentStripper(Preprocessor):
|
||||
"""The actual preprocessor that removes comments."""
|
||||
def run(self, lines: list[str]) -> list[str]:
|
||||
"""
|
||||
Removes the comments from the array of lines.
|
||||
|
||||
Args:
|
||||
lines (list[str]): The Markdown liens read in.
|
||||
|
||||
Returns:
|
||||
list[str]: The Markdown lines after the comments have been removed.
|
||||
"""
|
||||
newlines: list[str] = []
|
||||
in_comment = False
|
||||
defer_in_comment = False
|
||||
for line in lines:
|
||||
arr = line.split(COMMENT_MARKER)
|
||||
if in_comment:
|
||||
arr.pop(0)
|
||||
in_comment = False
|
||||
if len(arr) % 2 == 0:
|
||||
defer_in_comment = True
|
||||
if len(arr) > 0:
|
||||
arr.pop()
|
||||
if not in_comment:
|
||||
i = len(arr) - 2
|
||||
while i >= 0:
|
||||
arr.pop(i)
|
||||
i -= 2
|
||||
newlines.append(''.join(arr))
|
||||
if defer_in_comment:
|
||||
in_comment = True
|
||||
defer_in_comment = False
|
||||
return newlines
|
||||
|
||||
def extendMarkdown(self, md: markdown.Markdown) -> None: # noqa: N802
|
||||
"""
|
||||
Registers the comment remover with the Markdown parser.
|
||||
|
||||
Args:
|
||||
md (markdown.Markdown): The Markdown parser to register the comment remover with.
|
||||
"""
|
||||
md.preprocessors.register(ObsidianComments.CommentStripper(md), 'comments-multi', PRIO_BASE + 1)
|
||||
|
||||
|
||||
class ObsidianStyleFootnotes(FootnoteExtension):
|
||||
"""
|
||||
An extension of the standard Markdown processor footnote extension to support Obsidian-style inline footnotes
|
||||
|
@ -452,6 +504,7 @@ def create_markdown_parser(context: Context) -> markdown.Markdown:
|
|||
markdown.Markdown: The new Markdown parser.
|
||||
"""
|
||||
return markdown.Markdown(extensions=[MetaStripper(),
|
||||
ObsidianComments(),
|
||||
ObsidianStyleFootnotes(SUPERSCRIPT_TEXT='[{}]', SEPARATOR='-'),
|
||||
ObsidianImages(context),
|
||||
ObsidianLinks(context),
|
||||
|
|
Loading…
Reference in New Issue
Block a user