suite check: закрыты пробелы в проверках шапки, иерархии и словаря

- документ без темы: ошибка, если такой не один или если он несёт ключи слоя —
  иначе конвенция, потерявшая topic, молча лишалась всех проверок распространения
- иерархия заголовков: один заголовок первого уровня, без перескоков через уровень
- имя темы: латиница и пригодность для имени файла — ошибкой, kebab-case —
  предупреждением
- сценарные связки чужого словаря ловятся в начале строки, где их ставит
  сценарный блок, а не в середине фразы, где это чаще SQL
This commit is contained in:
av
2026-07-27 10:16:15 +03:00
parent b2d07ae55d
commit 51d2050200
5 changed files with 230 additions and 0 deletions
+25
View File
@@ -267,6 +267,31 @@ func Foreign(version int, code string) map[string]string {
return foreign
}
// ForeignConnectives lists the scenario connectives of the other vocabularies
// of the same version. They are kept apart from Foreign because they are caught
// differently: a connective is a whole word of everyday speech in some
// language — AND and OR are SQL keywords too — so only its position at the
// start of a line tells a scenario block from a mention.
func ForeignConnectives(version int, code string) map[string]string {
own, err := Lookup(version, code)
if err != nil {
return nil
}
foreign := make(map[string]string)
for otherCode, other := range registry[version] {
if otherCode == code {
continue
}
for w := range other.Scenario {
if _, mine := own.Scenario[w]; mine {
continue
}
foreign[w] = otherCode
}
}
return foreign
}
func versions() string {
out := make([]string, 0, len(registry))
for v := range registry {