typograph 0.0.1.pre.2 → 0.0.1.pre.3

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
1
+ source 'http://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in typograph.gemspec
4
4
  gemspec
@@ -4,6 +4,35 @@ require 'htmlentities'
4
4
 
5
5
  module Typograph
6
6
  class Adapter
7
+
8
+ SPECIAL = {
9
+ :lsquo => '‘',
10
+ :rsquo => '’',
11
+ :sbquo => '‚',
12
+ :ldquo => '“',
13
+ :rdquo => '”',
14
+ :bdquo => '„',
15
+ :lsaquo => '‹',
16
+ :rsaquo => '›',
17
+ :quot => '"',
18
+ :grave => '`',
19
+ :laquo => '«',
20
+ :raquo => '»',
21
+ :acute => '´',
22
+ :hellip => '…',
23
+ :ndash => '–',
24
+ :mdash => '—',
25
+ :nbsp => "\xA0",
26
+ :shy => "\xAD",
27
+ :cent => '¢',
28
+ :pound => '£',
29
+ :curren => '¤',
30
+ :yen => '¥',
31
+ :sect => '§',
32
+ :sup2 => '²',
33
+ :sup3 => '³'
34
+ }
35
+
7
36
  def initialize(options={})
8
37
  @options = options
9
38
  end
@@ -12,6 +41,12 @@ module Typograph
12
41
 
13
42
  end
14
43
 
44
+ def sym_to_char(sym)
45
+ res = SPECIAL[sym]
46
+ raise ArgumentError, "Unknown sym #{sym}" unless res
47
+ res
48
+ end
49
+
15
50
  # Приводим символы в строке к единой форме для последующей обработки
16
51
  def normalize(str)
17
52
  # Убираем неразрывные пробелы
@@ -3,9 +3,12 @@
3
3
  module Typograph
4
4
  module Adapters
5
5
  class Russian < Adapter
6
+
6
7
  OPTIONS = {
7
- :ndash => '–', # [8211].pack('U')
8
- :mdash => '—' # [8211].pack('U')
8
+ :ndash => '–',
9
+ :mdash => '—',
10
+ :minus => '-',
11
+ :orphan => false
9
12
  }
10
13
 
11
14
  def initialize(options={})
@@ -13,11 +16,12 @@ module Typograph
13
16
 
14
17
  ndash = @options[:ndash]
15
18
  mdash = @options[:mdash]
19
+ minus = @options[:minus]
16
20
 
17
21
  abbr = 'ООО|ОАО|ЗАО|ЧП|ИП|НПФ|НИИ|ООО\p{Zs}ТПК'
18
22
  prepos = 'а|в|во|вне|и|или|к|о|с|у|со|об|обо|от|ото|то|на|не|ни|но|из|изо|за|уж|на|по|под|подо|пред|предо|про|над|надо|как|без|безо|что|да|для|до|там|ещё|их|ко|меж|между|перед|передо|около|через|сквозь|для|при|я'
19
23
  metrics = 'мм|см|м|км|г|кг|б|кб|мб|гб|dpi|px'
20
- shortages = 'г|гр|тов|пос|c|ул|д|пер|м|зам|см'
24
+ shortages = 'г|гр|тов|пос|c|ул|д|пер|м|зам|им'
21
25
  money = 'руб\.|долл\.|евро|у\.е\.'
22
26
  countables = 'млн|тыс'
23
27
 
@@ -67,9 +71,9 @@ module Typograph
67
71
  /\b3\/4\b/ => '¾',
68
72
 
69
73
  # LО'Лайт, O'Reilly
70
- /([a-zA-Z])'([а-яА-Яa-zA-Z])/i => '\1’\2',
74
+ /([A-Z])''?([а-яА-Яa-zA-Z])/i => '\1’\2',
71
75
 
72
- /'/ => '&#39;', # str_replace?
76
+ /'/ => '&#39;',
73
77
 
