fdo#41737 syntax highlighting of Basic code examples in offline help
Change-Id: I7dc5b189e98a0351bac0eab28c1161b5893f5ef1
This commit is contained in:
parent
fb1f3db03d
commit
67b8c0339e
@ -34,7 +34,6 @@ class L10N_DLLPUBLIC BasicCodeTagger
|
|||||||
BasicCodeTagger( xmlDocPtr rootDoc );
|
BasicCodeTagger( xmlDocPtr rootDoc );
|
||||||
~BasicCodeTagger();
|
~BasicCodeTagger();
|
||||||
void tagBasicCodes();
|
void tagBasicCodes();
|
||||||
void saveTreeToFile( const std::string& filePath, const std::string& encoding );
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//================LibXmlTreeWalker===========================================================
|
//================LibXmlTreeWalker===========================================================
|
||||||
|
@ -245,7 +245,8 @@ public:
|
|||||||
const std::string &entryName, const Hashtable &bytesToAdd);
|
const std::string &entryName, const Hashtable &bytesToAdd);
|
||||||
private:
|
private:
|
||||||
xmlDocPtr getSourceDocument(const fs::path &filePath);
|
xmlDocPtr getSourceDocument(const fs::path &filePath);
|
||||||
void sourceDocumentPreWorks( xmlDocPtr doc , const fs::path &filePath);
|
void tagBasicCodeExamples(xmlDocPtr doc);
|
||||||
|
void saveXhpForJar(xmlDocPtr doc, const fs::path &filePath);
|
||||||
xmlNodePtr clone(xmlNodePtr node, const std::string& appl);
|
xmlNodePtr clone(xmlNodePtr node, const std::string& appl);
|
||||||
StreamTable &streamTable;
|
StreamTable &streamTable;
|
||||||
const fs::path inputFile, src, zipdir;
|
const fs::path inputFile, src, zipdir;
|
||||||
|
@ -137,15 +137,9 @@ void BasicCodeTagger::tagParagraph( xmlNodePtr paragraph )
|
|||||||
}
|
}
|
||||||
|
|
||||||
//3. create new paragraph content
|
//3. create new paragraph content
|
||||||
String strLine(
|
OUString strLine( reinterpret_cast<const sal_Char*>(codeSnippet),
|
||||||
OUString(
|
strlen(reinterpret_cast<const char*>(codeSnippet)),
|
||||||
reinterpret_cast<const sal_Char*>(codeSnippet),
|
RTL_TEXTENCODING_UTF8 );
|
||||||
strlen(
|
|
||||||
reinterpret_cast<const char*>(codeSnippet)
|
|
||||||
),
|
|
||||||
RTL_TEXTENCODING_UTF8
|
|
||||||
)
|
|
||||||
) ;
|
|
||||||
m_Highlighter.notifyChange ( 0, 0, &strLine, 1 );
|
m_Highlighter.notifyChange ( 0, 0, &strLine, 1 );
|
||||||
HighlightPortions portions;
|
HighlightPortions portions;
|
||||||
m_Highlighter.getHighlightPortions( 0, strLine, portions );
|
m_Highlighter.getHighlightPortions( 0, strLine, portions );
|
||||||
@ -155,7 +149,7 @@ void BasicCodeTagger::tagParagraph( xmlNodePtr paragraph )
|
|||||||
for ( size_t i=0; i<portions.size(); i++ )
|
for ( size_t i=0; i<portions.size(); i++ )
|
||||||
{
|
{
|
||||||
HighlightPortion& r = portions[i];
|
HighlightPortion& r = portions[i];
|
||||||
subStr = xmlStrsub( codeSnippet, r.nBegin, r.nEnd-r.nBegin );
|
subStr = (xmlChar*) OUStringToOString( strLine.copy( r.nBegin, r.nEnd-r.nBegin ), RTL_TEXTENCODING_UTF8 ).getStr();
|
||||||
text = xmlNewText( subStr );
|
text = xmlNewText( subStr );
|
||||||
if ( r.tokenType != TT_WHITESPACE )
|
if ( r.tokenType != TT_WHITESPACE )
|
||||||
{
|
{
|
||||||
@ -185,7 +179,7 @@ void BasicCodeTagger::tagBasicCodes()
|
|||||||
{
|
{
|
||||||
getBasicCodeContainerNodes();
|
getBasicCodeContainerNodes();
|
||||||
}
|
}
|
||||||
catch (TaggerException ex)
|
catch (TaggerException &ex)
|
||||||
{
|
{
|
||||||
std::cout << "BasCodeTagger error occured. Error code:" << ex << std::endl;
|
std::cout << "BasCodeTagger error occured. Error code:" << ex << std::endl;
|
||||||
}
|
}
|
||||||
@ -229,7 +223,7 @@ xmlChar* BasicCodeTagger::getTypeString( TokenTypes tokenType )
|
|||||||
str = "operator";
|
str = "operator";
|
||||||
break;
|
break;
|
||||||
case TT_KEYWORDS :
|
case TT_KEYWORDS :
|
||||||
str = "keywords";
|
str = "keyword";
|
||||||
break;
|
break;
|
||||||
case TT_PARAMETER :
|
case TT_PARAMETER :
|
||||||
str = "parameter";
|
str = "parameter";
|
||||||
@ -240,12 +234,3 @@ xmlChar* BasicCodeTagger::getTypeString( TokenTypes tokenType )
|
|||||||
}
|
}
|
||||||
return xmlCharStrdup( str );
|
return xmlCharStrdup( str );
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Saves the current xml DOM to file with the provided libxml2 encoding string in an unformatted way.
|
|
||||||
void BasicCodeTagger::saveTreeToFile( const std::string& filePath, const std::string& encoding )
|
|
||||||
{
|
|
||||||
//saveDocument
|
|
||||||
int ret = xmlSaveFormatFileEnc( filePath.c_str(), m_pDocument, encoding.c_str(), 0 );
|
|
||||||
if ( ret == -1 )
|
|
||||||
throw FILE_WRITING;
|
|
||||||
}
|
|
||||||
|
@ -54,41 +54,50 @@ HelpCompiler::HelpCompiler(StreamTable &in_streamTable, const fs::path &in_input
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpCompiler::sourceDocumentPreWorks( xmlDocPtr doc, const fs::path &filePath )
|
void HelpCompiler::tagBasicCodeExamples( xmlDocPtr doc )
|
||||||
{
|
{
|
||||||
if ( doc )
|
try
|
||||||
{
|
{
|
||||||
if ( module == "sbasic" )
|
BasicCodeTagger bct( doc );
|
||||||
{
|
bct.tagBasicCodes();
|
||||||
try
|
}
|
||||||
{
|
catch ( BasicCodeTagger::TaggerException &ex )
|
||||||
BasicCodeTagger bct( doc );
|
{
|
||||||
bct.tagBasicCodes();
|
if ( ex != BasicCodeTagger::EMPTY_DOCUMENT )
|
||||||
}
|
throw;
|
||||||
catch ( BasicCodeTagger::TaggerException ex )
|
|
||||||
{
|
|
||||||
if ( ex != BasicCodeTagger::EMPTY_DOCUMENT )
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
//save document in ziptmp<modul>_<lang>/text directory
|
|
||||||
//1. construct new path
|
|
||||||
const std::string& pth = filePath.native_file_string();
|
|
||||||
std::string sourceNativeXhpPath = pth.substr( pth.rfind( lang+"/text/" ) ).substr( lang.length() );
|
|
||||||
std::string xhpFileName = sourceNativeXhpPath.substr( sourceNativeXhpPath.rfind( '/' ) + 1 );
|
|
||||||
sourceNativeXhpPath = sourceNativeXhpPath.substr( 0, sourceNativeXhpPath.rfind( '/' ) );
|
|
||||||
//2. save xml doc with the new path
|
|
||||||
// -create directory hierachy
|
|
||||||
fs::create_directory( fs::path( zipdir.native_file_string() + sourceNativeXhpPath, fs::native ) );
|
|
||||||
// -save document
|
|
||||||
if ( -1 == xmlSaveFormatFileEnc( (zipdir.native_file_string() + sourceNativeXhpPath + '/' + xhpFileName).c_str(), doc, "utf-8", 0 ) )
|
|
||||||
throw BasicCodeTagger::FILE_WRITING;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HelpCompiler::saveXhpForJar( xmlDocPtr doc, const fs::path &filePath )
|
||||||
|
{
|
||||||
|
//save processed xhp document in ziptmp<module>_<lang>/text directory
|
||||||
|
#ifdef WNT
|
||||||
|
std::string pathSep = "\\";
|
||||||
|
#else
|
||||||
|
std::string pathSep = "/";
|
||||||
|
#endif
|
||||||
|
const std::string& sourceXhpPath = filePath.native_file_string();
|
||||||
|
std::string zipdirPath = zipdir.native_file_string();
|
||||||
|
std::string jarXhpPath = sourceXhpPath.substr( sourceXhpPath.rfind( lang + pathSep + "text" + pathSep ) ).substr( lang.length() );
|
||||||
|
std::string xhpFileName = jarXhpPath.substr( jarXhpPath.rfind( pathSep ) + 1 );
|
||||||
|
jarXhpPath = jarXhpPath.substr( 0, jarXhpPath.rfind( pathSep ) );
|
||||||
|
if ( !jarXhpPath.compare( 1, 11, "text" + pathSep + "sbasic" ) )
|
||||||
|
{
|
||||||
|
tagBasicCodeExamples( doc );
|
||||||
|
}
|
||||||
|
if ( !jarXhpPath.compare( 1, 11, "text" + pathSep + "shared" ) )
|
||||||
|
{
|
||||||
|
size_t pos = zipdirPath.find( "ziptmp" ) + 6;
|
||||||
|
zipdirPath.replace( pos, module.length(), "shared" );
|
||||||
|
}
|
||||||
|
fs::create_directory( fs::path( zipdirPath + jarXhpPath, fs::native ) );
|
||||||
|
if ( -1 == xmlSaveFormatFileEnc( (zipdirPath + jarXhpPath + pathSep + xhpFileName).c_str(), doc, "utf-8", 0 ) )
|
||||||
|
std::cerr << "Error saving file to " << (zipdirPath + jarXhpPath + pathSep + xhpFileName).c_str() << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
xmlDocPtr HelpCompiler::getSourceDocument(const fs::path &filePath)
|
xmlDocPtr HelpCompiler::getSourceDocument(const fs::path &filePath)
|
||||||
{
|
{
|
||||||
static const char *params[4 + 1];
|
|
||||||
static xsltStylesheetPtr cur = NULL;
|
static xsltStylesheetPtr cur = NULL;
|
||||||
|
|
||||||
xmlDocPtr res;
|
xmlDocPtr res;
|
||||||
@ -99,22 +108,19 @@ xmlDocPtr HelpCompiler::getSourceDocument(const fs::path &filePath)
|
|||||||
impl_sleep( 3 );
|
impl_sleep( 3 );
|
||||||
res = xmlParseFile(filePath.native_file_string().c_str());
|
res = xmlParseFile(filePath.native_file_string().c_str());
|
||||||
}
|
}
|
||||||
sourceDocumentPreWorks( res, filePath );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
static const char *params[2 + 1];
|
||||||
if (!cur)
|
if (!cur)
|
||||||
{
|
{
|
||||||
static std::string fsroot('\'' + src.toUTF8() + '\'');
|
static std::string fsroot('\'' + src.toUTF8() + '\'');
|
||||||
static std::string esclang('\'' + lang + '\'');
|
|
||||||
|
|
||||||
xmlSubstituteEntitiesDefault(1);
|
xmlSubstituteEntitiesDefault(1);
|
||||||
xmlLoadExtDtdDefaultValue = 1;
|
xmlLoadExtDtdDefaultValue = 1;
|
||||||
cur = xsltParseStylesheetFile((const xmlChar *)resEmbStylesheet.native_file_string().c_str());
|
cur = xsltParseStylesheetFile((const xmlChar *)resEmbStylesheet.native_file_string().c_str());
|
||||||
|
|
||||||
int nbparams = 0;
|
int nbparams = 0;
|
||||||
params[nbparams++] = "Language";
|
|
||||||
params[nbparams++] = esclang.c_str();
|
|
||||||
params[nbparams++] = "fsroot";
|
params[nbparams++] = "fsroot";
|
||||||
params[nbparams++] = fsroot.c_str();
|
params[nbparams++] = fsroot.c_str();
|
||||||
params[nbparams] = NULL;
|
params[nbparams] = NULL;
|
||||||
@ -125,8 +131,8 @@ xmlDocPtr HelpCompiler::getSourceDocument(const fs::path &filePath)
|
|||||||
impl_sleep( 3 );
|
impl_sleep( 3 );
|
||||||
doc = xmlParseFile(filePath.native_file_string().c_str());
|
doc = xmlParseFile(filePath.native_file_string().c_str());
|
||||||
}
|
}
|
||||||
sourceDocumentPreWorks( doc, filePath );
|
|
||||||
//???res = xmlParseFile(filePath.native_file_string().c_str());
|
saveXhpForJar( doc, filePath );
|
||||||
|
|
||||||
res = xsltApplyStylesheet(cur, doc, params);
|
res = xsltApplyStylesheet(cur, doc, params);
|
||||||
xmlFreeDoc(doc);
|
xmlFreeDoc(doc);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user