Module: Asciidoctor::PDF::TextTransformer
- Included in:
- FormattedText::Transform, IndexCatalog, Asciidoctor::Prawn::Extensions
- Defined in:
- lib/asciidoctor/pdf/text_transformer.rb
Constant Summary collapse
- XMLMarkupRx =
/&#?[a-z\d]+;|</
- PCDATAFilterRx =
/(&#?[a-z\d]+;|<[^>]+>)|([^&<]+)/
- TagFilterRx =
/(<[^>]+>)|([^<]+)/
- ContiguousCharsRx =
/\p{Graph}+/
- WordRx =
/\p{Word}+/
- Hyphen =
'-'
- SoftHyphen =
?\u00ad
- LowerAlphaChars =
'a-z'
- SmallCapsChars =
NOTE: use more widely-supported ғ instead of ꜰ as replacement for F NOTE: use more widely-supported ǫ instead of ꞯ as replacement for Q NOTE: use more widely-supported s (lowercase latin “s”) instead of ꜱ as replacement for S NOTE: in small caps, x (lowercase latin “x”) remains unchanged
'ᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴoᴘǫʀsᴛᴜᴠᴡxʏᴢ'
Instance Method Summary collapse
- #capitalize_words(string) ⇒ Object
- #capitalize_words_pcdata(string) ⇒ Object
- #hyphenate_words(string, hyphenator) ⇒ Object
- #hyphenate_words_pcdata(string, hyphenator) ⇒ Object
- #lowercase_pcdata(string) ⇒ Object
- #smallcaps_pcdata(string) ⇒ Object
-
#transform_text(text, transform) ⇒ Object
Apply the text transform to the specified text.
- #uppercase_pcdata(string) ⇒ Object
Instance Method Details
#capitalize_words(string) ⇒ Object
28 29 30 |
# File 'lib/asciidoctor/pdf/text_transformer.rb', line 28 def capitalize_words string string.gsub(ContiguousCharsRx) { $&.capitalize } end |
#capitalize_words_pcdata(string) ⇒ Object
20 21 22 23 24 25 26 |
# File 'lib/asciidoctor/pdf/text_transformer.rb', line 20 def capitalize_words_pcdata string if XMLMarkupRx.match? string string.gsub(PCDATAFilterRx) { $2 ? (capitalize_words $2) : $1 } else capitalize_words string end end |
#hyphenate_words(string, hyphenator) ⇒ Object
40 41 42 |
# File 'lib/asciidoctor/pdf/text_transformer.rb', line 40 def hyphenate_words string, hyphenator string.gsub(WordRx) { hyphenator.visualize $&, SoftHyphen } end |
#hyphenate_words_pcdata(string, hyphenator) ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/asciidoctor/pdf/text_transformer.rb', line 32 def hyphenate_words_pcdata string, hyphenator if XMLMarkupRx.match? string string.gsub(PCDATAFilterRx) { $2 ? (hyphenate_words $2, hyphenator) : $1 } else hyphenate_words string, hyphenator end end |
#lowercase_pcdata(string) ⇒ Object
44 45 46 47 48 49 50 |
# File 'lib/asciidoctor/pdf/text_transformer.rb', line 44 def lowercase_pcdata string if string.include? '<' string.gsub(TagFilterRx) { $2 ? $2.downcase : $1 } else string.downcase end end |
#smallcaps_pcdata(string) ⇒ Object
60 61 62 63 64 65 66 |
# File 'lib/asciidoctor/pdf/text_transformer.rb', line 60 def smallcaps_pcdata string if XMLMarkupRx.match? string string.gsub(PCDATAFilterRx) { $2 ? ($2.tr LowerAlphaChars, SmallCapsChars) : $1 } else string.tr LowerAlphaChars, SmallCapsChars end end |
#transform_text(text, transform) ⇒ Object
Apply the text transform to the specified text.
Supported transform values are “uppercase”, “lowercase”, or “none” (passed as either a String or a Symbol). When the uppercase transform is applied to the text, it correctly uppercases visible text while leaving markup and named character entities unchanged. The none transform returns the text unmodified.
76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/asciidoctor/pdf/text_transformer.rb', line 76 def transform_text text, transform case transform when :uppercase, 'uppercase' uppercase_pcdata text when :lowercase, 'lowercase' lowercase_pcdata text when :capitalize, 'capitalize' capitalize_words_pcdata text when :smallcaps, 'smallcaps' smallcaps_pcdata text else text end end |
#uppercase_pcdata(string) ⇒ Object
52 53 54 55 56 57 58 |
# File 'lib/asciidoctor/pdf/text_transformer.rb', line 52 def uppercase_pcdata string if XMLMarkupRx.match? string string.gsub(PCDATAFilterRx) { $2 ? $2.upcase : $1 } else string.upcase end end |