Аудитории: обозначения в нижнем регистре, аббревиатуры — заглавными

Тип, оснащение и пометки приводятся к одному виду: слова пишутся со строчной,
а аббревиатуры («ПК», «МО», «СТ») остаются полностью заглавными; в подписях
фильтров то же самое. В карточках теперь «комп.класс · 12 мест · ПК, маркер»,
«МО и СТ; без проектора». Тесты: 162.
This commit is contained in:
2026-10-10 13:26:15 +03:00
parent ee5faeff77
commit 2cbb19312e
3 changed files with 37 additions and 10 deletions

View File

@@ -384,6 +384,18 @@ _ROOM_PART_SPLIT = re.compile(r"[;,]")
_NEGATION_RE = re.compile(r"\bбез\b\s*(.*)", re.I)
_WORD_RE = re.compile(r"[A-Za-zА-ЯЁа-яё]+")
def lower_except_abbr(text: str) -> str:
"""Слова в нижний регистр; аббревиатуры («ПК», «МО», «СТ») остаёмся заглавными."""
def repl(match: re.Match) -> str:
word = match.group(0)
return word if len(word) >= 2 and word.isupper() else word.lower()
return _WORD_RE.sub(repl, text)
def room_capacity(text: str) -> int | None:
"""Вместимость: «N мест», «N раб.» (рабочие места в комп.классе)."""
m = re.search(r"(\d+)\s*мест", text, re.I)
@@ -400,7 +412,7 @@ def room_type(text: str) -> str:
for pattern in _ROOM_TYPE_PATTERNS:
m = pattern.search(text)
if m:
return re.sub(r"\s{2,}", " ", m.group(0).strip(" .,"))
return lower_except_abbr(re.sub(r"\s{2,}", " ", m.group(0).strip(" .,")))
return ""
@@ -440,7 +452,7 @@ def room_equipment(text: str) -> list[str]:
if pattern.search(m.group(1)):
negated.add(tag)
return [
tag
lower_except_abbr(tag)
for tag, pattern in _ROOM_EQUIPMENT
if tag not in negated and pattern.search(text)
]

View File

@@ -436,6 +436,13 @@ function saveRoomsFilter() {
localStorage.setItem(ROOMS_FILTER_KEY, JSON.stringify(roomsState.filter));
}
/** Слова в нижний регистр, аббревиатуры («ПК», «МО») остаются заглавными. */
function lcWords(text) {
return String(text || "").replace(/[A-Za-zА-ЯЁа-яё]+/g, (word) =>
word.length >= 2 && word === word.toUpperCase() ? word : word.toLowerCase(),
);
}
/** «Четверг» -> «четвергам» (для фразы «по четвергам и пятницам»). */
function weekdayPlural(day) {
if (day.endsWith("ье")) return day.slice(0, -2) + "ьям"; // воскресенье
@@ -492,7 +499,7 @@ function roomInfoText(room) {
if (tokens.every(isKnown)) return "";
const rest = [...tokens];
while (rest.length && isKnown(rest[0])) rest.shift(); // убираем ведущие известные слова
return rest.join(" ");
return lcWords(rest.join(" "));
})
.filter(Boolean)
.join("; ");