summaryrefslogtreecommitdiff
authorzecke <zecke>2004-07-07 15:18:14 (UTC)
committer zecke <zecke>2004-07-07 15:18:14 (UTC)
commitab010081c21f097e436c54ef8786f9abdf764790 (patch) (unidiff)
tree36934a2aecd6e898c09d3414764efce0e2777915
parentd6ed7f967feb423a91a5c6ea94d54001b33bcd77 (diff)
downloadopie-ab010081c21f097e436c54ef8786f9abdf764790.zip
opie-ab010081c21f097e436c54ef8786f9abdf764790.tar.gz
opie-ab010081c21f097e436c54ef8786f9abdf764790.tar.bz2
INCLUDEPATH = FOO $$INCLUDEPATH triggered an infinte loop
backport the fix from Qt3.3 for that issue Add alternative mode to only generate one language...
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--development/translation/opie-lupdate/opie-lupdate.pro2
-rw-r--r--development/translation/shared/opie.cpp5
-rw-r--r--development/translation/shared/proparser.cpp1
3 files changed, 6 insertions, 2 deletions
diff --git a/development/translation/opie-lupdate/opie-lupdate.pro b/development/translation/opie-lupdate/opie-lupdate.pro
index ea51c8b..8360f05 100644
--- a/development/translation/opie-lupdate/opie-lupdate.pro
+++ b/development/translation/opie-lupdate/opie-lupdate.pro
@@ -1,21 +1,21 @@
1 TEMPLATE= app 1 TEMPLATE= app
2 CONFIG += qt warn_on console 2 CONFIG += qt warn_on console thread
3 HEADERS = ../shared/metatranslator.h \ 3 HEADERS = ../shared/metatranslator.h \
4 ../shared/proparser.h \ 4 ../shared/proparser.h \
5 ../shared/opie.h 5 ../shared/opie.h
6 6
7 SOURCES = fetchtr.cpp \ 7 SOURCES = fetchtr.cpp \
8 main.cpp \ 8 main.cpp \
9 merge.cpp \ 9 merge.cpp \
10 numberh.cpp \ 10 numberh.cpp \
11 sametexth.cpp \ 11 sametexth.cpp \
12 ../shared/metatranslator.cpp \ 12 ../shared/metatranslator.cpp \
13 ../shared/proparser.cpp \ 13 ../shared/proparser.cpp \
14 ../shared/opie.cpp 14 ../shared/opie.cpp
15 15
16 DEFINES += QT_INTERNAL_XML 16 DEFINES += QT_INTERNAL_XML
17 17
18 TARGET = opie-lupdate 18 TARGET = opie-lupdate
19 INCLUDEPATH+= ../shared 19 INCLUDEPATH+= ../shared
20 #DESTDIR = 20 #DESTDIR =
21 21
diff --git a/development/translation/shared/opie.cpp b/development/translation/shared/opie.cpp
index c5c72d1..c8cea42 100644
--- a/development/translation/shared/opie.cpp
+++ b/development/translation/shared/opie.cpp
@@ -1,40 +1,43 @@
1#include <stdlib.h> 1#include <stdlib.h>
2 2
3#include <qdir.h> 3#include <qdir.h>
4 4
5#include "opie.h" 5#include "opie.h"
6 6
7OPIE* OPIE::m_self = 0; 7OPIE* OPIE::m_self = 0;
8 8
9 9
10OPIE::OPIE() { 10OPIE::OPIE() {
11} 11}
12OPIE::~OPIE() { 12OPIE::~OPIE() {
13} 13}
14OPIE* OPIE::self() { 14OPIE* OPIE::self() {
15 if (!m_self ) m_self = new OPIE; 15 if (!m_self ) m_self = new OPIE;
16 return m_self; 16 return m_self;
17} 17}
18QStringList OPIE::languageList( const QString& _opieDir )const { 18QStringList OPIE::languageList( const QString& _opieDir )const {
19#if 0
20 return QStringList::split(':',QString(::getenv("OPIE_CREATE_LANGS")));
21#else
19 QString opieDi = opieDir( _opieDir ); 22 QString opieDi = opieDir( _opieDir );
20
21 QStringList langs; 23 QStringList langs;
22 QDir dir( opieDi + "/i18n/"); 24 QDir dir( opieDi + "/i18n/");
23 if (!dir.exists() ) return langs; 25 if (!dir.exists() ) return langs;
24 langs = dir.entryList( QDir::Dirs ); 26 langs = dir.entryList( QDir::Dirs );
25 27
26 langs.remove("CVS"); // hey this no language 28 langs.remove("CVS"); // hey this no language
27 langs.remove("unmaintained"); // remove this one too 29 langs.remove("unmaintained"); // remove this one too
28 langs.remove("."); 30 langs.remove(".");
29 langs.remove(".."); 31 langs.remove("..");
30 32
31 33
32 34
33 return langs; 35 return langs;
36#endif
34} 37}
35QString OPIE::opieDir( const QString& _opieDir ) const{ 38QString OPIE::opieDir( const QString& _opieDir ) const{
36 if (!_opieDir.isEmpty() ) return _opieDir; 39 if (!_opieDir.isEmpty() ) return _opieDir;
37 char* dir = ::getenv("OPIEDIR"); 40 char* dir = ::getenv("OPIEDIR");
38 if (!dir ) return QString::null; 41 if (!dir ) return QString::null;
39 return QString::fromLatin1(dir); 42 return QString::fromLatin1(dir);
40} 43}
diff --git a/development/translation/shared/proparser.cpp b/development/translation/shared/proparser.cpp
index f616c5a..bb099bb 100644
--- a/development/translation/shared/proparser.cpp
+++ b/development/translation/shared/proparser.cpp
@@ -42,133 +42,134 @@
42#endif 42#endif
43 43
44QString loadFile( const QString &fileName ) 44QString loadFile( const QString &fileName )
45{ 45{
46 QFile file( fileName ); 46 QFile file( fileName );
47 if ( !file.open(IO_ReadOnly) ) { 47 if ( !file.open(IO_ReadOnly) ) {
48 fprintf( stderr, "error: Cannot load '%s': %s\n", 48 fprintf( stderr, "error: Cannot load '%s': %s\n",
49 file.name().latin1(), 49 file.name().latin1(),
50 file.errorString().latin1() ); 50 file.errorString().latin1() );
51 return QString(); 51 return QString();
52 } 52 }
53 53
54 QTextStream in( &file ); 54 QTextStream in( &file );
55 return in.read(); 55 return in.read();
56} 56}
57 57
58QMap<QString, QString> proFileTagMap( const QString& text, const QString& opieDir ) 58QMap<QString, QString> proFileTagMap( const QString& text, const QString& opieDir )
59{ 59{
60 QString t = text; 60 QString t = text;
61 61
62 /* 62 /*
63 Process include() commands. 63 Process include() commands.
64 */ 64 */
65 QRegExp callToInclude("include\\s*\\(\\s*([^()\\s]+)\\s*\\)"); 65 QRegExp callToInclude("include\\s*\\(\\s*([^()\\s]+)\\s*\\)");
66 int i = 0; 66 int i = 0;
67 while ( (i = callToInclude.search(t, i)) != -1 ) { 67 while ( (i = callToInclude.search(t, i)) != -1 ) {
68 QString after = loadFile( callToInclude.cap(1) ); 68 QString after = loadFile( callToInclude.cap(1) );
69 t.replace( i, callToInclude.matchedLength(), after ); 69 t.replace( i, callToInclude.matchedLength(), after );
70 i += after.length(); 70 i += after.length();
71 } 71 }
72 72
73 /* 73 /*
74 Strip comments, merge lines ending with backslash, add 74 Strip comments, merge lines ending with backslash, add
75 spaces around '=' and '+=', replace '\n' with ';', and 75 spaces around '=' and '+=', replace '\n' with ';', and
76 simplify white spaces. 76 simplify white spaces.
77 */ 77 */
78 t.replace( QRegExp(QString("#[^\n]*\n")), QString(" ") ); 78 t.replace( QRegExp(QString("#[^\n]*\n")), QString(" ") );
79 t.replace( QRegExp(QString("\\\\[^\n\\S]*\n")), QString(" ") ); 79 t.replace( QRegExp(QString("\\\\[^\n\\S]*\n")), QString(" ") );
80 t.replace( "=", QString(" = ") ); 80 t.replace( "=", QString(" = ") );
81 t.replace( "+ =", QString(" += ") ); 81 t.replace( "+ =", QString(" += ") );
82 t.replace( "\n", QString(";") ); 82 t.replace( "\n", QString(";") );
83 t = t.simplifyWhiteSpace(); 83 t = t.simplifyWhiteSpace();
84 84
85 /* 85 /*
86 Populate tagMap with 'key = value' entries. 86 Populate tagMap with 'key = value' entries.
87 */ 87 */
88 QMap<QString, QString> tagMap; 88 QMap<QString, QString> tagMap;
89 QStringList lines = QStringList::split( QChar(';'), t ); 89 QStringList lines = QStringList::split( QChar(';'), t );
90 QStringList::Iterator line; 90 QStringList::Iterator line;
91 for ( line = lines.begin(); line != lines.end(); ++line ) { 91 for ( line = lines.begin(); line != lines.end(); ++line ) {
92 QStringList toks = QStringList::split( QChar(' '), *line ); 92 QStringList toks = QStringList::split( QChar(' '), *line );
93 93
94 if ( toks.count() >= 3 && 94 if ( toks.count() >= 3 &&
95 (toks[1] == QString("=") || toks[1] == QString("+=")) ) { 95 (toks[1] == QString("=") || toks[1] == QString("+=")) ) {
96 QString tag = toks.first(); 96 QString tag = toks.first();
97 int k = tag.findRev( QChar(':') ); // as in 'unix:' 97 int k = tag.findRev( QChar(':') ); // as in 'unix:'
98 if ( k != -1 ) 98 if ( k != -1 )
99 tag = tag.mid( k + 1 ); 99 tag = tag.mid( k + 1 );
100 toks.remove( toks.begin() ); 100 toks.remove( toks.begin() );
101 101
102 QString action = toks.first(); 102 QString action = toks.first();
103 toks.remove( toks.begin() ); 103 toks.remove( toks.begin() );
104 104
105 if ( tagMap.contains(tag) ) { 105 if ( tagMap.contains(tag) ) {
106 if ( action == QString("=") ) 106 if ( action == QString("=") )
107 tagMap.replace( tag, toks.join(QChar(' ')) ); 107 tagMap.replace( tag, toks.join(QChar(' ')) );
108 else 108 else
109 tagMap[tag] += QChar( ' ' ) + toks.join( QChar(' ') ); 109 tagMap[tag] += QChar( ' ' ) + toks.join( QChar(' ') );
110 } else { 110 } else {
111 tagMap[tag] = toks.join( QChar(' ') ); 111 tagMap[tag] = toks.join( QChar(' ') );
112 } 112 }
113 } 113 }
114 } 114 }
115 115
116 /* 116 /*
117 Expand $$variables within the 'value' part of a 'key = value' 117 Expand $$variables within the 'value' part of a 'key = value'
118 pair. 118 pair.
119 */ 119 */
120 QRegExp var( "\\$\\$[({]?([a-zA-Z0-9_]+)[)}]?" ); 120 QRegExp var( "\\$\\$[({]?([a-zA-Z0-9_]+)[)}]?" );
121 QMap<QString, QString>::Iterator it; 121 QMap<QString, QString>::Iterator it;
122 for ( it = tagMap.begin(); it != tagMap.end(); ++it ) { 122 for ( it = tagMap.begin(); it != tagMap.end(); ++it ) {
123 int i = 0; 123 int i = 0;
124 while ( (i = var.search((*it), i)) != -1 ) { 124 while ( (i = var.search((*it), i)) != -1 ) {
125 int len = var.matchedLength(); 125 int len = var.matchedLength();
126 QString invocation = var.cap(1); 126 QString invocation = var.cap(1);
127 QString after; 127 QString after;
128 128
129 if ( invocation == "system" ) { 129 if ( invocation == "system" ) {
130 // skip system(); it will be handled in the next pass 130 // skip system(); it will be handled in the next pass
131 ++i; 131 ++i;
132 } else if ( invocation == "OPIEDIR") { 132 } else if ( invocation == "OPIEDIR") {
133 (*it).replace( i, len, opieDir ); 133 (*it).replace( i, len, opieDir );
134 }else { 134 }else {
135 if ( tagMap.contains(invocation) ) 135 if ( tagMap.contains(invocation) )
136 after = tagMap[invocation]; 136 after = tagMap[invocation];
137 (*it).replace( i, len, after ); 137 (*it).replace( i, len, after );
138 i += after.length();
138 } 139 }
139 } 140 }
140 } 141 }
141 142
142 /* 143 /*
143 Execute system() calls. 144 Execute system() calls.
144 */ 145 */
145 QRegExp callToSystem( "\\$\\$system\\s*\\(([^()]*)\\)" ); 146 QRegExp callToSystem( "\\$\\$system\\s*\\(([^()]*)\\)" );
146 for ( it = tagMap.begin(); it != tagMap.end(); ++it ) { 147 for ( it = tagMap.begin(); it != tagMap.end(); ++it ) {
147 int i = 0; 148 int i = 0;
148 while ( (i = callToSystem.search((*it), i)) != -1 ) { 149 while ( (i = callToSystem.search((*it), i)) != -1 ) {
149 /* 150 /*
150 This code is stolen from qmake's project.cpp file. 151 This code is stolen from qmake's project.cpp file.
151 Ideally we would use the same parser, so we wouldn't 152 Ideally we would use the same parser, so we wouldn't
152 have this code duplication. 153 have this code duplication.
153 */ 154 */
154 QString after; 155 QString after;
155 char buff[256]; 156 char buff[256];
156 FILE *proc = QT_POPEN( callToSystem.cap(1).latin1(), "r" ); 157 FILE *proc = QT_POPEN( callToSystem.cap(1).latin1(), "r" );
157 while ( proc && !feof(proc) ) { 158 while ( proc && !feof(proc) ) {
158 int read_in = fread( buff, 1, 255, proc ); 159 int read_in = fread( buff, 1, 255, proc );
159 if ( !read_in ) 160 if ( !read_in )
160 break; 161 break;
161 for ( int i = 0; i < read_in; i++ ) { 162 for ( int i = 0; i < read_in; i++ ) {
162 if ( buff[i] == '\n' || buff[i] == '\t' ) 163 if ( buff[i] == '\n' || buff[i] == '\t' )
163 buff[i] = ' '; 164 buff[i] = ' ';
164 } 165 }
165 buff[read_in] = '\0'; 166 buff[read_in] = '\0';
166 after += buff; 167 after += buff;
167 } 168 }
168 (*it).replace( i, callToSystem.matchedLength(), after ); 169 (*it).replace( i, callToSystem.matchedLength(), after );
169 i += after.length(); 170 i += after.length();
170 } 171 }
171 } 172 }
172 173
173 return tagMap; 174 return tagMap;
174} 175}