Ответ 1
Может быть, эта ссылка может помочь:
В документации API для Mylyn Wikitext есть функции для преобразования Wiki Markup в HTML, но я не могу найти функции для преобразования/разбора HTML-кода в Wiki Markup. Класс MarkupParser
имеет метод parseToHTML
, но где я могу найти обратное?
Может быть, эта ссылка может помочь:
Попробуйте Wikifier.
Он не делает именно то, что вы хотите, но вы можете обнаружить, что он достаточно, или является полезной отправной точкой.
Викификатор преобразует фрагменты формата хранения XML Confluence 4 (то есть, как показано плагином редактора источника Confluence без единого корневого элемента документа) в разметку wiki Confluence 3.
Почему это имеет отношение к вашему вопросу? Формат хранения XML Confluence 4 включает в себя некоторые элементы и атрибуты, которые имеют те же имена, что и элементы XHTML и атрибуты.
Для получения дополнительной информации нажмите ссылку "Справка" на веб-странице Викитера.
Примечание. Таблица стилей XSLT, используемая веб-страницей Wikifier, немного более поздняя, чем таблица стилей XSLT в комплекте со связанным пакетом схем.
Это добавлено позже: Wikifier RT еще ближе к тому, что вы хотите.
Вот как вы это делаете в Mylyn, используя WikiText Standalone. Замените подходящую DocumentBuilder
для нужной разметки Wiki (вам нужно будет проверить API, чтобы узнать, что доступно; TextileDocumentBuilder
также существует).
Файл ConvertToConfluence.java:
package com.stackoverflow.mylyn;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;
import org.eclipse.mylyn.internal.wikitext.confluence.core.ConfluenceDocumentBuilder;
import org.eclipse.mylyn.wikitext.core.parser.HtmlParser;
import org.xml.sax.InputSource;
public class ConvertToConfluence {
public static String convertHTML(File htmlFile) {
InputStream in = null;
try {
in = new FileInputStream(htmlFile);
} catch (Exception ex) {
// TODO: handle or re-throw file exception
}
InputSource inputSource = new InputSource(new InputStreamReader(in));
StringWriter writer = new StringWriter();
ConfluenceDocumentBuilder builder = new ConfluenceDocumentBuilder(writer);
HtmlParser parser = new HtmlParser();
try {
parser.parse(inputSource, builder);
} catch (Exception ex) {
// TODO: handle or re-throw parsing exception
}
return writer.toString();
}
public static void main(String args[]) {
File file = new File("c:\\filename.html");
System.out.println(convertHTML(file));
}
}
Файл filename.html:
<HTML>
<BODY>
<p>This is <b>bold text</b> and some <i>italic text</i>.<br/><br/>TEST!</p>
</BODY>
</HTML>
Производит вывод Confluence:
This is *bold text* and some _italic text_.
\\TEST!
Мне удалось получить HTML-код WikiMarkup в стиле Confluence, используя DefaultWysiwygConverter
из собственных библиотек Java Atlassian. Здесь упрощенный unit test:
import com.atlassian.renderer.wysiwyg.converter.DefaultWysiwygConverter;
String htmlString = "This is <em>emphasized</em> and <b>bold</b>";
DefaultWysiwygConverter converter = new DefaultWysiwygConverter();
String wikiMarkupString = converter.convertXHtmlToWikiMarkup(htmlString);
Assert.assertEquals("This is _emphasized_ and *bold*", wikiMarkupString);
POM должен содержать правильные репозитории и зависимости
<dependency>
<groupId>com.atlassian.renderer</groupId>
<artifactId>atlassian-renderer</artifactId>
<version>8.0.5</version>
<exclusions>
<exclusion>
<!-- This exclusion is necessary if you are in a situation which
it conflicts, EG: using spring-boot -->
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<repositories>
<repository>
<!-- https://developer.atlassian.com/docs/advanced-topics/working-with-maven/atlassian-maven-repositories -->
<id>atlassian-public</id>
<url>https://packages.atlassian.com/maven/repository/public</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
<releases>
<enabled>true</enabled>
<checksumPolicy>warn</checksumPolicy>
</releases>
</repository>
</repositories>
Насколько я знаю, нет способа конвертировать HTML в разметку Wiki Confluence. И поскольку Atlassian перестает использовать текстиль в качестве разметки wiki в Confluence 4.x, нет необходимости в конверсии. Формат страницы ist XHTML.