Module: Typographica
- Extended by:
- Typographica
- Included in:
- String, Typographica
- Defined in:
- lib/typographica.rb,
lib/typographica/version.rb,
lib/typographica/typographica.rb
Overview
Typographica v0.1.0
Класс для типографической коррекции русского текста в HTML согласно правилам русского языка. Полная поддержка UTF-8.
©opyLeft & ©odeRight Alexey Kolosov aka mr.huNTer <[email protected]>
“Typographica” released without warranty under the terms of the Artistic License 2.0 www.opensource.org/licenses/artistic-license-2.0
Defined Under Namespace
Modules: VERSION
Instance Method Summary collapse
-
#typography(strToCorrect = "", shy = false) ⇒ Object
strToCorrect - строка для корректировки shy - расстановка “мягких” переносов по правилам русского языка.
-
#typography!(shy = false) ⇒ Object
shy - расстановка “мягких” переносов по правилам русского языка.
Instance Method Details
#typography(strToCorrect = "", shy = false) ⇒ Object
strToCorrect - строка для корректировки shy - расстановка “мягких” переносов по правилам русского языка
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/typographica/typographica.rb', line 20 def typography(strToCorrect = "", shy = false) if strToCorrect.empty? out = self else out = strToCorrect.dup end symbols = { "¤" => "¤", "°" => "°", "%" => "%", "£" => "£", "₤" => "₤", "€" => "€", "¥" => "¥" } # "мягкие" переносы для русского текста shys = { %r[([ёа-я][ьъй])([ёа-я]{2})]sui => "\\1­\\2", %r[([ёа-я][аеёиоуыэюя])([аеёиоуыэюя][ёа-я])]sui => "\\1­\\2", %r[([аеёиоуыэюя][бвгджзклмнпрстфхцчшщ])([бвгджзклмнпрстфхцчшщ][аеёиоуыэюя])]sui => "\\1­\\2", %r[([бвгджзклмнпрстфхцчшщ][аеёиоуыэюя])([бвгджзклмнпрстфхцчшщ][аеёиоуыэюя])]sui => "\\1­\\2", %r[([аеёиоуыэюя][бвгджзклмнпрстфхцчшщ])([бвгджзклмнпрстфхцчшщ][бвгджзклмнпрстфхцчшщ][аеёиоуыэюя])]sui => "\\1­\\2", %r[([аеёиоуыэюя][бвгджзклмнпрстфхцчшщ][бвгджзклмнпрстфхцчшщ])([бвгджзклмнпрстфхцчшщ][бвгджзклмнпрстфхцчшщ][аеёиоуыэюя])]sui => "\\1­\\2" } # маски и паттерны для преобразования в формате { маска => паттерн, маска => паттерн, маска => паттерн, ... } masks = { # амперсанд %r[([a-zёа-я]+)\s*\&\s*([a-zёа-я]+)]sui => "<nobr>\\1 & \\2</nobr>", # %r[([a-zёа-я]+)\s+\&\s+]sui => "\\1 & ", # # тире, дефисы, апострофы %r[(^|>|\s)([a-zёа-я]+[\-\'\/][a-zёа-я]+)([\s\.\,\!\?\;]+)]sui => "\\1<nobr>\\2\\3</nobr>", # %r[([a-zёа-я]+)\s+\-\s+]sui => "\\1 — ", # %r[(^|>|\s)\-\s+]sui => "\\1— ", # # знаки препинания %r[(\s*)([,\?\!\.]*)]sui => "\\2\\1", # %r[(.*?)([\,\;])([^\-\&]+?)(.*?)]sui => "\\1\\2 \\3\\4", # %r[([^\(ЁА-ЯA-Z][\.\?\!])([ЁА-ЯA-Z])]su => "\\1 \\2", # %r[(\s*)([\.\?\!]*)(\s*[ЁА-ЯA-Z])]su => "\\2\\1\\3", # %r[([a-zёа-я]+)\.{3,}]sui => "<nobr>\\1…</nobr>", # %r[\.{3,}]sui => "…", # # кавычки %r[(^|\s|>|\)|\()\"(.*?)\"]sui => "\\1«\\2»", # %r[(^|\s|>|\)|\()“(.*?)”]sui => "\\1«\\2»", # %r[(^|\s|>|\)|\()„(.*?)”]sui => "\\1«\\2»", # %r[„]sui => "„", # %r[“]sui => "“", # %r[”]sui => "”", # # спецсимволы %r[\(c\)]i => "©", # %r[\(r\)]i => "®", # %r[\(p\)]i => "℗", # %r[\(tm\)]i => "™", # %r[\(sm\)]i => "℠", # # номер %r[(^|\s)no\.?\s?(\d+)]sui => "\\1\u2116\\2", # no. 123 -> №123 # даты, телефонные номера, проценты %r[([0-9]{4})([\-\/\.])([0-9]{2})[\-\/\.]([0-9]{2})]su => "<nobr>\\4\\2\\3\\2\\1</nobr>", # 1990-12-31 -> 31-12-1990, 1990/12/31 -> 31/12/1990, 1990.12.31 -> 31.12.1990 %r[(\([0-9\+\-]+\))\s?([0-9]{3})\-?([0-9]{2})\-?([0-9]{2})]su => "<nobr>\\1 \\2–\\3–\\4</nobr>", # (904)4749303 -> (904) 474-93-03 %r[(\([0-9\+\-]+\))\s?([0-9]{2})\-?([0-9]{2})\-?([0-9]{2})]su => "<nobr>\\1 \\2–\\3–\\4</nobr>", # (9044)749303 -> (9044) 74-93-03 %r[(\([0-9\+\-]+\))\s?([0-9]{1})\-?([0-9]{2})\-?([0-9]{2})]su => "<nobr>\\1 \\2–\\3–\\4</nobr>", # (90447)49303 -> (90447) 4-93-03 %r[(\-?[0-9]{1,})\s*([\%\°\£\₤\€])]su => "<nobr>\\1\\2</nobr>", # 80 % - 80%, 80 ° - 80° %r[(\-?[0-9]{1,})\s*([\$\¥])]su => "<nobr>\\2\\1</nobr>", # 80 $ - $80, 80 ¥ - ¥80 # наводим красоту %r[\ \;\s+]sui => " ", # %r[([\,\.\;\!\?])\ {2,}]sui => "\\1 ", # %r[(\<)\s+?]sui => "\\1", # %r[(\>)\s+?]sui => "\\1", # %r[(\"|\")\s+(\"|\")]sui => "", # } # начали приседания ... masks.each do |key, value| out.gsub!(key, value) end # ... продолжаем ... symbols.each do |key, value| out.gsub!(key, value) end # ... не останавливаемся ... if shy shys.each do |key, value| out.gsub!(key, value) end end # ... и закончили упражнение return out end |
#typography!(shy = false) ⇒ Object
shy - расстановка “мягких” переносов по правилам русского языка
125 126 127 |
# File 'lib/typographica/typographica.rb', line 125 def typography!(shy = false) typography(self, shy) end |