Валидатор уценки

Я переношу дискуссионный форум с OSQA на Discourse. При этом я застрял в одной проблеме.

Поскольку это дискуссионный форум для тем, связанных с кодированием, большая часть сообщений содержит фрагменты кода. Многие начинающие пользователи неправильно форматируют свой код, т. е. не делают отступ при включении блока кода или не используют обратные галочки перед началом блока кода и после его окончания.

Теперь такой неформатированный фрагмент кода работал в OSQA, но не в Discourse.

Discourse скрывает <iostream> так же, как stackoverflow (возможно, рассматривая первый как HTML-тег?).

Кроме того, если пользователь напрямую вставляет свой код, форматирование начинается после начала отступа.

Пример:

#include <stdio.h>

int main()
{
    // formatting starts from here as prinf("Hi"); is indented.
    // the first two statements are not formatted as they have not been indetned.
    printf("Hi");
    return 0;
}

Я надеюсь, что вы все поняли идею. Это выглядит странно. Позвольте мне добавить изображение для большей ясности.

введите здесь описание изображения

Вы видели, что я пытался сказать?

Теперь Discourse не позволит публиковать такие посты. Но как насчет импортированных более 20 000 сообщений?

Как определить, есть ли у сообщений правильная уценка или нет? Пожалуйста, помогите мне здесь :(


person Alfarhan Zahedi    schedule 22.03.2019    source источник
comment
Как дела с импортом? Или это уже было сделано, и вы заметили, что они неправильно отформатированы? Как задействованы Rails?   -  person Schwern    schedule 23.03.2019


Ответы (1)


Я не думаю, что дело в том, что пользователи неправильно форматируют свой код, а в том, что OSQA и Discourse имеют разные правила форматирования. При импорте сообщений OSQA в Discourse вам придется переводить их форматирование.

Похоже, OSQA использует Pegdown.

Мы используем https://github.com/sirthias/pegdown для синтаксического анализа Markdown и включили следующие : Расширения.СОКРАЩЕНИЯ | Расширения.FENCED_CODE_BLOCKS. Мы также делаем автоматическое связывание как протокольных, так и непротокольных URL-адресов и адресов электронной почты. Мы также поддерживаем @упоминания и стандартные блоки кода, которые автоматически подсвечивают синтаксис.

Discourse поддерживает три формата, Common Markdown, а также часть BBCode, а также HTML.

Вам нужно будет перевести форматирование из OSQA в Discourse. В Discourse есть сценарии импорта для многих различных систем, но не для OSQA. Вы можете написать его, используя существующие скрипты в качестве примеров.

Discourse скрывает так же, как stackoverflow (возможно, рассматривая первый как HTML-тег?).

Вероятно, это связано с тем, что Discourse поддерживает HTML. Вам придется экранировать все объекты HTML чтобы они правильно отображались в Discourse.

Кроме того, если пользователь напрямую вставляет свой код, форматирование начинается сразу после начала отступа.

Чтобы избежать этого, замените отступ на &nbsp;.

person Schwern    schedule 22.03.2019