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

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.

Returns:

  • (Boolean)


25
26
27
# File 'lib/neu/mods/canonicalize.rb', line 25

def whitespace_equivalent?(current, incoming)
  canonical_ws(current) == canonical_ws(incoming)
end