polytypo 1.6.3 → 1.8.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/README.md +25 -0
- data/lib/polytypo/data/.not-vendored +11 -0
- data/lib/polytypo/data/README.md +16 -11
- data/lib/polytypo/data/VERSION +1 -1
- 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 +14 -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 +521 -1
- 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 +68 -1
- 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/ru.json +1 -1
- 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/cs.json +56 -37
- data/lib/polytypo/data/locales/de-CH.json +43 -34
- data/lib/polytypo/data/locales/de-DE.json +47 -32
- data/lib/polytypo/data/locales/el.json +51 -1
- data/lib/polytypo/data/locales/en-GB.json +56 -4
- data/lib/polytypo/data/locales/en-US.json +68 -4
- data/lib/polytypo/data/locales/es.json +66 -29
- data/lib/polytypo/data/locales/fi.json +77 -7
- data/lib/polytypo/data/locales/fr-CA.json +63 -36
- data/lib/polytypo/data/locales/fr.json +70 -41
- data/lib/polytypo/data/locales/it.json +65 -22
- data/lib/polytypo/data/locales/nl.json +61 -29
- data/lib/polytypo/data/locales/pl.json +61 -28
- data/lib/polytypo/data/locales/pt-BR.json +53 -28
- data/lib/polytypo/data/locales/pt-PT.json +55 -28
- data/lib/polytypo/data/locales/registry.json +1 -1
- data/lib/polytypo/data/locales/ru.json +45 -30
- data/lib/polytypo/data/locales/sv.json +63 -4
- data/lib/polytypo/data/locales/tr.json +72 -32
- data/lib/polytypo/data/locales/uk.json +55 -27
- data/lib/polytypo/data/rules/modes.md +430 -11
- data/lib/polytypo/data/rules/order.json +1 -1
- data/lib/polytypo/data/schema/fixtures.schema.json +12 -1
- data/lib/polytypo/engine/pipeline.rb +29 -0
- data/lib/polytypo/modes/markdown.rb +256 -31
- data/lib/polytypo/modes/runner.rb +33 -3
- data/lib/polytypo/version.rb +1 -1
- data/lib/polytypo.rb +27 -12
- metadata +2 -1
|
@@ -14,15 +14,7 @@
|
|
|
14
14
|
},
|
|
15
15
|
"elisionIdioms": [],
|
|
16
16
|
"elisionClitics": {
|
|
17
|
-
"before": [
|
|
18
|
-
"d",
|
|
19
|
-
"n",
|
|
20
|
-
"pel",
|
|
21
|
-
"m",
|
|
22
|
-
"t",
|
|
23
|
-
"lh",
|
|
24
|
-
"sant"
|
|
25
|
-
],
|
|
17
|
+
"before": ["d", "n", "pel", "m", "t", "lh", "sant"],
|
|
26
18
|
"after": []
|
|
27
19
|
}
|
|
28
20
|
},
|
|
@@ -42,26 +34,61 @@
|
|
|
42
34
|
"beforePunctuation": [],
|
|
43
35
|
"narrowBeforePunctuation": [],
|
|
44
36
|
"afterShortWords": [],
|
|
45
|
-
"abbreviations": [
|
|
46
|
-
|
|
47
|
-
],
|
|
48
|
-
"beforeUnits": [
|
|
49
|
-
"%",
|
|
50
|
-
"‰",
|
|
51
|
-
"°C",
|
|
52
|
-
"km",
|
|
53
|
-
"cm",
|
|
54
|
-
"mm",
|
|
55
|
-
"kg",
|
|
56
|
-
"kW",
|
|
57
|
-
"kWh",
|
|
58
|
-
"Hz"
|
|
59
|
-
],
|
|
60
|
-
"beforeNumber": [
|
|
61
|
-
"p."
|
|
62
|
-
],
|
|
37
|
+
"abbreviations": ["p. ex."],
|
|
38
|
+
"beforeUnits": ["%", "‰", "°C", "km", "cm", "mm", "kg", "kW", "kWh", "Hz"],
|
|
39
|
+
"beforeNumber": ["p."],
|
|
63
40
|
"beforeWord": [],
|
|
64
41
|
"afterSymbols": [],
|
|
65
42
|
"initialBinding": "none"
|
|
66
|
-
}
|
|
43
|
+
},
|
|
44
|
+
"sources": [
|
|
45
|
+
{
|
|
46
|
+
"rule": "quotes",
|
|
47
|
+
"cite": "Serviço das Publicações da União Europeia, Código de Redação Interinstitucional (edição PT, 2022, ISBN 978-92-78-42820-4), Quarta parte «Convenções próprias da língua portuguesa», ponto 10.4.10 «Aspas», N. B.: «O primeiro nível de aspas a utilizar corresponde às aspas angulares («»). Quando necessário, utilizam-se três níveis de aspas devidamente hierarquizadas: «…» — as aspas angulares, “…” — as aspas curvas duplas ou vírgulas dobradas, ‘…’ — as aspas curvas simples ou vírgulas simples»",
|
|
48
|
+
"url": "https://op.europa.eu/pt/publication-detail/-/publication/01ed788a-d266-11ec-a95f-01aa75ed71a1",
|
|
49
|
+
"note": "Primário U+00AB/U+00BB, secundário U+201C/U+201D. O terceiro nível descrito pela fonte não é exprimível em locale.schema.json, que só tem primary e secondary — limite do esquema, não lacuna da fonte, como já consta de el.json. innerSpace = \"none\": todos os exemplos do ponto 10.4.10 escrevem o texto colado às aspas e a secção nunca pede espaço interior. A Quarta parte é o capítulo específico da língua portuguesa; a Terceira parte do mesmo guia é deliberadamente NÃO invocada, porque o seu §6.4 declara que as suas regras «são o resultado de um acordo interinstitucional» e que «certas escolhas foram feitas em prol de uma convenção comum» — estilo de editor, não prova sobre o português, a mesma desqualificação que el.json regista. É POR ISTO que esta locale é pt-PT e não pt: o uso brasileiro diverge e tem ficheiro próprio (pt-BR), em vez de ser apanhado por um fallback que lhe daria aspas que não usa. Consultado em 18.9.2026."
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"rule": "dashes",
|
|
53
|
+
"cite": "Código de Redação Interinstitucional (PT, 2022), Quarta parte, ponto 10.4.8 «Travessão»: «O travessão (traço horizontal maior que o hífen) emprega-se: […] d) No lugar de parênteses: As condições — ordenado e subvenções — eram boas»",
|
|
54
|
+
"url": "https://op.europa.eu/pt/publication-detail/-/publication/01ed788a-d266-11ec-a95f-01aa75ed71a1",
|
|
55
|
+
"note": "Justifica dash.parenthetical = \"em-spaced\". O papel (substitui parênteses) e o espaçamento (um espaço ordinário de cada lado de CADA travessão) estão no exemplo impresso; ao contrário do grego, do espanhol e do italiano, o português não usa o padrão «espaços fora do par, colado por dentro», pelo que o enum exprime a convenção sem forçar nada. A LARGURA foi verificada extraindo a camada de texto do PDF, não julgada a olho sobre a página rasterizada: o carácter é U+2014. Esta é a segunda divergência regional do português — o Manual de Redação da Presidência da República (Brasil) define o travessão como «um hífen prolongado» e o seu texto extraído dá U+2013 —, e é a segunda razão para pt-PT e pt-BR serem ficheiros distintos. Consultado em 18.9.2026."
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"rule": "ranges",
|
|
59
|
+
"cite": "Código de Redação Interinstitucional (PT, 2022), ponto 10.4.11: «Quando se trata de dois anos completos ou de um período de vários anos usa-se o hífen: o programa para 1996-1997; o período de 1993-1996»; ponto 10.9.1: «Para qualquer período que decorra entre dois anos consecutivos, estes são separados por um hífen, se o período abrange a totalidade dos dois anos (1990-1991), e por uma barra, em caso contrário (ano letivo de 1990/1991)»",
|
|
60
|
+
"url": "https://op.europa.eu/pt/publication-detail/-/publication/01ed788a-d266-11ec-a95f-01aa75ed71a1",
|
|
61
|
+
"note": "Justifica dash.range = \"none\" pela positiva. A regra é enunciada duas vezes, em dois capítulos da parte específica da língua, e as duas vezes nomeia o hífen; a barra fica reservada para o período que não abrange os dois anos completos. «none» é o único valor do enum que respeita a fonte, porque `ranges` não emite nada nesse modo (ranges.md §2) e o U+002D escrito pelo autor sobrevive — substituí-lo por U+2013 contrariaria a citação. Consultado em 18.9.2026."
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"rule": "ellipsis",
|
|
65
|
+
"cite": "Código de Redação Interinstitucional (PT, 2022), ponto 10.4.7 «Reticências», com o exemplo impresso «É o dianho!… É o dianho!… E, olha lá, porque não vais ter com o padre?…» (Aquilino Ribeiro)",
|
|
66
|
+
"url": "https://op.europa.eu/pt/publication-detail/-/publication/01ed788a-d266-11ec-a95f-01aa75ed71a1",
|
|
67
|
+
"note": "Justifica abbreviatedAfterTerminal = false. O passo citado escreve as reticências completas imediatamente a seguir a «!» e a «?» — «!…» e «?…» —, e nenhuma fonte consultada prevê a forma abreviada de dois pontos que o russo usa, pelo que esse ramo de ellipsis.md fica desligado para o português. Nenhuma fonte se pronuncia sobre U+2026 contra três U+002E: essa escolha é do motor e é igual em todas as locales. Consultado em 18.9.2026."
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"rule": "hyphen",
|
|
71
|
+
"cite": "Acordo Ortográfico da Língua Portuguesa (1990), Base XX «Da divisão silábica»: «Na translineação de uma palavra composta ou de uma combinação de palavras em que há um hífen, ou mais, se a partição coincide com o final de um dos elementos ou membros, deve, por clareza gráfica, repetir-se o hífen no início da linha imediata: ex- -alferes»",
|
|
72
|
+
"url": "http://www.portaldalinguaportuguesa.org/?action=acordo&version=1990",
|
|
73
|
+
"note": "Justifica as três listas vazias, e justifica-as pela positiva, não por ausência de fonte. O português não só permite como PRESCREVE a quebra de linha sobre o hífen de um composto, repetindo-o na linha seguinte: uma forma que é normativamente quebrada nesse ponto não pode ser uma forma cujo hífen tenha de resistir à quebra, que é a única coisa que esta regra consome. A regra é, portanto, um no-op total demonstrável para o português (hyphen.md §2), e qualquer runtime que ligue compostos portugueses com U+2011 está errado. Corroborado pelo Código de Redação Interinstitucional (PT, 2022), ponto 10.2 e ponto 10.4.12 («segunda-/-feira», «salmão-do-/-atlântico»), e pelo Manual de Redação da Presidência da República (Brasil, 2.ª ed., 2002), §9.1.3.1 («decreto-/-lei», «far-/-se-á»). É o campo em que Portugal, o Brasil e o próprio Acordo dizem explicitamente a mesma coisa. Consultado em 18.9.2026."
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"rule": "nbsp",
|
|
77
|
+
"cite": "Código de Redação Interinstitucional (PT, 2022), anexo A3 «Abreviaturas e símbolos», pontos 2 e 3, com as Observações «Todos os números são acompanhados dos respetivos símbolos: de 4 m em 4 m; de 1 kg, 6 kg a 15 kg», e Quarta parte, ponto 10.9.1: «As percentagens, pesos e medidas escrevem-se numericamente: 7 % do volume de negócios», «a temperatura atingiu hoje os 39 °C»; BIPM, The International System of Units (SI), 9.ª ed., resumo conciso: «A single space is always left between the number and the unit»",
|
|
78
|
+
"url": "https://www.bipm.org/documents/20126/41483022/SI-Brochure-9-concise-EN.pdf",
|
|
79
|
+
"note": "Justifica nbsp.beforeUnits. A locale atesta a PERTENÇA — que estes símbolos são unidades e que se escrevem depois do número com um espaço; o mecanismo (converter esse espaço em U+00A0, nunca o inserir) é da regra e está fixado em nbsp.md §2.1. REPARO CITADO, mais importante do que qualquer inclusão: o ponto 10.9.1 exclui «h» por nome — «horas (o símbolo «h» escreve-se sempre sem ponto, sem espaços): eram as 18h30» —, pelo que «h» NÃO entra na lista e há um caso de conformidade a fixá-lo. Os símbolos de uma só letra (m, g, l, t, s, A, W, V, K) ficam igualmente de fora, embora atestados, pela mesma razão que em fr: não são desambiguáveis sem contexto. Note-se que o português escreve «7 %» com espaço, ao contrário do grego. Consultado em 18.9.2026."
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"rule": "nbsp",
|
|
83
|
+
"cite": "Código de Redação Interinstitucional (PT, 2022), anexo A3, ponto 4 «Obras»: «p. ex. por exemplo»; «e. g. exempli gratia (por exemplo). Utilizar de preferência p. ex.»; Quarta parte, ponto 10.9.1: «paginação corrente, parágrafos, artigos: artigo 2.º, terceiro parágrafo, alínea b), p. 24»; nota (3) do ponto 6.4: «Para o «º» ordinal (1.º, 2.º…) ou em «n.º», utilizar a terminação «o» após o ponto e em posição superior à linha [não utilizar o sinal «º» do teclado Azerty nem a sequência Alt 0176 (símbolo do grau «°»)]»",
|
|
84
|
+
"url": "https://op.europa.eu/pt/publication-detail/-/publication/01ed788a-d266-11ec-a95f-01aa75ed71a1",
|
|
85
|
+
"note": "Justifica as listas vazias e initialBinding = \"none\", e diz com exatidão em que se apoiam: ao contrário do guia grego, a parte portuguesa NÃO contém nenhuma frase que negue pelo nome o uso francês do espaço antes da pontuação dupla. A posição é «nenhuma fonte o exige», e não «uma fonte o proíbe»; o que se observa é que nenhum exemplo do capítulo o escreve, e isso é uma observação, assinalada como tal. beforeNumber contém apenas «p.»: o ponto 10.9.1 atesta a ligação («p. 24», «Lei n.º 123»), mas «n.º» NÃO pode ser listado, porque a nota (3) do ponto 6.4 do mesmo guia prescreve um «o» sobrescrito e RECUSA expressamente tanto U+00BA como U+00B0 — listar «n.º» seria citar uma fonte que proíbe esse mesmo carácter. A decisão do operador de 18.9.2026 sobre o «n°» francês cobre uma fonte SILENCIOSA e não se estende a uma que fala e recusa. beforeWord fica vazio: o anexo A3 enumera «Sr.», «Dr.», «Prof.», mas limita-se a expandi-los e nenhuma fonte os mostra ligados ao nome seguinte. GAP REGISTADO, não resolvido: o ponto 10.9.1 exige espaço protegido DENTRO dos grupos de algarismos («um total de 12 345 euros»; «este espaço é protegido»), e locale.schema.json não tem campo para isso. Consultado em 18.9.2026."
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"rule": "quotes",
|
|
89
|
+
"cite": "Acordo Ortográfico da Língua Portuguesa (1990), Base XVIII « Do apóstrofo », 1.º : a) « Faz-se uso do apóstrofo para cindir graficamente uma contração ou aglutinação vocabular, quando um elemento ou fração respetiva pertence propriamente a um conjunto vocabular distinto: d'Os Lusíadas, d'Os Sertões; n'Os Lusíadas, n'Os Sertões; pel'Os Lusíadas, pel'Os Sertões » ; b) « d'Ele, n'Ele, d'Aquele, n'Aquele, d'O, n'O, pel'O, m'O, t'O, lh'O » e a série feminina correspondente ; c) « Sant'Ana, Sant'Iago » ; d) « borda-d'água, copo-d'água, estrela-d'alva, mãe-d'água, pau-d'alho, pau-d'arco »",
|
|
90
|
+
"url": "https://www.priberam.pt/docs/AcOrtog90.pdf",
|
|
91
|
+
"note": "Base XVIII is a primary normative text common to both orthographies, which is why pt-PT and pt-BR carry the identical list: d, n, pel (1.º a and b), m, t, lh (1.º b) and sant (1.º c). Base XVIII 2.º bounds the set from the other side — the apóstrofo is not admissible in the combinations of de and em with the definite-article forms (do, da, dele, no, na, nele, num and the rest) — so this is an enumerated set rather than an argument from silence. The archaic anthroponymic forms of 1.º c) (Nun'Álvares, Pedr'Eanes) are cited by the same clause but deliberately not listed: both have a letter on each side of the mark, so quotes.md §3.2's medial-elision veto already declines them and an entry would be evidenced-inert. after is empty: Portuguese enclisis takes a hyphen (Base XVII: amá-lo, dá-se), never an apostrophe. The clause that makes this list load-bearing is 1.º a), which is about book titles: a title set in emphasis rather than italics puts a span boundary immediately after the mark, d'<em>Os Lusíadas</em>, which is precisely the shape the veto reads. Retrieved from a faithful reproduction hosted by Priberam/FLiP, including the official text's own errata footnotes, rather than from the official gazette; the Academia Brasileira de Letras PDF has no extractable text layer. quotes.md §3.2's span-boundary elision veto (spec 1.4.0) reads this list only when the mark's other literal neighbour is modes.md §3.2's inline span boundary, so every entry is matched against the maximal LETTER run on one side of the mark and nothing else. The list is decline-only: the worst it can do is refuse a pairing quotes would otherwise have formed."
|
|
92
|
+
}
|
|
93
|
+
]
|
|
67
94
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"spec": "1.
|
|
2
|
+
"spec": "1.8.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",
|
|
@@ -26,21 +26,9 @@
|
|
|
26
26
|
"abbreviatedAfterTerminal": true
|
|
27
27
|
},
|
|
28
28
|
"hyphen": {
|
|
29
|
-
"prefixes": [
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
],
|
|
33
|
-
"suffixes": [
|
|
34
|
-
"-то",
|
|
35
|
-
"-либо",
|
|
36
|
-
"-нибудь",
|
|
37
|
-
"-таки",
|
|
38
|
-
"-ка"
|
|
39
|
-
],
|
|
40
|
-
"compounds": [
|
|
41
|
-
"из-за",
|
|
42
|
-
"из-под"
|
|
43
|
-
]
|
|
29
|
+
"prefixes": ["кое-", "кой-"],
|
|
30
|
+
"suffixes": ["-то", "-либо", "-нибудь", "-таки", "-ка"],
|
|
31
|
+
"compounds": ["из-за", "из-под"]
|
|
44
32
|
},
|
|
45
33
|
"nbsp": {
|
|
46
34
|
"beforePunctuation": [],
|
|
@@ -64,12 +52,7 @@
|
|
|
64
52
|
"по",
|
|
65
53
|
"со"
|
|
66
54
|
],
|
|
67
|
-
"abbreviations": [
|
|
68
|
-
"и т. д.",
|
|
69
|
-
"и т. п.",
|
|
70
|
-
"т. е.",
|
|
71
|
-
"и др."
|
|
72
|
-
],
|
|
55
|
+
"abbreviations": ["и т. д.", "и т. п.", "т. е.", "и др."],
|
|
73
56
|
"beforeUnits": [
|
|
74
57
|
"%",
|
|
75
58
|
"‰",
|
|
@@ -88,14 +71,46 @@
|
|
|
88
71
|
"млрд"
|
|
89
72
|
],
|
|
90
73
|
"beforeNumber": [],
|
|
91
|
-
"beforeWord": [
|
|
92
|
-
|
|
93
|
-
"пл."
|
|
94
|
-
],
|
|
95
|
-
"afterSymbols": [
|
|
96
|
-
"№",
|
|
97
|
-
"§"
|
|
98
|
-
],
|
|
74
|
+
"beforeWord": ["ул.", "пл."],
|
|
75
|
+
"afterSymbols": ["№", "§"],
|
|
99
76
|
"initialBinding": "chain"
|
|
100
|
-
}
|
|
77
|
+
},
|
|
78
|
+
"sources": [
|
|
79
|
+
{
|
|
80
|
+
"rule": "quotes",
|
|
81
|
+
"cite": "Правила русской орфографии и пунктуации. Полный академический справочник / под ред. В. В. Лопатина. М., 2006, раздел «Знаки препинания при прямой речи и цитатах»: в печатном тексте внешние кавычки — «ёлочки», внутренние — „лапки“",
|
|
82
|
+
"url": "https://gramota.ru/journal/stati/pravila-i-normy/elochki-ili-lapki-kak-pravilno-ispolzovat-kavychki",
|
|
83
|
+
"note": "Страница «Грамоты» отдаёт 403 автоматическому клиенту; правило подтверждено по её индексируемому изложению и совпадает с рекомендацией Мильчина и Чельцовой («Справочник издателя и автора»). Номер параграфа не указан, поскольку сверить его по бумажному изданию не удалось — приводить непроверенный номер было бы хуже, чем его отсутствие."
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"rule": "ellipsis",
|
|
87
|
+
"cite": "Правила русской орфографии и пунктуации (1956), раздел «Многоточие»: после вопросительного или восклицательного знака ставятся не три точки, а две (третья точка стоит под одним из названных знаков) — «Сколько жить ещё на свете?..», «А как вы вчера играли!..»",
|
|
88
|
+
"url": "https://gramota.ru/biblioteka/spravochniki/pravila-russkoj-orfografii-i-punktuacii/mnogotochie",
|
|
89
|
+
"note": "То же правило приводит Д. Э. Розенталь, «Справочник по русскому языку. Пунктуация», раздел «Сочетание знаков препинания»."
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"rule": "dashes",
|
|
93
|
+
"cite": "Мильчин А. Э., Чельцова Л. К. «Справочник издателя и автора» и Д. Э. Розенталь, «Справочник по русскому языку»: если интервал передаётся цифрами, между числами ставится тире без отбивки — «5—6 лет», «в XV—XVII веках», «1941—1945 гг.»; тире в предложении отбивается пробелами с обеих сторон",
|
|
94
|
+
"url": "https://gramota.ru/journal/stati/pravila-i-normy/defis-i-tire-kak-vybrat-i-postavit-pravilnyy-znak-v-tekste",
|
|
95
|
+
"note": "В русской типографике интервал набирается длинным тире (U+2014) без отбивки; короткое тире (U+2013) в этой роли не используется. Перечисление schema.dash.range изначально допускало только en-*, что не позволяло выразить норму; перечисление расширено значением em-tight, и оно здесь и стоит."
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"rule": "nbsp",
|
|
99
|
+
"cite": "Мильчин А. Э., Чельцова Л. К. «Справочник издателя и автора»: неразрывный пробел ставится между инициалами и между инициалами и фамилией («А. С. Пушкин»), после однобуквенных предлогов и союзов, между знаками № и § и относящимися к ним числами, между числом и относящейся к нему единицей измерения или счётным словом («1981 г.», «5 млн»), а также внутри сокращений «и т. д.», «и т. п.», «т. е.»",
|
|
100
|
+
"url": "https://orfogrammka.ru/%D1%82%D0%B8%D0%BF%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0/%D0%BF%D1%80%D0%BE%D0%B1%D0%B5%D0%BB_%D0%B8_%D0%B8%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D1%8B/",
|
|
101
|
+
"note": "Список afterShortWords сознательно ограничен однобуквенными предлогами и союзами (а, в, и, к, о, с, у) и однозначными двухбуквенными предлогами (во, до, за, из, ко, на, об, от, по, со). Частицы и союзы «не», «ни», «но», «же», «ли», «бы» не включены: правило для них — рекомендация вёрстки, а не норма, и связывание их даёт заметный риск ложных срабатываний. Префиксные сокращения из строки «ru» в docs/PLAN.md §7 («г.», «ул.») с появлением beforeWord и N10 стали выразимы: «ул.» и «пл.» перечислены там, обоснование — в следующей записи. «г.» остаётся невыразимым, но не из-за формы поля: здесь оно помещено в beforeUnits в значении «год» после числа («2020 г.»), а в значении «город» связывается вправо, и литеральный список эти два смысла не различает."
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"rule": "nbsp",
|
|
105
|
+
"cite": "«Технические правила набора», раздел «Общие требования к набору», п. 5: «Отбиваются слова от имен собственных, к которым они относятся (ул. Советская)»; раздел «Переносы», п. 4: «Не должны быть отделены при переносе из одной строки в другую: а) фамилии от инициалов или один инициал от другого; б) сокращенные слова имен собственных, к которым они относятся, например: тов. Сергеева, г. Гомель, пл. Ленина; … г) арабские или римские цифры от их сокращенных или полных наименований, например: 2010 г., 800 руб., 50 куб. см, XX век; д) знаки и обозначения (№, §, % и т. п.) от следующих за ними цифр»",
|
|
106
|
+
"url": "https://old.gsu.by/pages/izdat/2023/tehnicheskie_pravila_nabora.pdf",
|
|
107
|
+
"note": "Текст сверен по самому PDF; это издательский свод технических правил набора (Гомельский госуниверситет), то есть опубликованное изложение отраслевых правил (Мильчин, ОСТ 29.115-88), а не первоисточник: главу «Технические правила набора и вёрстки» у Мильчина проверить онлайн не удалось (доступное издание 1998 г. содержит только части 1—3 без этой главы). Пункт 4б — единственное найденное нормативное основание для beforeWord. «г.» в этот список сознательно НЕ включено: «г.» нормативно связывается и влево как «год» (п. 4г, «2010 г.», уже отражено в beforeUnits), и вправо как «город» (п. 4б, «г. Гомель»), а литеральный список без контекста эти два случая не различает — во фразе «в 1147 г. Москва была основана» правило beforeWord склеило бы «г.» с «Москва» через границу оборота. Различить их можно, только посмотрев влево на цифру и вправо на топоним, то есть по контексту, чего декларативный список не выражает. По той же причине не включены «гг.», «в.», «вв.». Оставлены «ул.» и «пл.» — однозначные топонимические сокращения, и обе формы процитированы дословно: «пл. Ленина» в «Переносах» п. 4б, «ул. Советская» в «Общих требованиях к набору» п. 5. «д.», «стр.», «корп.», «кв.» относятся к следующему ЧИСЛУ, а не к слову, поэтому в beforeWord им не место. Для «стр.» есть и более сильное основание, проверенное по изданию 1998 г. при разборе issue #30: § 4.4.4 («Сокращения при внутритекстовых ссылках и сопоставлениях») пишет дословно: «Ранее широко применявшееся сокращение стр. (страница) рекомендуется заменять сокращением с., поскольку оно закреплено ГОСТ 7.12—93, а две формы сокращения одного слова нарушают принцип единообразия». То есть источник не просто молчит о пробеле — он не рекомендует саму форму. Там же: «Все сокращения, кроме см. и ср., употребляются только в сочетании с цифрами или буквами», что подтверждает состав списка, но о самой отбивке по-прежнему не говорит. beforeNumber пуст, и это подтверждённое отсутствие правила, а не ненайденная цитата: перечень «Переносов» п. 4 закрытый и исчерпывающий, он содержит обратное направление (п. 4г, «2010 г.») и знаки (п. 4д, «№ 75»), но конструкции «сокращение + следующее число» в нём нет. Мильчин, «Справочник издателя и автора», § 9.1.1 («Употребление в ссылках сокращений слов и условных сокращений»: «Книговедческие термины при цифровых номерах или литерах рекомендуется для экономии места сокращать») нормирует, КАКОЕ сокращение писать перед числом, но о пробеле не говорит ничего. Страница «Орфограммки» с примером «гл. IV» отвергнута: она ссылается только на Википедию и Хабр."
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"rule": "hyphen",
|
|
111
|
+
"cite": "Правила русской орфографии и пунктуации. Полный академический справочник / под ред. В. В. Лопатина. М., 2006: § 135 — пишутся через дефис местоименные слова с начальной частью (приставкой) кое- (кой-) и с конечными частями (постфиксами) -либо, -нибудь, -то; § 141 п. 2 — сложные предлоги из-за, из-под (а также диалектные по-за, по-над); § 141 п. 3 и § 143 — частицы -де, -ка, -те, -то, -с и -таки (всё-таки, опять-таки, прямо-таки, так-таки)",
|
|
112
|
+
"url": "https://orthographia.ru/orf.php?paragraph=pp135.php",
|
|
113
|
+
"note": "Тексты §§ 135, 141, 143 и 219 прочитаны по онлайн-изданию справочника. Эти параграфы нормативны для СОСТАВА форм, но не для запрета переноса, и это важно не смешивать: § 219 («не подлежат переносу») называет только аббревиатуры из прописных букв, графические сокращения (б-ка, ж.-д.) и наращения (20-й); слов с дефисом там нет, а правило повторять дефис в начале перенесённой части (военно-/-морской) справочник даёт как факультативное. Значит, связывание дефиса неразрывным U+2011 — решение проекта (docs/PLAN.md §3.3), а не орфографическая норма; его практическое обоснование то же, что у факультативного правила: при переносе по дефису теряется различие слитного и дефисного написания. Диалектные и просторечные по-за, по-над, для-ради, за-ради не внесены как непродуктивные. Класс графических сокращений из § 219 (б-ка, ж.-д., р/сч) нормативно неразрывен, но перечислить его литеральным списком нельзя, поэтому он здесь не отражён. Из § 143 взята также частица -ка; -де, -с, -те опущены как архаичные и редкие."
|
|
114
|
+
}
|
|
115
|
+
]
|
|
101
116
|
}
|
|
@@ -61,9 +61,68 @@
|
|
|
61
61
|
],
|
|
62
62
|
"beforeNumber": [],
|
|
63
63
|
"beforeWord": [],
|
|
64
|
-
"afterSymbols": [
|
|
65
|
-
"§"
|
|
66
|
-
],
|
|
64
|
+
"afterSymbols": ["§"],
|
|
67
65
|
"initialBinding": "none"
|
|
68
|
-
}
|
|
66
|
+
},
|
|
67
|
+
"sources": [
|
|
68
|
+
{
|
|
69
|
+
"rule": "quotes",
|
|
70
|
+
"cite": "Språkrådet (Institutet för språk och folkminnen), Snabba skrivregler – i skolan och på jobbet, red. Ola Karlsson, §1.13 “Citattecken (”)”",
|
|
71
|
+
"url": "https://www.diva-portal.org/smash/get/diva2:1829117/FULLTEXT04.pdf",
|
|
72
|
+
"note": "Verbatim: “Normala svenska citattecken ser ut som två små upphöjda nior och har samma form i början och slutet, alltså ”ord”. Men citattecken kan ha olika utseende i olika typsnitt och i olika språk, som i “engelska”, „tyska“ och «norska». Använd svenska citattecken i svensk text, även om det du citerar är på ett annat språk.” This settles the ❓ in PLAN.md §7: »…» is attested in Swedish book typography and older practice, but Språkrådet’s current recommendation is ”…” (U+201D on both sides), so that is what this file encodes."
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"rule": "quotes",
|
|
76
|
+
"cite": "Språkrådet, Snabba skrivregler, §1.14 “Apostrof (’)”",
|
|
77
|
+
"url": "https://www.diva-portal.org/smash/get/diva2:1829117/FULLTEXT04.pdf",
|
|
78
|
+
"note": "Verbatim: “En apostrof ser ut som en liten upphöjd nia (’). … Apostrof används även vid citat inuti ett citat, se ▶ 6.1.1.” Hence the secondary pair is U+2019 on both sides. Isof’s Frågelådan phrases the same rule as “enkla citattecken … när du har ett citat i ett citat”."
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"rule": "dashes",
|
|
82
|
+
"cite": "Språkrådet, Snabba skrivregler, §1.10 “Tankstreck (–)”",
|
|
83
|
+
"url": "https://www.diva-portal.org/smash/get/diva2:1829117/FULLTEXT04.pdf",
|
|
84
|
+
"note": "Range, verbatim: “Det används framför allt mellan siffror och mellan ortnamn för att visa till exempel tidsperioder, avstånd och intervall. Du har då inget mellanslag före eller efter tankstrecket.” (öppet 9–18, åren 2026–2028, s. 3–5). Parenthetical, verbatim: “Tankstreck kan ibland användas före paus eller tillägg. På samma sätt används det vid mer självständiga inskott … Då har du mellanslag före och efter tankstrecket.” Swedish uses the en dash (tankstreck) in both roles; there is no em dash in the recommendation."
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"rule": "ellipsis",
|
|
88
|
+
"cite": "Språkrådet, Snabba skrivregler, kap. 1 “Skiljetecken och skrivtecken” (tre punkter)",
|
|
89
|
+
"url": "https://www.diva-portal.org/smash/get/diva2:1829117/FULLTEXT04.pdf",
|
|
90
|
+
"note": "`abbreviatedAfterTerminal` is false. The guide treats “tre punkter” as an ordinary mark alongside utropstecken and frågetecken; no two-dot form after `!`/`?` exists in Swedish. That form is Russian-only."
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"rule": "nbsp",
|
|
94
|
+
"cite": "Språkrådet, Snabba skrivregler, §1.16 “Tecken och mellanslag”",
|
|
95
|
+
"url": "https://www.diva-portal.org/smash/get/diva2:1829117/FULLTEXT04.pdf",
|
|
96
|
+
"note": "Verbatim: “Tecken som ersätter ord, som & för och, + för plus och % för procent, skrivs helst med mellanslag före och efter, precis som när du skriver ut orden: 5 % eftersom du skriver fem procent.” Examples given: “Ek & Lund (Ek och Lund), 3 € (tre euro), § 7 (paragraf sju), 2 + 3 (två plus tre)”. And: “För att de tecken och siffror som hör ihop ska hamna på samma rad och inte på olika rader, kan du använda så kallat fast mellanslag.” This is the authority for `%`, `€` and `§`. Note the direction: Språkrådet’s own example is “§ 7”, the sign before the number, so `§` is in `afterSymbols`, the opposite of Finnish. Swedish legal citation also writes “5 §”; that order is not covered by the cited example and is deliberately not encoded. `&` and `+` are omitted because they take a space on both sides and do not fit this schema’s bind-to-a-number model."
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"rule": "nbsp",
|
|
100
|
+
"cite": "Språkrådet, Snabba skrivregler, §4.3.4 “Förkortningar för måttenheter”; BIPM, The International System of Units (SI), 9th ed. (2019), concise summary",
|
|
101
|
+
"url": "https://www.bipm.org/documents/20126/41483022/SI-Brochure-9-concise-EN.pdf",
|
|
102
|
+
"note": "Språkrådet verbatim: “Internationella förkortningar för måttenheter går alltid bra att skriva som förkortningar, som cm (centimeter), kg (kilo), kWh (kilowattimme) och ml (milliliter). Dessa skriver du alltid utan punkt. Så skriver du också svenska förkortningar som liknar måttenheter, som kr (kronor), min (minut), sek (sekund) och tim (timme).” BIPM verbatim: “A single space is always left between the number and the unit.” The unit list is restricted to forms named by one of these two sources."
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"rule": "nbsp",
|
|
106
|
+
"cite": "Språkrådet, Snabba skrivregler, §4.3.1 and §4.5 “Vanliga förkortningar”",
|
|
107
|
+
"url": "https://www.diva-portal.org/smash/get/diva2:1829117/FULLTEXT04.pdf",
|
|
108
|
+
"note": "`abbreviations` is empty because Swedish multi-word abbreviations are written closed up, with no internal space: the guide’s own list gives bl.a., dvs., e.d., fr.o.m., f.d., f.ö., m.a.o., m.fl., m.m., obs., osv., p.g.a., s.k., t.ex., t.o.m. There is therefore no internal space to make non-breaking. (Older typographic practice spaced these — “t. ex.” — but that is not the current recommendation.)"
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"rule": "nbsp",
|
|
112
|
+
"cite": "No Språkrådet guidance found for short-word binding or for initials; values deliberately conservative",
|
|
113
|
+
"note": "`afterShortWords`, `beforePunctuation` and `narrowBeforePunctuation` are empty by design. §1.16 states the general rule plainly — “När du använder vanliga skiljetecken sätter du inget mellanslag före tecknet, men efter tecknet ska du ha mellanslag” — which rules out any before-punctuation space, and Swedish has no rule against short words at line end. `initialBinding` is \"none\" (spec 0.6.0: the field used to be the boolean bindInitials, false): §1.16 recommends fast mellanslag only for “de tecken och siffror som hör ihop”, i.e. signs and digits, not personal initials."
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"rule": "nbsp",
|
|
117
|
+
"cite": "Språkrådet, Snabba skrivregler, §1.16 “Tecken och mellanslag” and §4.5 “Vanliga förkortningar”",
|
|
118
|
+
"url": "https://www.diva-portal.org/smash/get/diva2:1829117/FULLTEXT04.pdf",
|
|
119
|
+
"note": "`beforeNumber` and `beforeWord` are empty, and this was the closest call in this file. Språkrådet does write kl. 8–16, nr 3 and s. 3–5, and §1.16 recommends fast mellanslag so that “de tecken och siffror som hör ihop ska hamna på samma rad”. But that sentence is scoped to tecken — the sign-and-digit pairs of §1.16 (%, €, §, &, +) — and the guide nowhere extends it to abbreviations such as kl., nr or s. Encoding them would convert a plausible reading into a normative claim the source does not make, so the lists stay empty. `beforeWord` likewise: no Swedish authority consulted requires binding a title (dr, prof.) to a following name."
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"rule": "hyphen",
|
|
123
|
+
"cite": "Språkrådet, Snabba skrivregler, §4.4 (sammansättningar med förkortningar) and kap. 7 (avstavning)",
|
|
124
|
+
"url": "https://www.diva-portal.org/smash/get/diva2:1829117/FULLTEXT04.pdf",
|
|
125
|
+
"note": "`prefixes`, `suffixes` and `compounds` are empty. The guide’s hyphen material states when to insert a bindestreck in compounds (e-post, EU-länderna, FN-arbete, satellit-tv-program, lan-spel) and treats avstavning as a separate topic; it never forbids a line break at an existing hyphen. Swedish compounding is productive, so there is no closed inventory to list — the field exists for the Russian кое- / -таки / из-под case. No U+2011 requirement found in any Språkrådet material consulted."
|
|
126
|
+
}
|
|
127
|
+
]
|
|
69
128
|
}
|
|
@@ -15,21 +15,7 @@
|
|
|
15
15
|
"elisionIdioms": [],
|
|
16
16
|
"elisionClitics": {
|
|
17
17
|
"before": [],
|
|
18
|
-
"after": [
|
|
19
|
-
"nin",
|
|
20
|
-
"nın",
|
|
21
|
-
"de",
|
|
22
|
-
"da",
|
|
23
|
-
"te",
|
|
24
|
-
"ye",
|
|
25
|
-
"yle",
|
|
26
|
-
"nı",
|
|
27
|
-
"dan",
|
|
28
|
-
"den",
|
|
29
|
-
"lik",
|
|
30
|
-
"nci",
|
|
31
|
-
"üm"
|
|
32
|
-
]
|
|
18
|
+
"after": ["nin", "nın", "de", "da", "te", "ye", "yle", "nı", "dan", "den", "lik", "nci", "üm"]
|
|
33
19
|
}
|
|
34
20
|
},
|
|
35
21
|
"dash": {
|
|
@@ -48,25 +34,79 @@
|
|
|
48
34
|
"beforePunctuation": [],
|
|
49
35
|
"narrowBeforePunctuation": [],
|
|
50
36
|
"afterShortWords": [],
|
|
51
|
-
"abbreviations": [
|
|
52
|
-
|
|
53
|
-
"Nö. Sb."
|
|
54
|
-
],
|
|
55
|
-
"beforeUnits": [
|
|
56
|
-
"mm",
|
|
57
|
-
"cm",
|
|
58
|
-
"km",
|
|
59
|
-
"kg",
|
|
60
|
-
"mg",
|
|
61
|
-
"hl",
|
|
62
|
-
"m²",
|
|
63
|
-
"cm²",
|
|
64
|
-
"°C",
|
|
65
|
-
"ton"
|
|
66
|
-
],
|
|
37
|
+
"abbreviations": ["Kur. Bşk.", "Nö. Sb."],
|
|
38
|
+
"beforeUnits": ["mm", "cm", "km", "kg", "mg", "hl", "m²", "cm²", "°C", "ton"],
|
|
67
39
|
"beforeNumber": [],
|
|
68
40
|
"beforeWord": [],
|
|
69
41
|
"afterSymbols": [],
|
|
70
42
|
"initialBinding": "none"
|
|
71
|
-
}
|
|
43
|
+
},
|
|
44
|
+
"sources": [
|
|
45
|
+
{
|
|
46
|
+
"rule": "quotes",
|
|
47
|
+
"cite": "Türk Dil Kurumu, Yazım Kuralları, «Noktalama İşaretleri (Açıklamalar)», «Tek Tırnak İşareti»: «Tırnak içinde verilen cümlenin içinde yeniden tırnağa alınması gereken bir sözü, ibareyi belirtmek için kullanılır: Edebiyat öğretmeni \"Şiirler içinde 'Han Duvarları' gibisi var mı?\" dedi…»",
|
|
48
|
+
"url": "https://tdk.gov.tr/icerik/yazim-kurallari/noktalama-isaretleri-aciklamalar/",
|
|
49
|
+
"note": "Kuralın kendisi: birinci derece çift tırnak, ikinci derece (tırnak içinde tırnak) tek tırnaktır. Bu sayfa işaretleri düz ASCII olarak sunduğu için kod noktalarını vermez; onlar ayrı kayıtta, Türk Dili'nin metin katmanından okunmuştur. BAĞIMSIZ DOĞRULAMA: Unicode Consortium, CLDR 'tr' delimiters — quotationStart U+201C, quotationEnd U+201D, alternateQuotationStart U+2018, alternateQuotationEnd U+2019 (https://github.com/unicode-org/cldr-json, cldr-misc-full/main/tr/delimiters.json). İki kaynak aynı dört kod noktasında birleşiyor. elisionIdioms BOŞ: Türkçede kesme işaretiyle yazılan, iki yana boşluk alan bir elizyon deyimi (rock 'n' roll biçimi) yoktur. elisionClitics.before BOŞ: Türkçe ekleri sona getirir, kesme işaretinden ÖNCEki dizi her zaman sözcüğün kendisidir. elisionClitics.after DOLU ve gerekçesi ayrı kayıttadır. Erişim: 23.09.2026."
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"rule": "quotes",
|
|
53
|
+
"cite": "Şener Mete, «Tırnak İşareti Üzerine», Türk Dili (Türk Dil Kurumu dergisi), s. 31, dipnot 1 «TDK Yazım Kılavuzu»: «TDK Yazım Kılavuzu’na göre tırnak işaretinin ( “ ” ) kullanıldığı yerler şöyle sıralanmıştır»; «Bir de Tek Tırnak İşareti ( ‘ ’ ) vardır ki o da tırnak içinde verilen ve yeniden tırnağa alınması gereken bir sözü belirtmek için kullanılır: “Atatürk henüz ‘Gazi Mustafa Kemal Paşa’ idi.”»",
|
|
54
|
+
"url": "https://tdk.gov.tr/wp-content/uploads/2012/01/31-41.pdf",
|
|
55
|
+
"note": "KOD NOKTALARI DOSYANIN KENDİ BAYTLARINDAN OKUNDU, GÖZLE DEĞİL: PDF'in metin katmanı pdftotext ile çıkarıldı ve parantez içindeki işaretler U+201C U+201D ile U+2018 U+2019 olarak sayıldı; aynı paragrafın örneğinde de çift tırnak U+201C…U+201D, iç içe tek tırnak U+2018…U+2019 olarak geçiyor. Bu, yazarın kendi tercihi değil: pasajın dipnotu doğrudan «TDK Yazım Kılavuzu»dur, yani makale Kılavuz'un kuralını işaretleriyle birlikte aktarmaktadır. KAYNAK RÜTBESİ, açıkça: Türk Dili TDK'nin kendi dergisidir ama bir yazar makalesidir; burada yüklenen iş yalnızca Kılavuz'un işaretlerinin HANGİ kod noktaları olduğunu tespit etmektir, kuralın kendisini kurmak değil — kural TDK'nin kendi Yazım Kuralları sayfasından alınmıştır (ayrı kayıt). tdk.gov.tr sayfaları düz ASCII işaretlerle (U+0022, U+0027) sunulduğu ve locale.schema.json'ın singleChar tanımı bu ikisini açıkça yasakladığı için web sayfası ilke olarak bu değerin kaynağı olamaz. #51'DE BİLDİRİLEN «…» / »…« ÇÜRÜTÜLDÜ: aynı makale s. 32'de yan tırnağı «Bazı yazarlar, çift tırnak işaretini üstten değil yandan kullanmayı uygun görmüşlerdir» diye tanıtır — kurumun normu değil, bazı yazarların tercihidir. Metin katmanında U+00AB ile U+00BB toplam birer kez geçerken U+201C 60, U+201D 56 kez geçmektedir. innerSpace = «none»: hiçbir kaynak tırnak içinde boşluk istemiyor ve Kılavuz'un örnekleri bitişiktir. Erişim: 23.09.2026."
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"rule": "quotes",
|
|
59
|
+
"cite": "Türk Dil Kurumu, Yazım Kuralları, «Kesme İşareti»: «Özel adlara getirilen iyelik, durum ve bildirme ekleri kesme işaretiyle ayrılır: Kurtuluş Savaşı'nı, Atatürk'üm, Türkiye'mizin»; «Kısaltmalara getirilen ekleri ayırmak için konur: TBMM'nin, TDK'nin, BM'de, ABD'de, TV'ye»; «Sayılara getirilen ekleri ayırmak için konur: 1985'te, 8'inci madde, 2'nci kat; 7,65'lik, 9,65'lik, 657'yle»; aynı bölümün örneklerinden ayrıca: «Batı'da», «Sultan Ana'nın», «Çanakkale Boğazı'nın», «Yurdakul'dan», «Cebrail'den»",
|
|
60
|
+
"url": "https://tdk.gov.tr/icerik/yazim-kurallari/kesme-isareti/",
|
|
61
|
+
"note": "quotes.elisionClitics.after listesinin gerekçesi. Bu giriş listenin TAM OLDUĞUNU değil, HER PARÇANIN AYRI AYRI belgelendiğini kanıtlar — it.json'daki ölçütün aynısı ve quotes.md §3.2'nin her girişten istediği de budur. Türkçe ek zincirleri kapalı bir küme değildir; bu alan zaten kapalı bir küme istemez. ÖLÇÜT, tek biçimde uygulandı: bir parça ancak TDK'nin BASTIĞI bir örnekte kesme işaretinden sonraki EN UZUN LETTER dizisinin TAMAMI ise alınmıştır, paradigma yeterli değildir — bu yüzden «TBMM'nin» örneği «nin»i kanıtlar ama «in»i kanıtlamaz, ve «Atatürk'üm» örneği «üm»ü verir, «ü»yü değil. KABUL EDİLEN YANLIŞ POZİTİF, İngilizce «s» ile eşit sayılmadan: listelenen bir parça, içeriği TAMAMEN o parça olan ve satır içi bir span sınırına DAYANAN bir alıntıyı ek sanar — «<em>'de'</em>» biçimi, bir fikstürle sabitlenmiştir. Risk Türkçede İngilizceden YÜKSEKTİR, çünkü «da/de» ayrıca ayrı yazılan bir bağlaçtır; iki ölçülen hafifletici kaydedilir: TDK'nin kendi anma biçimi başta kısa çizgi taşır («-lık'la»; «Bulunma Durumu Eki -da / -de / -ta / -te'nin Yazılışı» başlığı) ve kısa çizgi LETTER olmadığı için dizi boş kalır ve veto çalışamaz; ayrıca «Bağlaç Olan da, de'nin Yazılışı» sayfası bağlacı tırnaksız, düz «da / de» yazar. BÜYÜK HARF KAYBI, adıyla ve fikstürle: «TBMM'NİN» eşleşmez, çünkü katlama yalnızca ilk kod noktasını ve yalnızca ASCII A-Z'yi kapsar — «N»→«n» katlanır ama kuyrukta U+0130 ≠ U+0069 olur; «TBMM'NIN» da U+0049 ≠ U+0069 ile düşer. Katlamayı genişletmek ARCHITECTURE.md §4.4'ün açıkça yasakladığı yerdir (noktasız ı, U+0131), bu yüzden kayıp giderilmez, KABUL EDİLİR. BİLEREK DIŞARIDA BIRAKILANLAR, kanıtlı oldukları hâlde: «a», «e», «i» (Samsun'a, Fatih Sultan Mehmet'e, Kâzım Karabekir'i) — tek harfler harf ADLARIdır ve TDK'nin kendi «a'dan z'ye» örneği harf alıntılama biçimini basar; bedeli açıkça söylenir, ünsüzle biten adlarda yönelme eki span sınırında onarılmadan kalır. «ya», «un», «in», «inci», «tan» da kanıtlıdır ama çıplak sözcük olarak çakışırlar. «dan», «den», «lik», «nci» ve «üm» LİSTEYE ALINDI: hepsi yukarıdaki cite'ta basılı örneklerle kanıtlıdır (Yurdakul'dan, Cebrail'den, 7,65'lik, 2'nci, Atatürk'üm), hiçbiri çıplak bir Türkçe sözcükle çakışmaz, dolayısıyla maliyetleri zaten kabul edilmiş «de/da» ikilisinden DÜŞÜKTÜR. Böylece liste, ölçüte göre kanıtlı olup çakışmayan her parçayı içerir ve dışarıda kalanların hepsi aşağıda gerekçesiyle adlandırılmıştır — keyfî bir alt küme değildir. KAPSAM BOŞLUĞU, tek tek: «ta», «ten», «nun», «nün», «ler», «lar» okunan sayfalarda tam dizi olarak basılmamıştır, dolayısıyla «Irak'ta», «Oslo'nun», «TBMM'ler» span sınırında onarılmaz; zincirli ekler («Türkiye'mizin» → dizi «mizin», «Devleti'ndeki» → «ndeki») hiçbir kısa girişle eşleşmez. Liste YALNIZCA REDDEDER: quotes'un kuracağı bir eşleştirmeyi engellemekten başka bir şey yapamaz. Erişim: 23.09.2026."
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"rule": "dashes",
|
|
65
|
+
"cite": "Türk Dil Kurumu, Yazım Kuralları, «Noktalama İşaretleri (Açıklamalar)», «Kısa Çizgi» 2: «Cümle içinde ara sözleri veya ara cümleleri ayırmak için ara sözlerin veya ara cümlelerin başına ve sonuna konur, bitişik yazılır: Küçük bir sürü -dört inekle birkaç koyun- köye giren geniş yolun ağzında durmuştu.»; «Uzun Çizgi»: «Yazıda satır başına alınan konuşmaları göstermek için kullanılır. Buna konuşma çizgisi de denir.» UYARI: «Konuşmalar tırnak içinde verildiğinde uzun çizgi kullanılmaz.»",
|
|
66
|
+
"url": "https://tdk.gov.tr/icerik/yazim-kurallari/noktalama-isaretleri-aciklamalar/",
|
|
67
|
+
"note": "dash.parenthetical = «none» gerekçesi, ve bu bir SUSKUNLUK DEĞİL, İFADE EDİLEMEYEN BİR NORMDUR. İki iş ayrı ayrı sınandı: uzun çizgi YALNIZCA konuşma çizgisidir — bölümün tek kuralı ve tek UYARI'sı budur, ara sözle ilgili hiçbir hükmü yoktur. Ara sözü ayıran işaret KISA ÇİZGİ'dir ve kaynak onu «bitişik yazılır» diye niteler. locale.schema.json'ın enum'u yalnızca em/en uzunluklarını tanır; kısa çizgi ne U+2014 ne U+2013'tür, dolayısıyla Türkçenin gerçek geleneği bu alanda İFADE EDİLEMEZ. «en-tight» yazmak TDK'ye aykırı bir dönüşüm üretirdi — yaklaşık bir değer yerine kuralı sessiz bırakmak seçildi. Sonuç, kısa çizginin U+002D mi U+2010 mu olduğundan bağımsızdır: hiçbiri en/em değildir. tr, her iki alanı da «none» olan ÜÇÜNCÜ locale'dir — el ve es'ten sonra; dashes kuralı Türkçe için onlarda olduğu gibi kanıtlanabilir bir total no-op'tur (dashes.md §6, «el» bölümü). Erişim: 23.09.2026."
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"rule": "ranges",
|
|
71
|
+
"cite": "Türk Dil Kurumu, Yazım Kuralları, «Noktalama İşaretleri (Açıklamalar)», «Kısa Çizgi» 7: «Arasında, ve, ile, ila, …-den …-e anlamlarını vermek için kelimeler veya sayılar arasında kullanılır: Aydın-İzmir yolu, Türk-Alman ilişkileri, Ural-Altay dil grubu, 09.30-10.30, 1914-1918 Birinci Dünya Savaşı, Türkçe-Fransızca Sözlük vb.»",
|
|
72
|
+
"url": "https://tdk.gov.tr/icerik/yazim-kurallari/noktalama-isaretleri-aciklamalar/",
|
|
73
|
+
"note": "dash.range = «none» gerekçesi. Aralık normludur — ve bu, alanın boş olmasının nedenidir değil, tam tersine nedeniyle birlikte kaydedilmesinin nedenidir: işaret KISA ÇİZGİ'dir, TDK hiçbir yerde sayılar arasında yarım veya tam kare çizgi istemez. Doğrulanmış bir en/em geleneği YOKTUR, dolayısıyla «none» doğru içeriktir (ranges.md §2). «ranges» kuralı zaten varsayılan olarak kapalıdır (spec 0.5.0), bu alan bir çağıran açıkça açmadıkça atıldır. Erişim: 23.09.2026."
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"rule": "ellipsis",
|
|
77
|
+
"cite": "Türk Dil Kurumu, Yazım Kuralları, «Noktalama İşaretleri (Açıklamalar)», «Üç Nokta», UYARI: «Ünlem ve soru işaretinden sonra üç nokta yerine iki nokta konulması yeterlidir: Gök ekini biçer gibi!.. Başaklar daha dolmadan. (Tarık Buğra) / Nasıl da akşam oldu?.. Nasıl da yavrucaklar sustu?.. Nasıl da serçecikler yuvalarına sığındı?.. (Necip Fazıl Kısakürek)»",
|
|
78
|
+
"url": "https://tdk.gov.tr/icerik/yazim-kurallari/noktalama-isaretleri-aciklamalar/",
|
|
79
|
+
"note": "abbreviatedAfterTerminal = true. Türkçe, Rusça ve Ukraynacadan sonra bu değeri alan üçüncü locale'dir; araştırma bunun TERSİNİ beklediği için özellikle sınandı. SINIFLANDIRMA, açıkça: «yeterlidir» «yazılır» demek değildir, yani izin verilen bir biçimdir, mutlak bir buyruk değil. Buna rağmen «true» seçilmiştir ve gerekçe tercih değil ÖLÇÜMDÜR: bu alan iki yönlüdür, «false» tarafsız değildir. polytypo 1.5.0 ile ölçüldü — abbreviatedAfterTerminal'ı false olan bir locale'de «Nasıl da akşam oldu?..» çıktısı «Nasıl da akşam oldu?…» olur, yani Kılavuz'un kendi bastığı biçim bozulur; true olan bir locale'de aynı girdi sabit noktadır ve «?...» de ona normalleştirilir. Kılavuz'un örneklerinin tamamı iki noktalıdır ve «?...» biçiminde tek bir TDK örneği yoktur, dolayısıyla iki yönden yalnızca biri kaynakla uyumludur. BEDEL, gizlenmeden: ellipsis.md §3 adım 4→6 «?...» girdisini «?..» olarak YENİDEN YAZAR, yani UYARI'nın istediğinden bir adım ileri gider. Erişim: 23.09.2026."
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"rule": "hyphen",
|
|
83
|
+
"cite": "Türk Dil Kurumu, Yazım Kuralları, «Hece Yapısı ve Satır Sonunda Kelimelerin Bölünmesi»: «Türkçede satır sonunda kelimeler bölünebilir fakat heceler bölünemez.»; «Satıra sığmayan kelimeler bölünürken satır sonuna kısa çizgi (-) konur.»; «Ayırmada satır sonunda ve satır başında tek harf bırakılmaz.»; «Kesme işareti satır sonuna geldiğinde yalnız kesme işareti kullanılır; ayrıca çizgi kullanılmaz.»",
|
|
84
|
+
"url": "https://tdk.gov.tr/icerik/yazim-kurallari/hece-yapisi-ve-satir-sonunda-kelimelerin-bolunmesi/",
|
|
85
|
+
"note": "Üç boş listenin gerekçesi, ve bu OLUMLU bir bulgudur, bir eksiklik değil. Türkçe satır sonunda bölmeyi yalnızca hoş görmez, NORMLAR: bölme noktasına kısa çizgi konur. Bu, U+2011 (bölünmez kısa çizgi) talebinin tam tersidir. Sayfanın tamamı ile «Kısa Çizgi» bölümünün bütün UYARI'ları okundu; hâlihazırda kısa çizgi taşıyan bir biçimin satır sonunda bölünmesini yasaklayan tek bir kural yoktur. Boş listeler kuralı Türkçe için kanıtlanabilir bir no-op yapar (hyphen.md §2). Erişim: 23.09.2026."
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"rule": "nbsp",
|
|
89
|
+
"cite": "Türk Dil Kurumu, Yazım Kuralları, «Noktalama İşaretleri (Açıklamalar)», giriş hükmü: «Noktalama işaretlerinden nokta, virgül, noktalı virgül, iki nokta, üç nokta, soru, ünlem, tırnak, ayraç ve kesme işaretleri ait oldukları kelimelere bitişik olarak yazılır ve kesme dışındaki işaretlerden sonra bir harf boşluğu ara verilir.»",
|
|
90
|
+
"url": "https://tdk.gov.tr/icerik/yazim-kurallari/noktalama-isaretleri-aciklamalar/",
|
|
91
|
+
"note": "beforePunctuation ve narrowBeforePunctuation boş. Bu SESSİZLİK DEĞİL, AÇIK BİR REDDİR: işaretler ait oldukları kelimeye bitişiktir ve boşluk işaretten SONRA gelir, dolayısıyla Fransızca «mot !» geleneği Türkçede ne U+00A0 ne U+202F olarak vardır. Aynı hüküm kesme işaretinin ayrıcalığını da adlandırır: ondan sonra boşluk bırakılmaz. initialBinding = «none»: «Kısaltmalar» ve «Büyük Harflerin Kullanıldığı Yerler» sayfaları okundu, kişi adı ve soyadı baş harflerinin nasıl aralanacağına dair TDK'de bir kural bulunamadı — bu, olumlu bir dayanağa değil kaynağın suskunluğuna dayanan bir «none»'dur ve aradaki fark burada belirtilmektedir. afterShortWords boş: Türkçede tek harfli bağlaç veya edat yoktur ve TDK satır sonunda asılı kalan kısa sözcüklerle ilgili bir kural vermez; «satır sonunda ve satır başında tek harf bırakılmaz» kuralı HECE bölmeye ilişkindir, sözcüklere değil, ve aynı olgu değildir. beforeNumber ve beforeWord boş: hiçbir kısaltmayı ardından gelen bir sayıya veya kelimeye bağlayan kural bulunamadı. Erişim: 23.09.2026."
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"rule": "nbsp",
|
|
95
|
+
"cite": "Türk Dil Kurumu, Kısaltmalar Dizini: «Kur. Bşk. Kurmay Başkanı, Başkanlığı»; «Nö. Sb. Nöbetçi subayı»",
|
|
96
|
+
"url": "https://tdk.gov.tr/icerik/yazim-kurallari/kisaltmalar-dizini/",
|
|
97
|
+
"note": "abbreviations listesi. İki giriş, dizinin PDF'inden iç boşluklarıyla birlikte harfi harfine alındı. ÖLÇÜT, tek biçimde uygulandı: yalnızca HER İKİ parçası da noktalı kısaltma olan girişler. Bilerek dışarıda bırakıldı: «Osm. T.», «SEFD Bşk.», «TOBB ETÜ», «TÜRKİYE KOOP» — her birinde en az bir parça akronimdir, noktalı kısaltma değil. KAPSAM UYARISI: dizin baştan sona okunmadı, bu yüzden liste doğrulanmış bir ALT KÜMEDİR, tam sayım değildir; eksik bir giriş yanlış bir giriş değildir, N4 yalnızca listedekini bağlar. TDK'nin kendi yazımıyla ilgili, dizinden doğrudan okunan iki düzeltme: «MÖ» ve «MS» noktasız yazılır, «T.C.» ise iç boşluksuzdur — «M.Ö.» ve «M. Ö.» biçimleri TDK'nin biçimleri değildir ve bu alana girmezler. N4 tam eşleşme yapar, hiçbir büyük-küçük harf esnekliği yoktur (nbsp.md §3.6); N1, N2 ve N3 bu locale'de boş olduğundan «önce talep eden kazanır» çatışması da yoktur. Erişim: 23.09.2026."
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"rule": "nbsp",
|
|
101
|
+
"cite": "Türk Dil Kurumu, Sıkça Sorulan Sorular, «°C \"santigrat derece\" işaretiyle sayı arasında boşluk bırakılır mı?»: «Sayı ve ölçü birimi kısaltmaları aralarında boşluk bırakılır. Tıpkı 5 m, 20 kg, 350 ton örneklerinde olduğu gibi, °C \"santigrat derece\" işaretiyle sayı arasında boşluk bırakılır: 15 °C gibi.»; Türk Dil Kurumu, Yazım Kuralları, «Kısaltmalar» 2: «Ölçü birimlerinin uluslararası kısaltmaları kullanılır: m (metre), mm (milimetre), cm (santimetre), km (kilometre), g (gram), kg (kilogram), l (litre), hl (hektolitre), mg (miligram), m² (metrekare), cm² (santimetrekare) vb.»",
|
|
102
|
+
"url": "https://tdk.gov.tr/icerik/sikca-sorulan-sorular/c-derece-santigrat-isaretiyle-sayi-arasinda-bosluk-birakilir-mi/",
|
|
103
|
+
"note": "beforeUnits. Rol paylaşımı başka locale'lerdeki gibi iki kuruma değil tek kuruma düşüyor: hangi dizgilerin uluslararası birim simgesi olduğunu «Kısaltmalar» 2, aralarında boşluk bırakıldığını SSS söylüyor. KAYNAK RÜTBESİ açıkça belirtiliyor: Sıkça Sorulan Sorular, Yazım Kılavuzu'nun altındadır ve boşluk hükmünün tek dayanağı odur. Tek harfli simgeler (m, g, l) fr.json ve pl.json uygulamasına uyularak atlandı. «ton» ayrıca açıklanıyor: uluslararası bir simge değil bir kelimedir ve yalnızca SSS'nin düzyazı örneğinden («350 ton») gelir — listede tutulmasının nedeni N5'in sağ sınır testinin onu «tonluk» içinde eşleştirmemesi ve hiçbir şey uydurulmamış olmasıdır. «cm» ile «cm²» birlikte listelenebilir, çünkü aynı konumda EN UZUN EŞLEŞME KAZANIR (nbsp.md §3.7) — «15 cm²» girdisinde «cm» değil «cm²» eşleşir. «%» BİLEREK YOK: TDK yüzde işaretini sayıdan ÖNCE ve bitişik yazar (ayrı kayıt). N5 yalnızca var olan bir boşluğu DÖNÜŞTÜRÜR, asla eklemez (nbsp.md §3.7 madde 3), bu yüzden «20kg» dokunulmadan kalır. Erişim: 23.09.2026."
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"rule": "nbsp",
|
|
107
|
+
"cite": "Türk Dil Kurumu, Yazım Kuralları, «Sayıların Yazılışı»: «Yüzde ve binde işaretleri yazılırken sayılarla işaret arasında boşluk bırakılmaz: %25, ‰50»",
|
|
108
|
+
"url": "https://tdk.gov.tr/icerik/yazim-kurallari/sayilarin-yazilisi/",
|
|
109
|
+
"note": "afterSymbols boş, ve gerekçesi OLUMSUZ BİR KANITTIR, suskunluk değil. Türkçede yüzde işareti sayıdan ÖNCE gelir ve bitişik yazılır; bu, pl.json'un «%» girişinin hem konum hem boşluk bakımından tam tersidir. beforeUnits'e giremez, çünkü orada işaret sayıdan SONRA beklenir; afterSymbols'e de giremez, çünkü N6 sayıdan önce VAR OLAN bir boşluk arar ve norm o boşluğu yasaklar (nbsp.md §3.8). N5 ve N6 yalnızca dönüştürür, hiç eklemez, dolayısıyla «%25» biçimi her iki durumda da dokunulmadan kalır ve boş liste hiçbir şey kaybettirmez. «§» de bu listede yok: TDK bu işaret için bir kural vermiyor. Erişim: 23.09.2026."
|
|
110
|
+
}
|
|
111
|
+
]
|
|
72
112
|
}
|
|
@@ -26,21 +26,8 @@
|
|
|
26
26
|
"abbreviatedAfterTerminal": true
|
|
27
27
|
},
|
|
28
28
|
"hyphen": {
|
|
29
|
-
"prefixes": [
|
|
30
|
-
|
|
31
|
-
"казна-",
|
|
32
|
-
"хтозна-",
|
|
33
|
-
"бозна-"
|
|
34
|
-
],
|
|
35
|
-
"suffixes": [
|
|
36
|
-
"-бо",
|
|
37
|
-
"-но",
|
|
38
|
-
"-от",
|
|
39
|
-
"-то",
|
|
40
|
-
"-таки",
|
|
41
|
-
"-будь",
|
|
42
|
-
"-небудь"
|
|
43
|
-
],
|
|
29
|
+
"prefixes": ["будь-", "казна-", "хтозна-", "бозна-"],
|
|
30
|
+
"suffixes": ["-бо", "-но", "-от", "-то", "-таки", "-будь", "-небудь"],
|
|
44
31
|
"compounds": [
|
|
45
32
|
"вид-во",
|
|
46
33
|
"гр-н",
|
|
@@ -67,12 +54,7 @@
|
|
|
67
54
|
"beforePunctuation": [],
|
|
68
55
|
"narrowBeforePunctuation": [],
|
|
69
56
|
"afterShortWords": [],
|
|
70
|
-
"abbreviations": [
|
|
71
|
-
"і т. д.",
|
|
72
|
-
"і т. ін.",
|
|
73
|
-
"та ін.",
|
|
74
|
-
"куб. см"
|
|
75
|
-
],
|
|
57
|
+
"abbreviations": ["і т. д.", "і т. ін.", "та ін.", "куб. см"],
|
|
76
58
|
"beforeUnits": [
|
|
77
59
|
"%",
|
|
78
60
|
"га",
|
|
@@ -95,12 +77,58 @@
|
|
|
95
77
|
"р."
|
|
96
78
|
],
|
|
97
79
|
"beforeNumber": [],
|
|
98
|
-
"beforeWord": [
|
|
99
|
-
"акад.",
|
|
100
|
-
"доц.",
|
|
101
|
-
"проф."
|
|
102
|
-
],
|
|
80
|
+
"beforeWord": ["акад.", "доц.", "проф."],
|
|
103
81
|
"afterSymbols": [],
|
|
104
82
|
"initialBinding": "chain"
|
|
105
|
-
}
|
|
83
|
+
},
|
|
84
|
+
"sources": [
|
|
85
|
+
{
|
|
86
|
+
"rule": "quotes",
|
|
87
|
+
"cite": "Український правопис (2019), схвалений Кабінетом Міністрів України (Постанова № 437 від 22.05.2019), § 164 «ЛАПКИ (« », “ ”, „ “, рідше „ ”)», п. 3: «У функції перших рекомендовано вживати кутові лапки, або «лапки-ялинки» («…»), у функції внутрішніх — «лапки-лапки» (“…” та ін.): «Це мій “Кобзар”», — сказав він»; там само: «На письмі (у рукописних текстах) «лапки-лапки» традиційно використовують у формі „…“»",
|
|
88
|
+
"url": "https://www.ulif.org.ua/system/files/pravopus-new.pdf",
|
|
89
|
+
"note": "Зовнішні лапки — U+00AB і U+00BB, внутрішні — U+201C і U+201D. Код кожного знака встановлено за друкованим зображенням с. 247 офіційного видання, а не за текстовою конверсією: у прикладі § 164 п. 3 обидва внутрішні знаки підняті до верху рядка, відкривальний має форму 6, закривальний — форму 9. ЦЕ СПРОСТОВУЄ поширене припущення, що українська бере всередину „…“: заголовок § 164 справді дозволяє чотири пари, але саме п. 3 відносить „…“ до РУКОПИСНИХ текстів, а для друкованого рекомендує “…”. innerSpace = «none»: жодне джерело не вимагає відступу всередині лапок. Третій рівень вкладення в locale.schema.json невиразний. Звірено 18.09.2026."
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"rule": "dashes",
|
|
93
|
+
"cite": "Український правопис (2019), § 161 «ТИРЕ (—)», I, п. 10—11 і Примітка 2: тире ставимо перед відокремленим зворотом або вставленою конструкцією — «Топольський — молодий чоловік, але — на думку пана посла — незвичайно талановитий і солідний» (О. Маковей)",
|
|
94
|
+
"url": "https://www.ulif.org.ua/system/files/pravopus-new.pdf",
|
|
95
|
+
"note": "Обґрунтовує dash.parenthetical = «em-spaced». ДОВЖИНА встановлена прямо: заголовок параграфа — «ТИРЕ (—)», тобто U+2014, і цей самий знак стоїть у кожному прикладі §§ 161, 166, 167. ВІДБИВКА встановлена протиставленням, а не прозовим формулюванням: правопис ніде не пише «тире відбивається пробілами», але Примітка до п. 14 каже «тире ставимо без відступів між знаками» саме для випадку між цифрами, а «без відступів» має сенс лише як відхилення від відбитого за замовчуванням. Це єдиний запис цього файлу, що спирається на висновок із тексту джерела, і він позначений як такий свідомо. Звірено 18.09.2026."
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"rule": "ranges",
|
|
99
|
+
"cite": "Український правопис (2019), § 161 «ТИРЕ (—)», I, п. 14, Примітка: «Між цифрами в таких випадках тире ставимо без відступів між знаками: у 2010—2018 роках; пам'ятки української мови XVI—XVIII ст.; на сторінках 1—10; у 1—4 томах, але, напр.: наприкінці XX — на початку XXI ст.»",
|
|
100
|
+
"url": "https://www.ulif.org.ua/system/files/pravopus-new.pdf",
|
|
101
|
+
"note": "Обґрунтовує dash.range = «em-tight»: довге тире U+2014 без відбивки. Протиставлення в самій Примітці («на сторінках 1—10» без відступів, але «наприкінці XX — на початку XXI ст.» з відступами) показує, що безвідступна форма стосується рівно того, що робить правило ranges. Правило вимкнене за замовчуванням (spec 0.5.0). Звірено 18.09.2026."
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"rule": "ellipsis",
|
|
105
|
+
"cite": "Український правопис (2019), § 162 «ТРИ КРАПКИ, АБО КРАПКИ (…)», Примітка: «у постпозиції — після знака питання і знака оклику — ставимо дві крапки: Стражники на людей стріляли, це відомо, а щоб селяни?.. (К. Гордієнко); Встає народ, гудуть мости, Рокочуть ріки ясноводі!.. (М. Рильський)»; § 166 «КОМБІНОВАНЕ ВЖИВАННЯ РОЗДІЛОВИХ ЗНАКІВ», п. 2, що перелічує допустимі поєднання як «…?; …!; ?..; !..»",
|
|
106
|
+
"url": "https://www.ulif.org.ua/system/files/pravopus-new.pdf",
|
|
107
|
+
"note": "Обґрунтовує abbreviatedAfterTerminal = true. Українська — друга після російської локаль із цим значенням, і це перевірено окремо за двома параграфами, а не перенесено за аналогією зі спорідненої мови. Звірено 18.09.2026."
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"rule": "hyphen",
|
|
111
|
+
"cite": "Український правопис (2019), § 64 «Технічні правила переносу», п. 4: «Не можна розривати умовні (графічні) скорочення на зразок вид-во, і т. д., і т. ін., та ін., т-во тощо»; § 62, п. 2: «У графічних скороченнях пропущену середню частину слова позначаємо дефісом: вид-во (видавництво), гр-н (громадянин), ін-т (інститут), р-н (район), ун-т (університет), ф-ка (фабрика)»",
|
|
112
|
+
"url": "https://www.ulif.org.ua/system/files/pravopus-new.pdf",
|
|
113
|
+
"note": "Це єдина частина hyphen для української, де НЕРОЗРИВНІСТЬ САМА Є НОРМОЮ, а не рішенням проєкту: § 64 п. 4 прямо забороняє розривати цей клас, а § 62 п. 2 закриває його літеральним переліком, бо «тощо» в § 64 залишає клас відкритим. Українська цим відрізняється від польської, де PWN [196] поділ у місці дефіса саме ПРИПИСУЄ, через що pl.json має три порожні списки. Звірено 18.09.2026."
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"rule": "hyphen",
|
|
117
|
+
"cite": "Український правопис (2019), § 42 «Прийменники», п. 2: «З дефісом пишемо складені прийменники, утворені з простих прийменників з, із та інших прийменників: з-за (із-за), з-над, з-перед, з-під (із-під), з-поза, з-поміж, з-понад, з-попід, з-посеред, з-проміж»; § 44 «Частки», п. 3: «З дефісом пишемо: 1) частки -бо, -но, -от, -то, -таки … 2) частки будь-, -будь, -небудь, казна-, хтозна-, бозна- із займенниками і прислівниками»",
|
|
118
|
+
"url": "https://www.ulif.org.ua/system/files/pravopus-new.pdf",
|
|
119
|
+
"note": "Ці параграфи нормативні для СКЛАДУ форм, але не для заборони переносу, і змішувати це не можна — так само, як у ru.json. §§ 63 і 64 прочитано повністю: § 63 нормує поділ за складами, § 64 забороняє розривати ініціали, назви мір, нарощення й графічні скорочення, але про дефіс у формах §§ 42 і 44 не каже нічого. Отже, для цих класів зв'язування через U+2011 — рішення проєкту (docs/PLAN.md §3.3), а не орфографічна норма, і це записано прямо. НЕ ВНЕСЕНО, свідомо: § 64 п. 3 («Граматичні закінчення, поєднані із цифрами дефісом, не можна відривати й переносити: 2-й, 4-го, 10-му») нормативно нерозривний, але це форма «цифра-дефіс-літера»; чи є це членством у hyphen.suffixes, чи вже алгоритмом, має вирішити spec-guardian. Звірено 18.09.2026."
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"rule": "nbsp",
|
|
123
|
+
"cite": "Український правопис (2019), § 64 «Технічні правила переносу», п. 1: «Не можна переносити прізвища, залишаючи в кінці попереднього рядка ініціали або інші умовні скорочення, що належать до них: Т. Г. Шевченко (не Т. Г. // Шевченко), гр. Іваненко, акад. (доц., проф.) Гончаренко, п. Гнатюк»; п. 4: «Не можна розривати умовні (графічні) скорочення на зразок вид-во, і т. д., і т. ін., та ін., т-во тощо»; п. 5: «Не можна переносити в наступний рядок розділові знаки (крім тире), дужку або лапки, що закривають попередній рядок»",
|
|
124
|
+
"url": "https://www.ulif.org.ua/system/files/pravopus-new.pdf",
|
|
125
|
+
"note": "§ 64 — ЗАКРИТИЙ перелік із п'яти пунктів, і це важливо не лише тим, що він містить, а й тим, чого в ньому немає. (1) initialBinding = «chain»: п. 1 наводить послідовність ДВОХ ініціалів і не дає прикладу одного ініціала перед прізвищем. (2) beforeWord: з п. 1 взято лише «акад.», «доц.», «проф.». «п.» і «гр.» свідомо НЕ внесено за тією самою дисципліною, з якої ru.json виключає «г.»: «п.» — це також «пункт» («п. 3»), «гр.» — також «градус» і «графа», а літеральний список цих напрямків не розрізняє. (3) beforePunctuation і narrowBeforePunctuation порожні: п. 5 прив'язує розділовий знак до ПОПЕРЕДНЬОГО слова — це заперечення, а не мовчання. (4) afterShortWords ПОРОЖНІЙ, і це підтверджена відсутність норми: перелік § 64 закритий, правила про однобуквені прийменники в ньому немає, а в самому правописі «і», «у», «в», «з» регулярно стоять у кінці рядка. Список ru.json сюди НЕ переноситься за аналогією, хоча мови споріднені. (5) afterSymbols і beforeNumber порожні: конструкцій «символ + число» і «скорочення + число» § 64 не містить. Звірено 18.09.2026."
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"rule": "nbsp",
|
|
129
|
+
"cite": "Український правопис (2019), § 64, п. 2: «Не можна відривати скорочені назви мір від цифр, до яких вони належать: 2008 р. (не 2008 // р.), 150 га (не 150 // га), 20 см³ або 20 куб. см, 5 г (не 5 // г)»; § 62: «Скорочені назви одиниць вимірювання пишемо без крапок: Б — байт, Вт — ват, г — грам, га — гектар, год — година, дм — дециметр, кБ — кілобайт, кВт — кіловат, кг — кілограм, км — кілометр, л — літр, м — метр, мм — міліметр, с — секунда, см — сантиметр, т — тонна, хв — хвилина, ц — центнер»; BIPM, The International System of Units (SI), 9th ed., concise summary: «A single space is always left between the number and the unit»",
|
|
130
|
+
"url": "https://www.bipm.org/documents/20126/41483022/SI-Brochure-9-concise-EN.pdf",
|
|
131
|
+
"note": "Розподіл ролей тут ІНШИЙ, ніж у pl, fi, sv і en-US: там BIPM дає перелік символів, а національне джерело — конвенцію відступу; для української національне джерело дає і те, і те, бо § 64 п. 2 нормує саме невідривність. BIPM наведено як підтвердження загального принципу, а не як несуча цитата. Однобуквені позначення (г, л, м, с, т, ц, Б) свідомо пропущено: правий кордон N5 вимагає лише, щоб cp[a+k] не належав ALNUM, і пробіл цю умову задовольняє, тож однобуквений запис зв'язував би звичайну прозу. «р.» внесено: на відміну від російського «г.», українське «р.» означає тільки «рік» і зв'язується вліво після числа. «%» внесено ЯК РІШЕННЯ, а не як цитата: його немає ні в § 62, ні в § 64, ні в скороченому викладі брошури BIPM (правило про % — у § 5.4.7 повного видання, яке не діставалося), але відбивка відсотка від числа є і в російській локалі, і в усіх інших локалях цього проєкту, а розбіжність тут дала б українській вужчу поведінку без жодної підстави в джерелі. Звірено 18.09.2026."
|
|
132
|
+
}
|
|
133
|
+
]
|
|
106
134
|
}
|