summaryrefslogtreecommitdiff
path: root/development
authorzecke <zecke>2004-07-07 15:18:14 (UTC)
committer zecke <zecke>2004-07-07 15:18:14 (UTC)
commitab010081c21f097e436c54ef8786f9abdf764790 (patch) (unidiff)
tree36934a2aecd6e898c09d3414764efce0e2777915 /development
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 (limited to 'development') (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
@@ -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
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}