polytypo 1.10.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.
- checksums.yaml +4 -4
- data/lib/polytypo/data/VERSION +1 -1
- data/lib/polytypo/data/fixtures/bg.json +253 -0
- data/lib/polytypo/data/fixtures/cs.json +1 -1
- data/lib/polytypo/data/fixtures/de-CH.json +1 -1
- data/lib/polytypo/data/fixtures/de-DE.json +1 -1
- data/lib/polytypo/data/fixtures/el.json +1 -1
- data/lib/polytypo/data/fixtures/en-GB.json +1 -1
- data/lib/polytypo/data/fixtures/en-US.json +880 -3
- data/lib/polytypo/data/fixtures/es.json +1 -1
- data/lib/polytypo/data/fixtures/fi.json +1 -1
- data/lib/polytypo/data/fixtures/fr-CA.json +1 -1
- data/lib/polytypo/data/fixtures/fr.json +1 -1
- data/lib/polytypo/data/fixtures/hr.json +253 -0
- data/lib/polytypo/data/fixtures/hu.json +264 -0
- data/lib/polytypo/data/fixtures/it.json +1 -1
- data/lib/polytypo/data/fixtures/locale-resolution.json +1 -1
- data/lib/polytypo/data/fixtures/nl.json +1 -1
- data/lib/polytypo/data/fixtures/pl.json +1 -1
- data/lib/polytypo/data/fixtures/pt-BR.json +1 -1
- data/lib/polytypo/data/fixtures/pt-PT.json +1 -1
- data/lib/polytypo/data/fixtures/ro.json +234 -0
- data/lib/polytypo/data/fixtures/ru.json +1 -1
- data/lib/polytypo/data/fixtures/sk.json +278 -0
- data/lib/polytypo/data/fixtures/sv.json +1 -1
- data/lib/polytypo/data/fixtures/tr.json +1 -1
- data/lib/polytypo/data/fixtures/uk.json +1 -1
- data/lib/polytypo/data/locales/bg.json +82 -0
- data/lib/polytypo/data/locales/hr.json +82 -0
- data/lib/polytypo/data/locales/hu.json +88 -0
- data/lib/polytypo/data/locales/registry.json +7 -2
- data/lib/polytypo/data/locales/ro.json +82 -0
- data/lib/polytypo/data/locales/sk.json +94 -0
- data/lib/polytypo/data/rules/dashes.md +2 -1
- data/lib/polytypo/data/rules/modes.md +173 -72
- data/lib/polytypo/data/rules/order.json +1 -1
- data/lib/polytypo/data/rules/quotes.md +9 -0
- data/lib/polytypo/data/rules/ranges.md +6 -5
- data/lib/polytypo/data/schema/locale.schema.json +2 -2
- data/lib/polytypo/modes/yaml.rb +167 -29
- data/lib/polytypo/version.rb +1 -1
- metadata +11 -1
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
{
|
|
2
|
+
"spec": "1.12.0",
|
|
3
|
+
"locale": "ro",
|
|
4
|
+
"cases": [
|
|
5
|
+
{
|
|
6
|
+
"id": "ro-quotes-primary",
|
|
7
|
+
"rule": "quotes",
|
|
8
|
+
"mode": "text",
|
|
9
|
+
"in": "A spus \"salut\".",
|
|
10
|
+
"out": "A spus „salut”.",
|
|
11
|
+
"note": "quotes.primary = U+201E/U+201D (forma «99…99»): ÎOOP6 §III.1.2, «ghilimele românești „ ”»."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"id": "ro-quotes-not-german",
|
|
15
|
+
"rule": "quotes",
|
|
16
|
+
"mode": "text",
|
|
17
|
+
"in": "„salut“",
|
|
18
|
+
"out": "„salut”",
|
|
19
|
+
"note": "DISTINCTIVE CASE: input is the German/Czech pair with closing U+201C; output is the Romanian closing U+201D. The two differ by one glyph in print, hence a fixture of their own."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "ro-quotes-nested",
|
|
23
|
+
"rule": "quotes",
|
|
24
|
+
"mode": "text",
|
|
25
|
+
"in": "\"Ea a zis 'bine' acolo\"",
|
|
26
|
+
"out": "„Ea a zis «bine» acolo”",
|
|
27
|
+
"note": "quotes.secondary = U+00AB/U+00BB, pointing inwards: ÎOOP6 gives guillemets the role of a quote inside a quote."
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "ro-quotes-nested-guillemets-kept",
|
|
31
|
+
"rule": "quotes",
|
|
32
|
+
"mode": "text",
|
|
33
|
+
"in": "„Ea a zis «bine» acolo”",
|
|
34
|
+
"out": "„Ea a zis «bine» acolo”",
|
|
35
|
+
"note": "An already typeset nested pair is a fixed point."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "ro-quotes-no-inner-space",
|
|
39
|
+
"rule": "quotes",
|
|
40
|
+
"mode": "text",
|
|
41
|
+
"in": "„ salut ”",
|
|
42
|
+
"out": "„salut”",
|
|
43
|
+
"note": "innerSpace = none: ÎOOP6 «Între ghilimele și elementul pe care îl încadrează nu se lasă blanc.»"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "ro-ellipsis-three-dots",
|
|
47
|
+
"rule": "ellipsis",
|
|
48
|
+
"mode": "text",
|
|
49
|
+
"in": "Stai... ce?",
|
|
50
|
+
"out": "Stai… ce?",
|
|
51
|
+
"note": "Three dots become the single character U+2026."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "ro-ellipsis-not-abbreviated",
|
|
55
|
+
"rule": "ellipsis",
|
|
56
|
+
"mode": "text",
|
|
57
|
+
"in": "Serios?.. da",
|
|
58
|
+
"out": "Serios?… da",
|
|
59
|
+
"note": "abbreviatedAfterTerminal = false: no source attests the two-dot form after a terminal mark; medium confidence, see sources."
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "ro-dashes-parenthetical",
|
|
63
|
+
"rule": "dashes",
|
|
64
|
+
"mode": "text",
|
|
65
|
+
"in": "Nu avem încă - firește - rezultate.",
|
|
66
|
+
"out": "Nu avem încă – firește – rezultate.",
|
|
67
|
+
"note": "dash.parenthetical = en-spaced: ÎOOP6 «Înainte și după linia de pauză, blancul este obligatoriu»."
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "ro-dashes-existing-em-dash",
|
|
71
|
+
"rule": "dashes",
|
|
72
|
+
"mode": "text",
|
|
73
|
+
"in": "Nu avem încă — firește — rezultate.",
|
|
74
|
+
"out": "Nu avem încă – firește – rezultate.",
|
|
75
|
+
"note": "The sources name U+2013 (the Order's annex, En-Dash) and never U+2014, so an em dash is rewritten."
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "ro-ranges-hyphen-kept",
|
|
79
|
+
"rule": "ranges",
|
|
80
|
+
"mode": "text",
|
|
81
|
+
"in": "anii 2020-2021, perioada 1-13 mai",
|
|
82
|
+
"out": "anii 2020-2021, perioada 1-13 mai",
|
|
83
|
+
"note": "ranges.md §3: dash.range = none. ÎOOP6 and DOOM3 prefer the unspaced hyphen for ranges, which is the input form, so nothing is substituted.",
|
|
84
|
+
"rules": {
|
|
85
|
+
"ranges": true
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"id": "ro-ranges-spaced-kept",
|
|
90
|
+
"rule": "ranges",
|
|
91
|
+
"mode": "text",
|
|
92
|
+
"in": "noaptea de 30 – 31 decembrie",
|
|
93
|
+
"out": "noaptea de 30 – 31 decembrie",
|
|
94
|
+
"note": "ranges.md §3: dash.range = none. The spaced en dash is the second form ÎOOP6 attests for dates (30 – 31 decembrie); none preserves it.",
|
|
95
|
+
"rules": {
|
|
96
|
+
"ranges": true
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "ro-ranges-en-dash-tight-kept",
|
|
101
|
+
"rule": "ranges",
|
|
102
|
+
"mode": "text",
|
|
103
|
+
"in": "perioada 1–31 ianuarie",
|
|
104
|
+
"out": "perioada 1–31 ianuarie",
|
|
105
|
+
"note": "ranges.md §3: dash.range = none. DOOM3 «Bara oblică» II.3 b attests the unspaced en dash as a third range form; none preserves it.",
|
|
106
|
+
"rules": {
|
|
107
|
+
"ranges": true
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"id": "ro-ranges-spaced-hyphen-untouched",
|
|
112
|
+
"rule": "ranges",
|
|
113
|
+
"mode": "text",
|
|
114
|
+
"in": "paginile 1 - 22",
|
|
115
|
+
"out": "paginile 1 - 22",
|
|
116
|
+
"note": "ranges.md §3: dash.range = none. With range = none a spaced hyphen is left as authored.",
|
|
117
|
+
"rules": {
|
|
118
|
+
"ranges": true
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"id": "ro-hyphen-noop",
|
|
123
|
+
"rule": "hyphen",
|
|
124
|
+
"mode": "text",
|
|
125
|
+
"in": "s-a dus și l-am văzut",
|
|
126
|
+
"out": "s-a dus și l-am văzut",
|
|
127
|
+
"note": "The hyphen lists are empty: DOOM3 5.1.5 gives a general recommendation, not a closed list of forms."
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"id": "ro-nbsp-no-short-words",
|
|
131
|
+
"rule": "nbsp",
|
|
132
|
+
"mode": "text",
|
|
133
|
+
"in": "și la ea, o dată",
|
|
134
|
+
"out": "și la ea, o dată",
|
|
135
|
+
"note": "afterShortWords is empty: no source states a short-word rule."
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"id": "ro-nbsp-before-number",
|
|
139
|
+
"rule": "nbsp",
|
|
140
|
+
"mode": "text",
|
|
141
|
+
"in": "conform art. 3 și nr. 5",
|
|
142
|
+
"out": "conform art. 3 și nr. 5",
|
|
143
|
+
"note": "beforeNumber: DOOM3 5.2 «nu art. // 3»; nr. is the same class."
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"id": "ro-nbsp-units",
|
|
147
|
+
"rule": "nbsp",
|
|
148
|
+
"mode": "text",
|
|
149
|
+
"in": "10 km, 5 kg, 20 cm, 3 mm și 90 km/h",
|
|
150
|
+
"out": "10 km, 5 kg, 20 cm, 3 mm și 90 km/h",
|
|
151
|
+
"note": "beforeUnits: DOOM3 5.2 «nu 10 // km»; the other symbols follow BIPM."
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"id": "ro-nbsp-celsius",
|
|
155
|
+
"rule": "nbsp",
|
|
156
|
+
"mode": "text",
|
|
157
|
+
"in": "19 °C",
|
|
158
|
+
"out": "19 °C",
|
|
159
|
+
"note": "°C: same class as the other unit symbols; BIPM leaves a single space before the unit."
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"id": "ro-nbsp-percent-inert",
|
|
163
|
+
"rule": "nbsp",
|
|
164
|
+
"mode": "text",
|
|
165
|
+
"in": "50 % din preț",
|
|
166
|
+
"out": "50 % din preț",
|
|
167
|
+
"note": "% is not listed: it rests only on a non-normative guide, so it is not bound."
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"id": "ro-nbsp-initial-single",
|
|
171
|
+
"rule": "nbsp",
|
|
172
|
+
"mode": "text",
|
|
173
|
+
"in": "I. Popescu",
|
|
174
|
+
"out": "I. Popescu",
|
|
175
|
+
"note": "initialBinding = single: DOOM3 5.2 «nu Ion // Popescu, I. // Popescu»."
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"id": "ro-nbsp-initials-compact-unbound",
|
|
179
|
+
"rule": "nbsp",
|
|
180
|
+
"mode": "text",
|
|
181
|
+
"in": "I.L. Caragiale",
|
|
182
|
+
"out": "I.L. Caragiale",
|
|
183
|
+
"note": "ACCEPTED MISS: DOOM3 1.2.6 writes compound initials closed up (I.L.), and N7 (nbsp.md §3.9) does not treat the L. after a full stop as an initial, so the space before the surname stays breakable. A false negative, never a damaged text."
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"id": "ro-nbsp-initial-sentence-boundary",
|
|
187
|
+
"rule": "nbsp",
|
|
188
|
+
"mode": "text",
|
|
189
|
+
"in": "în anul A. Apoi",
|
|
190
|
+
"out": "în anul A. Apoi",
|
|
191
|
+
"note": "ACCEPTED COST of initialBinding = single: a lone capital before a full stop is read as an initial even at a sentence boundary (nbsp.md §3.9), the price of binding «I. // Popescu»."
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"id": "ro-nbsp-no-space-before-question",
|
|
195
|
+
"rule": "nbsp",
|
|
196
|
+
"mode": "text",
|
|
197
|
+
"in": "Serios?",
|
|
198
|
+
"out": "Serios?",
|
|
199
|
+
"note": "No no-break space before ? ! : ;."
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"id": "ro-nbsp-abbreviation-inert",
|
|
203
|
+
"rule": "nbsp",
|
|
204
|
+
"mode": "text",
|
|
205
|
+
"in": "nr. crt. 4",
|
|
206
|
+
"out": "nr. crt. 4",
|
|
207
|
+
"note": "abbreviations is empty: no source forbids splitting a spaced abbreviation such as nr. crt."
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"id": "ro-spaces-brackets-and-final-stop",
|
|
211
|
+
"rule": "spaces",
|
|
212
|
+
"mode": "text",
|
|
213
|
+
"in": "Text ( obișnuit ) rămâne .",
|
|
214
|
+
"out": "Text (obișnuit) rămâne.",
|
|
215
|
+
"note": "The spaces rule is language-independent."
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"id": "ro-symbols-copyright",
|
|
219
|
+
"rule": "symbols",
|
|
220
|
+
"mode": "text",
|
|
221
|
+
"in": "Copyright (c) 2026",
|
|
222
|
+
"out": "Copyright © 2026",
|
|
223
|
+
"note": "The symbols rule is language-independent."
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"id": "ro-apostrophe-foreign-name",
|
|
227
|
+
"rule": "apostrophe",
|
|
228
|
+
"mode": "text",
|
|
229
|
+
"in": "A mers la McDonald's și înapoi",
|
|
230
|
+
"out": "A mers la McDonald’s și înapoi",
|
|
231
|
+
"note": "An apostrophe in a foreign name is written U+2019."
|
|
232
|
+
}
|
|
233
|
+
]
|
|
234
|
+
}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
{
|
|
2
|
+
"spec": "1.12.0",
|
|
3
|
+
"locale": "sk",
|
|
4
|
+
"cases": [
|
|
5
|
+
{
|
|
6
|
+
"id": "sk-quotes-primary",
|
|
7
|
+
"rule": "quotes",
|
|
8
|
+
"mode": "text",
|
|
9
|
+
"in": "Povedal \"ahoj\".",
|
|
10
|
+
"out": "Povedal „ahoj“.",
|
|
11
|
+
"note": "quotes.primary = U+201E/U+201C podľa PSP VIII.2.7; zatváracia U+201C má obmedzenú istotu (pozri sources)."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"id": "sk-quotes-not-polish",
|
|
15
|
+
"rule": "quotes",
|
|
16
|
+
"mode": "text",
|
|
17
|
+
"in": "„ahoj”",
|
|
18
|
+
"out": "„ahoj“",
|
|
19
|
+
"note": "ROZLIŠUJÚCI PRÍPAD: vstup je poľský pár so zatváracou U+201D; výstup ukazuje prestavbu na slovenský tvar U+201C. Rozdiel je v sádzbe takmer nepostrehnuteľný, preto má vlastnú fixture."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "sk-quotes-nested",
|
|
23
|
+
"rule": "quotes",
|
|
24
|
+
"mode": "text",
|
|
25
|
+
"in": "\"Toto je 'citát' v citáte\"",
|
|
26
|
+
"out": "„Toto je ‚citát‘ v citáte“",
|
|
27
|
+
"note": "Druhý stupeň U+201A/U+2018: PSP 2.7 Poznámka 1 opisuje «čiarku a obrátenú čiarku» pre citát vnútri citátu. afterShortWords je prázdne, preto «v» ostáva voľné."
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "sk-quotes-no-inner-space",
|
|
31
|
+
"rule": "quotes",
|
|
32
|
+
"mode": "text",
|
|
33
|
+
"in": "„ ahoj “",
|
|
34
|
+
"out": "„ahoj“",
|
|
35
|
+
"note": "innerSpace = none: PSP VIII.1 Poznámka, úvodzovky sa píšu bez medzery pred výrazom aj za ním."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "sk-ellipsis-three-dots",
|
|
39
|
+
"rule": "ellipsis",
|
|
40
|
+
"mode": "text",
|
|
41
|
+
"in": "Počkaj... čo?",
|
|
42
|
+
"out": "Počkaj… čo?",
|
|
43
|
+
"note": "Tri bodky sú jeden znak U+2026 (PSP 2.10)."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "sk-ellipsis-not-abbreviated",
|
|
47
|
+
"rule": "ellipsis",
|
|
48
|
+
"mode": "text",
|
|
49
|
+
"in": "Naozaj?.. áno",
|
|
50
|
+
"out": "Naozaj?… áno",
|
|
51
|
+
"note": "abbreviatedAfterTerminal = false: dvojbodková forma po «?» nie je v PSP doložená, preto sa prepíše na jeden znak."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "sk-dashes-parenthetical",
|
|
55
|
+
"rule": "dashes",
|
|
56
|
+
"mode": "text",
|
|
57
|
+
"in": "Nemáme zatiaľ - prirodzene - študijné výsledky.",
|
|
58
|
+
"out": "Nemáme zatiaľ – prirodzene – študijné výsledky.",
|
|
59
|
+
"note": "dash.parenthetical = en-spaced; veta je príkladom z PSP 2.8 bod 5."
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "sk-dashes-existing-em-dash",
|
|
63
|
+
"rule": "dashes",
|
|
64
|
+
"mode": "text",
|
|
65
|
+
"in": "Nemáme zatiaľ — prirodzene — výsledky.",
|
|
66
|
+
"out": "Nemáme zatiaľ – prirodzene – výsledky.",
|
|
67
|
+
"note": "Zdroj pozná pomlčku U+2013 a o dlhej pomlčke U+2014 nehovorí, preto sa vsuvka s U+2014 prepíše na U+2013."
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "sk-ranges-years",
|
|
71
|
+
"rule": "ranges",
|
|
72
|
+
"mode": "text",
|
|
73
|
+
"in": "rok 1980-1990",
|
|
74
|
+
"out": "rok 1980 – 1990",
|
|
75
|
+
"note": "ranges.md §3: dash.range = en-spaced: PSP 2.8 bod 16a, «1980 – 1990». Rozdiel proti cs, kde je rozsah tesný.",
|
|
76
|
+
"rules": {
|
|
77
|
+
"ranges": true
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "sk-ranges-pages",
|
|
82
|
+
"rule": "ranges",
|
|
83
|
+
"mode": "text",
|
|
84
|
+
"in": "strana 5-12",
|
|
85
|
+
"out": "strana 5 – 12",
|
|
86
|
+
"note": "ranges.md §3: PSP 2.8 bod 16a, «strana 5 – 12».",
|
|
87
|
+
"rules": {
|
|
88
|
+
"ranges": true
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "sk-ranges-spaced-input",
|
|
93
|
+
"rule": "ranges",
|
|
94
|
+
"mode": "text",
|
|
95
|
+
"in": "rok 1980 - 1990",
|
|
96
|
+
"out": "rok 1980 – 1990",
|
|
97
|
+
"note": "ranges.md §3: Rozsah napísaný so spojovníkom a medzerami sa zjednotí na pomlčku s medzerami.",
|
|
98
|
+
"rules": {
|
|
99
|
+
"ranges": true
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"id": "sk-ranges-authored-untouched",
|
|
104
|
+
"rule": "ranges",
|
|
105
|
+
"mode": "text",
|
|
106
|
+
"in": "rok 1980 – 1990",
|
|
107
|
+
"out": "rok 1980 – 1990",
|
|
108
|
+
"note": "ranges.md §3: Už správne napísaný rozsah je pevný bod.",
|
|
109
|
+
"rules": {
|
|
110
|
+
"ranges": true
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"id": "sk-ranges-t1-left-side-declined",
|
|
115
|
+
"rule": "ranges",
|
|
116
|
+
"mode": "text",
|
|
117
|
+
"in": "a - 5-10",
|
|
118
|
+
"out": "a – 5-10",
|
|
119
|
+
"note": "ranges.md §3.3 a dashes.md §3.2 krok 8 (T1): Pomlčka s medzerami vľavo od rozsahu: rozsah ostáva nepreložený, kým sa vsuvka prepíše. Prvá slovenčina s dash.range = en-spaced; vetva je pripnutá, aby sa nezmenila bez povšimnutia.",
|
|
120
|
+
"rules": {
|
|
121
|
+
"ranges": true
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"id": "sk-ranges-t1-after-authored-dash-declined",
|
|
126
|
+
"rule": "ranges",
|
|
127
|
+
"mode": "text",
|
|
128
|
+
"in": "obdobie – 1980-1990",
|
|
129
|
+
"out": "obdobie – 1980-1990",
|
|
130
|
+
"note": "ranges.md §3.3 a dashes.md §3.2 krok 8 (T1): Rozsah za už napísanou pomlčkou s medzerou sa nemení.",
|
|
131
|
+
"rules": {
|
|
132
|
+
"ranges": true
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"id": "sk-ranges-t1-right-side-declined",
|
|
137
|
+
"rule": "ranges",
|
|
138
|
+
"mode": "text",
|
|
139
|
+
"in": "1980-1990 - obdobie",
|
|
140
|
+
"out": "1980-1990 – obdobie",
|
|
141
|
+
"note": "ranges.md §3.3 a dashes.md §3.2 krok 8 (T1): Pomlčka s medzerami vpravo od rozsahu: rozsah ostáva nepreložený.",
|
|
142
|
+
"rules": {
|
|
143
|
+
"ranges": true
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"id": "sk-ranges-t1-mixed-line",
|
|
148
|
+
"rule": "ranges",
|
|
149
|
+
"mode": "text",
|
|
150
|
+
"in": "rok 1980-1990 - a 5-12",
|
|
151
|
+
"out": "rok 1980-1990 – a 5 – 12",
|
|
152
|
+
"note": "ranges.md §3.3 a dashes.md §3.2 krok 8 (T1): Na jednom riadku: rozsah susediaci s vsuvkou ostáva, vzdialený rozsah sa prevedie.",
|
|
153
|
+
"rules": {
|
|
154
|
+
"ranges": true
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"id": "sk-hyphen-noop",
|
|
159
|
+
"rule": "hyphen",
|
|
160
|
+
"mode": "text",
|
|
161
|
+
"in": "rakúsko-uhorský",
|
|
162
|
+
"out": "rakúsko-uhorský",
|
|
163
|
+
"note": "Zoznamy hyphen sú prázdne; PSP 2.9 bod 12 delenie na spojovníku dovoľuje."
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"id": "sk-nbsp-no-short-words",
|
|
167
|
+
"rule": "nbsp",
|
|
168
|
+
"mode": "text",
|
|
169
|
+
"in": "v Nitre a u babičky",
|
|
170
|
+
"out": "v Nitre a u babičky",
|
|
171
|
+
"note": "afterShortWords je PRÁZDNE (rozhodnutie, nie citácia): PSP pravidlo o jednopísmenných predložkách nemá. Pripnuté, aby sa neprenieslo z cs."
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"id": "sk-nbsp-abbreviations",
|
|
175
|
+
"rule": "nbsp",
|
|
176
|
+
"mode": "text",
|
|
177
|
+
"in": "t. j. a a. s.",
|
|
178
|
+
"out": "t. j. a a. s.",
|
|
179
|
+
"note": "abbreviations: «t. j.» a «a. s.» podľa PSP 2.1 bod 4 a 2.4.1 bod 7c. Skratka je «t. j.», nie české «tj.»."
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"id": "sk-nbsp-abbreviation-a-pod",
|
|
183
|
+
"rule": "nbsp",
|
|
184
|
+
"mode": "text",
|
|
185
|
+
"in": "knihy, časopisy a pod.",
|
|
186
|
+
"out": "knihy, časopisy a pod.",
|
|
187
|
+
"note": "«a pod.» (PSP 2.1 bod 4) je v zozname skratiek; pevná medzera je vnútri skratky, nie väzba na predchádzajúce slovo."
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"id": "sk-nbsp-before-number",
|
|
191
|
+
"rule": "nbsp",
|
|
192
|
+
"mode": "text",
|
|
193
|
+
"in": "v bode č. 2, § 7 ods. 2, na s. 5",
|
|
194
|
+
"out": "v bode č. 2, § 7 ods. 2, na s. 5",
|
|
195
|
+
"note": "beforeNumber a afterSymbols podľa PSP 2.1 «Bodka sa nepíše» bod 5."
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"id": "sk-nbsp-units",
|
|
199
|
+
"rule": "nbsp",
|
|
200
|
+
"mode": "text",
|
|
201
|
+
"in": "15 kg, 10 m/s, 45 min a 20 % z ceny",
|
|
202
|
+
"out": "15 kg, 10 m/s, 45 min a 20 % z ceny",
|
|
203
|
+
"note": "beforeUnits: výklad STN 3.3 a 3.6.3 (nižšia vrstva) spolu s BIPM."
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"id": "sk-nbsp-permille",
|
|
207
|
+
"rule": "nbsp",
|
|
208
|
+
"mode": "text",
|
|
209
|
+
"in": "5 ‰",
|
|
210
|
+
"out": "5 ‰",
|
|
211
|
+
"note": "Promile podľa výkladu STN 3.6.3."
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"id": "sk-nbsp-single-letter-unit-inert",
|
|
215
|
+
"rule": "nbsp",
|
|
216
|
+
"mode": "text",
|
|
217
|
+
"in": "Prišiel o 5 s bratom",
|
|
218
|
+
"out": "Prišiel o 5 s bratom",
|
|
219
|
+
"note": "Jednopísmenové značky sú vynechané: «s» je predložka, rovnaká kolízia ako v cs."
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"id": "sk-nbsp-celsius-inert",
|
|
223
|
+
"rule": "nbsp",
|
|
224
|
+
"mode": "text",
|
|
225
|
+
"in": "19 °C",
|
|
226
|
+
"out": "19 °C",
|
|
227
|
+
"note": "«°C» je vynechané: výklad STN sám tlačí «-23˚C» bez medzery, hodnota je nepotvrdená."
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"id": "sk-nbsp-initial-none",
|
|
231
|
+
"rule": "nbsp",
|
|
232
|
+
"mode": "text",
|
|
233
|
+
"in": "A. Bernolák",
|
|
234
|
+
"out": "A. Bernolák",
|
|
235
|
+
"note": "initialBinding = none: žiadny zdroj nehovorí, že iniciála a priezvisko sa nesmú rozdeliť (rozhodnutie, nie citácia)."
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"id": "sk-nbsp-before-word-none",
|
|
239
|
+
"rule": "nbsp",
|
|
240
|
+
"mode": "text",
|
|
241
|
+
"in": "tzv. odborník",
|
|
242
|
+
"out": "tzv. odborník",
|
|
243
|
+
"note": "beforeWord je prázdne: žiadny zdroj nepredpisuje väzbu skratky na nasledujúce slovo."
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
"id": "sk-nbsp-no-space-before-question",
|
|
247
|
+
"rule": "nbsp",
|
|
248
|
+
"mode": "text",
|
|
249
|
+
"in": "Naozaj?",
|
|
250
|
+
"out": "Naozaj?",
|
|
251
|
+
"note": "Pred znakmi «? ! : ;» sa nevkladá žiadna pevná medzera (PSP VIII.1 Poznámka)."
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"id": "sk-spaces-brackets-and-final-stop",
|
|
255
|
+
"rule": "spaces",
|
|
256
|
+
"mode": "text",
|
|
257
|
+
"in": "Text ( bežný ) sa nemení .",
|
|
258
|
+
"out": "Text (bežný) sa nemení.",
|
|
259
|
+
"note": "Pravidlo spaces je od jazyka nezávislé."
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"id": "sk-symbols-copyright-and-dimensions",
|
|
263
|
+
"rule": "symbols",
|
|
264
|
+
"mode": "text",
|
|
265
|
+
"in": "Copyright (c) 2026, formát 40x60 cm",
|
|
266
|
+
"out": "Copyright © 2026, formát 40×60 cm",
|
|
267
|
+
"note": "Pravidlo symbols je od jazyka nezávislé."
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
"id": "sk-apostrophe-elision",
|
|
271
|
+
"rule": "apostrophe",
|
|
272
|
+
"mode": "text",
|
|
273
|
+
"in": "Išiel do McDonald's a späť",
|
|
274
|
+
"out": "Išiel do McDonald’s a späť",
|
|
275
|
+
"note": "Apostrof v cudzom mene sa píše ako U+2019."
|
|
276
|
+
}
|
|
277
|
+
]
|
|
278
|
+
}
|
|
@@ -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
|
+
}
|