polytypo 1.11.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/lib/polytypo/data/VERSION +1 -1
  3. data/lib/polytypo/data/fixtures/bg.json +253 -0
  4. data/lib/polytypo/data/fixtures/cs.json +1 -1
  5. data/lib/polytypo/data/fixtures/de-CH.json +1 -1
  6. data/lib/polytypo/data/fixtures/de-DE.json +1 -1
  7. data/lib/polytypo/data/fixtures/el.json +1 -1
  8. data/lib/polytypo/data/fixtures/en-GB.json +1 -1
  9. data/lib/polytypo/data/fixtures/en-US.json +1 -1
  10. data/lib/polytypo/data/fixtures/es.json +1 -1
  11. data/lib/polytypo/data/fixtures/fi.json +1 -1
  12. data/lib/polytypo/data/fixtures/fr-CA.json +1 -1
  13. data/lib/polytypo/data/fixtures/fr.json +1 -1
  14. data/lib/polytypo/data/fixtures/hr.json +253 -0
  15. data/lib/polytypo/data/fixtures/hu.json +264 -0
  16. data/lib/polytypo/data/fixtures/it.json +1 -1
  17. data/lib/polytypo/data/fixtures/locale-resolution.json +1 -1
  18. data/lib/polytypo/data/fixtures/nl.json +1 -1
  19. data/lib/polytypo/data/fixtures/pl.json +1 -1
  20. data/lib/polytypo/data/fixtures/pt-BR.json +1 -1
  21. data/lib/polytypo/data/fixtures/pt-PT.json +1 -1
  22. data/lib/polytypo/data/fixtures/ro.json +234 -0
  23. data/lib/polytypo/data/fixtures/ru.json +1 -1
  24. data/lib/polytypo/data/fixtures/sk.json +1 -1
  25. data/lib/polytypo/data/fixtures/sv.json +1 -1
  26. data/lib/polytypo/data/fixtures/tr.json +1 -1
  27. data/lib/polytypo/data/fixtures/uk.json +1 -1
  28. data/lib/polytypo/data/locales/bg.json +82 -0
  29. data/lib/polytypo/data/locales/hr.json +82 -0
  30. data/lib/polytypo/data/locales/hu.json +88 -0
  31. data/lib/polytypo/data/locales/registry.json +6 -2
  32. data/lib/polytypo/data/locales/ro.json +82 -0
  33. data/lib/polytypo/data/rules/dashes.md +2 -1
  34. data/lib/polytypo/data/rules/order.json +1 -1
  35. data/lib/polytypo/data/rules/quotes.md +9 -0
  36. data/lib/polytypo/data/rules/ranges.md +6 -5
  37. data/lib/polytypo/data/schema/locale.schema.json +2 -2
  38. data/lib/polytypo/version.rb +1 -1
  39. metadata +9 -1
