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/translation/shared/proparser.cpp | |
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...
Diffstat (limited to 'development/translation/shared/proparser.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | development/translation/shared/proparser.cpp | 1 |
1 files changed, 1 insertions, 0 deletions
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 | |||
@@ -90,85 +90,86 @@ QMap<QString, QString> proFileTagMap( const QString& text, const QString& opieDi | |||
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 | } |