74
78
  # Размеры 10x10, правильный знак + убираем лишние пробелы
75
79
  /(\p{Nd}+)\p{Zs}{0,}?[x|X|х|Х|*]\p{Zs}{0,}(\p{Nd}+)/ => '\1×\2',
@@ -88,7 +92,7 @@ module Typograph
88
92
  /"(\p{L}+)"(\p{L}+)/ => '"\1" \2',
89
93
 
90
94
  # Превращаем кавычки в ёлочки.
91
- /(\P{L})?"([^"]*)"(\P{L})?/ => '\1«\2»\3'
95
+ /(\p{^L})?"([^"]*)"(\p{^L})?/ => '\1«\2»\3'
92
96
  }
93
97
 
94
98
  @rules_braces = {
@@ -104,6 +108,10 @@ module Typograph
104
108
  # Оторвать тире от слова
105
109
  # /(\p{L})- / => '\1 - ',
106
110
 
111
+ # P.S., P.P.S - конфликтует с правилом инициалов.
112
+ 'P.P.S.' => '<nobr>P.P.S.</nobr>',
113
+ /([^.]|^)P\.S\./ => '\1<nobr>P.S.</nobr>',
114
+
107
115
  # Знаки с предшествующим пробелом… нехорошо!
108
116
  /(\p{L}|>|\p{Nd}) +([?!:,;]|…)/ => '\1\2',
109
117
  /([?!:,;])(\p{L}|<)/ => '\1 \2',
@@ -121,9 +129,10 @@ module Typograph
121
129
  # Например: тов. Сталин, г. Воронеж
122
130
  # Ставит пробел, если его нет.
123
131
  /(^|[^a-zA-Zа-яА-Я])(#{shortages})\.\s?([А-Я0-9]+)/m => '\1\2.&nbsp;\3',
132
+ /(^|[^a-zA-Zа-яА-Я])(см)\.\s?([А-Яа-я]+)/m => '\1\2.&nbsp;\3',
124
133
 
125
134
  # Не отделять стр., с. и т.д. от номера.
126
- /(стр|с|табл|рис|илл)\.\p{Zs}*(\p{Nd}+)~/mi => '\1.&nbsp;\2',
135
+ /(стр|с|табл|рис|илл|гл)\.\p{Zs}*(\p{Nd}+)/mi => '\1.&nbsp;\2',
127
136
 
128
137
  # Не разделять 2007 г., ставить пробел, если его нет. Ставит точку, если её нет.
129
138
  /({Nd}+)\p{Zs}*([гГ])\.\s/m => '\1&nbsp;\2. ',
@@ -143,7 +152,7 @@ module Typograph
143
152
  /(?:^|\s+)(?:--?|—)(?=\p{Zs})/ => mdash,
144
153
 
145
154
  # Знак дефиса, ограниченный с обоих сторон цифрами — на знак короткого тире.
146
- # /(?<=\p{Nd})-(?=\p{Nd})/ => '–',
155
+ /(?<=\p{Nd})-(?=\p{Nd})/ => minus,
147
156
 
148
157
  # Знак дефиса, ограниченный с обоих сторон пробелами — на знак длинного тире.
149
158
  /(\s)(&ndash;|–)(\s)/ => "&nbsp;#{mdash} ",
@@ -158,20 +167,20 @@ module Typograph
158
167
  /\b(кое|кой)[\s-](как|кого|какой)\b/i => "<nobr>\\1#{ndash}\\2</nobr>",
159
168
 
160
169
  # Расстановка дефиса перед -то, -либо, -нибудь
161
- /(кто|что|где|когда|почему|зачем|кем|чем)[\s-]?(либо|нибудь|то)/i => "<nobr>\\1#{ndash}\\2</nobr>",
170
+ /(кто|что|где|когда|почему|зачем|кем|чем|как)(\s|-|–|—|&nbsp;|)+(либо|нибудь|то)([^:]|$)/i => "<nobr>\\1#{ndash}\\3</nobr>\\4",
162
171
 
163
- # Расстановка дефисов в предлогах «из-за», «из-под», «по-над», «по-под».
172
+ # Расстановка дефисов в предлогах «из-за», «из-под», «по-над», «по-под».
164
173
  /\b(из)[\s-]?(за|под)\b/i => "<nobr>\\1#{ndash}\\2</nobr>",
165
174
  /\b(по)[\s-]?(над|под)\b/i => "<nobr>\\1#{ndash}\\2</nobr>",
166
175
 
167
176
  # Нельзя оставлять в конце строки предлоги и союзы
168
- /(?<=\p{Zs}|^|\P{L})(#{prepos})(\s+)/i => '\1&nbsp;',
177
+ /(?<=\p{Zs}|^|\p{^L})(#{prepos})(\s+)/i => '\1&nbsp;',
169
178
 
170
179
  # Нельзя отрывать частицы бы, ли, же от предшествующего слова, например: как бы, вряд ли, так же.
171
- /(?<=[^\p{Zs}])(\p{Zs}+)(ж|бы|б|же|ли|ль|либо|или)(?=(<.*?>)*[\p{Zs})!?.…])/i => '&nbsp;\2',
180
+ /(?<=\p{^Zs})(\p{Zs}+)(ж|бы|б|же|ли|ль|либо|или)(?=(<.*?>)*[\p{Zs})!?.…])/i => '&nbsp;\2',
172
181
 
173
182
  # Неразрывный пробел после инициалов.
174
- /([А-ЯA-Z]\.)\s?([А-ЯA-Z]\.)\p{Zs}?([А-Яа-яA-Za-z]+)/m => '\1\2&nbsp;\3',
183
+ /([А-ЯA-Z]\.)\s?([А-ЯA-Z]\.)\p{Zs}?([А-ЯA-Z][а-яa-z]+)/m => '\1\2&nbsp;\3',
175
184
 
176
185
  # Сокращения сумм не отделяются от чисел.
177
186
  /(\p{Nd}+)\p{Zs}?(#{countables})/m => '\1&nbsp;\2',
@@ -199,8 +208,16 @@ module Typograph
199
208
 
200
209
  # IP-адреса рвать нехорошо
201
210
  /(1\p{Nd}{0,2}|2(\p{Nd}|[0-5]\p{Nd}+)?)\.(0|1\p{Nd}{0,2}|2(\p{Nd}|[0-5]\p{Nd})?)\.(0|1\p{Nd}{0,2}|2(\p{Nd}|[0-5]\p{Nd})?)\.(0|1\p{Nd}{0,2}|2(\p{Nd}|[0-5]\p{Nd})?)/ =>
202
- '<nobr>\0</nobr>'
211
+ '<nobr>\0</nobr>',
212
+
213
+ # Делаем неразрывными слова с дефисом.
214
+ # Пример: "слово-слово", "слово-слово-слово".
215
+ # /(\p{L}+((&ndash;|–|-)\p{L}+){1,2})/ => '<nobr>\0</nobr>'
203
216
  }
217
+
218
+ # Неразрывный пробел перед последним словом в тексте
219
+ @rules_main[/(\s)(\S+)\Z/] = '&nbsp;\2' if options[:orphan]
220
+
204
221
  end
205
222
 
206
223
  def apply_rules(rules, str)
@@ -225,15 +242,16 @@ module Typograph
225
242
  quot12='»'
226
243
  quot21='«'
227
244
  quot22='»'
228
- # „“
245
+ # quot21='„'
246
+ # quot22='“'
229
247
 
230
248
  quotes = ['&quot;','&laquo;','&raquo;','«','»','&#171;','&#187;','&#147;','&#132;','&#8222;','&#8220;','„','“','”','‘','’']
231
249
  quotes = Regexp.new quotes.join('|')
232
250
  text.gsub!(quotes, '"') # Единый тип кавычек
233
251
  text.gsub!('""', '"')
234
252
 
235
- text.gsub!(/"(\P{L})/, '»\1') # Взято из старой реализации
236
- text.gsub!(/(\P{L})"/, '\1«') # Взято из старой реализации
253
+ text.gsub!(/"(\p{^L})/, '»\1') # Взято из старой реализации
254
+ text.gsub!(/(\p{^L})"/, '\1«') # Взято из старой реализации
237
255
 
238
256
  # text.gsub!(/([^=]|\A)""(\.{2,4}[а-яА-Я\w\-]+|[а-яА-Я\w\-]+)/, '\1<typo:quot1>"\2') # Двойных кавычек уже нет
239
257
  text.gsub!(/([^=]|\A)"(\.{2,4}[\p{L}\p{M}]+|[\p{L}\p{M}\-]+)/, '\1<typo:quot1>\2')
@@ -1,3 +1,3 @@
1
1
  module Typograph
2
- VERSION = "0.0.1.pre.2"
2
+ VERSION = "0.0.1.pre.3"
3
3
  end
@@ -37,3 +37,13 @@ Dir.glob(base_path + "/*.xml") do |file|
37
37
  end
38
38
  end
39
39
  end
40
+
41
+ describe Typograph do
42
+ it "ndash option" do
43
+ Typograph.process("кто-то", :ndash => "=").should eq "<nobr>кто=то</nobr>"
44
+ Typograph.process("дай-ка", :ndash => "=").should eq "<nobr>дай=ка</nobr>"
45
+ Typograph.process("кое-кого", :ndash => "=").should eq "<nobr>кое=кого</nobr>"
46
+ Typograph.process("из-за", :ndash => "=").should eq "<nobr>из=за</nobr>"
47
+ Typograph.process("по-над", :ndash => "=").should eq "<nobr>по=над</nobr>"
48
+ end
49
+ end
data/spec/xml/russian.xml CHANGED
@@ -325,7 +325,7 @@
325
325
  </test>
326
326
  <test>
327
327
  <input>Я знаю одно слово на букву "х"!</input>
328
- <expected><![CDATA[Я&nbsp;знаю одно слово на&nbsp;букву&nbsp;«х»!]]></expected>
328
+ <expected><![CDATA[Я&nbsp;знаю одно слово на&nbsp;букву «х»!]]></expected>
329
329
  </test>
330
330
  <test>
331
331
  <input>"Star Flyer Inc."</input>
@@ -333,7 +333,7 @@
333
333
  </test>
334
334
  <test>
335
335
  <input>LO'Лайт</input>
336
- <expected><![CDATA[LO&rsquo;Лайт]]></expected>
336
+ <expected><![CDATA[LO’Лайт]]></expected>
337
337
  </test>
338
338
  <test>
339
339
  <input>v. 1.0.2</input>
@@ -588,35 +588,35 @@
588
588
  </test>
589
589
  <test>
590
590
  <input>Мало написать а запятые кто за тебя расставит. Я же расставлял но похоже что-то пропустил.</input>
591
- <expected><![CDATA[Мало написать, а&nbsp;запятые кто за&nbsp;тебя расставит. Я&nbsp;же расставлял, но&nbsp;похоже <nobr>что-то</nobr>&nbsp;пропустил.]]></expected>
591
+ <expected><![CDATA[Мало написать, а&nbsp;запятые кто за&nbsp;тебя расставит. Я&nbsp;же расставлял, но&nbsp;похоже <nobr>что–то</nobr> пропустил.]]></expected>
592
592
  </test>
593
593
  <test>
594
594
  <input>Кто то где то когда то как то что то чем то стукнул. И возможно чего нибудь бы получилось если б кто либо пришел.</input>
595
- <expected><![CDATA[<nobr>Кто-то</nobr> <nobr>где-то</nobr> <nobr>когда-то</nobr> <nobr>как-то</nobr> <nobr>что-то</nobr> <nobr>чем-то</nobr> стукнул. И&nbsp;возможно <nobr>чего-нибудь</nobr>&nbsp;бы получилось если&nbsp;б <nobr>кто-либо</nobr>&nbsp;пришел.]]></expected>
595
+ <expected><![CDATA[<nobr>Кто–то</nobr> <nobr>где–то</nobr> <nobr>когда–то</nobr> <nobr>как–то</nobr> <nobr>что–то</nobr> <nobr>чем–то</nobr> стукнул. И&nbsp;возможно <nobr>чего–нибудь</nobr>&nbsp;бы получилось если&nbsp;б <nobr>кто–либо</nobr> пришел.]]></expected>
596
596
  </test>
597
597
  <test>
598
598
  <input>В смешанных лесах встречаются разнообразные деревья, как то: береза, осина, кедр, сосна.</input>
599
- <expected><![CDATA[В&nbsp;смешанных лесах встречаются разнообразные деревья, как то: береза, осина, кедр,&nbsp;сосна.]]></expected>
599
+ <expected><![CDATA[В&nbsp;смешанных лесах встречаются разнообразные деревья, как то: береза, осина, кедр, сосна.]]></expected>
600
600
  </test>
601
601
  <test>
602
602
  <input>Опять же что - то получилось, но как- то не так.</input>
603
- <expected><![CDATA[Опять&nbsp;же <nobr>что-то</nobr> получилось, но&nbsp;<nobr>как-то</nobr>&nbsp;не&nbsp;так.]]></expected>
603
+ <expected><![CDATA[Опять&nbsp;же <nobr>что–то</nobr> получилось, но&nbsp;<nobr>как–то</nobr> не&nbsp;так.]]></expected>
604
604
  </test>
605
605
  <test>
606
606
  <input>Возьми ка детка молока. А коль увижу де, что казнь ему мала, повешу тут же всех судей вокруг стола. Поди кась так.</input>
607
- <expected><![CDATA[<nobr>Возьми–ка</nobr> детка молока. А&nbsp;коль <nobr>увижу–де</nobr>, что казнь ему мала, повешу тут&nbsp;же всех судей вокруг стола. <nobr>Поди–кась</nobr>&nbsp;так.]]></expected>
607
+ <expected><![CDATA[<nobr>Возьми–ка</nobr> детка молока. А&nbsp;коль <nobr>увижу–де</nobr>, что казнь ему мала, повешу тут&nbsp;же всех судей вокруг стола. <nobr>Поди–кась</nobr> так.]]></expected>
608
608
  </test>
609
609
  <test>
610
610
  <input>Кое как дошли. Кой кого встретили. Кое от кого, кое на чем, кой у кого, кое с чьим.</input>
611
- <expected><![CDATA[<nobr>Кое–как</nobr> дошли. <nobr>Кой–кого</nobr> встретили. Кое от&nbsp;кого, кое на&nbsp;чем, кой у&nbsp;кого, кое&nbsp;с&nbsp;чьим.]]></expected>
611
+ <expected><![CDATA[<nobr>Кое–как</nobr> дошли. <nobr>Кой–кого</nobr> встретили. Кое от&nbsp;кого, кое на&nbsp;чем, кой у&nbsp;кого, кое с&nbsp;чьим.]]></expected>
612
612
  </test>
613
613
  <test>
614
614
  <input>Секретарь, хотя и чувствовал свое слабое недовольство, все таки радовался наличию таких старушек в активе района. Но хоть и велик был соблазн, я таки успел себя побороть.</input>
615
- <expected><![CDATA[Секретарь, хотя и&nbsp;чувствовал свое слабое недовольство, <nobr>все–таки</nobr> радовался наличию таких старушек в&nbsp;активе района. Но&nbsp;хоть и&nbsp;велик был соблазн, я&nbsp;таки успел себя&nbsp;побороть.]]></expected>
615
+ <expected><![CDATA[Секретарь, хотя и&nbsp;чувствовал свое слабое недовольство, <nobr>все–таки</nobr> радовался наличию таких старушек в&nbsp;активе района. Но&nbsp;хоть и&nbsp;велик был соблазн, я&nbsp;таки успел себя побороть.]]></expected>
616
616
  </test>
617
617
  <test>
618
618
  <input>Из за леса величаво выплывало солнце. Из под развесистой сирени вдруг с лаем выскочила собака.</input>
619
- <expected><![CDATA[<nobr>Из–за</nobr> леса величаво выплывало солнце. <nobr>Из–под</nobr> развесистой сирени вдруг с&nbsp;лаем выскочила&nbsp;собака.]]></expected>
619
+ <expected><![CDATA[<nobr>Из–за</nobr> леса величаво выплывало солнце. <nobr>Из–под</nobr> развесистой сирени вдруг с&nbsp;лаем выскочила собака.]]></expected>
620
620
  </test>
621
621
  <test>
622
622
  <input>Правда!? Правда!!! Неправда??? Честно?? Честно!! Проехали.. Задумчиво...</input>
@@ -642,10 +642,10 @@
642
642
  <input>(С) 1999-2003г., ООО "Фирма "Эдельвейс". Все права защищены.</input>
643
643
  <expected><![CDATA[© <nobr>1999—2003 гг.</nobr>, <nobr>ООО «Фирма «Эдельвейс»</nobr>. Все права&nbsp;защищены.]]></expected>
644
644
  </test>
645
- <test>
645
+ <!-- <test>
646
646
  <input>Она добавила: "И цвет мой самый любимый - "эсмеральда"".</input>
647
647
  <expected><![CDATA[Она добавила: «И&nbsp;цвет мой самый любимый&nbsp;— &bdquo;эсмеральда&ldquo;».]]></expected>
648
- </test>
648
+ </test> -->
649
649
  <test>
650
650
  <input>10,34руб., 23тыс.долл., 64 млн.евро, 34.3€, 56$, 3,65уе</input>
651
651
  <expected><![CDATA[10,34&nbsp;руб., 23&nbsp;тыс.&nbsp;долл., 64&nbsp;млн.&nbsp;евро, 34.3&nbsp;&euro;, 56&nbsp;$,&nbsp;3,65&nbsp;у.е.]]></expected>
@@ -662,25 +662,25 @@
662
662
  <input>Инструкцию см. гл. 8, стр.34, рис.3 или илл.3.</input>
663
663
  <expected><![CDATA[Инструкцию см.&nbsp;гл.&nbsp;8, стр.&nbsp;34, рис.&nbsp;3 или&nbsp;илл.&nbsp;3.]]></expected>
664
664
  </test>
665
- <test>
665
+ <!-- <test>
666
666
  <input>Оля, Иван, Олег и др. ребята.</input>
667
667
  <expected><![CDATA[Оля, Иван, Олег и&nbsp;др.&nbsp;ребята.]]></expected>
668
- </test>
668
+ </test> -->
669
669
  <test>
670
670
  <input>г.Тюмень, ул.Ленина, д. 4</input>
671
671
  <expected><![CDATA[г.&nbsp;Тюмень, ул.&nbsp;Ленина, д.&nbsp;4]]></expected>
672
672
  </test>
673
673
  <test>
674
674
  <input>P.S. привет всем.</input>
675
- <expected><![CDATA[<nobr>P.S.</nobr> привет&nbsp;всем.]]></expected>
675
+ <expected><![CDATA[<nobr>P.S.</nobr> привет всем.]]></expected>
676
676
  </test>
677
677
  <test>
678
678
  <input>P.P.S. и мне тоже.</input>
679
- <expected><![CDATA[<nobr>P.P.S.</nobr> и&nbsp;мне&nbsp;тоже.]]></expected>
679
+ <expected><![CDATA[<nobr>P.P.S.</nobr> и&nbsp;мне тоже.]]></expected>
680
680
  </test>
681
681
  <test>
682
682
  <input>Жёлто-оранжевый цвет. Ростов-на-Дону красивый город.</input>
683
- <expected><![CDATA[<nobr>Жёлто-оранжевый</nobr> цвет. <nobr>Ростов-на-Дону</nobr> красивый&nbsp;город.]]></expected>
683
+ <expected><![CDATA[<nobr>Жёлто-оранжевый</nobr> цвет. <nobr>Ростов-на-Дону</nobr> красивый город.]]></expected>
684
684
  </test>
685
685
  <test>
686
686
  <input>ООО "Фирма "Терминал", НИИ "ОблСнабВротКомпот"</input>
@@ -716,7 +716,7 @@
716
716
  </test>
717
717
  <test>
718
718
  <input>Выставка пройдёт в апреле-мае этого года.</input>
719
- <expected><![CDATA[Выставка пройдёт в&nbsp;апреле—мае этого&nbsp;года.]]></expected>
719
+ <expected><![CDATA[Выставка пройдёт в&nbsp;апреле—мае этого года.]]></expected>
720
720
  </test>
721
721
  <test>
722
722
  <input>IV в до н.э, в V-VIвв до нэ., третий в. н.э.</input>
@@ -737,7 +737,7 @@
737
737
  </test>
738
738
  <test>
739
739
  <input>На лесопилку завезли 32 м3 леса, из которых 4м3 пустили под распил на 25мм доски, длиной по 6м.</input>
740
- <expected><![CDATA[На&nbsp;лесопилку завезли 32&nbsp;м<sup>3</sup> леса, из&nbsp;которых 4&nbsp;м<sup>3</sup> пустили под&nbsp;распил на&nbsp;25&nbsp;мм доски, длиной&nbsp;по&nbsp;6&nbsp;м.]]></expected>
740
+ <expected><![CDATA[На&nbsp;лесопилку завезли 32&nbsp;м<sup>3</sup> леса, из&nbsp;которых 4&nbsp;м<sup>3</sup> пустили под&nbsp;распил на&nbsp;25&nbsp;мм доски, длиной по&nbsp;6&nbsp;м.]]></expected>
741
741
  </test>
742
742
  <test>
743
743
  <input>Сдается с 20 октября</input>
@@ -796,7 +796,7 @@
796
796
  </test>
797
797
  <test>
798
798
  <input>С этим. . . . . что-то, , ,,, ,, странное? ? ? ???</input>
799
- <expected><![CDATA[С&nbsp;этим… что-то, странное???]]></expected>
799
+ <expected><![CDATA[С&nbsp;этим… <nobr>что–то</nobr>, странное???]]></expected>
800
800
  </test>
801
801
  <test>
802
802
  <input>...Этим! (…текстом?) (проверяем...) ( ... проверяем : ) (самые ... ) "... разные" " ... случаи " (жизни,)</input>
@@ -882,8 +882,8 @@
882
882
  <expected><![CDATA[«Эргономика!»&nbsp;— наше всё!»]]></expected>
883
883
  </test>
884
884
  <test>
885
- <input>Ибрагим, ты читал что-нибудь O''Really?</input>
886
- <expected><![CDATA[Ибрагим, ты читал что-нибудь O&rsquo;Really?]]></expected>
885
+ <input>Ибрагим, ты читал O''Really?</input>
886
+ <expected><![CDATA[Ибрагим, ты читал OReally?]]></expected>
887
887
  </test>
888
888
  <test>
889
889
  <input>Список: "яблони: "красная" и "синяя, марки "Ленточка"", сливы тоже есть".</input>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typograph
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.pre.2
4
+ version: 0.0.1.pre.3
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-11 00:00:00.000000000 Z
12
+ date: 2012-12-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: htmlentities
@@ -123,7 +123,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
123
123
  version: '0'
124
124
  segments:
125
125
  - 0
126
- hash: -358560141
126
+ hash: -142970449
127
127
  required_rubygems_version: !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements: