77 OString sFilename( pFilename );
104 fprintf( stderr,
"Error: Could not open file %s\n",
153 OString rToken( pToken );
158 if ( sNewGID !=
sGID ) {
193 sGID = OString(
"dispname");
229 sGID = OString(
"extdesc");
259 const OString sSearch{ OString::Concat(
" ") + rAttribute +
"=" };
260 OString sTmp{ rToken.replace(
'\t',
' ') };
261 sal_Int32
nPos = sTmp.indexOf( sSearch );
266 return sTmp.getToken(1,
'"',
nPos);
279 const OString &rOutputFile, OString _sFilePath )
280 : sPath(
std::move( _sFilePath ))
285 Error(
"Unable to open output file: " + rOutputFile );
297 const OString &rOpenTag,
300 const OString sDescFileName{
sInputFileName.replaceAll(
"description.xml", OString())
302 std::ifstream file (sDescFileName.getStr(), std::ios::in|std::ios::binary|std::ios::ate);
303 if (file.is_open()) {
304 int size =
static_cast<int>(file.tellg());
305 std::unique_ptr<char[]> memblock(
new char [
size+1]);
306 file.seekg (0, std::ios::beg);
307 file.read (memblock.get(),
size);
309 memblock[
size] =
'\0';
310 rText = OString(memblock.get());
317 const OString &rOpenTag,
335 OString sAct =
pResData->sText[
"en-US"];
337 if( !sAct.isEmpty() )
340 pResData->sGId, OString(), OString(), sAct );
349 const OString &rMergeSource,
const OString &rOutputFile,
351 : sFilename(
std::move( _sFilename ))
353 if (!rMergeSource.isEmpty() &&
sLanguage.equalsIgnoreAsciiCase(
"ALL"))
362 rOutputFile.getStr(), std::ios_base::out | std::ios_base::trunc);
364 Error(
"Unable to open output file: " + rOutputFile );
374 const OString &rOpenTag,
382 OString sDescFilename =
GetAttribute ( rOpenTag,
"xlink:href" );
386 if ( !sCur.equalsIgnoreAsciiCase(
"en-US") &&
387 ( pEntrys->
GetText( sText, sCur,
true )) &&
390 OString sAdditionalLine{
"\n " + rOpenTag };
392 OString sReplace( sSearch );
396 sAdditionalLine = sAdditionalLine.replaceFirst(
399 sSearch = OString(
"xlink:href=\"");
402 const OString sLocDescFilename = sDescFilename.replaceFirst(
"en-US", sCur);
404 sSearch += sDescFilename;
405 sReplace += sLocDescFilename;
406 sAdditionalLine = sAdditionalLine.replaceFirst(
409 Output( sAdditionalLine );
415 <<
" does not contain any /\n";
418 OString sOutputDescFile(
420 std::ofstream file(sOutputDescFile.getStr());
421 if (file.is_open()) {
426 <<
"Error: cannot write "
427 << sOutputDescFile <<
'\n';
449 if (!rOutput.isEmpty())
454 const OString &rOpenTag,
455 const OString &rCloseTag )
466 if (!sCur.equalsIgnoreAsciiCase(
"en-US") &&
467 ( pEntrys->
GetText( sContent, sCur,
true )) &&
468 !sContent.isEmpty() &&
471 const OString& sText( sContent );
472 OString sAdditionalLine{
"\n " + rOpenTag };
474 OString sReplace( sSearch );
479 sAdditionalLine = sAdditionalLine.replaceFirst(
480 sSearch, sReplace) + sText + rCloseTag;
482 Output( sAdditionalLine );
void yyerror(const char *s)
Purpose: holds information of data to merge, read from PO file.
Purpose: holds information of data to merge.
bool GetText(OString &rReturn, const OString &nLangIndex, bool bDel=false)
void open(const OString &rFileName, OpenMode aMode=TRUNC)
Purpose: holds mandatory data to export a single res.
Export strings from *.xrm and description.xml files.
XRMResExport(const OString &rOutputFile, OString sFilePath)
void WorkOnDesc(const OString &rOpenTag, OString &rText) override
void EndOfText(const OString &rOpenTag, const OString &rCloseTag) override
void Output(const OString &rOutput) override
std::unique_ptr< ResData > pResData
void WorkOnText(const OString &rOpenTag, OString &rText) override
virtual ~XRMResExport() override
Merge strings to *.xrm and description.xml files.
void Output(const OString &rOutput) override
std::vector< OString > aLanguages
void WorkOnDesc(const OString &rOpenTag, OString &rText) override
std::unique_ptr< MergeDataFile > pMergeDataFile
std::ofstream pOutputStream
void WorkOnText(const OString &rOpenTag, OString &rText) override
void EndOfText(const OString &rOpenTag, const OString &rCloseTag) override
virtual ~XRMResMerge() override
XRMResMerge(const OString &rMergeSource, const OString &rOutputFile, OString sFilename)
std::unique_ptr< ResData > pResData
Parser for *.xrm and description.xml files.
virtual void EndOfText(const OString &rOpenTag, const OString &rCloseTag)=0
virtual void WorkOnDesc(const OString &rOpenTag, OString &rText)=0
static void Error(const OString &rError)
const OString & GetGID() const
static OString GetAttribute(const OString &rToken, std::string_view rAttribute)
virtual void WorkOnText(const OString &rOpenTag, OString &rText)=0
virtual void Output(const OString &rOutput)=0
void Execute(int nToken, char *pToken)
void writeUsage(const OString &rName, const OString &rFileType)
Write out a help about usage.
void writePoEntry(const OString &rExecutable, PoOfstream &rPoStream, const OString &rSourceFile, std::string_view rResType, const OString &rGroupId, const OString &rLocalId, const OString &rHelpText, const OString &rText, const PoEntry::TYPE eType)
Write out a PoEntry with attention to exceptions.
bool handleArguments(int argc, char *argv[], HandledArgs &o_aHandledArgs)
Handle command line parameters.
bool isWellFormedXML(std::string_view text)
Check whether text is a valid XML expression.
Result type of handleArguments()
#define DESC_DISPLAY_NAME_END
#define DESC_EXTENSION_DESCRIPTION_END
#define DESC_EXTENSION_DESCRIPTION_SRC
#define DESC_EXTENSION_DESCRIPTION_START
#define DESC_DISPLAY_NAME_START
static OString sInputFileName
static OString sLangAttribute
int InitXrmExport(const char *pFilename)
static OString sResourceType
int WorkOnTokenSet(int nTyp, char *pTokenText)
static OString sOutputFile
static XRMResParser * pParser
static bool bExtensionDescription
const char * getFilename()
bool GetOutputFile(int argc, char *argv[])