author | zecke <zecke> | 2004-07-07 15:18:14 (UTC) |
---|---|---|
committer | zecke <zecke> | 2004-07-07 15:18:14 (UTC) |
commit | ab010081c21f097e436c54ef8786f9abdf764790 (patch) (unidiff) | |
tree | 36934a2aecd6e898c09d3414764efce0e2777915 /development | |
parent | d6ed7f967feb423a91a5c6ea94d54001b33bcd77 (diff) | |
download | opie-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...
-rw-r--r-- | development/translation/opie-lupdate/opie-lupdate.pro | 2 | ||||
-rw-r--r-- | development/translation/shared/opie.cpp | 5 | ||||
-rw-r--r-- | development/translation/shared/proparser.cpp | 1 |
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 | ||
7 | OPIE* OPIE::m_self = 0; | 7 | OPIE* OPIE::m_self = 0; |
8 | 8 | ||
9 | 9 | ||
10 | OPIE::OPIE() { | 10 | OPIE::OPIE() { |
11 | } | 11 | } |
12 | OPIE::~OPIE() { | 12 | OPIE::~OPIE() { |
13 | } | 13 | } |
14 | OPIE* OPIE::self() { | 14 | OPIE* 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 | } |
18 | QStringList OPIE::languageList( const QString& _opieDir )const { | 18 | QStringList 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 | } |
35 | QString OPIE::opieDir( const QString& _opieDir ) const{ | 38 | QString 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 | |||
@@ -1,174 +1,175 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Qt Linguist. | 4 | ** This file is part of Qt Linguist. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition | 11 | ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition |
12 | ** licenses may use this file in accordance with the Qt Commercial License | 12 | ** licenses may use this file in accordance with the Qt Commercial License |
13 | ** Agreement provided with the Software. | 13 | ** Agreement provided with the Software. |
14 | ** | 14 | ** |
15 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 15 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
16 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 16 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
17 | ** | 17 | ** |
18 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 18 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
19 | ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for | 19 | ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for |
20 | ** information about Qt Commercial License Agreements. | 20 | ** information about Qt Commercial License Agreements. |
21 | ** | 21 | ** |
22 | ** Contact info@trolltech.com if any conditions of this licensing are | 22 | ** Contact info@trolltech.com if any conditions of this licensing are |
23 | ** not clear to you. | 23 | ** not clear to you. |
24 | ** | 24 | ** |
25 | **********************************************************************/ | 25 | **********************************************************************/ |
26 | 26 | ||
27 | #include "proparser.h" | 27 | #include "proparser.h" |
28 | 28 | ||
29 | #include <qfile.h> | 29 | #include <qfile.h> |
30 | #include <qregexp.h> | 30 | #include <qregexp.h> |
31 | #include <qstringlist.h> | 31 | #include <qstringlist.h> |
32 | #include <qtextstream.h> | 32 | #include <qtextstream.h> |
33 | 33 | ||
34 | #ifdef Q_OS_UNIX | 34 | #ifdef Q_OS_UNIX |
35 | #include <unistd.h> | 35 | #include <unistd.h> |
36 | #endif | 36 | #endif |
37 | 37 | ||
38 | #ifdef Q_OS_WIN32 | 38 | #ifdef Q_OS_WIN32 |
39 | #define QT_POPEN _popen | 39 | #define QT_POPEN _popen |
40 | #else | 40 | #else |
41 | #define QT_POPEN popen | 41 | #define QT_POPEN popen |
42 | #endif | 42 | #endif |
43 | 43 | ||
44 | QString loadFile( const QString &fileName ) | 44 | QString 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 | ||
58 | QMap<QString, QString> proFileTagMap( const QString& text, const QString& opieDir ) | 58 | QMap<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 | } |