Мы импортируем множество постов, и их содержимое часто включает текст вроде @global или подобного (тема нашего экземпляра Discourse связана с программированием, а символ @ используется в этом языке).
Есть ли хороший и чистый способ отключить упоминание пользователей? Я не против предварительной обработки постов перед импортом.
В качестве своеобразного грязного обходного пути я обнаружил, что вставка пустого тега bbcode после @ работает (например, @[b][/b]global). Однако это не кажется хорошим решением, к тому же потребует от меня разбора/токенизации markdown, так как тег bbcode не должен вставляться, если строка находится внутри блока кода. Поэтому это не подходящее решение. Нулевая ширина пробела тоже не вариант, так как это приведёт к странным ошибкам, когда пользователи будут копировать фрагмент кода в свой собственный исходный код.
Если текст находится внутри блока кода, это не проблема. Если вы сможете убедиться, что он всегда будет в блоке кода, то всё будет в порядке. Однако вам понадобится настоящий парсер, чтобы определить, когда вы находитесь внутри блока кода.
Или, alternatively, отключите настройку «Разрешить пользователям упоминать других пользователей» во время импорта данных.
Да, если @имя находится внутри блока кода, то проблем нет. Проблема заключается в том, чтобы определить, находится ли оно там или нет, чтобы я мог предотвратить упоминание вне блоков кода, вставляя невидимый тег [b][/b] между @ и именем. Для этого действительно потребовался бы полноценный парсер/токенизатор Markdown.
Хм, применимо ли это даже в том случае, если пост позже будет переформатирован (rebaked), или это приведёт к случайным упоминаниям в таком случае?
Я почти уверен, что при перепечивании включается переключатель Wyeth, чтобы избежать всплываний и упоминаний, но я ни разу не проверял код и не пробовал это на практике.
Я не вижу ничего, что препятствовало бы пингам, насколько я понимаю, изменения напрямую публикуются для клиентов (хотя я далеко не эксперт в Ruby или Discourse, так что, пожалуйста, поправьте меня, если я ошибаюсь):