Module: NEU::MODS::Canonicalize
- Defined in:
- lib/neu/mods/canonicalize.rb
Overview
Whitespace canonicalization for the no-op guard: did an edit change anything, or only insignificant whitespace? Distinct from TextNormalizer, which cleans text for the access copy. See docs/text-normalization.md.
Constant Summary collapse
- NBSP =
U+00A0 non-breaking space, built from codepoint
[0xA0].pack("U")
Class Method Summary collapse
-
.canonical_lines(str) ⇒ Object
canonical_ws per line, keeping the breaks and dropping blank lines.
-
.canonical_ws(str) ⇒ Object
Fold NBSP first: Ruby's \s does not match U+00A0.
-
.whitespace_equivalent?(current, incoming) ⇒ Boolean
Treat values differing only by insignificant whitespace (NBSP vs space, collapsible runs, leading/trailing) as equal.
Class Method Details
.canonical_lines(str) ⇒ Object
canonical_ws per line, keeping the breaks and dropping blank lines.
19 20 21 |
# File 'lib/neu/mods/canonicalize.rb', line 19 def canonical_lines(str) str.to_s.split("\n").map { |line| canonical_ws(line) }.reject(&:empty?).join("\n") end |
.canonical_ws(str) ⇒ Object
Fold NBSP first: Ruby's \s does not match U+00A0.
14 15 16 |
# File 'lib/neu/mods/canonicalize.rb', line 14 def canonical_ws(str) str.to_s.tr(NBSP, " ").gsub(/\s+/, " ").strip end |
.whitespace_equivalent?(current, incoming) ⇒ Boolean
Treat values differing only by insignificant whitespace (NBSP vs space, collapsible runs, leading/trailing) as equal.
25 26 27 |
# File 'lib/neu/mods/canonicalize.rb', line 25 def whitespace_equivalent?(current, incoming) canonical_ws(current) == canonical_ws(incoming) end |