В данной заметке под словом «кавычкер» понимается скрипт, расставляющий не только правильные кавычки, но и неразрывные пробелы, тире, знаки копирайта и зарегистрированного товарного знака, другие символы.
Какая задача стоит перед кавычкером?
- для человека, который не может или не хочет написать текст правильно (в плане типографики), сделать это автоматически или
- для человека, который может и хочет написать текст правильно, помочь сделать это быстрее?
Раньше я не задумывался над этим вопросом, и как-то подсознательно, видимо, считал, что первое. А как только задумался, понял, что правильный ответ — второй. Если человек пишет коряво, то никакая автоматика ему не поможет. А вот если человек пишет аккуратно, то автоматика может и помешать, когда сработает неправильно. Исходя из этого нужно делать кавычкеры, во-первых, как можно более предсказуемыми, а во-вторых, как можно меньше мешающими тому, кто без них знает. (То же относится и к викиформаттерам, но сейчас не о них.)
Например. Как мы знаем, между числами пишется тире, если это диапазон («Война шла в 1941—1945 годах»), и дефис — если величина указана приблизительно («С Али-Бабой было 41-45 разбойников»). Сейчас кавычкер e2 «Helicon» использует хитрую эвристику для того, чтобы указывать диапазон лет правильно:
// 1941-1945
$text = preg_replace ('#(\d{4})-(\d{4})#is', '\\1—\\2', $text);
К сожалению, года бывают не только четырёхзначными, четырёхзначными бывают не только года, года не всегда означают диапазон и диапазон бывает не только лет («Война шла в 41—45 годах XX века»). Поэтому эта штука, конечно, несколько повышает вероятность правильного типографирования текста, однако резко снижает предсказуемость кавычкера и мешает тому, кто хочет сделать иначе, сделать так, как он хочет. Начиная с версии 1.15 Helicon больше не занимается этой ерундой, но с e2 пока что поставляется старый Helicon версии 1.11 (смайлик).
К чему я это всё? К тому, что хороший кавычкер должен:
- автоматически заменять одни символы на другие только тогда, когда есть 100% уверенность в том, что автор имел в виду именно тот символ, на который мы заменяем;
- дать возможность автору вставить тот символ, который он хочет, наиболее простым и однозначным способом.
Если продолжить тему дефисов и тире, то вот какие правила типографирования я считал бы разумными (вспомним так же и про знак минус).
Существует два случая, когда мы можем точно сказать, что пользователь имел в виду тире:
- с двух сторон от дефиса находится пробелы или неразрывные пробелы;
- перед дефисом находится начало строки или всего текста (прямая речь).
В этих случаях мы заменяем дефис на тире (mdash), и, если перед ним был пробел, то заменяем этот пробел на неразрывный пробел.
В случаях неоднозначности дефис остаётся самим собой, два дефиса подряд заменяются на минус, а три — на тире. Например:
Иван Петрович родился где-то в 1925-1928 г. |
Иван Петрович родился где-то в 1925-1928 г. |
Математики заявляют, что 1991—1917=74 |
Математики заявляют, что 1991—1917=74 |
Война шла в 1941—-1945 годах |
Война шла в 1941—1945 годах |
В исходном тексте может встретиться ещё и «короткое тире» (его любит вставлять Word; но насколько мне известно в русском языке такого знака не существует). Его нужно, как я понимаю, просто заменить на длинное, так как ничего другого под ним Word подразумевать не мог.
Как видим, при таком подходе автор будет точно знать, что получит на выходе, так как тире ставится автоматически только там, где его необходимость абсолютно однозначна. Никаких сюрпризов.
Примерно так же можно формализовать и правила расстановки кавычек. Главное избавиться от всякой эвристики типа «пользователь наверняка имел в виду то-то».
Если во всём тексте встречается только одна двойная кавычка сразу после числа, то можно с большой уверенностью утверждать, что имелся в виду знак дюйма. Утверждать-то можно, но кавычку нужно заменять на закрывающую, так как она написана слитно с предшествующим текстом и раздельно с последующим. А для знаков фута и дюйма (минуты и секунды) использовать, скажем, одну и две одинарных кавычки подряд соответственно.
Приятным побочным эффектом такого подхода является то, что более формально простые правила и реализовывать легче, и работать это всё будет быстрее.
Что думаете?