[Libreoffice-commits] core.git: helpcompiler/inc helpcompiler/source xmlhelp/Package_xsl.mk xmlhelp/util

Andras Timar atimar at suse.com
Wed Feb 13 07:38:03 PST 2013


 helpcompiler/inc/HelpCompiler.hxx    |    3 ++
 helpcompiler/inc/HelpLinker.hxx      |    1 
 helpcompiler/source/HelpCompiler.cxx |   29 +++++++++++++++++----
 helpcompiler/source/HelpLinker.cxx   |   14 +++++++++-
 xmlhelp/Package_xsl.mk               |    1 
 xmlhelp/util/compact.xsl             |   47 +++++++++++++++++++++++++++++++++++
 6 files changed, 89 insertions(+), 6 deletions(-)

New commits:
commit a775aa57f7b1d5f0f69b8faa5277d1914455ba38
Author: Andras Timar <atimar at suse.com>
Date:   Wed Feb 13 16:28:16 2013 +0100

    compact help xml files with xslt which removes the cruft
    
    Change-Id: Iee923174169d6ba9961a9cee14115c9a4bf7ba09

diff --git a/helpcompiler/inc/HelpCompiler.hxx b/helpcompiler/inc/HelpCompiler.hxx
index 8a5dda1..0ee2801 100644
--- a/helpcompiler/inc/HelpCompiler.hxx
+++ b/helpcompiler/inc/HelpCompiler.hxx
@@ -230,6 +230,7 @@ public:
                 const fs::path &in_inputFile,
                 const fs::path &in_src,
                 const fs::path &in_zipdir,
+                const fs::path &in_resCompactStylesheet,
                 const fs::path &in_resEmbStylesheet,
                 const std::string &in_module,
                 const std::string &in_lang,
@@ -246,11 +247,13 @@ public:
 private:
     xmlDocPtr getSourceDocument(const fs::path &filePath);
     void tagBasicCodeExamples(xmlDocPtr doc);
+    xmlDocPtr compactXhpForJar(xmlDocPtr doc);
     void saveXhpForJar(xmlDocPtr doc, const fs::path &filePath);
     xmlNodePtr clone(xmlNodePtr node, const std::string& appl);
     StreamTable &streamTable;
     const fs::path inputFile, src, zipdir;
     const std::string module, lang;
+    const fs::path resCompactStylesheet;
     const fs::path resEmbStylesheet;
     bool bExtensionMode;
     std::string gui;
diff --git a/helpcompiler/inc/HelpLinker.hxx b/helpcompiler/inc/HelpLinker.hxx
index 57e21a5..5e2e88d 100644
--- a/helpcompiler/inc/HelpLinker.hxx
+++ b/helpcompiler/inc/HelpLinker.hxx
@@ -66,6 +66,7 @@ private:
     Stringtable additionalFiles;
     HashSet helpFiles;
     fs::path sourceRoot;
+    fs::path compactStylesheet;
     fs::path embeddStylesheet;
     fs::path idxCaptionStylesheet;
     fs::path idxContentStylesheet;
diff --git a/helpcompiler/source/HelpCompiler.cxx b/helpcompiler/source/HelpCompiler.cxx
index 3983f16..eedc7fd 100644
--- a/helpcompiler/source/HelpCompiler.cxx
+++ b/helpcompiler/source/HelpCompiler.cxx
@@ -38,11 +38,12 @@ static void impl_sleep( sal_uInt32 nSec )
     osl::Thread::wait( aTime );
 }
 HelpCompiler::HelpCompiler(StreamTable &in_streamTable, const fs::path &in_inputFile,
-    const fs::path &in_src, const fs::path &in_zipdir, const fs::path &in_resEmbStylesheet,
-    const std::string &in_module, const std::string &in_lang, bool in_bExtensionMode)
+    const fs::path &in_src, const fs::path &in_zipdir, const fs::path &in_resCompactStylesheet,
+    const fs::path &in_resEmbStylesheet, const std::string &in_module, const std::string &in_lang,
+    bool in_bExtensionMode)
     : streamTable(in_streamTable), inputFile(in_inputFile),
-    src(in_src), zipdir(in_zipdir), module(in_module), lang(in_lang), resEmbStylesheet(in_resEmbStylesheet),
-    bExtensionMode( in_bExtensionMode )
+    src(in_src), zipdir(in_zipdir), module(in_module), lang(in_lang), resCompactStylesheet(in_resCompactStylesheet),
+    resEmbStylesheet(in_resEmbStylesheet), bExtensionMode( in_bExtensionMode )
 {
     xmlKeepBlanksDefaultValue = 0;
     char* guitmp = getenv("GUI");
@@ -68,6 +69,22 @@ void HelpCompiler::tagBasicCodeExamples( xmlDocPtr doc )
     }
 }
 
+xmlDocPtr HelpCompiler::compactXhpForJar( xmlDocPtr doc )
+{
+    static xsltStylesheetPtr compact = NULL;
+    static const char *params[2 + 1];
+    params[0] = NULL;
+    xmlDocPtr compacted;
+
+    if (!compact)
+    {
+        compact = xsltParseStylesheetFile((const xmlChar *)resCompactStylesheet.native_file_string().c_str());
+    }
+
+    compacted = xsltApplyStylesheet(compact, doc, params);
+    return compacted;
+}
+
 void HelpCompiler::saveXhpForJar( xmlDocPtr doc, const fs::path &filePath )
 {
     //save processed xhp document in ziptmp<module>_<lang>/text directory
@@ -90,9 +107,11 @@ void HelpCompiler::saveXhpForJar( xmlDocPtr doc, const fs::path &filePath )
         size_t pos = zipdirPath.find( "ziptmp" ) + 6;
         zipdirPath.replace( pos, module.length(), "shared" );
     }
