/******************************************************************************* * Copyright (c) 2013 Obeo. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Obeo - initial API and implementation *******************************************************************************/ package org.eclipse.emf.compare.doc; import java.io.StringWriter; import java.io.Writer; import java.nio.file.Path; import org.eclipse.mylyn.wikitext.core.util.DefaultXmlStreamWriter; import org.eclipse.mylyn.wikitext.core.util.FormattingXMLStreamWriter; import org.eclipse.mylyn.wikitext.core.util.XmlStreamWriter; /** * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a> */ public class PrimaryTOCWriter { private StringWriter primaryTOCOut; private XmlStreamWriter primaryTOCWriter; private StringWriter pluginOut; private XmlStreamWriter pluginWriter; private Path baseDir; void startPrimaryTOC(Path indexHTMLFile, String title, String anchorId) { baseDir = indexHTMLFile.getParent(); primaryTOCOut = new StringWriter(8096); primaryTOCWriter = createXmlStreamWriter(primaryTOCOut); pluginOut = new StringWriter(8096); pluginWriter = createXmlStreamWriter(pluginOut); primaryTOCWriter.writeStartDocument("UTF-8", "1.0"); primaryTOCWriter.writeStartElement("toc"); primaryTOCWriter.writeAttribute("topic", indexHTMLFile.toString()); primaryTOCWriter.writeAttribute("label", title); if (anchorId != null && !"".equals(anchorId.trim())) { // link the primary TOC to the given anchor id. primaryTOCWriter.writeAttribute("link_to", anchorId); } pluginWriter.writeStartDocument("UTF-8", "1.0"); pluginWriter.writeLiteral("\n<?eclipse version=\"3.2\"?>\n"); pluginWriter.writeStartElement("plugin"); pluginWriter.writeStartElement("extension"); pluginWriter.writeAttribute("point", "org.eclipse.help.toc"); pluginWriter.writeEmptyElement("toc"); pluginWriter.writeAttribute("file", "help/toc.xml"); pluginWriter.writeAttribute("primary", "true"); pluginWriter.writeEndElement(); pluginWriter.writeStartElement("extension"); pluginWriter.writeAttribute("point", "org.eclipse.help.toc"); } void endPrimaryTOC() { primaryTOCWriter.writeEndElement(); primaryTOCWriter.writeEndDocument(); primaryTOCWriter.close(); pluginWriter.writeEndElement(); pluginWriter.writeEndElement(); pluginWriter.writeEndDocument(); pluginWriter.close(); } void startTopic(String label, Path href) { primaryTOCWriter.writeStartElement("topic"); primaryTOCWriter.writeAttribute("label", label); if (href != null) { primaryTOCWriter.writeAttribute("href", href.toString()); } } void createLink(Path linkedTOC) { primaryTOCWriter.writeStartElement("link"); primaryTOCWriter.writeAttribute("toc", baseDir.resolve(linkedTOC).toString()); primaryTOCWriter.writeEndElement(); pluginWriter.writeEmptyElement("toc"); pluginWriter.writeAttribute("file", baseDir.resolve(linkedTOC).toString()); } void endTopic() { primaryTOCWriter.writeEndElement(); } String getPrimaryTOCContent() { return primaryTOCOut.toString(); } String getPluginContent() { return pluginOut.toString(); } protected XmlStreamWriter createXmlStreamWriter(Writer out) { XmlStreamWriter writer = new DefaultXmlStreamWriter(out); return new FormattingXMLStreamWriter(writer); } }