Source code for panvimwiki.filter.prefilter

"""Main function shared by prefilters."""

from __future__ import annotations

import fileinput
import re


[docs] def action( line: str, delete: str | None = None, replace: tuple[str, str] | None = None ) -> str | None: """Filter Vimwiki text by deleting lines or replacing text in lines. Parameters ---------- line Line from Vimwiki file. delete Regex string matching all or part of line to be deleted. replace Regex re.search string and replacement string for re.sub. Returns ------- str or None Convert line matching replace[0] regex by substituting replace[1]. To delete line matching delete regex, return None. Otherwise return the original line. Replace precedes delete. """ if replace is not None: re_search = re.compile(replace[0], re.MULTILINE) subst = replace[1] if re.search(re_search, line) is not None: return re.sub(re_search, subst, line, count=1) if delete is not None: re_delete = re.compile(delete, re.MULTILINE) if re.search(re_delete, line) is None: return line return None return line
[docs] def prefilter( delete: str | None = None, replace: tuple[str, str] | None = None ) -> None: """Read stdin, filter with action() to stdout. Parameters ---------- delete Regex string matching all or part of line to be deleted. replace Regex re.search string and replacement string for re.sub. """ with fileinput.input() as f: for line in f: lineout = action(line, delete, replace) if lineout is not None: print(lineout.rstrip("\n"))