From a0b76b3729786ac0e92917af6294e839b6cc72f0 Mon Sep 17 00:00:00 2001 From: henrikjust Date: Sat, 6 Sep 2014 19:19:17 +0000 Subject: [PATCH] SVG support + merge spans + bugfixes git-svn-id: svn://svn.code.sf.net/p/writer2latex/code/trunk@170 f0f2a975-2e09-46c8-9428-3b39399b9f3c --- source/distro/changelog.txt | 20 +++- source/distro/doc/user-manual.odt | Bin 59397 -> 59499 bytes .../filter/GraphicConverterImpl1.java | 14 +-- .../writer2latex/api/ConverterFactory.java | 4 +- .../base/BinaryGraphicsDocument.java | 100 ++++++++---------- .../writer2latex/base/ImageConverter.java | 67 ++++++++++-- .../java/writer2latex/epub/EPUBConverter.java | 16 ++- .../writer2latex/latex/DrawConverter.java | 8 +- .../latex/ListStyleConverter.java | 6 +- .../java/writer2latex/office/MIMETypes.java | 8 +- .../java/writer2latex/office/TableReader.java | 10 +- source/java/writer2latex/xhtml/Converter.java | 4 +- .../writer2latex/xhtml/DrawConverter.java | 8 +- .../writer2latex/xhtml/TextConverter.java | 30 ++++-- .../java/writer2latex/xhtml/XhtmlConfig.java | 8 +- source/oxt/writer2latex/w2l_filters.xcu | 4 +- source/oxt/writer2xhtml/w2x_filters.xcu | 16 +-- source/readme-source.txt | 19 ++-- 18 files changed, 212 insertions(+), 130 deletions(-) diff --git a/source/distro/changelog.txt b/source/distro/changelog.txt index 9dc7d0b..13437f2 100644 --- a/source/distro/changelog.txt +++ b/source/distro/changelog.txt @@ -2,6 +2,24 @@ Changelog for Writer2LaTeX version 1.2 -> 1.4 ---------- version 1.3.2 alpha ---------- +[w2x] Two or more span elements in a row with identical attributes are now merged + +[all] Filters: Appended [Writer2LaTeX] or [Writer2xhtml] to all filter UI names to make them more visible + +[w2l] Bugfix: Avoid null pointer exception caused by list styles in some cases + +[w2x] Bugfix: EPUB export filter works again (was broken in 1.3.1) + +[w2x] Bugfix: Text boxes are no longer lost if within a paragraph + +[w2x] SVG support in HTML5 is now finished: Vector graphics is converted to SVG (does not work in older versions of LO). + The option use_svg has been renamed to inline_svg. If set to true (default) inline SVG is used, if set to false, + external SVG-files are used. + +[all] If an image image cannot be converted to an acceptable format, the optional alternative image will now be tried + +[all] Bugfix: Avoid null pointer exception if a table has no defined table width + [w2l] Bugfix (StarMath conversion): Protect the character [ after \\ in gather and matrix environments [w2l] Bugfix: Protect the character [ after \\ in tables @@ -29,7 +47,7 @@ Changelog for Writer2LaTeX version 1.2 -> 1.4 the option xslt_path has been removed. Also the vacant spot in the export dialog is now used for the option use_mathjax (only active for XHTML+MathML and HTML5) -[w2l] Added support for TexMaths equations in LaTeX, XHTML+MathML and HTML5 (the last two only if use_mathjax=true) +[all] Added support for TexMaths equations in LaTeX, XHTML+MathML and HTML5 (the last two only if use_mathjax=true) [all] The command line application now gives an explanation if the source file is not in ODF format diff --git a/source/distro/doc/user-manual.odt b/source/distro/doc/user-manual.odt index a4117a64588f9e4a62f4b7dba78e70c46d2e908d..facaf65871842af224f79253c7a57e44e3a6d8e1 100644 GIT binary patch delta 43090 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
& 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 M9xc4YpTF$>KdzRg2><{9 diff --git a/source/java/org/openoffice/da/comp/w2lcommon/filter/GraphicConverterImpl1.java b/source/java/org/openoffice/da/comp/w2lcommon/filter/GraphicConverterImpl1.java index 204d048..f3db9c3 100644 --- a/source/java/org/openoffice/da/comp/w2lcommon/filter/GraphicConverterImpl1.java +++ b/source/java/org/openoffice/da/comp/w2lcommon/filter/GraphicConverterImpl1.java @@ -16,11 +16,11 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * - * Copyright: 2002-2012 by Henrik Just + * Copyright: 2002-2014 by Henrik Just * * All Rights Reserved. * - * Version 1.4 (2012-04-03) + * Version 1.4 (2014-09-05) */ @@ -76,9 +76,8 @@ public class GraphicConverterImpl1 implements GraphicConverter { // We don't support cropping and resizing if (bCrop || bResize) { return false; } - // We can convert vector formats to EPS. - // The IDL reference claims we can convert to SVG too, but for some reason this always returns an empty array? - if ((MIMETypes.EPS.equals(sTargetMime)) && // || MIMETypes.SVG.equals(sTargetMime)) && + // We can convert vector formats to EPS and SVG + if ((MIMETypes.EPS.equals(sTargetMime) || MIMETypes.SVG.equals(sTargetMime)) && (MIMETypes.EMF.equals(sSourceMime) || MIMETypes.WMF.equals(sSourceMime) || MIMETypes.SVM.equals(sSourceMime))) { return true; } @@ -133,7 +132,10 @@ public class GraphicConverterImpl1 implements GraphicConverter { } else { byte[] converted = xTarget.getBuffer(); - return converted; + if (converted.length>0) { // Older versions of AOO/LO fails to convert to SVG (empty result) + return converted; + } + return null; } } catch (com.sun.star.io.IOException e) { diff --git a/source/java/writer2latex/api/ConverterFactory.java b/source/java/writer2latex/api/ConverterFactory.java index 2772c9d..907cf60 100644 --- a/source/java/writer2latex/api/ConverterFactory.java +++ b/source/java/writer2latex/api/ConverterFactory.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.4 (2014-09-03) + * Version 1.4 (2014-09-06) * */ @@ -33,7 +33,7 @@ public class ConverterFactory { // Version information private static final String VERSION = "1.3.2"; - private static final String DATE = "2014-09-03"; + private static final String DATE = "2014-09-06"; /** Return the Writer2LaTeX version in the form * (major version).(minor version).(patch level)
diff --git a/source/java/writer2latex/base/BinaryGraphicsDocument.java b/source/java/writer2latex/base/BinaryGraphicsDocument.java index 2af92c3..20710ec 100644 --- a/source/java/writer2latex/base/BinaryGraphicsDocument.java +++ b/source/java/writer2latex/base/BinaryGraphicsDocument.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.4 (2014-09-03) + * Version 1.4 (2014-09-05) * */ @@ -30,7 +30,6 @@ import java.io.OutputStream; import java.io.IOException; import writer2latex.api.OutputFile; -import writer2latex.util.Misc; /** This class is used to represent a binary graphics document to be included in the converter result. @@ -40,37 +39,55 @@ import writer2latex.util.Misc; public class BinaryGraphicsDocument implements OutputFile { private String sFileName; - private String sFileExtension; private String sMimeType; - private boolean bIsLinked = false; - private boolean bIsAcceptedFormat = false; + private boolean bAcceptedFormat; + + private boolean bRecycled = false; // Data for an embedded image private byte[] blob = null; - private int nOff; - private int nLen; + private int nOff = 0; + private int nLen = 0; - // Data for a linked image - private String sURL = null; - /**Constructs a new graphics document. - * This new document does not contain any data. Document data must - * be added using the appropriate methods. + * Until data is added using the read methods, the document is considered a link to + * the image given by the file name. * - * @param sName The name of the GraphicsDocument. - * @param sFileExtension the file extension + * @param sFileName The name or URL of the GraphicsDocument. * @param sMimeType the MIME type of the document */ - public BinaryGraphicsDocument(String sName, String sFileExtension, String sMimeType) { - this.sFileExtension = sFileExtension; + public BinaryGraphicsDocument(String sFileName, String sMimeType) { + this.sFileName = sFileName; this.sMimeType = sMimeType; - sFileName = Misc.trimDocumentName(sName, sFileExtension); + bAcceptedFormat = false; // or rather "don't know" } - + + /** Construct a new graphics document which is a recycled version of the supplied one. + * This implies that all information is identical, but the recycled version does not contain any data. + * This is for images that are used more than once in the document. + * + * @param bgd the source document + */ + public BinaryGraphicsDocument(BinaryGraphicsDocument bgd) { + this.sFileName = bgd.getFileName(); + this.sMimeType = bgd.getMIMEType(); + this.bAcceptedFormat = bgd.isAcceptedFormat(); + this.bRecycled = true; + } + + /** Is this graphics document recycled? + * + * @return true if this is the case + */ + public boolean isRecycled() { + return bRecycled; + } + /** Set image contents to a byte array * * @param data the image data + * @param bIsAcceptedFormat flag to indicate that the format of the image is acceptable for the converter */ public void setData(byte[] data, boolean bIsAcceptedFormat) { setData(data,0,data.length,bIsAcceptedFormat); @@ -87,30 +104,7 @@ public class BinaryGraphicsDocument implements OutputFile { this.blob = data; this.nOff = nOff; this.nLen = nLen; - this.bIsAcceptedFormat = bIsAcceptedFormat; - this.bIsLinked = false; - this.sURL = null; - } - - /** Set the URL of a linked image - * - * @param sURL the URL - */ - public void setURL(String sURL) { - this.blob = null; - this.nOff = 0; - this.nLen = 0; - this.bIsAcceptedFormat = false; // or rather don't know - this.bIsLinked = true; - this.sURL = sURL; - } - - /** Get the URL of a linked image - * - * @return the URL or null if this is an embedded image - */ - public String getURL() { - return sURL; + this.bAcceptedFormat = bIsAcceptedFormat; } /** Does this BinaryGraphicsDocument represent a linked image? @@ -118,7 +112,7 @@ public class BinaryGraphicsDocument implements OutputFile { * @return true if so */ public boolean isLinked() { - return bIsLinked; + return blob==null && !bRecycled; } /** Is this image in an acceptable format for the converter? @@ -126,9 +120,13 @@ public class BinaryGraphicsDocument implements OutputFile { * @return true if so (always returns false for linked images) */ public boolean isAcceptedFormat() { - return bIsAcceptedFormat; + return bAcceptedFormat; } + /** Get the data of the image + * + * @return the image data as a byte array - or null if this is a linked image + */ public byte[] getData() { return blob; } @@ -148,20 +146,12 @@ public class BinaryGraphicsDocument implements OutputFile { } } - /** Get the file extension - * - * @return the file extension - */ - public String getFileExtension() { - return sFileExtension; - } - - /** Get the document with file extension.

+ /** Get the document name or URL

* - * @return The document with file extension. + * @return The document name or URL */ public String getFileName() { - return sFileName + sFileExtension; + return sFileName; } /** Get the MIME type of the document. diff --git a/source/java/writer2latex/base/ImageConverter.java b/source/java/writer2latex/base/ImageConverter.java index 8ffe4bd..6d73b40 100644 --- a/source/java/writer2latex/base/ImageConverter.java +++ b/source/java/writer2latex/base/ImageConverter.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.4 (2014-09-03) + * Version 1.4 (2014-09-05) * */ @@ -28,6 +28,7 @@ package writer2latex.base; import java.text.DecimalFormat; import java.text.NumberFormat; +import java.util.HashMap; import java.util.HashSet; import org.w3c.dom.Element; @@ -69,6 +70,10 @@ public final class ImageConverter { private String sDefaultFormat = null; private String sDefaultVectorFormat = null; private HashSet acceptedFormats = new HashSet(); + + // In the package format, the same image file may be used more than once in the document + // Hence we keep information of all documents for potential + private HashMap recycledImages = new HashMap(); /** Construct a new ImageConverter referring to a specific document * @@ -159,17 +164,48 @@ public final class ImageConverter { * or convert it to an accepted format */ public BinaryGraphicsDocument getImage(Element node) { + String sName = sSubDirName+sBaseFileName+formatter.format(++nImageCount); + BinaryGraphicsDocument bgd = getImage(node,sName); + if (bgd!=null) { + if (!bgd.isAcceptedFormat()) { // We may have better luck with an alternative image + Element sibling = getAlternativeImage(node); + if (sibling!=null) { + BinaryGraphicsDocument altBgd = getImage(sibling,sName); + if (altBgd!=null && altBgd.isAcceptedFormat()) { + bgd = altBgd; + } + } + } + } + if (bgd==null || bgd.isLinked() || bgd.isRecycled()) { + // The file name was not used + nImageCount--; + } + else if (node.hasAttribute(XMLString.XLINK_HREF)) { + // This is an embedded image we meet for the first time. + // Recycle it on behalf of the original image node. + String sHref = node.getAttribute(XMLString.XLINK_HREF); + recycledImages.put(sHref, new BinaryGraphicsDocument(bgd)); + } + return bgd; + } + + private BinaryGraphicsDocument getImage(Element node, String sName) { assert(XMLString.DRAW_IMAGE.equals(node.getTagName())); // Image data + String sExt = null; String sMIME = null; - String sExt = null; byte[] blob = null; // First try to extract the image using the xlink:href attribute if (node.hasAttribute(XMLString.XLINK_HREF)) { String sHref = node.getAttribute(XMLString.XLINK_HREF); if (sHref.length()>0) { + // We may have seen this image before, return the recycled version + if (recycledImages.containsKey(sHref)) { + return recycledImages.get(sHref); + } // Image may be embedded in package: String sPath = sHref; if (sPath.startsWith("#")) { sPath = sPath.substring(1); } @@ -192,9 +228,9 @@ public final class ImageConverter { else { // This is a linked image // TODO: Add option to download image from the URL? + String sFileName = ofr.fixRelativeLink(sHref); BinaryGraphicsDocument bgd - = new BinaryGraphicsDocument(Misc.getFileName(sHref),Misc.getFileExtension(sHref),null); - bgd.setURL(ofr.fixRelativeLink(sHref)); + = new BinaryGraphicsDocument(sFileName,null); return bgd; } } @@ -225,21 +261,22 @@ public final class ImageConverter { } } - // We have an embedded image. Assign a name (without extension) - String sName = sSubDirName+sBaseFileName+formatter.format(++nImageCount); - // Is this an EPS file embedded in an SVM file? + // (This case is obsolete, but kept for the sake of old documents) if (bExtractEPS && MIMETypes.SVM.equals(sMIME)) { // Look for postscript: int[] offlen = new int[2]; if (SVMReader.readSVM(blob,offlen)) { + String sFileName = sName+MIMETypes.EPS_EXT; BinaryGraphicsDocument bgd - = new BinaryGraphicsDocument(sName,MIMETypes.EPS_EXT,MIMETypes.EPS); + = new BinaryGraphicsDocument(sFileName, MIMETypes.EPS); bgd.setData(blob,offlen[0],offlen[1],true); return bgd; } } + // We have an embedded image. + // If we have a converter AND a default format AND this image // is not in an accepted format AND the converter knows how to // convert it - try to convert... @@ -264,10 +301,12 @@ public final class ImageConverter { sExt = MIMETypes.getFileExtension(sMIME); } } - + // Create the result + if (isAcceptedFormat(sMIME) || bAcceptOtherFormats) { - BinaryGraphicsDocument bgd = new BinaryGraphicsDocument(sName,sExt,sMIME); + String sFileName = sName+sExt; + BinaryGraphicsDocument bgd = new BinaryGraphicsDocument(sFileName,sMIME); bgd.setData(blob,isAcceptedFormat(sMIME)); return bgd; } @@ -276,4 +315,12 @@ public final class ImageConverter { } } + private Element getAlternativeImage(Element node) { + Node sibling = node.getNextSibling(); + if (sibling!=null && Misc.isElement(sibling, XMLString.DRAW_IMAGE)) { + return (Element) sibling; + } + return null; + } + } diff --git a/source/java/writer2latex/epub/EPUBConverter.java b/source/java/writer2latex/epub/EPUBConverter.java index 5d1952c..a3f4950 100644 --- a/source/java/writer2latex/epub/EPUBConverter.java +++ b/source/java/writer2latex/epub/EPUBConverter.java @@ -16,11 +16,11 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * - * Copyright: 2001-2010 by Henrik Just + * Copyright: 2001-2014 by Henrik Just * * All Rights Reserved. * - * version 1.2 (2010-12-15) + * version 1.4 (2014-09-06) * */ @@ -41,12 +41,22 @@ public final class EPUBConverter extends Xhtml11Converter { // Constructor public EPUBConverter() { super(); + System.out.println("Creating epub converter"); } @Override public ConverterResult convert(InputStream is, String sTargetFileName) throws IOException { setOPS(true); ConverterResult xhtmlResult = super.convert(is, "chapter"); - + return createPackage(xhtmlResult,sTargetFileName); + } + + @Override public ConverterResult convert(org.w3c.dom.Document dom, String sTargetFileName, boolean bDestructive) throws IOException { + setOPS(true); + ConverterResult xhtmlResult = super.convert(dom, "chapter", bDestructive); + return createPackage(xhtmlResult,sTargetFileName); + } + + private ConverterResult createPackage(ConverterResult xhtmlResult, String sTargetFileName) { ConverterResultImpl epubResult = new ConverterResultImpl(); epubResult.addDocument(new EPUBWriter(xhtmlResult,sTargetFileName,getXhtmlConfig())); epubResult.setMetaData(xhtmlResult.getMetaData()); diff --git a/source/java/writer2latex/latex/DrawConverter.java b/source/java/writer2latex/latex/DrawConverter.java index 5c34eb8..ec7c153 100644 --- a/source/java/writer2latex/latex/DrawConverter.java +++ b/source/java/writer2latex/latex/DrawConverter.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.4 (2014-09-03) + * Version 1.4 (2014-09-05) * */ @@ -297,7 +297,7 @@ public class DrawConverter extends ConverterHelper { BinaryGraphicsDocument bgd = palette.getImageCv().getImage(node); if (bgd!=null) { if (!bgd.isLinked()) { // embedded image - palette.addDocument(bgd); + if (!bgd.isRecycled()) { palette.addDocument(bgd); } sFileName = bgd.getFileName(); String sMIME = bgd.getMIMEType(); bCommentOut = !( @@ -311,8 +311,8 @@ public class DrawConverter extends ConverterHelper { (config.getBackend()==LaTeXConfig.DVIPS && MIMETypes.EPS.equals(sMIME))); } else { // linked image - sFileName = bgd.getURL(); - String sExt = bgd.getFileExtension().toLowerCase(); + sFileName = bgd.getFileName(); + String sExt = Misc.getFileExtension(sFileName).toLowerCase(); // Accept only relative filenames and supported filetypes: bCommentOut = sFileName.indexOf(":")>-1 || !( config.getBackend()==LaTeXConfig.UNSPECIFIED || diff --git a/source/java/writer2latex/latex/ListStyleConverter.java b/source/java/writer2latex/latex/ListStyleConverter.java index b99271a..d651af9 100644 --- a/source/java/writer2latex/latex/ListStyleConverter.java +++ b/source/java/writer2latex/latex/ListStyleConverter.java @@ -16,11 +16,11 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * - * Copyright: 2002-2012 by Henrik Just + * Copyright: 2002-2014 by Henrik Just * * All Rights Reserved. * - * Version 1.2 (2012-03-05) + * Version 1.4 (2014-09-06) * */ @@ -94,7 +94,7 @@ public class ListStyleConverter extends StyleConverter { if (config.formatting()==LaTeXConfig.CONVERT_BASIC || (config.formatting()>=LaTeXConfig.CONVERT_MOST && oc.isInTable())) { if (oc.getListLevel()==1) { - if (!styleNames.containsName(getDisplayName(oc.getListStyleName()))) { + if (!listStyleLevelNames.containsKey(oc.getListStyleName())) { createListStyleLabels(oc.getListStyleName()); } ba.add("\\liststyle"+styleNames.getExportName(getDisplayName(oc.getListStyleName()))+"\n",""); diff --git a/source/java/writer2latex/office/MIMETypes.java b/source/java/writer2latex/office/MIMETypes.java index fd04572..f612517 100644 --- a/source/java/writer2latex/office/MIMETypes.java +++ b/source/java/writer2latex/office/MIMETypes.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.4 (2014-08-13) + * Version 1.4 (2014-09-05) * */ @@ -69,6 +69,7 @@ public final class MIMETypes extends writer2latex.api.MIMETypes { public static final String BIBTEX_EXT = ".bib"; public static final String XHTML_EXT = ".html"; public static final String XHTML_MATHML_EXT = ".xhtml"; + public static final String HTML5_EXT = ".html"; public static final String PNG_EXT = ".png"; public static final String JPEG_EXT = ".jpg"; // this is the default in graphicx.sty public static final String GIF_EXT = ".gif"; @@ -90,8 +91,8 @@ public final class MIMETypes extends writer2latex.api.MIMETypes { } private static final boolean isSVG(byte[] blob) { - // Look for com.sun.star.comp.Writer.XmlFilterAdaptor - LaTeX 2e + LaTeX 2e [Writer2LaTeX] EXPORT ALIEN 3RDPARTYFILTER @@ -34,7 +34,7 @@ com.sun.star.comp.Writer.XmlFilterAdaptor - BibTeX + BibTeX [Writer2LaTeX] EXPORT ALIEN 3RDPARTYFILTER diff --git a/source/oxt/writer2xhtml/w2x_filters.xcu b/source/oxt/writer2xhtml/w2x_filters.xcu index ef26157..886242e 100644 --- a/source/oxt/writer2xhtml/w2x_filters.xcu +++ b/source/oxt/writer2xhtml/w2x_filters.xcu @@ -12,7 +12,7 @@ com.sun.star.comp.Writer.XmlFilterAdaptor - HTML 5 + HTML 5 [Writer2xhtml] EXPORT ALIEN 3RDPARTYFILTER @@ -26,7 +26,7 @@ com.sun.star.comp.Writer.XmlFilterAdaptor - HTML5 + HTML5 [Writer2xhtml] EXPORT ALIEN 3RDPARTYFILTER @@ -40,7 +40,7 @@ com.sun.star.comp.Writer.XmlFilterAdaptor - XHTML 1.0 strict + XHTML 1.0 strict [Writer2xhtml] EXPORT ALIEN 3RDPARTYFILTER @@ -54,7 +54,7 @@ com.sun.star.comp.Writer.XmlFilterAdaptor - XHTML 1.1 + XHTML 1.1 [Writer2xhtml] EXPORT ALIEN 3RDPARTYFILTER @@ -68,7 +68,7 @@ com.sun.star.comp.Writer.XmlFilterAdaptor - XHTML 1.0 strict + XHTML 1.0 strict [Writer2xhtml] EXPORT ALIEN 3RDPARTYFILTER @@ -82,7 +82,7 @@ com.sun.star.comp.Writer.XmlFilterAdaptor - XHTML 1.1 + XHTML 1.1 [Writer2xhtml] EXPORT ALIEN 3RDPARTYFILTER @@ -96,7 +96,7 @@ com.sun.star.comp.Writer.XmlFilterAdaptor - XHTML 1.1 + MathML 2.0 + XHTML 1.1 + MathML 2.0 [Writer2xhtml] EXPORT ALIEN 3RDPARTYFILTER @@ -110,7 +110,7 @@ com.sun.star.comp.Writer.XmlFilterAdaptor - EPUB + EPUB [Writer2xhtml] EXPORT ALIEN 3RDPARTYFILTER diff --git a/source/readme-source.txt b/source/readme-source.txt index 860ab90..9c9e0ff 100644 --- a/source/readme-source.txt +++ b/source/readme-source.txt @@ -13,7 +13,7 @@ Overview The source of Writer2LaTeX consists of three major parts: * A general purpose java library for converting OpenDocument files into LaTeX, - BibTeX, xhtml, xhtml+MathML and EPUB + BibTeX, XHTML, XHTML+MathML, HTML5 and EPUB This is to be found in the packages writer2latex.* and should only be used through the provided api writer2latex.api.* * A command line utility writer2latex.Application @@ -21,20 +21,12 @@ The source of Writer2LaTeX consists of three major parts: These are to be found in the packages org.openoffice.da.comp.* Currently parts of the source for Writer2LaTeX are somewhat messy and -undocumented. This situation is improving from time to time :-) +undocumented. This situation tends to improve over time :-) Third-party software -------------------- -From OpenOffice.org: - -Writer2LaTeX includes some classes from the OpenOffice.org project: -writer2latex.xmerge.* contains some classes which are part of the xmerge -project within OOo (some of the classes are slightly modified) -See copyright notices within the source files - - From JSON.org: The classes org.json.* are copyright (c) 2002 JSON.org and is used subject to the following notice @@ -71,9 +63,10 @@ To make these files available for the compiler, edit the file build.xml as follows: The lines - - -should be modified to the directories where your OOo installation keeps these files + + +should be modified to the directories where your LO/AOO installation keeps these files +In some cases your need to install the office development kit as well To build, open a command shell, navigate to the source directory and type