/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * 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/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if OSL_DEBUG_LEVEL > 2 #include #define HCDBG(foo) do { if (true) foo; } while(false) #else #define HCDBG(foo) do { } while(false) #endif namespace fs { enum convert { native }; class path { public: OUString data; public: path() {} path(const std::string &in, convert) { OUString sWorkingDir; osl_getProcessWorkingDir(&sWorkingDir.pData); OUString ustrSystemPath(OStringToOUString(in, FileNameEnc())); osl::File::getFileURLFromSystemPath(ustrSystemPath, data); (void)osl::File::getAbsoluteFileURL(sWorkingDir, data, data); } path(const std::string &FileURL) { data = OStringToOUString(FileURL, FileNameEnc()); } std::string native_file_string() const { OUString ustrSystemPath; osl::File::getSystemPathFromFileURL(data, ustrSystemPath); OString tmp(OUStringToOString(ustrSystemPath, FileNameEnc())); HCDBG(std::cerr << "native_file_string is " << tmp.getStr() << std::endl); return std::string(tmp); } #ifdef _WIN32 std::wstring native_file_string_w() const { OUString ustrSystemPath; osl::File::getSystemPathFromFileURL(data, ustrSystemPath); return std::wstring(o3tl::toW(ustrSystemPath.getStr())); } #endif std::string toUTF8() const { OString tmp(OUStringToOString(data, RTL_TEXTENCODING_UTF8)); return std::string(tmp); } bool empty() const { return data.isEmpty(); } path operator/(const std::string &in) const { path ret(*this); HCDBG(std::cerr << "orig was " << OUStringToOString(ret.data, RTL_TEXTENCODING_UTF8).getStr() << std::endl); OUString ustrSystemPath(OStringToOUString(in, FileNameEnc())); ret.data += "/" + ustrSystemPath; HCDBG(std::cerr << "final is " << OUStringToOString(ret.data, RTL_TEXTENCODING_UTF8).getStr() << std::endl); return ret; } void append(const char *in) { OUString ustrSystemPath(OStringToOUString(in, FileNameEnc())); data += ustrSystemPath; } void append(const std::string &in) { append(in.c_str()); } private: #ifdef _WIN32 // On Windows, libxslt and libxml use UTF-8 path strings static constexpr rtl_TextEncoding FileNameEnc() { return RTL_TEXTENCODING_UTF8; } #else static rtl_TextEncoding FileNameEnc() { return osl_getThreadTextEncoding(); } #endif }; void create_directory(const fs::path& indexDirName); void copy(const fs::path &src, const fs::path &dest); } typedef std::unordered_map Stringtable; typedef std::deque LinkedList; typedef std::unordered_map Hashtable; class StreamTable { public: std::string document_path; std::string document_module; std::string document_title; std::unique_ptr< std::vector > appl_hidlist; std::unique_ptr appl_keywords; std::unique_ptr appl_helptexts; xmlDocPtr appl_doc; StreamTable() : appl_doc(nullptr) {} void dropappl() { appl_hidlist.reset(); appl_keywords.reset(); appl_helptexts.reset(); if (appl_doc) xmlFreeDoc(appl_doc); } ~StreamTable() { dropappl(); } }; struct HelpProcessingException { HelpProcessingErrorClass m_eErrorClass; std::string m_aErrorMsg; std::string m_aXMLParsingFile; int m_nXMLParsingLine; HelpProcessingException( HelpProcessingErrorClass eErrorClass, std::string aErrorMsg ) : m_eErrorClass( eErrorClass ) , m_aErrorMsg(std::move( aErrorMsg )) , m_nXMLParsingLine( 0 ) {} HelpProcessingException( std::string aErrorMsg, std::string aXMLParsingFile, int nXMLParsingLine ) : m_eErrorClass( HelpProcessingErrorClass::XmlParsing ) , m_aErrorMsg(std::move( aErrorMsg )) , m_aXMLParsingFile(std::move( aXMLParsingFile )) , m_nXMLParsingLine( nXMLParsingLine ) {} }; class HelpCompiler { public: HelpCompiler(StreamTable &streamTable, fs::path in_inputFile, fs::path in_src, fs::path in_zipdir, fs::path in_resCompactStylesheet, fs::path in_resEmbStylesheet, std::string in_module, std::string in_lang, bool in_bExtensionMode); /// @throws HelpProcessingException /// @throws BasicCodeTagger::TaggerException void compile(); private: xmlDocPtr getSourceDocument(const fs::path &filePath); static 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; }; inline char tocharlower(char c) { return static_cast( rtl::toAsciiLowerCase(static_cast(c))); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ion> LibreOffice 核心代码仓库文档基金会
summaryrefslogtreecommitdiff
AgeCommit message (Expand)Author
2018-04-30ofz#8095 avoid recurse to deathCaolán McNamara
2018-03-25ofz#7109 infinite regressCaolán McNamara
2018-03-21ofz#7043 already registeredCaolán McNamara
2018-02-12ofz#6208 Indirect-leakCaolán McNamara
2017-03-14ofz#866 crash in LwpFormulaInfo::ReadArgumentsCaolán McNamara
2017-03-02avoid recursive register styleCaolán McNamara
2016-05-09fftester: subtable is a subtable of itselfCaolán McNamara
2016-05-08fftester: fail on double parse of the same tableCaolán McNamara
2016-05-05fftester: double use of XFTable, ref this upCaolán McNamara
2016-04-09pCont can be nullCaolán McNamara
2016-04-08foundry may be nullCaolán McNamara
2016-04-04currentlayout may be nullCaolán McNamara
2016-04-04hold bullet para by referenceCaolán McNamara
2016-04-03subtable corruption is possibleCaolán McNamara
2016-03-15recurse protection for XFConvertCaolán McNamara
2016-03-11tweat ExtMargins with same recurse protection as MarginsCaolán McNamara
2016-03-10Extract Directories from BootstrapFixtureBaseStephan Bergmann
2016-03-08avoid infinite regress in busted documentsCaolán McNamara
2016-03-07lwp: fix infinite recurseCaolán McNamara
2016-03-07improve defaultparams lopluginNoel Grandin
2015-11-04use uno::Reference::set method instead of assignmentNoel Grandin
2015-10-12Replace "SAL_OVERRIDE" with "override" in LIBO_INTERNAL_ONLY codeStephan Bergmann
2015-03-19convert SFX_FILTER_ constants to enum classNoel Grandin
2015-03-18create new 'enum class' SotClipboardFormatId to unify typesNoel Grandin
2014-03-26First batch of adding SAL_OVERRRIDE to overriding function declarationsStephan Bergmann