Root/
Source at commit 1322 created 12 years 8 months ago. By meklort, Add doxygen to utils folder | |
---|---|
1 | /******************************************************************************␊ |
2 | *␊ |
3 | * $Id: $␊ |
4 | *␊ |
5 | *␊ |
6 | * Copyright (C) 1997-2011 by Dimitri van Heesch.␊ |
7 | *␊ |
8 | * Permission to use, copy, modify, and distribute this software and its␊ |
9 | * documentation under the terms of the GNU General Public License is hereby ␊ |
10 | * granted. No representations are made about the suitability of this software ␊ |
11 | * for any purpose. It is provided "as is" without express or implied warranty.␊ |
12 | * See the GNU General Public License for more details.␊ |
13 | *␊ |
14 | * Documents produced by Doxygen are derivative works derived from the␊ |
15 | * input used in their production; they are not affected by this license.␊ |
16 | *␊ |
17 | */␊ |
18 | ␊ |
19 | #include "rtfstyle.h"␊ |
20 | ␊ |
21 | #include <qfile.h>␊ |
22 | #include <qtextstream.h>␊ |
23 | #include <stdlib.h>␊ |
24 | ␊ |
25 | #include "message.h"␊ |
26 | ␊ |
27 | ␊ |
28 | RTFListItemInfo rtf_listItemInfo[rtf_maxIndentLevels];␊ |
29 | ␊ |
30 | QCString rtf_title;␊ |
31 | QCString rtf_subject;␊ |
32 | QCString rtf_comments;␊ |
33 | QCString rtf_company;␊ |
34 | QCString rtf_logoFilename;␊ |
35 | QCString rtf_author;␊ |
36 | QCString rtf_manager;␊ |
37 | QCString rtf_documentType;␊ |
38 | QCString rtf_documentId;␊ |
39 | QCString rtf_keywords;␊ |
40 | ␊ |
41 | char rtf_Style_Reset[] = "\\pard\\plain ";␊ |
42 | ␊ |
43 | Rtf_Style_Default rtf_Style_Default[] =␊ |
44 | {␊ |
45 | { "Heading1",␊ |
46 | "\\s1\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs36\\kerning36\\cgrid ",␊ |
47 | "\\sbasedon0 \\snext0 heading 1"␊ |
48 | },␊ |
49 | { "Heading2",␊ |
50 | "\\s2\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs28\\kerning28\\cgrid ",␊ |
51 | "\\sbasedon0 \\snext0 heading 2"␊ |
52 | },␊ |
53 | { "Heading3",␊ |
54 | "\\s3\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\cgrid ",␊ |
55 | "\\sbasedon0 \\snext0 heading 3"␊ |
56 | },␊ |
57 | { "Heading4",␊ |
58 | "\\s4\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid ",␊ |
59 | "\\sbasedon0 \\snext0 heading 4;}{\\*\\cs10 \\additive Default Paragraph Font"␊ |
60 | },␊ |
61 | { "Heading5",␊ |
62 | "\\s5\\sb90\\sa30\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid ",␊ |
63 | "\\sbasedon0 \\snext0 heading 5;}{\\*\\cs10 \\additive Default Paragraph Font"␊ |
64 | },␊ |
65 | { "Title",␊ |
66 | "\\s15\\qc\\sb240\\sa60\\widctlpar\\outlinelevel0\\adjustright \\b\\f1\\fs32\\kerning28\\cgrid ",␊ |
67 | "\\sbasedon0 \\snext15 Title"␊ |
68 | },␊ |
69 | { "SubTitle",␊ |
70 | "\\s16\\qc\\sa60\\widctlpar\\outlinelevel1\\adjustright \\f1\\cgrid ",␊ |
71 | "\\sbasedon0 \\snext16 Subtitle"␊ |
72 | },␊ |
73 | { "BodyText",␊ |
74 | "\\s17\\sa60\\sb30\\widctlpar\\qj \\fs22\\cgrid ",␊ |
75 | "\\sbasedon0 \\snext17 BodyText"␊ |
76 | },␊ |
77 | { "DenseText",␊ |
78 | "\\s18\\widctlpar\\fs22\\cgrid ",␊ |
79 | "\\sbasedon0 \\snext18 DenseText"␊ |
80 | },␊ |
81 | { "Header",␊ |
82 | "\\s28\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\adjustright \\fs20\\cgrid ",␊ |
83 | "\\sbasedon0 \\snext28 header"␊ |
84 | },␊ |
85 | { "Footer",␊ |
86 | "\\s29\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\qr\\adjustright \\fs20\\cgrid ",␊ |
87 | "\\sbasedon0 \\snext29 footer"␊ |
88 | },␊ |
89 | { "GroupHeader",␊ |
90 | "\\s30\\li360\\sa60\\sb120\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid ",␊ |
91 | "\\sbasedon0 \\snext30 GroupHeader"␊ |
92 | },␊ |
93 | { "CodeExample0",␊ |
94 | "\\s40\\li0\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",␊ |
95 | "\\sbasedon0 \\snext41 Code Example 0"␊ |
96 | },␊ |
97 | { "CodeExample1",␊ |
98 | "\\s41\\li360\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",␊ |
99 | "\\sbasedon0 \\snext42 Code Example 1"␊ |
100 | },␊ |
101 | { "CodeExample2",␊ |
102 | "\\s42\\li720\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",␊ |
103 | "\\sbasedon0 \\snext43 Code Example 2"␊ |
104 | },␊ |
105 | { "CodeExample3",␊ |
106 | "\\s43\\li1080\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",␊ |
107 | "\\sbasedon0 \\snext44 Code Example 3"␊ |
108 | },␊ |
109 | { "CodeExample4",␊ |
110 | "\\s44\\li1440\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",␊ |
111 | "\\sbasedon0 \\snext45 Code Example 4"␊ |
112 | },␊ |
113 | { "CodeExample5",␊ |
114 | "\\s45\\li1800\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",␊ |
115 | "\\sbasedon0 \\snext46 Code Example 5"␊ |
116 | },␊ |
117 | { "CodeExample6",␊ |
118 | "\\s46\\li2160\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",␊ |
119 | "\\sbasedon0 \\snext47 Code Example 6"␊ |
120 | },␊ |
121 | { "CodeExample7",␊ |
122 | "\\s47\\li2520\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",␊ |
123 | "\\sbasedon0 \\snext48 Code Example 7"␊ |
124 | },␊ |
125 | { "CodeExample8",␊ |
126 | "\\s48\\li2880\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",␊ |
127 | "\\sbasedon0 \\snext49 Code Example 8"␊ |
128 | },␊ |
129 | { "CodeExample9",␊ |
130 | "\\s49\\li3240\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",␊ |
131 | "\\sbasedon0 \\snext49 Code Example 9"␊ |
132 | },␊ |
133 | { "ListContinue0",␊ |
134 | "\\s50\\li0\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",␊ |
135 | "\\sbasedon0 \\snext51 List Continue 0"␊ |
136 | },␊ |
137 | { "ListContinue1",␊ |
138 | "\\s51\\li360\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",␊ |
139 | "\\sbasedon0 \\snext52 List Continue 1"␊ |
140 | },␊ |
141 | { "ListContinue2",␊ |
142 | "\\s52\\li720\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",␊ |
143 | "\\sbasedon0 \\snext53 List Continue 2"␊ |
144 | },␊ |
145 | { "ListContinue3",␊ |
146 | "\\s53\\li1080\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",␊ |
147 | "\\sbasedon0 \\snext54 List Continue 3"␊ |
148 | },␊ |
149 | { "ListContinue4",␊ |
150 | "\\s54\\li1440\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",␊ |
151 | "\\sbasedon0 \\snext55 List Continue 4"␊ |
152 | },␊ |
153 | { "ListContinue5",␊ |
154 | "\\s55\\li1800\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",␊ |
155 | "\\sbasedon0 \\snext56 List Continue 5"␊ |
156 | },␊ |
157 | { "ListContinue6",␊ |
158 | "\\s56\\li2160\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",␊ |
159 | "\\sbasedon0 \\snext57 List Continue 6"␊ |
160 | },␊ |
161 | { "ListContinue7",␊ |
162 | "\\s57\\li2520\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",␊ |
163 | "\\sbasedon0 \\snext58 List Continue 7"␊ |
164 | },␊ |
165 | { "ListContinue8",␊ |
166 | "\\s58\\li2880\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",␊ |
167 | "\\sbasedon0 \\snext59 List Continue 8"␊ |
168 | },␊ |
169 | { "ListContinue9",␊ |
170 | "\\s59\\li3240\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",␊ |
171 | "\\sbasedon0 \\snext59 List Continue 9"␊ |
172 | },␊ |
173 | { "DescContinue0",␊ |
174 | "\\s60\\li0\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",␊ |
175 | "\\sbasedon0 \\snext61 DescContinue 0"␊ |
176 | },␊ |
177 | { "DescContinue1",␊ |
178 | "\\s61\\li360\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",␊ |
179 | "\\sbasedon0 \\snext62 DescContinue 1"␊ |
180 | },␊ |
181 | { "DescContinue2",␊ |
182 | "\\s62\\li720\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",␊ |
183 | "\\sbasedon0 \\snext63 DescContinue 2"␊ |
184 | },␊ |
185 | { "DescContinue3",␊ |
186 | "\\s63\\li1080\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",␊ |
187 | "\\sbasedon0 \\snext64 DescContinue 3"␊ |
188 | },␊ |
189 | { "DescContinue4",␊ |
190 | "\\s64\\li1440\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",␊ |
191 | "\\sbasedon0 \\snext65 DescContinue 4"␊ |
192 | },␊ |
193 | { "DescContinue5",␊ |
194 | "\\s65\\li1800\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",␊ |
195 | "\\sbasedon0 \\snext66 DescContinue 5"␊ |
196 | },␊ |
197 | { "DescContinue6",␊ |
198 | "\\s66\\li2160\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",␊ |
199 | "\\sbasedon0 \\snext67 DescContinue 6"␊ |
200 | },␊ |
201 | { "DescContinue7",␊ |
202 | "\\s67\\li2520\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",␊ |
203 | "\\sbasedon0 \\snext68 DescContinue 7"␊ |
204 | },␊ |
205 | { "DescContinue8",␊ |
206 | "\\s68\\li2880\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",␊ |
207 | "\\sbasedon0 \\snext69 DescContinue 8"␊ |
208 | },␊ |
209 | { "DescContinue9",␊ |
210 | "\\s69\\li3240\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",␊ |
211 | "\\sbasedon0 \\snext69 DescContinue 9"␊ |
212 | },␊ |
213 | { "LatexTOC0",␊ |
214 | "\\s70\\li0\\sa30\\sb30\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",␊ |
215 | "\\sbasedon0 \\snext81 LatexTOC 0"␊ |
216 | },␊ |
217 | { "LatexTOC1",␊ |
218 | "\\s71\\li360\\sa27\\sb27\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",␊ |
219 | "\\sbasedon0 \\snext82 LatexTOC 1"␊ |
220 | },␊ |
221 | { "LatexTOC2",␊ |
222 | "\\s72\\li720\\sa24\\sb24\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",␊ |
223 | "\\sbasedon0 \\snext83 LatexTOC 2"␊ |
224 | },␊ |
225 | { "LatexTOC3",␊ |
226 | "\\s73\\li1080\\sa21\\sb21\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",␊ |
227 | "\\sbasedon0 \\snext84 LatexTOC 3"␊ |
228 | },␊ |
229 | { "LatexTOC4",␊ |
230 | "\\s74\\li1440\\sa18\\sb18\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",␊ |
231 | "\\sbasedon0 \\snext85 LatexTOC 4"␊ |
232 | },␊ |
233 | { "LatexTOC5",␊ |
234 | "\\s75\\li1800\\sa15\\sb15\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",␊ |
235 | "\\sbasedon0 \\snext86 LatexTOC 5"␊ |
236 | },␊ |
237 | { "LatexTOC6",␊ |
238 | "\\s76\\li2160\\sa12\\sb12\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",␊ |
239 | "\\sbasedon0 \\snext87 LatexTOC 6"␊ |
240 | },␊ |
241 | { "LatexTOC7",␊ |
242 | "\\s77\\li2520\\sa9\\sb9\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",␊ |
243 | "\\sbasedon0 \\snext88 LatexTOC 7"␊ |
244 | },␊ |
245 | { "LatexTOC8",␊ |
246 | "\\s78\\li2880\\sa6\\sb6\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",␊ |
247 | "\\sbasedon0 \\snext89 LatexTOC 8"␊ |
248 | },␊ |
249 | { "LatexTOC9",␊ |
250 | "\\s79\\li3240\\sa3\\sb3\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",␊ |
251 | "\\sbasedon0 \\snext89 LatexTOC 9"␊ |
252 | },␊ |
253 | { "ListBullet0",␊ |
254 | "\\s80\\fi-360\\li360\\widctlpar\\jclisttab\\tx360{\\*\\pn \\pnlvlbody\\ilvl0\\ls1\\pnrnot0\\pndec }\\ls1\\adjustright \\fs20\\cgrid ",␊ |
255 | "\\sbasedon0 \\snext81 \\sautoupd List Bullet 0"␊ |
256 | },␊ |
257 | { "ListBullet1",␊ |
258 | "\\s81\\fi-360\\li720\\widctlpar\\jclisttab\\tx720{\\*\\pn \\pnlvlbody\\ilvl0\\ls2\\pnrnot0\\pndec }\\ls2\\adjustright \\fs20\\cgrid ",␊ |
259 | "\\sbasedon0 \\snext82 \\sautoupd List Bullet 1"␊ |
260 | },␊ |
261 | { "ListBullet2",␊ |
262 | "\\s82\\fi-360\\li1080\\widctlpar\\jclisttab\\tx1080{\\*\\pn \\pnlvlbody\\ilvl0\\ls3\\pnrnot0\\pndec }\\ls3\\adjustright \\fs20\\cgrid ",␊ |
263 | "\\sbasedon0 \\snext83 \\sautoupd List Bullet 2"␊ |
264 | },␊ |
265 | { "ListBullet3",␊ |
266 | "\\s83\\fi-360\\li1440\\widctlpar\\jclisttab\\tx1440{\\*\\pn \\pnlvlbody\\ilvl0\\ls4\\pnrnot0\\pndec }\\ls4\\adjustright \\fs20\\cgrid ",␊ |
267 | "\\sbasedon0 \\snext84 \\sautoupd List Bullet 3"␊ |
268 | },␊ |
269 | { "ListBullet4",␊ |
270 | "\\s84\\fi-360\\li1800\\widctlpar\\jclisttab\\tx1800{\\*\\pn \\pnlvlbody\\ilvl0\\ls5\\pnrnot0\\pndec }\\ls5\\adjustright \\fs20\\cgrid ",␊ |
271 | "\\sbasedon0 \\snext85 \\sautoupd List Bullet 4"␊ |
272 | },␊ |
273 | { "ListBullet5",␊ |
274 | "\\s85\\fi-360\\li2160\\widctlpar\\jclisttab\\tx2160{\\*\\pn \\pnlvlbody\\ilvl0\\ls6\\pnrnot0\\pndec }\\ls6\\adjustright \\fs20\\cgrid ",␊ |
275 | "\\sbasedon0 \\snext86 \\sautoupd List Bullet 5"␊ |
276 | },␊ |
277 | { "ListBullet6",␊ |
278 | "\\s86\\fi-360\\li2520\\widctlpar\\jclisttab\\tx2520{\\*\\pn \\pnlvlbody\\ilvl0\\ls7\\pnrnot0\\pndec }\\ls7\\adjustright \\fs20\\cgrid ",␊ |
279 | "\\sbasedon0 \\snext87 \\sautoupd List Bullet 6"␊ |
280 | },␊ |
281 | { "ListBullet7",␊ |
282 | "\\s87\\fi-360\\li2880\\widctlpar\\jclisttab\\tx2880{\\*\\pn \\pnlvlbody\\ilvl0\\ls8\\pnrnot0\\pndec }\\ls8\\adjustright \\fs20\\cgrid ",␊ |
283 | "\\sbasedon0 \\snext88 \\sautoupd List Bullet 7"␊ |
284 | },␊ |
285 | { "ListBullet8",␊ |
286 | "\\s88\\fi-360\\li3240\\widctlpar\\jclisttab\\tx3240{\\*\\pn \\pnlvlbody\\ilvl0\\ls9\\pnrnot0\\pndec }\\ls9\\adjustright \\fs20\\cgrid ",␊ |
287 | "\\sbasedon0 \\snext89 \\sautoupd List Bullet 8"␊ |
288 | },␊ |
289 | { "ListBullet9",␊ |
290 | "\\s89\\fi-360\\li3600\\widctlpar\\jclisttab\\tx3600{\\*\\pn \\pnlvlbody\\ilvl0\\ls10\\pnrnot0\\pndec }\\ls10\\adjustright \\fs20\\cgrid ",␊ |
291 | "\\sbasedon0 \\snext89 \\sautoupd List Bullet 9"␊ |
292 | },␊ |
293 | { "ListEnum0",␊ |
294 | "\\s90\\fi-360\\li360\\widctlpar\\fs20\\cgrid ",␊ |
295 | "\\sbasedon0 \\snext91 \\sautoupd List Enum 0"␊ |
296 | },␊ |
297 | { "ListEnum1",␊ |
298 | "\\s91\\fi-360\\li720\\widctlpar\\fs20\\cgrid ",␊ |
299 | "\\sbasedon0 \\snext92 \\sautoupd List Enum 1"␊ |
300 | },␊ |
301 | { "ListEnum2",␊ |
302 | "\\s92\\fi-360\\li1080\\widctlpar\\fs20\\cgrid ",␊ |
303 | "\\sbasedon0 \\snext93 \\sautoupd List Enum 2"␊ |
304 | },␊ |
305 | { "ListEnum3",␊ |
306 | "\\s93\\fi-360\\li1440\\widctlpar\\fs20\\cgrid ",␊ |
307 | "\\sbasedon0 \\snext94 \\sautoupd List Enum 3"␊ |
308 | },␊ |
309 | { "ListEnum4",␊ |
310 | "\\s94\\fi-360\\li1800\\widctlpar\\fs20\\cgrid ",␊ |
311 | "\\sbasedon0 \\snext95 \\sautoupd List Enum 4"␊ |
312 | },␊ |
313 | { "ListEnum5",␊ |
314 | "\\s95\\fi-360\\li2160\\widctlpar\\fs20\\cgrid ",␊ |
315 | "\\sbasedon0 \\snext96 \\sautoupd List Enum 5"␊ |
316 | },␊ |
317 | { "ListEnum6",␊ |
318 | "\\s96\\fi-360\\li2520\\widctlpar\\fs20\\cgrid ",␊ |
319 | "\\sbasedon0 \\snext96 \\sautoupd List Enum 5"␊ |
320 | },␊ |
321 | { "ListEnum7",␊ |
322 | "\\s97\\fi-360\\li2880\\widctlpar\\fs20\\cgrid ",␊ |
323 | "\\sbasedon0 \\snext98 \\sautoupd List Enum 7"␊ |
324 | },␊ |
325 | { "ListEnum8",␊ |
326 | "\\s98\\fi-360\\li3240\\widctlpar\\fs20\\cgrid ",␊ |
327 | "\\sbasedon0 \\snext99 \\sautoupd List Enum 8"␊ |
328 | },␊ |
329 | { "ListEnum9",␊ |
330 | "\\s99\\fi-360\\li3600\\widctlpar\\fs20\\cgrid ",␊ |
331 | "\\sbasedon0 \\snext99 \\sautoupd List Enum 9"␊ |
332 | },␊ |
333 | { 0,␊ |
334 | 0,␊ |
335 | 0␊ |
336 | }␊ |
337 | };␊ |
338 | ␊ |
339 | const QRegExp StyleData::s_clause("\\\\s[0-9]+\\s*");␊ |
340 | ␊ |
341 | StyleData::StyleData(const char* reference, const char* definition)␊ |
342 | {␊ |
343 | int start = s_clause.match(reference); ASSERT(start >= 0);␊ |
344 | reference += start;␊ |
345 | index = (int)atol(reference + 2); ASSERT(index > 0);␊ |
346 | ␊ |
347 | ASSERT(reference != 0);␊ |
348 | size_t size = 1 + strlen(reference);␊ |
349 | memcpy(this->reference = new char[size], reference, size);␊ |
350 | ␊ |
351 | ASSERT(definition != 0);␊ |
352 | size = 1 + strlen(definition);␊ |
353 | memcpy(this->definition = new char[size], definition, size);␊ |
354 | }␊ |
355 | ␊ |
356 | StyleData::~StyleData()␊ |
357 | {␊ |
358 | delete[] reference;␊ |
359 | delete[] definition;␊ |
360 | }␊ |
361 | ␊ |
362 | bool StyleData::setStyle(const char* s, const char* styleName)␊ |
363 | {␊ |
364 | static const QRegExp subgroup("^{[^}]*}\\s*");␊ |
365 | static const QRegExp any_clause("^\\\\[a-z][a-z0-9-]*\\s*");␊ |
366 | ␊ |
367 | int len = 0; // length of a particular RTF formatting control␊ |
368 | int ref_len = 0; // length of the whole formatting section of a style␊ |
369 | int start = s_clause.match(s, 0, &len);␊ |
370 | if (start < 0)␊ |
371 | {␊ |
372 | err("Style sheet '%s' contains no '\\s' clause.\n{%s}\n", styleName, s);␊ |
373 | return FALSE;␊ |
374 | }␊ |
375 | s += start;␊ |
376 | index = (int)atol(s + 2); ASSERT(index > 0);␊ |
377 | ␊ |
378 | // search for the end of pure formatting codes␊ |
379 | const char* end = s + len;␊ |
380 | ref_len = len;␊ |
381 | bool haveNewDefinition = TRUE;␊ |
382 | for(;;)␊ |
383 | {␊ |
384 | if (*end == '{')␊ |
385 | {␊ |
386 | // subgroups are used for \\additive␊ |
387 | if (0 != subgroup.match(end, 0, &len))␊ |
388 | break;␊ |
389 | else␊ |
390 | {␊ |
391 | end += len;␊ |
392 | ref_len += len;␊ |
393 | }␊ |
394 | }␊ |
395 | else if (*end == '\\')␊ |
396 | {␊ |
397 | if (0 == strncmp(end, "\\snext", 6))␊ |
398 | break;␊ |
399 | if (0 == strncmp(end, "\\sbasedon", 9))␊ |
400 | break;␊ |
401 | if (0 != any_clause.match(end, 0, &len))␊ |
402 | break;␊ |
403 | end += len;␊ |
404 | ref_len += len;␊ |
405 | }␊ |
406 | else if (*end == 0)␊ |
407 | { // no style-definition part, keep default value␊ |
408 | haveNewDefinition = FALSE;␊ |
409 | break;␊ |
410 | }␊ |
411 | else // plain name without leading \\snext␊ |
412 | break;␊ |
413 | }␊ |
414 | delete[] reference;␊ |
415 | reference = new char[ref_len + 1];␊ |
416 | memcpy(reference, s, ref_len); ␊ |
417 | reference[ref_len] = 0;␊ |
418 | if (haveNewDefinition)␊ |
419 | {␊ |
420 | delete[] definition;␊ |
421 | size_t size = 1 + strlen(end);␊ |
422 | definition = new char[size];␊ |
423 | memcpy(definition, end, size);␊ |
424 | }␊ |
425 | return TRUE;␊ |
426 | }␊ |
427 | ␊ |
428 | void loadStylesheet(const char *name, QDict<StyleData>& dict)␊ |
429 | {␊ |
430 | QFile file(name);␊ |
431 | if (!file.open(IO_ReadOnly))␊ |
432 | {␊ |
433 | err("Can't open RTF style sheet file %s. Using defaults.\n",name);␊ |
434 | return;␊ |
435 | }␊ |
436 | msg("Loading RTF style sheet %s...\n",name);␊ |
437 | ␊ |
438 | static const QRegExp separator("[ \t]*=[ \t]*");␊ |
439 | uint lineNr=1;␊ |
440 | QTextStream t(&file);␊ |
441 | t.setEncoding(QTextStream::UnicodeUTF8);␊ |
442 | ␊ |
443 | while (!t.eof())␊ |
444 | {␊ |
445 | QCString s(4096); // string buffer of max line length␊ |
446 | s = t.readLine().stripWhiteSpace();␊ |
447 | if (s.isEmpty() || s.at(0)=='#') continue; // skip blanks & comments␊ |
448 | int sepLength;␊ |
449 | int sepStart = separator.match(s,0,&sepLength);␊ |
450 | if (sepStart<=0) // no valid assignment statement␊ |
451 | {␊ |
452 | warn(name,lineNr,"Assignment of style sheet name expected!\n");␊ |
453 | continue;␊ |
454 | }␊ |
455 | QCString key=s.left(sepStart);␊ |
456 | if (dict[key]==0) // not a valid style sheet name␊ |
457 | {␊ |
458 | warn(name,lineNr,"Invalid style sheet name %s ignored.\n",key.data());␊ |
459 | continue;␊ |
460 | }␊ |
461 | StyleData* styleData = dict.find(key);␊ |
462 | if (styleData == 0)␊ |
463 | {␊ |
464 | warn(name,lineNr,"Unknown style sheet name %s ignored.\n",key.data());␊ |
465 | continue;␊ |
466 | }␊ |
467 | s+=" "; // add command separator␊ |
468 | styleData->setStyle(s.data() + sepStart + sepLength, key.data());␊ |
469 | lineNr++;␊ |
470 | }␊ |
471 | }␊ |
472 | ␊ |
473 | QDict<StyleData> rtf_Style(257);␊ |
474 | ␊ |
475 | void loadExtensions(const char *name)␊ |
476 | {␊ |
477 | QFile file(name);␊ |
478 | if (!file.open(IO_ReadOnly))␊ |
479 | {␊ |
480 | err("Can't open RTF extensions file %s. Using defaults.\n",name);␊ |
481 | return;␊ |
482 | }␊ |
483 | msg("Loading RTF extensions %s...\n",name);␊ |
484 | ␊ |
485 | static const QRegExp separator("[ \t]*=[ \t]*");␊ |
486 | uint lineNr=1;␊ |
487 | QTextStream t(&file);␊ |
488 | t.setEncoding(QTextStream::UnicodeUTF8);␊ |
489 | ␊ |
490 | while (!t.eof())␊ |
491 | {␊ |
492 | QCString s(4096); // string buffer of max line length␊ |
493 | s = t.readLine().stripWhiteSpace();␊ |
494 | if (s.length()==0 || s.at(0)=='#') continue; // skip blanks & comments␊ |
495 | int sepLength;␊ |
496 | int sepStart = separator.match(s,0,&sepLength);␊ |
497 | if (sepStart<=0) // no valid assignment statement␊ |
498 | {␊ |
499 | warn(name,lineNr,"Assignment of extension field expected!\n");␊ |
500 | continue;␊ |
501 | }␊ |
502 | QCString key=s.left(sepStart);␊ |
503 | QCString data=s.data() + sepStart + sepLength;␊ |
504 | ␊ |
505 | if (key == "Title") rtf_title = data.data();␊ |
506 | if (key == "Subject") rtf_subject = data.data();␊ |
507 | if (key == "Comments") rtf_comments = data.data();␊ |
508 | if (key == "Company") rtf_company = data.data();␊ |
509 | if (key == "LogoFilename") rtf_logoFilename = data.data();␊ |
510 | if (key == "Author") rtf_author = data.data();␊ |
511 | if (key == "Manager") rtf_manager = data.data();␊ |
512 | if (key == "DocumentType") rtf_documentType = data.data();␊ |
513 | if (key == "DocumentId") rtf_documentId = data.data();␊ |
514 | if (key == "Keywords") rtf_keywords = data.data();␊ |
515 | lineNr++;␊ |
516 | }␊ |
517 | }␊ |
518 | ␊ |
519 |