Как преобразовать HTML-код в вики-разметку в стиле Confluence?

Документация по API для Mylyn Wikitext имеет функции для преобразования Wiki-разметки в HTML, но я не могу найти функции для преобразования / анализа HTML-кода в Wiki-разметку. Учебный класс MarkupParser имеет метод parseToHTMLа где найти обратное?

5 ответов

Решение

Может быть, эта ссылка может помочь:

http://labs.seapine.com/htmltowiki.cgi

Попробуйте Wikifier.

Он не делает именно то, что вы хотите, но вы можете найти, что он делает достаточно, или является полезной отправной точкой.

Wikifier преобразует фрагменты формата хранения Confluence 4 XML (то есть, как представлено плагином Confluence Source Editor, без единого корневого элемента документа) в вики-разметку Confluence 3.

Почему это вообще относится к вашему вопросу? Формат хранения Confluence 4 XML включает некоторые элементы и атрибуты, имена которых совпадают с именами элементов и атрибутов XHTML.

Для получения дополнительной информации нажмите ссылку "Справка" на веб-странице Wikifier.

Примечание. Таблица стилей XSLT, используемая веб-страницей Wikifier, несколько новее, чем таблица стилей XSLT, связанная с соответствующим пакетом схемы.

Это добавлено позже: Wikifier RT еще ближе к тому, что вы хотите.

Я смог достичь HTML для WikiMarkup в стиле Confluence, используя DefaultWysiwygConverter из собственных библиотек Java Atlassian. Вот упрощенный модульный тест:

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>

Вот как вы делаете это в Mylyn, используя WikiText Standalone. Заменить соответствующий DocumentBuilder для желаемой разметки Wiki (вам нужно проверить API, чтобы увидеть, что доступно; TextileDocumentBuilder также существует).

Файл ConvertToConfluence.java:

package com.stackru.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 в вики-разметку Confluence. А поскольку Atlassian перестает использовать текстиль в качестве разметки вики в Confluence 4.x, преобразование не требуется. Формат страницы - XHTML.

Другие вопросы по тегам