@@ -0,0 +1,82 @@
1
+ {
2
+ "locale": "bg",
3
+ "name": "Bulgarian",
4
+ "quotes": {
5
+ "primary": {
6
+ "open": "„",
7
+ "close": "“",
8
+ "innerSpace": "none"
9
+ },
10
+ "secondary": {
11
+ "open": "„",
12
+ "close": "“",
13
+ "innerSpace": "none"
14
+ },
15
+ "elisionIdioms": [],
16
+ "elisionClitics": {
17
+ "before": [],
18
+ "after": []
19
+ }
20
+ },
21
+ "dash": {
22
+ "parenthetical": "en-spaced",
23
+ "range": "en-spaced"
24
+ },
25
+ "ellipsis": {
26
+ "abbreviatedAfterTerminal": false
27
+ },
28
+ "hyphen": {
29
+ "prefixes": [],
30
+ "suffixes": [],
31
+ "compounds": []
32
+ },
33
+ "nbsp": {
34
+ "beforePunctuation": [],
35
+ "narrowBeforePunctuation": [],
36
+ "afterShortWords": [],
37
+ "abbreviations": [],
38
+ "beforeUnits": ["км", "кг", "лв.", "г."],
39
+ "beforeNumber": [],
40
+ "beforeWord": [],
41
+ "afterSymbols": [],
42
+ "initialBinding": "none"
43
+ },
44
+ "sources": [
45
+ {
46
+ "rule": "quotes",
47
+ "cite": "Институт за български език (БАН), Езикови справки, «Други случаи», quoting Официален правописен речник на българския език (2012), т. 135.1.5: «Не се удвояват кавичките, когато ограденият в кавички текст завършва с друг текст, ограден в кавички: стихотворението „Кафене „Славия“.»; ИБЕ, Речник на българския език (онлайн), s.v. «кавички»: «Препинателен знак от две двойки запетайки („ .. “)»; ИБЕ, «За интервалите и препинателните знаци» (Н. Костова, Аз Буки бр. 3/2018): a space before the opening and after the closing quotation mark, none inside",
48
+ "url": "https://ibl.bas.bg/ezikovispravki/vaprosi/drugi-sluchai-2",
49
+ "note": "Primary: U+201E open, U+201C close (NOT U+201D as in ro/hu). The code points were read from the rendered IBL text, not from a code-point table, so MEDIUM-HIGH. Secondary equals primary: the т. 135.1.5 example nests with the same „ “ pair, and no ‚ ‘ or « » level is attested for nesting (single quotes appear only for glosses in scientific text, not cited). The ОПР itself (beron.mon.bg) answered HTTP 403 and is cited through the Institute that compiled it; the paragraph numbers come from the IBL answers, the paragraphs were not read. innerSpace none per the IBL spacing article. The ОПР rule against doubling the closing marks is an algorithm and is not expressed in data. ACCEPTED COST of the identical pair: a nest whose inner mark touches the outer one is declined by the quotes rule (the fixtures bg-quotes-nest-* and bg-quotes-decline-spreads pin it, quotes.md §6). Q-W: both pairs are WIDE. elisionIdioms and elisionClitics empty: no apostrophe elision in the standard. Verified 2026-10-21."
50
+ },
51
+ {
52
+ "rule": "dashes",
53
+ "cite": "Институт за български език (БАН), Езикови справки №572 («При препинателни знаци»): «Пред и след голямо тире има шпация.»; ИБЕ, «За интервалите и препинателните знаци» (2018): spaced тире in «Технически университет – София»",
54
+ "url": "https://ibl.bas.bg/ezikovispravki/vaprosi/pri-prepinatelni-znatsi-9/572",
55
+ "note": "Supports dash.parenthetical = en-spaced: a space on both sides is stated. The width U+2013 is read from IBL's own rendered text, so MEDIUM. The European Commission DGT Bulgarian «Езиков наръчник» (2010, rev. 2011; house style, ranks below IBL) sets U+2014 in its own typesetting. DECISION recorded: U+2013, following the Institute. Verified 2026-10-21."
56
+ },
57
+ {
58
+ "rule": "ranges",
59
+ "cite": "Институт за български език (БАН), Езикови справки, «За означаване на интервал», quoting ОПР (2012) т. 103.4, 117.1, 117.2: «Тирето може се използва за означаване на период от време, когато е налице пропускане на предлог: 2000 – 2010 г., I – II в.»; Езикови справки №1017, ОПР т. 109.4: «13.10. – 20.11.2018 г.»; ИБЕ, «Отново за тиретата» (Ц. Георгиева, Аз Буки бр. 11/2016): ОПР 2012 codifies the long dash with spaces between numbers, replacing the earlier unspaced norm",
60
+ "url": "https://ibl.bas.bg/ezikovispravki/vaprosi/za-oznachavane-na-interval-15-20-yanuari-8/1605",
61
+ "note": "Supports dash.range = en-spaced (U+0020 U+2013 U+0020), as in sk. The tight form is the pre-2012 norm. Width read from rendered text, so MEDIUM. The ranges rule is off by default. Verified 2026-10-21."
62
+ },
63
+ {
64
+ "rule": "ellipsis",
65
+ "cite": "Институт за български език (БАН), Езикови справки №2158: after «2011 г.» «пишат се три, а не четири точки»; №2132: «Между многоточие и следваща го дума се оставя шпация.»",
66
+ "url": "https://ibl.bas.bg/ezikovispravki/vaprosi/schetavane-na-punktuatsionni-i-nepunktuatsionni-znatsi-v-teksta-3/2158",
67
+ "note": "abbreviatedAfterTerminal = false is a DECISION, not a citation: no source read states a two-dot form after '?' or '!'. ОПР т. 136.2 («Многоточие с други знаци») is the relevant paragraph but beron.mon.bg answered 403 and it was not read. Verified 2026-10-21."
68
+ },
69
+ {
70
+ "rule": "hyphen",
71
+ "cite": "Институт за български език (БАН), Езикови справки, «Пренасяне на думи на нов ред», citing ОПР (2012) т. 65.1–65.4, 66.1 (syllabic line-break rules)",
72
+ "url": "https://ibl.bas.bg/ezikovispravki/vaprosi/prenasyane-na-dumi-na-nov-red-7",
73
+ "note": "All three lists are empty: the cited rules govern syllable division and give no closed list of unbreakable hyphenated forms. Verified 2026-10-21."
74
+ },
75
+ {
76
+ "rule": "nbsp",
77
+ "cite": "Институт за български език (БАН), «За интервалите и препинателните знаци» (2018): «Пред точка, запетая, въпросителен знак, удивителен знак, точка и запетая, двоеточие не се оставя интервал.»; Езикови справки №1601: «Между последната цифра и съкращението се поставя шпация (интервал): 20 лв., също и 5 кг, 10 м, 100 км, 2020 г. и под.»; №626: «В записа 5% няма интервал (шпация) между цифрата и знака за процент.»",
78
+ "url": "https://ibl.bas.bg/ezikovispravki/vaprosi/pri-skrashcheniya-vkl-mezhdu-tsifra-i-skrashchenie-5-kg-2014-g-4/1601",
79
+ "note": "(1) beforePunctuation and narrowBeforePunctuation empty: no space before . , ? ! ; :. (2) beforeUnits = км, кг, лв., г.: each attested with a space after a number. This is form evidence only (IBL does not say non-breaking), the same footing as hu and sk, MEDIUM. The single-letter м is excluded by decision. (3) % is excluded: IBL writes 5% unspaced; the DGT house handbook's «4 %» with a non-breaking space ranks below it. (4) abbreviations, beforeNumber, beforeWord, afterSymbols and afterShortWords are empty and initialBinding = none: no source states a rule (IBL says proper names follow ordinary line-break rules). Decision, not citation. Verified 2026-10-21."
80
+ }
81
+ ]
82
+ }
@@ -0,0 +1,82 @@
1
+ {
2
+ "locale": "hr",
3
+ "name": "Croatian",
4
+ "quotes": {
5
+ "primary": {
6
+ "open": "„",
7
+ "close": "”",
8
+ "innerSpace": "none"
9
+ },
10
+ "secondary": {
11
+ "open": "‘",
12
+ "close": "’",
13
+ "innerSpace": "none"
14
+ },
15
+ "elisionIdioms": [],
16
+ "elisionClitics": {
17
+ "before": [],
18
+ "after": []
19
+ }
20
+ },
21
+ "dash": {
22
+ "parenthetical": "en-spaced",
23
+ "range": "en-spaced"
24
+ },
25
+ "ellipsis": {
26
+ "abbreviatedAfterTerminal": false
27
+ },
28
+ "hyphen": {
29
+ "prefixes": [],
30
+ "suffixes": [],
31
+ "compounds": []
32
+ },
33
+ "nbsp": {
34
+ "beforePunctuation": [],
35
+ "narrowBeforePunctuation": [],
36
+ "afterShortWords": [],
37
+ "abbreviations": ["dipl. ing.", "d. o. o."],
38
+ "beforeUnits": ["%", "‰", "€", "°C", "kg"],
39
+ "beforeNumber": ["str."],
40
+ "beforeWord": [],
41
+ "afterSymbols": ["§"],
42
+ "initialBinding": "none"
43
+ },
44
+ "sources": [
45
+ {
46
+ "rule": "quotes",
47
+ "cite": "Institut za hrvatski jezik i jezikoslovlje, Hrvatski pravopis (online edition), 8.16 Navodnici: «Navodnici su pravopisni znakovi koji se pojavljuju u paru.» «Imaju dva oblika: „...” i »...«.» «Iza prvoga i ispred drugoga navodnika ne piše se bjelina.»; 8.17 Polunavodnici: «Polunavodnici su pravopisni znakovi koji se pojavljuju u paru (‘...’).» — „Himna je Republike Hrvatske ‘Lijepa naša domovino’.”; 8.18 Izostavnik: «Drž’te ga!», «Je l’ došao?»",
48
+ "url": "https://pravopis.hr/pravilo/navodnici/71/",
49
+ "note": "Primary: U+201E open, U+201D close (as in ro/hu, NOT U+201C as in cs/sk/de/bg). 8.16 gives two forms unranked: „…” and »…« (U+00BB open, U+00AB close). U+201E/U+201D is a DECISION, supported by every example on the site (8.16, 8.16.1, 8.17, 8.1). Secondary: U+2018 open, U+2019 close, stated in 8.17 for a quotation inside a quotation; it differs from the primary and is not the low U+201A. innerSpace none for both, per 8.16 and 8.17. Q-W: primary WIDE, secondary NARROW. Code points were read from rendered pravopis.hr text, consistently across four pages, so MEDIUM-HIGH. elisionIdioms and elisionClitics are empty: 8.18 lists both U+2019 and U+0027 and gives no closed set of forward-attaching fragments (l’, al’ stand before a space). Verified 2026-10-21. Not cross-checked against Matica hrvatska (Babić–Moguš) or the EU DGT Croatian guide."
50
+ },
51
+ {
52
+ "rule": "dashes",
53
+ "cite": "Institut za hrvatski jezik i jezikoslovlje, Hrvatski pravopis (online edition), 8.14 Crtica: «Crtica ( – ) pravopisni je znak koji se piše s bjelinama slijeva i zdesna.»",
54
+ "url": "https://pravopis.hr/pravilo/crtica/69/",
55
+ "note": "Supports dash.parenthetical = en-spaced (U+0020 U+2013 U+0020). The width U+2013 was read from rendered text; 8.14 does not mention U+2014. MEDIUM-HIGH. Verified 2026-10-21."
56
+ },
57
+ {
58
+ "rule": "ranges",
59
+ "cite": "Institut za hrvatski jezik i jezikoslovlje, Hrvatski pravopis (online edition), 8.14 Crtica: «pri izražavanju raspona ili u značenju ‘od – do’: 2010. – 2012., autocesta Split – Zagreb»; «Pri bilježenju stranica u bibliografskim podatcima crtica se piše bez bjelina: str. 145–162.»; 8.1 Bjelina: «ispred i iza crtice: Posjeti: 15 – 17»",
60
+ "url": "https://pravopis.hr/pravilo/crtica/69/",
61
+ "note": "Supports dash.range = en-spaced. ACCEPTED COST: bibliographic page ranges are tight per the same paragraph, and locale data cannot select by context, so the rule will space them. The ranges rule is off by default. Year ranges carry an ordinal period (2010.), so the flank is U+002E rather than a digit; see the fixtures hr-ranges-* for the measured behaviour. Verified 2026-10-21."
62
+ },
63
+ {
64
+ "rule": "ellipsis",
65
+ "cite": "Institut za hrvatski jezik i jezikoslovlje, Hrvatski pravopis (online edition), 8.10 Trotočka (uses a–d, e.g. «Popio bih… kavu.»); 8.3 Upitnik",
66
+ "url": "https://pravopis.hr/pravilo/trotocka/64/",
67
+ "note": "abbreviatedAfterTerminal = false is a DECISION, not a citation: neither 8.10 nor 8.3 states a two-dot form after '?' or '!'. Verified 2026-10-21."
68
+ },
69
+ {
70
+ "rule": "hyphen",
71
+ "cite": "Institut za hrvatski jezik i jezikoslovlje, Hrvatski pravopis (online edition), 8.13 Spojnica, rule 6: «Ako se riječi koje se pišu sa spojnicom ipak prenose u novi redak, spojnica se zapisuje i na početku novoga retka: hrvatsko- / -engleski rječnik.»",
72
+ "url": "https://pravopis.hr/pravilo/spojnica/68/",
73
+ "note": "All three lists are empty. Breaking at a hyphen is explicitly provided for, and no closed list of unbreakable hyphenated forms exists. Verified 2026-10-21."
74
+ },
75
+ {
76
+ "rule": "nbsp",
77
+ "cite": "Institut za hrvatski jezik i jezikoslovlje, Hrvatski pravopis (online edition), 8.1 Bjelina: no space before . ? ! , … ; : ?! !? («U koliko je sati ručak?»); «između broja i znaka za mjernu jedinicu: 3 kg, 2 m, 220 V, 60 W, 5 °C»; «između broja i znaka za postotak i promil: 50 %, 62,5 %, 0,5 ‰»; «između broja i oznake novčane jedinice: 99,90 €, 34 kn»; «između oznake za članak i broja: § 25.»; no space «između broja i oznake za kutni stupanj, minutu i sekundu»; 8.19.11: «Znak za postotak bjelinom se odvaja od broja: 63 %.»; 8.19.8: «Znak za članak bjelinom se odvaja od broja.»; 8.13 Spojnica, rule 6: «Treba izbjegavati rastavljanje stranih riječi i imena, složenih kratica (dipl. ing., d. o. o.), složenih pokrata (CD-RW), mrežnih adresa i riječi koje se pišu sa spojnicom.»",
78
+ "url": "https://pravopis.hr/pravilo/bjelina/54/",
79
+ "note": "(1) beforePunctuation and narrowBeforePunctuation are empty: a stated negative, not silence. (2) beforeUnits = %, ‰, €, °C, kg: each is attested with a space after the number; form evidence, sufficient per nbsp.md §2. DECISIONS: single-letter m, V and W are excluded (as in sk and bg); kn is excluded as defunct; bare ° is never listed, since angular degrees are closed up; km, cm and mm are not attested on pravopis.hr and are not added. (3) afterSymbols = §. (4) abbreviations = dipl. ing., d. o. o.: 8.13 states a line-break intent for exactly these two complex abbreviations (MEDIUM-HIGH). The other spaced forms of 7.1 (d. d., dr. sc., i dr. and so on) are not listed: extending the intent to them would be a derivation, not a citation. (5) beforeNumber = str., form only, from «str. 145–162» in 8.14; a decision, MEDIUM. (6) afterShortWords is empty: no online section states a rule for one-letter prepositions or conjunctions at line end (8.13 rule 2 concerns syllable division only); the print chapter on end-of-line division was not read. (7) beforeWord is empty and initialBinding = none: 7.3 and 8.1 give only the spaced form of initials and say nothing about line breaks. Decisions, not citations. Verified 2026-10-21."
80
+ }
81
+ ]
82
+ }
@@ -0,0 +1,88 @@
1
+ {
2
+ "locale": "hu",
3
+ "name": "Hungarian",
4
+ "quotes": {
5
+ "primary": {
6
+ "open": "„",
7
+ "close": "”",
8
+ "innerSpace": "none"
9
+ },
10
+ "secondary": {
11
+ "open": "»",
12
+ "close": "«",
13
+ "innerSpace": "none"
14
+ },
15
+ "elisionIdioms": [],
16
+ "elisionClitics": {
17
+ "before": [],
18
+ "after": []
19
+ }
20
+ },
21
+ "dash": {
22
+ "parenthetical": "en-spaced",
23
+ "range": "en-tight"
24
+ },
25
+ "ellipsis": {
26
+ "abbreviatedAfterTerminal": false
27
+ },
28
+ "hyphen": {
29
+ "prefixes": [],
30
+ "suffixes": [],
31
+ "compounds": []
32
+ },
33
+ "nbsp": {
34
+ "beforePunctuation": [],
35
+ "narrowBeforePunctuation": [],
36
+ "afterShortWords": [],
37
+ "abbreviations": ["a. m.", "i. sz.", "Kr. e.", "Kr. u.", "s. k.", "i. e."],
38
+ "beforeUnits": ["km", "kg", "kWh", "km/h", "°C"],
39
+ "beforeNumber": [],
40
+ "beforeWord": [],
41
+ "afterSymbols": [],
42
+ "initialBinding": "none"
43
+ },
44
+ "sources": [
45
+ {
46
+ "rule": "quotes",
47
+ "cite": "Magyar Tudományos Akadémia, A magyar helyesírás szabályai, 12. kiadás (AkH12), §240 j: «Az idézőjel lehet: „ ” (macskaköröm) vagy » « (lúdlábidézőjel).»; «Az első idézőjel az alapforma, a második általában idézeten belüli idézőjel»; §257: «Ha az idézőjelbe tett mondaton belül még egy idézőjelre van szükség, lúdlábidézőjelet használunk:» («Szemében »mesterségem« / Most is nagy szálka még.»); §275: «Hiányjel vagy aposztróf. Például: hál’ istennek!; ’95 (= 1995)»",
48
+ "url": "https://helyesiras.mta.hu/helyesiras/default/akh12",
49
+ "note": "Primary: U+201E open, U+201D close. AkH describes the marks by name and position only; U+201D (not U+201C) is read from the character in the online text, so the closing code point is MEDIUM-HIGH confidence. Secondary: U+00BB open, U+00AB close (»…«, the reverse of ro's «…»), for a quote inside a quote. innerSpace none is read from the printed examples (§257 «Szemében »mesterségem«», the marks attached to the enclosed words), not from a stated rule, so MEDIUM. AkH12 has no third level. Q-W: both pairs WIDE. elisionIdioms and elisionClitics are empty: the attested apostrophe uses (hál’, ’95) are neither a closed set nor the shape of elisionClitics. Verified 2026-10-21."
50
+ },
51
+ {
52
+ "rule": "dashes",
53
+ "cite": "Magyar Tudományos Akadémia, A magyar helyesírás szabályai, 12. kiadás (AkH12), §240 g: «A gondolatjel mindig szóközzel kapcsolódik az előtte álló szó utolsó betűjéhez (vagy az előtte álló számjegyhez)», «a gondolatjel után is szóközt kell tenni»; §240 l: «A nagykötőjel középső helyzetű, és hosszúsága megegyezik a gondolatjel hosszúságával.»; §252: «Holnap – ha esik, ha fúj – elmegyünk kirándulni.»",
54
+ "url": "https://helyesiras.mta.hu/helyesiras/default/akh12",
55
+ "note": "Supports dash.parenthetical = en-spaced: a space on both sides is mandatory. The length (U+2013) is read from the printed glyph and from §240 l, which gives the gondolatjel the same length as the nagykötőjel; AkH never names the code point, so MEDIUM. Verified 2026-10-21."
56
+ },
57
+ {
58
+ "rule": "ranges",
59
+ "cite": "Magyar Tudományos Akadémia, A magyar helyesírás szabályai, 12. kiadás (AkH12), §240 l: «A nagykötőjel tapad az előtte és az utána következő szóhoz vagy számjegyhez:»; §264 c: «Nagykötőjellel fűzzük egymáshoz az olyan szavakat, amelyek valamitől valameddig viszonyt érzékeltetnek, például: Budapest–Bécs, Rajna–Majna–Duna-csatorna; 1983–1984. évi, a 128–9. lapon, az 1–4. osztályban»; «Bonyolultabb esetekben a nagykötőjel nem tapadva is illeszkedhet a tagok közé, például: 2011. április 25. – 2012. május 13.»",
60
+ "url": "https://helyesiras.mta.hu/helyesiras/default/akh12",
61
+ "note": "Supports dash.range = en-tight: the tight en dash is the default and AkH ranks it; the spaced form is limited to complex members. Every spaced example has '.' or a letter on one side, so under ranges.md §3.2/§3.2a none is a range candidate and en-tight never respaces it. §240 l adds «Nem tapad a nagykötőjel, ha több szóból álló, bonyolultabb írásmódú szerkezeteket kapcsol össze» (mandatory spacing) where §264 c says the spaced form is optional; neither affects digit-flanked ranges. «a 128–9. lapon» (§264 c) has the shape (3,1) and is outside the candidates, so a typed `128-9.` keeps its hyphen. The ranges rule is off by default. Verified 2026-10-21."
62
+ },
63
+ {
64
+ "rule": "ellipsis",
65
+ "cite": "Magyar Tudományos Akadémia, A magyar helyesírás szabályai, 12. kiadás (AkH12), §240 b: «A kihagyást, a gondolat félbeszakítását jelölő három pont szóköz nélkül kapcsolódik az előtte álló szóhoz.»; §251 example: «…imádott / Jankóm…?»",
66
+ "url": "https://helyesiras.mta.hu/helyesiras/default/akh12",
67
+ "note": "abbreviatedAfterTerminal = false is the safe value, not a citation: AkH never prints a two-dot form after '?' or '!', and the only attested combination is an ellipsis followed by '?'. AkH has no explicit sentence on this, so MEDIUM. Verified 2026-10-21."
68
+ },
69
+ {
70
+ "rule": "hyphen",
71
+ "cite": "Magyar Tudományos Akadémia, A magyar helyesírás szabályai, 12. kiadás (AkH12), §270: «Ha a szó már tartalmaz kötőjelet vagy nagykötőjelet, ezeknél az írásjeleknél is elválaszthatjuk a szót» («tűzzel- / vassal, Dumas- / nak, a MÁV- / ot.»)",
72
+ "url": "https://helyesiras.mta.hu/helyesiras/default/akh12",
73
+ "note": "All three lists are empty. Breaking at a hyphen or nagykötőjel is explicitly permitted, and AkH gives no closed list of unbreakable forms. Verified 2026-10-21."
74
+ },
75
+ {
76
+ "rule": "nbsp",
77
+ "cite": "Magyar Tudományos Akadémia, A magyar helyesírás szabályai, 12. kiadás (AkH12), §240 c: «A kérdőjel előtt nincs szóköz, tehát tapad az őt megelőző szó utolsó betűjéhez vagy más írásjelhez»; §277 a: «A különírt szavakból álló szókapcsolatok rövidítése általában annyi (ponttal elkülönített) tagot tartalmaz» — «a. m. (= annyi mint), i. sz. (= időszámításunk szerint), Kr. e. (= Krisztus előtt), s. k. (= saját kezűleg)»; §284 table: «Kr. u.», «i. e.»; §275: «A paragrafus jele. Például: 4. §»",
78
+ "url": "https://helyesiras.mta.hu/helyesiras/default/akh12",
79
+ "note": "(1) beforePunctuation and narrowBeforePunctuation are empty: §240 c states that no space precedes «?», and the same is stated for the period and the comma; «!», «:» and «;» are not separately verified, and the empty list changes nothing. (2) abbreviations: the six forms are attested with an internal space; AkH says nothing about line breaks, so this rests on form evidence alone, the same footing as sk's «t. j.». (3) afterSymbols is empty: AkH writes '4. §' with the number first. (4) afterShortWords, beforeNumber and beforeWord are empty and initialBinding = none: no source; AkH12 has no rule on personal-name initials (Hungarian puts them after the surname). Decision, not citation. Verified 2026-10-21."
80
+ },
81
+ {
82
+ "rule": "nbsp",
83
+ "cite": "Magyar Tudományos Akadémia, A magyar helyesírás szabályai, 12. kiadás (AkH12), §279 c: «A mértékegységnek a jelét szóköz választja el az előtte levő számtól, például: 100 km, 1 kg, 10 kWh, 120 km/h, 220 W.»; §275: «Fokjel. Például: 45°; 23 °C», «A százalék jele. Például: 48%»",
84
+ "url": "https://helyesiras.mta.hu/helyesiras/default/akh12",
85
+ "note": "beforeUnits = km, kg, kWh, km/h, °C, each attested with a space in §279 c or §275. '%' is deliberately absent: AkH prints 48% without a space; geometric 45° is likewise unspaced. Single-letter symbols are excluded by decision, not by citation: §279 c itself writes «220 W» with a space, but `s` is a Hungarian conjunction and a list of single letters would be a derivation (as in sk and ro). 'Ft' is omitted: it is a currency abbreviation attested only by example (§290), so it ships unverified-empty. Verified 2026-10-21."
86
+ }
87
+ ]
88
+ }
@@ -1,5 +1,5 @@
1
1
  {
2
- "spec": "1.11.0",
2
+ "spec": "1.12.0",
3
3
  "$comment": "Locale resolution input. Algorithm is specified in spec/rules/locale-resolution.md and is identical in every runtime — never delegate it to a platform locale-negotiation library. \"spec\" here must track spec/VERSION exactly — it is not itself the global version source; scripts/validate-spec.mjs enforces the match.",
4
4
  "locales": [
5
5
  "en-US",
@@ -21,7 +21,11 @@
21
21
  "uk",
22
22
  "cs",
23
23
  "tr",
24
- "sk"
24
+ "sk",
25
+ "ro",
26
+ "hu",
27
+ "bg",
28
+ "hr"
25
29
  ],
26
30
  "aliases": {
27
31
  "en": "en-US",
@@ -0,0 +1,82 @@
1
+ {
2
+ "locale": "ro",
3
+ "name": "Romanian",
4
+ "quotes": {
5
+ "primary": {
6
+ "open": "„",
7
+ "close": "”",
8
+ "innerSpace": "none"
9
+ },
10
+ "secondary": {
11
+ "open": "«",
12
+ "close": "»",
13
+ "innerSpace": "none"
14
+ },
15
+ "elisionIdioms": [],
16
+ "elisionClitics": {
17
+ "before": [],
18
+ "after": []
19
+ }
20
+ },
21
+ "dash": {
22
+ "parenthetical": "en-spaced",
23
+ "range": "none"
24
+ },
25
+ "ellipsis": {
26
+ "abbreviatedAfterTerminal": false
27
+ },
28
+ "hyphen": {
29
+ "prefixes": [],
30
+ "suffixes": [],
31
+ "compounds": []
32
+ },
33
+ "nbsp": {
34
+ "beforePunctuation": [],
35
+ "narrowBeforePunctuation": [],
36
+ "afterShortWords": [],
37
+ "abbreviations": [],
38
+ "beforeUnits": ["km", "kg", "cm", "mm", "km/h", "°C"],
39
+ "beforeNumber": ["art.", "nr."],
40
+ "beforeWord": [],
41
+ "afterSymbols": [],
42
+ "initialBinding": "single"
43
+ },
44
+ "sources": [
45
+ {
46
+ "rule": "quotes",
47
+ "cite": "Academia Română, Îndreptar ortografic, ortoepic, morfologic și de punctuație (ÎOOP6, 2024), §III.1.2 «Semne ortografice și de punctuație», pp. 43–44, «Ghilimelele»: «Există mai multe tipuri de ghilimele, folosite numai în pereche: românești „ ” (cele mai frecvent folosite și care au forma apostrofului sau a cifrei 9); franțuzești « », numite și ghilimele ascuțite/unghiulare, cu rolul de a marca un citat inclus în alt citat (situația de „ghilimele în ghilimele”)»; «În textele scrise în limba română, citatele, ca și vorbirea directă, se recomandă să fie încadrate în ghilimele românești»; «Între ghilimele și elementul pe care îl încadrează nu se lasă blanc.»; Ordinul MCTI nr. 414/25.09.2006 (M.Of. I nr. 842/12.10.2006), anexă: «ghilimele stânga jos (dublu 9 jos) 201E», «ghilimele dreapta sus (dublu 9 sus) 201D», «ghilimele ascuțite stânga 00AB», «ghilimele ascuțite dreapta 00BB»",
48
+ "url": "https://doom.lingv.ro/ioop?page=43",
49
+ "note": "Nivelul întâi: U+201E deschidere, U+201D închidere (forma «99…99», ca în pl; NU U+201C ca în cs/sk/de). Nivelul al doilea: U+00AB deschidere, U+00BB închidere, în direcția «…», nu »…« ca în pl; ÎOOP6 le atribuie rolul citatului inclus în alt citat, iar ‚…’ nu apare în nicio sursă (ghilimelele unice ʼ ʼ sunt rezervate glosării în stilul științific). Codurile provin din anexa Ordinului 414/2006 (copie neoficială: https://www.secarica.ro/std/ordin_codare_caractere_2006.09.25.pdf; textul oficial și vigoarea nu au fost verificate), nu din glifele randate; ÎOOP6 dă doar glifele, iar anexa le leagă de coduri. ÎOOP6 a fost citit din PDF-ul publicat la doom.lingv.ro (vizualizatorul paginii; adresa directă a fișierului răspunde 403), pagina tipărită corespunde paginii PDF. innerSpace = «none»: ÎOOP6 interzice blancul între ghilimele și elementul încadrat. Cele trei niveluri (nivelul al treilea, «„…”», în ghidul Cancelariei de Stat a R. Moldova 9.8.3, nenormativ) depășesc ce poate exprima schema. Q-W: ambele perechi sunt WIDE. elisionIdioms și elisionClitics sunt goale: cliticele se leagă cu cratima U+002D (s-a, l-am, într-un), nu cu apostrof, deci niciun apostrof nu e ghilimea de închidere; apostroful din ÎOOP6 §1.2.1 e rar și colocvial, mulțime deschisă. Verificat 20.10.2026."
50
+ },
51
+ {
52
+ "rule": "dashes",
53
+ "cite": "Academia Română, ÎOOP6 (2024), §III.1.2, pp. 45–46, «Linia de pauză [–]»: «Linia de pauză izolează cuvinte, construcții și propoziții intercalate într-un enunț»; «Înainte și după linia de pauză, blancul este obligatoriu, cu excepția cazului când, după a doua linie de pauză, urmează o virgulă.»; exemplu: «Materialele – pensule, acuarele, pânze – erau toate pe bănci.»; Institutul de Lingvistică «Iorgu Iordan – Al. Rosetti», DOOM3 (Univers Enciclopedic, 2021), Studiu introductiv, 1.2.5: «Este mai lungă decât cratima»; Ordinul MCTI nr. 414/2006, anexă: «linia de dialog și/sau pauză (En-Dash) 2013»",
54
+ "url": "https://doom.lingv.ro/studiu_introductiv/semne_grafice",
55
+ "note": "Justifică dash.parenthetical = «en-spaced»: blancul de ambele părți e obligatoriu în ÎOOP6. Lungimea (U+2013) e dată de anexa Ordinului 414/2006 (En-Dash), nu dedusă din glif. Excepția «urmează o virgulă» privește blancul de după a doua linie și nu schimbă forma. Verificat 20.10.2026."
56
+ },
57
+ {
58
+ "rule": "ranges",
59
+ "cite": "Academia Română, ÎOOP6 (2024), §III.1.2, «Cratima»: «perioada 1-13 mai = de la… până la…; distanța Sibiu-Brașov = dintre… și…»; «sunt greșite exprimările hibride: între 1-5 ianuarie, o persoană între 22-25 de ani, distanța dintre Sibiu-Brașov»; «Linia de pauză [–]», funcția (iv): se folosește «între cifre care exprimă un raport…, date calendaristice (noaptea de 30 – 31 decembrie)»; DOOM3 (2021), Studiu introductiv, 1.2.4: «Ca semn de punctuație, cratima se folosește, facultativ, între: … cuvinte sau numere care indică limite ale unor distanțe în spațiu sau ale unor intervale de timp» (anii 2020-2021, orele 8-16); DOOM3, «Bara oblică», II.3 b: linia de pauză «nu este încadrată de blancuri» (perioada 1–31 ianuarie, intervalul orar 9–18); «Cratima trebuie preferată liniei de pauză, deoarece oferă economie de spațiu»; cratima «nu este precedată, nici urmată de blanc»",
60
+ "url": "https://doom.lingv.ro/studiu_introductiv/semne_grafice",
61
+ "note": "dash.range = «none» NU înseamnă lipsă de convenție: ambele surse admit două forme, cratima U+002D fără blanc (preferată, 1-13 mai) și linia de pauză cu blancuri (30 – 31 decembrie, funcția (iv) din ÎOOP6; paginile 1 – 22 în DOOM3 1.2.5). Un text scris în oricare dintre ele e corect, deci nu e nimic de substituit, iar «none» le păstrează pe toate. DOOM3 mai atestă o a treia formă, linia de pauză fără blancuri (secțiunea «Bara oblică», II.3 b: «perioada 1–31 ianuarie», «intervalul orar 9–18»), adică exact «en-tight»; formele sunt trei și nicio sursă nu le ierarhizează fără rest, iar «none» nu alege între ele. Pe ranges, valoarea nu poate exprima «preferat»: alegerea e decizie înregistrată, nu citare. Regula ranges e implicit dezactivată. Verificat 20.10.2026."
62
+ },
63
+ {
64
+ "rule": "ellipsis",
65
+ "cite": "Academia Română, ÎOOP6 (2024), §III.1.2, pp. 49–50, «Punctele de suspensie [...]»: «Nu sunt precedate, dar sunt urmate obligatoriu de blanc.»; «După punctele de suspensie plasate la sfârșitul unui enunț nu se pune punct final.»; exemple cu punctele de suspensie între cuvinte și la sfârșit de enunț («Ai putea să citești cărți de aventuri sau polițiste, de călătorie sau de istorie, jurnale...»); Îndreptar ortografic, ortoepic și de punctuație, ed. a V-a (1995), §298 (transcriere dexonline wiki): «Continental!...»",
66
+ "url": "https://doom.lingv.ro/ioop?page=49",
67
+ "note": "abbreviatedAfterTerminal = false: după «!» stau trei puncte, iar forma cu două puncte nu apare în nicio sursă; nu există o frază explicită despre punctul final după «?» sau «!», deci ÎNCREDERE MEDIE. ÎOOP6 tipărește punctele de suspensie și ca trei puncte, și ca «…» (U+2026) în exemple, fără a distinge funcțional; un singur caracter e forma de stocare a spec-ului. Verificat 20.10.2026."
68
+ },
69
+ {
70
+ "rule": "hyphen",
71
+ "cite": "Institutul de Lingvistică «Iorgu Iordan – Al. Rosetti», DOOM3 (Univers Enciclopedic, 2021), Studiu introductiv, 5.1.5: «se recomandă evitarea despărțirii la capăt de rând atunci când locul acesteia ar coincide cu poziția semnelor respective»; «dacă nu poate fi evitată (de ex. în texte dispuse pe coloane), despărțirea se admite totuși»; despărțirea «nu se face când la sfârșitul primului rând sau/și la începutul rândului următor ar rezulta o singură literă»",
72
+ "url": "https://doom.lingv.ro/studiu_introductiv/despartire_capat_rand",
73
+ "note": "Cele trei liste rămân goale: regula e generală (o recomandare, cu admitere în caz de necesitate) și nu dă o listă închisă de forme. Regula literei izolate ar acoperi s-a, l-am, n-am, luat-o, dar o listă ar fi o derivare, nu o citare; mulțimea e deschisă și foarte frecventă. DECIZIE înregistrată: nu se adaugă nimic nedocumentat. Verificat 20.10.2026."
74
+ },
75
+ {
76
+ "rule": "nbsp",
77
+ "cite": "DOOM3 (2021), Studiu introductiv, 5.2: «nu Ion // Popescu, I. // Popescu;» «nu 10 // km, art. // 3.»; «Se tolerează plasarea pe rânduri diferite a abrevierilor pentru denumiri generice»; 1.2.6: abrevierile complexe se scriu cu punct interior fără blanc (I.L. Caragiale, ș.a.m.d.); Preambul: «Nu face obiectul unor norme propriu-zis ortografice scrierea unor termeni și mai ales a unor abrevieri și simboluri»; BIPM, The International System of Units (SI), 9th ed. (2019), concise summary (https://www.bipm.org/documents/20126/41483022/SI-Brochure-9-concise-EN.pdf): «A single space is always left between the number and the unit»; Cancelariei de Stat a R. Moldova, Ghid de redactare lingvistică și tehnoredactare a actelor normative (2026; «nu are caracter normativ»), 9.15.1.6 și 9.16.3: «Legea●nr.●100/2017»",
78
+ "url": "https://doom.lingv.ro/studiu_introductiv/despartire_capat_rand",
79
+ "note": "(1) initialBinding = «single»: DOOM3 5.2 interzice «I. // Popescu» (o inițială izolată urmată de nume). (2) beforeNumber = [«art.», «nr.»]: «art.» citat direct; «nr.» din aceeași clasă «notațiile cifrice care includ abrevieri» (5.2) și ghidul moldovean (nenormativ); «alin.» și «pct.» au doar ghidul moldovean și sunt omise. (3) beforeUnits: «km» citat direct din 5.2; kg, cm, mm, km/h, °C aparțin aceleiași clase, iar identitatea simbolurilor SI vine de la BIPM (DOOM3 deleagă simbolurile standardelor), strat inferior ca în cs/sk. «%» e omis: se sprijină numai pe ghidul moldovean (stil de casă). Simbolurile dintr-o literă (s, m, h, l, W) sunt excluse. (4) abbreviations goală: DOOM3 scrie abrevierile compuse fără blanc interior, iar pentru cele cu blanc (nr. crt.) nicio sursă nu interzice despărțirea. (5) beforePunctuation și narrowBeforePunctuation goale: nu se pune blanc înaintea lui : ; ! ? (doar ghidul moldovean, 9.14, nenormativ; ÎOOP6 spune «nu este precedat de blanc» numai despre punct și despre punctele de suspensie); lista goală e un no-op oricum. (6) afterShortWords, beforeWord, afterSymbols goale: nicio sursă; § nu e menționat. Verificat 20.10.2026."
80
+ }
81
+ ]
82
+ }
@@ -57,7 +57,8 @@ supports it (operator decision: no new locale claim was made by the split).
57
57
  list — and this rule owns the **mechanism** it applies to them. A `sources` citation is not
58
58
  required to name a code point or a binding the locale file has no way to vary. The principle is
59
59
  stated once, normatively, in [nbsp.md](nbsp.md) §2.1 and governs every list-valued field in
60
- `locale.schema.json`. **`"none"` means the locale has no verified convention for that use, and
60
+ `locale.schema.json`. **`"none"` means the rule substitutes nothing for that use — either the locale has no verified
61
+ convention for it, or the cited sources attest more than one form and rank none — and
61
62
  the rule must emit nothing at all for a token of that kind** — not a fallback, not a "sensible
62
63
  default", nothing. A missing citation is never a licence to guess (PLAN.md §6.1), and a locale
63
64
  that has not been researched must round-trip its input untouched rather than acquire a
@@ -1,5 +1,5 @@
1
1
  {
2
- "spec": "1.11.0",
2
+ "spec": "1.12.0",
3
3
  "$comment": "Single source of truth for pipeline order. Rules run in ascending `order`. Disabling a rule removes it from the sequence and never reorders the rest. Rule ids are public API (see docs/ARCHITECTURE.md section 5). \"spec\" here must track spec/VERSION exactly — it is not itself the global version source; scripts/validate-spec.mjs enforces the match.",
4
4
  "rules": [
5
5
  {
@@ -1456,6 +1456,15 @@ stream the way it does for `en-US`/`en-GB`/`fi`/`sv`. An exhaustive sweep over
1456
1456
  same-glyph vetoes plus the certification gate together protect already-curly interleaved text in
1457
1457
  this family, even without an independent width partition. Recorded as measured, not asserted.
1458
1458
 
1459
+ `bg` is the extreme case of this family: its secondary pair equals its primary pair (`„ “` for
1460
+ both), which the schema permits and which the cited source prescribes, since ОПР т. 135.1.5
1461
+ nests with the same pair. An exhaustive sweep over `{„, “, ", ', a, ␣}` to length 7 — 335,922
1462
+ inputs — found **zero** idempotency failures. The structural cost is a false negative, not an
1463
+ instability: a nest whose inner mark touches the outer one (`"a 'b'"`, `"'b' a"`) would render two
1464
+ like glyphs side by side, V1 rejects that on the re-scan and the gate declines the whole nest,
1465
+ the decline is not local to the nest, and `apostrophe` may then convert the inner opening mark.
1466
+ The `bg` fixtures pin those shapes as accepted misses.
1467
+
1459
1468
  ---
1460
1469
 
1461
1470
  ## 7. Open questions, and what could not be closed
@@ -53,8 +53,9 @@ a documented tradeoff, not a claim of reliable label detection — see §5.
53
53
  citations support it. No new locale claim is made by this document (operator decision, spec
54
54
  0.5.0): every `dash.range` value in `spec/locales/*.json` is unchanged from spec 0.4.1.
55
55
 
56
- `"none"` means the locale has no verified range convention, and this rule must emit nothing at
57
- all for a range token in that locale — not a fallback to `dash.parenthetical`, nothing.
56
+ `"none"` means the rule substitutes nothing for a range token in that locale: either no range
57
+ convention is verified, or the cited sources attest more than one form and rank none of them
58
+ (`ro`). This rule must emit nothing at all for a range token in that locale — not a fallback to `dash.parenthetical`, nothing.
58
59
 
59
60
  ---
60
61
 
@@ -254,14 +255,14 @@ next to a closed-up range member no longer converts: `Anstieg--50%--war` is left
254
255
  `Anstieg--50--war` has always been left alone, so the two agree; and a locale with a tight
255
256
  parenthetical form never reaches the guard, so `price--$50--drop` still becomes `price—$50—drop`
256
257
  in `en-US`. **The remedy is unconditional on `dash.range`, while the defect was not**: the
257
- conversion loss therefore also lands in `fr`, `fr-CA`, `it`, `nl`, `pt-BR` and `pt-PT`, whose
258
+ conversion loss therefore also lands in `fr`, `fr-CA`, `it`, `nl`, `pt-BR`, `pt-PT` and `ro`, whose
258
259
  `dash.range` is `"none"` and which never had a range verdict to disturb. Making T1 consult
259
260
  `dash.range` would make a `dashes` verdict depend on a field `dashes` does not read, which is a
260
- worse trade than a conversion nobody has asked for in six locales.
261
+ worse trade than a conversion nobody has asked for in seven locales.
261
262
 
262
263
  **The accepted cost, stated plainly.** Widening candidacy moves tokens **out of** `dashes`, and
263
264
  `ranges` is off by default, so text that `dashes` used to change now changes only when a caller
264
- turns `ranges` on — and in the eight locales whose `dash.range` is `"none"`, not even then:
265
+ turns `ranges` on — and in the ten locales whose `dash.range` is `"none"`, not even then:
265
266
  `$15 - $20` gave `$15 — $20` in `fr` through spec 1.2.0 and is a permanent no-op from 1.3.0. The affected shapes are the **spaced and multi-hyphen** ones, because a lone
266
267
  tight hyphen between two non-spaces was never converted by `dashes` either: `$15 - $20` gave
267
268
  `$15—$20` in `en-US` before this section and is a no-op with default options after it, while
@@ -39,11 +39,11 @@
39
39
  "properties": {
40
40
  "parenthetical": {
41
41
  "enum": ["em-tight", "em-spaced", "en-tight", "en-spaced", "none"],
42
- "description": "Dash used for a parenthetical break. `-tight` means no surrounding spaces, `-spaced` means a regular space on each side (the leading one may later be made non-breaking by the nbsp rule). `none` means the locale has no verified convention and the rule must not substitute anything."
42
+ "description": "Dash used for a parenthetical break. `-tight` means no surrounding spaces, `-spaced` means a regular space on each side (the leading one may later be made non-breaking by the nbsp rule). `none` means the rule must not substitute anything: either the locale has no verified convention, or the cited sources attest more than one form and rank none."
43
43
  },
44
44
  "range": {
45
45
  "enum": ["em-tight", "em-spaced", "en-tight", "en-spaced", "none"],
46
- "description": "Dash used between numbers and dates. Russian sets an em dash here. `none` means the locale has no verified convention and the rule must not substitute anything — a missing citation is never a licence to guess."
46
+ "description": "Dash used between numbers and dates. Russian sets an em dash here. `none` means the rule must not substitute anything: either the locale has no verified convention, or the cited sources attest more than one form and rank none — a missing citation is never a licence to guess."
47
47
  }
48
48
  }
49
49
  },
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Polytypo
4
- VERSION = "1.11.0"
4
+ VERSION = "1.12.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polytypo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.11.0
4
+ version: 1.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Iurii Rogulia
@@ -40,6 +40,7 @@ files:
40
40
  - lib/polytypo/data/README.md
41
41
  - lib/polytypo/data/UNICODE
42
42
  - lib/polytypo/data/VERSION
43
+ - lib/polytypo/data/fixtures/bg.json
43
44
  - lib/polytypo/data/fixtures/cs.json
44
45
  - lib/polytypo/data/fixtures/de-CH.json
45
46
  - lib/polytypo/data/fixtures/de-DE.json
@@ -50,17 +51,21 @@ files:
50
51
  - lib/polytypo/data/fixtures/fi.json
51
52
  - lib/polytypo/data/fixtures/fr-CA.json
52
53
  - lib/polytypo/data/fixtures/fr.json
54
+ - lib/polytypo/data/fixtures/hr.json
55
+ - lib/polytypo/data/fixtures/hu.json
53
56
  - lib/polytypo/data/fixtures/it.json
54
57
  - lib/polytypo/data/fixtures/locale-resolution.json
55
58
  - lib/polytypo/data/fixtures/nl.json
56
59
  - lib/polytypo/data/fixtures/pl.json
57
60
  - lib/polytypo/data/fixtures/pt-BR.json
58
61
  - lib/polytypo/data/fixtures/pt-PT.json
62
+ - lib/polytypo/data/fixtures/ro.json
59
63
  - lib/polytypo/data/fixtures/ru.json
60
64
  - lib/polytypo/data/fixtures/sk.json
61
65
  - lib/polytypo/data/fixtures/sv.json
62
66
  - lib/polytypo/data/fixtures/tr.json
63
67
  - lib/polytypo/data/fixtures/uk.json
68
+ - lib/polytypo/data/locales/bg.json
64
69
  - lib/polytypo/data/locales/cs.json
65
70
  - lib/polytypo/data/locales/de-CH.json
66
71
  - lib/polytypo/data/locales/de-DE.json
@@ -71,12 +76,15 @@ files:
71
76
  - lib/polytypo/data/locales/fi.json
72
77
  - lib/polytypo/data/locales/fr-CA.json
73
78
  - lib/polytypo/data/locales/fr.json
79
+ - lib/polytypo/data/locales/hr.json
80
+ - lib/polytypo/data/locales/hu.json
74
81
  - lib/polytypo/data/locales/it.json
75
82
  - lib/polytypo/data/locales/nl.json
76
83
  - lib/polytypo/data/locales/pl.json
77
84
  - lib/polytypo/data/locales/pt-BR.json
78
85
  - lib/polytypo/data/locales/pt-PT.json
79
86
  - lib/polytypo/data/locales/registry.json
87
+ - lib/polytypo/data/locales/ro.json
80
88
  - lib/polytypo/data/locales/ru.json
81
89
  - lib/polytypo/data/locales/sk.json
82
90
  - lib/polytypo/data/locales/sv.json