Class: Markbridge::Renderers::Discourse::Postprocessor
- Inherits:
-
Object
- Object
- Markbridge::Renderers::Discourse::Postprocessor
- Defined in:
- lib/markbridge/renderers/discourse/postprocessor.rb
Overview
Cleans up the raw Markdown produced by the Renderer:
-
(optional) strips trailing invisible characters per line —NBSP plus the zero-width format chars (ZWSP, ZWNJ, ZWJ, WJ, ZWNBSP/BOM). Deliberately excludes ASCII space and tab so Markdown’s “two trailing spaces = hard line break” rule still works. Off by default.
-
collapses runs of 3+ newlines down to two,
-
clears whitespace-only lines,
-
trims leading/trailing whitespace from the whole document.
Subclass to customize. The call method is the entry point.
Constant Summary collapse
- TRAILING_INVISIBLE_RE =
NBSP plus zero-width format chars. Spelled with explicit u{…} escapes rather than the literal characters — the latter are invisible in editors and easy to corrupt on encoding-conversion round-trips.
U+00A0 NBSP no-break space U+200B ZWSP zero-width space U+200C ZWNJ zero-width non-joiner U+200D ZWJ zero-width joiner U+2060 WJ word joiner U+FEFF ZWNBSP/BOM zero-width no-break space / byte-order mark /[\u{00A0 200B 200C 200D 2060 FEFF}]+$/- DEFAULT =
new
Instance Method Summary collapse
- #call(text) ⇒ String
-
#initialize(strip_trailing_invisibles: false) ⇒ Postprocessor
constructor
A new instance of Postprocessor.
Constructor Details
#initialize(strip_trailing_invisibles: false) ⇒ Postprocessor
Returns a new instance of Postprocessor.
35 36 37 |
# File 'lib/markbridge/renderers/discourse/postprocessor.rb', line 35 def initialize(strip_trailing_invisibles: false) @strip_trailing_invisibles = strip_trailing_invisibles end |
Instance Method Details
#call(text) ⇒ String
41 42 43 44 45 46 47 |
# File 'lib/markbridge/renderers/discourse/postprocessor.rb', line 41 def call(text) text = text.gsub(TRAILING_INVISIBLE_RE, "") if @strip_trailing_invisibles text .gsub(/\n{3,}/, "\n\n") # Max 2 consecutive newlines .gsub(/^[ \t]+$/, "") # Remove whitespace-only lines .strip # Trim leading/trailing whitespace end |