+    xmlDocPtr compacted = compactXhpForJar( doc );
     fs::create_directory( fs::path( zipdirPath + jarXhpPath, fs::native ) );
-    if ( -1 == xmlSaveFormatFileEnc( (zipdirPath + jarXhpPath + pathSep + xhpFileName).c_str(), doc, "utf-8", 0 ) )
+    if ( -1 == xmlSaveFormatFileEnc( (zipdirPath + jarXhpPath + pathSep + xhpFileName).c_str(), compacted, "utf-8", 0 ) )
         std::cerr << "Error saving file to " << (zipdirPath + jarXhpPath + pathSep + xhpFileName).c_str() << std::endl;
+    xmlFreeDoc(compacted);
 }
 
 
diff --git a/helpcompiler/source/HelpLinker.cxx b/helpcompiler/source/HelpLinker.cxx
index 4bbe2b6..6d00f67 100644
--- a/helpcompiler/source/HelpLinker.cxx
+++ b/helpcompiler/source/HelpLinker.cxx
@@ -378,7 +378,7 @@ void HelpLinker::link() throw( HelpProcessingException )
         }
 
         HelpCompiler hc( streamTable, xhpFile, langsourceRoot, zipdir,
-            embeddStylesheet, module, lang, bExtensionMode );
+            compactStylesheet, embeddStylesheet, module, lang, bExtensionMode );
 
         HCDBG(std::cerr << "before compile of " << xhpFileName << std::endl);
         bool success = hc.compile();
@@ -608,6 +608,18 @@ void HelpLinker::main( std::vector<std::string> &args,
             bSrcOption = true;
             sourceRoot = fs::path(args[i], fs::native);
         }
+        else if (args[i].compare("-compact") == 0)
+        {
+            ++i;
+            if (i >= args.size())
+            {
+                std::stringstream aStrStream;
+                aStrStream << "compactStylesheet missing" << std::endl;
+                throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+            }
+
+            compactStylesheet = fs::path(args[i], fs::native);
+        }
         else if (args[i].compare("-sty") == 0)
         {
             ++i;
diff --git a/xmlhelp/Package_xsl.mk b/xmlhelp/Package_xsl.mk
index 6a11a46..9dc400b 100644
--- a/xmlhelp/Package_xsl.mk
+++ b/xmlhelp/Package_xsl.mk
@@ -27,6 +27,7 @@
 
 $(eval $(call gb_Package_Package,xmlhelp_xsl,$(SRCDIR)/xmlhelp/util))
 
+$(eval $(call gb_Package_add_file,xmlhelp_xsl,bin/compact.xsl,compact.xsl))
 $(eval $(call gb_Package_add_file,xmlhelp_xsl,bin/embed.xsl,embed.xsl))
 $(eval $(call gb_Package_add_file,xmlhelp_xsl,bin/idxcaption.xsl,idxcaption.xsl))
 $(eval $(call gb_Package_add_file,xmlhelp_xsl,bin/idxcontent.xsl,idxcontent.xsl))
diff --git a/xmlhelp/util/compact.xsl b/xmlhelp/util/compact.xsl
new file mode 100644
index 0000000..457c955
--- /dev/null
+++ b/xmlhelp/util/compact.xsl
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+-->
+
+<!-- Remove unwanted attributes or/and nodes -->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+    <xsl:output method="xml" encoding="UTF-8"/>
+
+    <xsl:strip-space elements="*"/> 
+    <xsl:preserve-space elements="paragraph"/> 
+
+    <!-- Copy everything -->
+    <xsl:template match="@*|node()|text()">
+        <xsl:copy>
+            <xsl:apply-templates select="@*[normalize-space()]|node()|text()"/>
+        </xsl:copy>
+    </xsl:template>
+
+    <!-- To remove attributes or nodes, 
+         simply write a matching template that doesn't do anything. 
+         Therefore, it is removed -->
+    <xsl:template match="@localize"/>
+    <xsl:template match="@xml-lang"/>
+    <xsl:template match="alt"/>
+    <xsl:template match="bookmark_value"/>
+    <xsl:template match="comment()"/>       <!-- Remove all XML comments -->
+    <xsl:template match="comment"/>
+    <xsl:template match="history"/>
+    <xsl:template match="image/@id"/>
+    <xsl:template match="image/@width"/>
+    <xsl:template match="image/@height"/>
+    <xsl:template match="link/@name"/>
+    <xsl:template match="paragraph/@id"/>
+    <xsl:template match="paragraph/@l10n"/>
+    <xsl:template match="paragraph/@oldref"/>
+    <xsl:template match="table/@id"/>
+    <xsl:template match="title/@id"/>
+    <xsl:template match="topic/@id"/>
+    <xsl:template match="topic/@indexer"/>
+    <xsl:template match="topic/@status"/>
+
+</xsl:stylesheet>


More information about the Libreoffice-commits mailing list