summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--l10ntools/inc/tokens.h12
-rw-r--r--l10ntools/source/xrmlex.l25
-rw-r--r--l10ntools/source/xrmmerge.cxx105
3 files changed, 134 insertions, 8 deletions
diff --git a/l10ntools/inc/tokens.h b/l10ntools/inc/tokens.h
index 8898f348b4dd..0c69d0e65621 100644
--- a/l10ntools/inc/tokens.h
+++ b/l10ntools/inc/tokens.h
@@ -98,6 +98,18 @@
#define XRM_TEXT_END 508
#define XML_TEXTCHAR 600
+/*------------------------------------------------------ */
+/*------------------------------------------------------ */
+/* Tokens for parsing description.xml files */
+/*------------------------------------------------------ */
+/*------------------------------------------------------ */
+#define DESC_DISPLAY_NAME_START 700
+#define DESC_DISPLAY_NAME_END 701
+#define DESC_TEXT_START 702
+#define DESC_TEXT_END 703
+#define DESC_EXTENSION_DESCRIPTION_START 704
+#define DESC_EXTENSION_DESCRIPTION_END 705
+#define DESC_EXTENSION_DESCRIPTION_SRC 706
#endif
diff --git a/l10ntools/source/xrmlex.l b/l10ntools/source/xrmlex.l
index de5b5dfa9a37..b7dccbd3d8f5 100644
--- a/l10ntools/source/xrmlex.l
+++ b/l10ntools/source/xrmlex.l
@@ -99,8 +99,33 @@ int bText=0;
WorkOnTokenSet( XRM_TEXT_END, yytext );
}
+"<display-name>" {
+ WorkOnTokenSet( DESC_DISPLAY_NAME_START , yytext );
+}
+
+"</display-name>" {
+ WorkOnTokenSet( DESC_DISPLAY_NAME_END, yytext );
+}
+"<name "[^\>]*lang[^\>]*\> {
+ WorkOnTokenSet( DESC_TEXT_START , yytext );
+}
+
+"</name>" {
+ WorkOnTokenSet( DESC_TEXT_END, yytext );
+}
+"<extension-description>" {
+ WorkOnTokenSet( DESC_EXTENSION_DESCRIPTION_START , yytext );
+}
+
+"</extension-description>" {
+ WorkOnTokenSet( DESC_EXTENSION_DESCRIPTION_END , yytext );
+}
+
+"<src "[^\>]*lang[^\>]*\> {
+ WorkOnTokenSet( DESC_EXTENSION_DESCRIPTION_SRC , yytext );
+}
diff --git a/l10ntools/source/xrmmerge.cxx b/l10ntools/source/xrmmerge.cxx
index a17ecf2c34a6..8a0ca9881c22 100644
--- a/l10ntools/source/xrmmerge.cxx
+++ b/l10ntools/source/xrmmerge.cxx
@@ -37,6 +37,7 @@
#include "xrmmerge.hxx"
#include "tokens.h"
#include <iostream>
+#include <fstream>
#include <vector>
using namespace std;
@@ -59,12 +60,16 @@ sal_Bool bEnableExport;
sal_Bool bMergeMode;
sal_Bool bErrorLog;
sal_Bool bUTF8;
+sal_Bool bDisplayName;
+sal_Bool bExtensionDescription;
ByteString sPrj;
ByteString sPrjRoot;
ByteString sInputFileName;
ByteString sActFileName;
ByteString sOutputFile;
ByteString sMergeSrc;
+ByteString sLangAttribute;
+ByteString sResourceType;
String sUsedTempFile;
XRMResParser *pParser = NULL;
@@ -79,6 +84,8 @@ extern char *GetOutputFile( int argc, char* argv[])
bMergeMode = sal_False;
bErrorLog = sal_True;
bUTF8 = sal_True;
+ bDisplayName = sal_False;
+ bExtensionDescription = sal_False;
sPrj = "";
sPrjRoot = "";
sInputFileName = "";
@@ -296,34 +303,115 @@ int XRMResParser::Execute( int nToken, char * pToken )
switch ( nToken ) {
case XRM_TEXT_START:{
- //printf("->XRM_TEXT_START\n");
ByteString sNewLID = GetAttribute( rToken, "id" );
if ( sNewLID != sLID ) {
- //EndOfText( sCurrentOpenTag, sCurrentCloseTag );
sLID = sNewLID;
}
bText = sal_True;
sCurrentText = "";
sCurrentOpenTag = rToken;
Output( rToken );
- //printf("<-XRM_TEXT_START\n");
}
break;
case XRM_TEXT_END: {
sCurrentCloseTag = rToken;
- //printf("->XRM_TEXT_END\n");
- ByteString sLang = GetAttribute( sCurrentOpenTag, "xml:lang" );
+ sResourceType = ByteString ( "readmeitem" );
+ sLangAttribute = ByteString ( "xml:lang" );
+ ByteString sLang = GetAttribute( sCurrentOpenTag, sLangAttribute );
WorkOnText( sCurrentOpenTag, sCurrentText );
Output( sCurrentText );
EndOfText( sCurrentOpenTag, sCurrentCloseTag );
bText = sal_False;
rToken = ByteString("");
sCurrentText = ByteString("");
- //printf("<-XRM_TEXT_END");
}
break;
+ case DESC_DISPLAY_NAME_START:{
+ bDisplayName = sal_True;
+ }
+ break;
+
+ case DESC_DISPLAY_NAME_END:{
+ bDisplayName = sal_False;
+ }
+ break;
+
+ case DESC_TEXT_START:{
+ if (bDisplayName) {
+ sLID = ByteString("dispname");
+ bText = sal_True;
+ sCurrentText = "";
+ sCurrentOpenTag = rToken;
+ Output( rToken );
+ }
+ }
+ break;
+
+ case DESC_TEXT_END: {
+ if (bDisplayName) {
+ sCurrentCloseTag = rToken;
+ sResourceType = ByteString ( "description" );
+ sLangAttribute = ByteString ( "lang" );
+ ByteString sLang = GetAttribute( sCurrentOpenTag, sLangAttribute );
+ WorkOnText( sCurrentOpenTag, sCurrentText );
+ Output( sCurrentText );
+ EndOfText( sCurrentOpenTag, sCurrentCloseTag );
+ bText = sal_False;
+ rToken = ByteString("");
+ sCurrentText = ByteString("");
+ }
+ }
+ break;
+
+ case DESC_EXTENSION_DESCRIPTION_START: {
+ bExtensionDescription = sal_True;
+ }
+ break;
+
+ case DESC_EXTENSION_DESCRIPTION_END: {
+ bExtensionDescription = sal_False;
+ }
+ break;
+
+ case DESC_EXTENSION_DESCRIPTION_SRC: {
+ if (bExtensionDescription) {
+ sLID = ByteString("extdesc");
+ sResourceType = ByteString ( "description" );
+ sLangAttribute = ByteString ( "lang" );
+ sCurrentOpenTag = rToken;
+ sCurrentText = ByteString("");
+ Output( rToken );
+ DirEntry aEntry( String( sInputFileName, RTL_TEXTENCODING_ASCII_US ));
+ aEntry.ToAbs();
+ ByteString sDescFileName( aEntry.GetFull(), RTL_TEXTENCODING_ASCII_US );
+ sDescFileName.SearchAndReplaceAll( "description.xml", "" );
+ sDescFileName += GetAttribute( sCurrentOpenTag, "xlink:href" );
+ ifstream::pos_type size;
+ char * memblock;
+ ifstream file (sDescFileName.GetBuffer(), ios::in|ios::binary|ios::ate);
+ if (file.is_open()) {
+ size = file.tellg();
+ memblock = new char [size];
+ file.seekg (0, ios::beg);
+ file.read (memblock, size);
+ file.close();
+ sCurrentText = ByteString(memblock);
+ sCurrentText.SearchAndReplaceAll( "\n", "\\n" );
+ delete[] memblock;
+ }
+ ByteString sLang = GetAttribute( sCurrentOpenTag, sLangAttribute );
+ WorkOnText( sCurrentOpenTag, sCurrentText );
+ sCurrentCloseTag = rToken;
+ Output( sCurrentText );
+ EndOfText( sCurrentOpenTag, sCurrentCloseTag );
+ rToken = ByteString("");
+ sCurrentText = ByteString("");
+ }
+ }
+ break;
+
default:
if ( bText ) {
sCurrentText += rToken;
@@ -461,7 +549,7 @@ void XRMResExport::WorkOnText(
)
/*****************************************************************************/
{
- ByteString sLang( GetAttribute( rOpenTag, "xml:lang" ));
+ ByteString sLang( GetAttribute( rOpenTag, sLangAttribute ));
if ( !pResData )
{
@@ -498,7 +586,8 @@ void XRMResExport::EndOfText(
ByteString sOutput( sPrj ); sOutput += "\t";
sOutput += sPath;
sOutput += "\t0\t";
- sOutput += "readmeitem\t";
+ sOutput += sResourceType;
+ sOutput += "\t";
sOutput += pResData->sId;
// USE LID AS GID OR MERGE DON'T WORK
//sOutput += pResData->sGId;