build.gradle
в корневой директории проекта:allprojects {
repositories {
maven {
url 'https://s01.oss.sonatype.org/content/repositories/releases/'
}
}
}
build.gradle
модуля entry:dependencies {
implementation('com.gitee.chinasoft_ohos:commonmark:1.0.0')
...
}
Проект может быть запущен непосредственно с использованием sdk6 и DevEco Studio2.2 beta1.
Если проект не запускается, удалите файлы .gradle
, .idea
, build
, gradle
, build.gradle
,
и создайте новый проект в соответствии со своей версией, а затем скопируйте соответствующие файлы нового проекта в корневую директорию.
Распознавание и преобразование в HTML
import org.commonmark.node.*;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;
Parser parser = Parser.builder().build();
Node document = parser.parse("Это *Sparta*");
HtmlRenderer renderer = HtmlRenderer.builder().build();
renderer.render(document); // "<p>Это <em>Sparta</em></p>\n"
Это будет использовать парсер и рендерер с базовым конфигурационным набором. Оба этих конструктора имеют методы для настройки их поведения:- escapeHtml(true)
защищает HTML-теги и блоки от экранирования в HtmlRenderer
.
sanitizeUrls(true)
очищает потенциально опасные URL в <a>
и <img>
тегах в HtmlRenderer
.Для получения полного списка доступных опций обратитесь к методам конструктора.
Обратите внимание, что библиотека не пытается очистить результирующий HTML от недопустимых тегов. Это обязанность вызывающего кода, который может применять дополнительные меры очистки после использования результата HTML.
Для представления как чистого текста также существует TextContentRenderer
, имеющий очень похожий API.
После распознавания исходного текста, результат представляет собой дерево узлов. Это дерево можно модифицировать до его рендера или проверять без рендера:
Node node = parser.parse("Пример\n=======\n\nНекоторый другой текст");
WordCountVisitor visitor = new WordCountVisitor();
node.accept(visitor);
visitor.wordCount; // 4
class WordCountVisitor extends AbstractVisitor {
int wordCount = 0;
@Override
public void visit(Text text) {
// Это вызывается для всех узлов типа Text. Переопределите методы visit для других типов узлов.
// Подсчет слов (это просто пример, не делайте так в реальном проекте по различным причинам).
wordCount += text.getLiteral().split("\\W+").length;
// Пробегаемся по дочерним узлам (можно было бы опустить этот шаг, если бы узлы типа Text не имели дочерних узлов).
visitChildren(text);
}
}
```### Добавление собственного типа узла
Иногда вам может потребоваться настроить отображение HTML. Если вы хотите добавить или изменить атрибуты некоторых элементов, существует простой способ сделать это.
В этом примере мы регистрируем `AttributeProvider` фабрику на рендере, чтобы установить атрибут `class="border"` для элемента `img`.
```java
Parser parser = Parser.builder().build();
HtmlRenderer renderer = HtmlRenderer.builder()
.attributeProviderFactory(new AttributeProviderFactory() {
public AttributeProvider create(AttributeProviderContext context) {
return new ImageAttributeProvider();
}
})
.build();
Node document = parser.parse("");
renderer.render(document);
// "<p><img src=\"/url.png\" alt=\"текст\" class=\"border\" /></p>\n"
class ImageAttributeProvider implements AttributeProvider {
@Override
public void setAttributes(Node node, String tagName, Map<String, String> attributes) {
if ("img".equals(tagName)) {
attributes.put("class", "border");
}
}
}
Если вы хотите контролировать представление HTML более глубоко, чем просто изменять атрибуты, можно полностью управлять образом HTML.
В этом примере мы изменили представление отступов кодовых блоков, чтобы они были заключены только в pre
, а не в pre
и code
:
Parser parser = Parser.builder().build();
HtmlRenderer renderer = HtmlRenderer.builder()
.nodeRendererFactory(new HtmlNodeRendererFactory() {
public NodeRenderer create(HtmlNodeRendererContext context) {
return new IndentedCodeBlockNodeRenderer(context);
}
})
.build();
Node document = parser.parse("Пример:\n\n код");
renderer.render(document);
// "<p>Пример:</p>\n<pre>код\n</pre>\n"
CustomNode
, и добавить экземпляры этих узлов в качестве дочерних узлов существующих узлов.Для определения HTML-рендера для таких узлов можно использовать NodeRenderer
, как показано выше.
Кодовая проверка прошла успешно
Облачная проверка кода прошла успешно
Проверка безопасности отсутствия вирусов пройдена
Функционал демонстрационной версии практически не отличается от оригинального компонента
Copyright (c) 2015-2019 Atlassian и другие.
Лицензировано по лицензии BSD (двухабзацное соглашение), см. файл LICENSE.txt.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )