Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
31 halyavin 1
 
2
; Keyword descriptions
3
;rgsymRtf[] = {
4
;  keyword     dflt    fPassDflt   kwd         idx    implemented
5
if  syms eq 12
6
SYM    "f",        0,      fFalse,     kwdProp,    ipropFont
7
SYM    "*",        0,      fFalse,     kwdSpec,    ipfnSkipDest    ,1
8
SYM    "'",        0,      fFalse,     kwdSpec,    ipfnHex         ,1
9
SYM    "par",      0,      fFalse,     kwdChar,    0x0a            ,1
10
SYM    "u",        0,      fFalse,     kwdUC,      0               ,1
11
SYM    "line",     0,      fFalse,     kwdChar,    0xa             ,1
12
SYM    "plain",    0,      fFalse,     kwdProp,    ipropPlain      ,1
13
SYM    0x9,        0,      fFalse,     kwdChar,    0x09            ,1
14
SYM    "tab",      0,      fFalse,     kwdChar,    0x09            ,1
15
SYM    "b",        1,      fFalse,     kwdProp,    ipropBold       ,1
16
SYM    "ul",       1,      fFalse,     kwdProp,    ipropUnderline
17
SYM    "i",        1,      fFalse,     kwdProp,    ipropItalic     ,1
18
SYM    "li",       0,      fFalse,     kwdProp,    ipropLeftInd
19
SYM    "ri",       0,      fFalse,     kwdProp,    ipropRightInd
20
SYM    "fi",       0,      fFalse,     kwdProp,    ipropFirstInd
21
SYM    "~",        0,      fFalse,     kwdChar,    ' '             ,1
22
SYM    "cols",     1,      fFalse,     kwdProp,    ipropCols
23
SYM    "qc",       justC,  fTrue,      kwdProp,    ipropJust       ,1
24
SYM    "ql",       justL,  fTrue,      kwdProp,    ipropJust       ,1
25
SYM    "qr",       justR,  fTrue,      kwdProp,    ipropJust       ,1
26
SYM    "qj",       justF,  fTrue,      kwdProp,    ipropJust
27
SYM    "cf",       0,      fFalse,     kwdProp,    ipropForeColor  ,1
28
SYM    "red",      0,      fFalse,     kwdColor,   16              ,1
29
SYM    "green",    0,      fFalse,     kwdColor,   8               ,1
30
SYM    "blue",     0,      fFalse,     kwdColor,   0               ,1
31
SYM    "fs",       0,      fFalse,     kwdProp,    ipropFontSize   ,1
32
SYM    "sbknone",  sbkNon, fTrue,      kwdProp,    ipropSbk
33
SYM    "sbkcol",   sbkCol, fTrue,      kwdProp,    ipropSbk
34
SYM    "sbkeven",  sbkEvn, fTrue,      kwdProp,    ipropSbk
35
SYM    "sbkodd",   sbkOdd, fTrue,      kwdProp,    ipropSbk
36
SYM    "sbkpage",  sbkPg,  fTrue,      kwdProp,    ipropSbk
37
SYM    "pgnx",     0,      fFalse,     kwdProp,    ipropPgnX
38
SYM    "pgny",     0,      fFalse,     kwdProp,    ipropPgnY
39
SYM    "pgndec",   pgDec,  fTrue,      kwdProp,    ipropPgnFormat
40
SYM    "pgnucrm",  pgURom, fTrue,      kwdProp,    ipropPgnFormat
41
SYM    "pgnlcrm",  pgLRom, fTrue,      kwdProp,    ipropPgnFormat
42
SYM    "pgnucltr", pgULtr, fTrue,      kwdProp,    ipropPgnFormat
43
SYM    "pgnlcltr", pgLLtr, fTrue,      kwdProp,    ipropPgnFormat
44
SYM    "paperw",   12240,  fFalse,     kwdProp,    ipropXaPage
45
SYM    "paperh",   15480,  fFalse,     kwdProp,    ipropYaPage
46
SYM    "margl",    1800,   fFalse,     kwdProp,    ipropXaLeft
47
SYM    "margr",    1800,   fFalse,     kwdProp,    ipropXaRight
48
SYM    "margt",    1440,   fFalse,     kwdProp,    ipropYaTop
49
SYM    "margb",    1440,   fFalse,     kwdProp,    ipropYaBottom
50
SYM    "pgnstart", 1,      fTrue,      kwdProp,    ipropPgnStart
51
SYM    "facingp",  1,      fTrue,      kwdProp,    ipropFacingp
52
SYM    "landscape",1,      fTrue,      kwdProp,    ipropLandscape
53
SYM    "ldblquote",0,      fFalse,     kwdChar,    '"'             ,1
54
SYM    "rdblquote",0,      fFalse,     kwdChar,    '"'             ,1
55
SYM    "bin",      0,      fFalse,     kwdSpec,    ipfnBin         ,1
56
SYM    "author",   0,      fFalse,     kwdDest,    idestSkip
57
SYM    "buptim",   0,      fFalse,     kwdDest,    idestSkip
58
SYM    "bullet",   0,      fFalse,     kwdChar,    '*'             ,1
59
SYM    "cell",     0,      fFalse,     kwdChar,    0x09            ,1
60
SYM    "colortbl", 0,      fFalse,     kwdDest,    idestColor      ,1
61
SYM    "comment",  0,      fFalse,     kwdDest,    idestSkip
62
SYM    "creatim",  0,      fFalse,     kwdDest,    idestSkip
63
SYM    "doccomm",  0,      fFalse,     kwdDest,    idestSkip
64
SYM    "fonttbl",  0,      fFalse,     kwdDest,    idestSkip
65
SYM    "footer",   0,      fFalse,     kwdDest,    idestSkip
66
SYM    "footerf",  0,      fFalse,     kwdDest,    idestSkip
67
SYM    "footerl",  0,      fFalse,     kwdDest,    idestSkip
68
SYM    "footerr",  0,      fFalse,     kwdDest,    idestSkip
69
SYM    "footnote", 0,      fFalse,     kwdDest,    idestSkip
70
SYM    "ftncn",    0,      fFalse,     kwdDest,    idestSkip
71
SYM    "ftnsep",   0,      fFalse,     kwdDest,    idestSkip
72
SYM    "ftnsepc",  0,      fFalse,     kwdDest,    idestSkip
73
SYM    "header",   0,      fFalse,     kwdDest,    idestSkip
74
SYM    "headerf",  0,      fFalse,     kwdDest,    idestSkip
75
SYM    "headerl",  0,      fFalse,     kwdDest,    idestSkip
76
SYM    "headerr",  0,      fFalse,     kwdDest,    idestSkip
77
SYM    "info",     0,      fFalse,     kwdDest,    idestSkip
78
SYM    "keywords", 0,      fFalse,     kwdDest,    idestSkip
79
SYM    "operator", 0,      fFalse,     kwdDest,    idestSkip
80
SYM    "pict",     0,      fFalse,     kwdDest,    idestSkip
81
SYM    "printim",  0,      fFalse,     kwdDest,    idestSkip
82
SYM    "private1", 0,      fFalse,     kwdDest,    idestSkip
83
SYM    "revtim",   0,      fFalse,     kwdDest,    idestSkip
84
SYM    "row",      0,      fFalse,     kwdChar,    0x0a            ,1
85
SYM    "rxe",      0,      fFalse,     kwdDest,    idestSkip
86
SYM    "stylesheet",0,     fFalse,     kwdDest,    idestSkip
87
SYM    "subject",  0,      fFalse,     kwdDest,    idestSkip
88
SYM    "tc",       0,      fFalse,     kwdDest,    idestSkip
89
SYM    "title",    0,      fFalse,     kwdDest,    idestSkip
90
SYM    "trowd",    0,      fFalse,     kwdChar,    0x0a            ,1
91
SYM    "txe",      0,      fFalse,     kwdDest,    idestSkip
92
SYM    "xe",       0,      fFalse,     kwdDest,    idestSkip
93
SYM    "{",        0,      fFalse,     kwdChar,    '{'             ,1
94
SYM    "}",        0,      fFalse,     kwdChar,    '}'             ,1
95
SYM    "\",        0,      fFalse,     kwdChar,    '\'             ,1
96
end if
97
SYM    0xa,        0,      fFalse,     kwdChar,    0x0a            ,1
98
SYM    0xd,        0,      fFalse,     kwdChar,    0x0a            ,1
99
100
 
101
; %%Function: ecApplyPropChange
102
;
103
; Set the property identified by _iprop_ to the value _val_.
104
;
105
ecApplyPropChange:
106
; in : eax-iprop, ebx - value
107
    pusha
108
    cmp  [rds],rdsSkip
109
    jne  .noskip
110
  .ok:
111
    Return ecOK
112
  .noskip:
113
    lea  esi,[eax*2+eax+rgprop]  ;rgprop[iprop]
114
    mov  cx,word[esi]
115
    movzx edx,byte[esi+2]
116
    Prcheck Dop
117
    Prcheck Sep
118
    Prcheck Pap
119
    Prcheck Chp
120
    cmp  byte[esi],actnSpec
121
    jne  .bad
122
  .checked:
123
    cmp  cl,actnByte
124
    jne  .nob
125
    mov  byte[esi+edx],bl
126
    jmp  .ok
127
  .nob:
128
    cmp  cl,actnWord
129
    jne  .now
130
    mov  [esi+edx],ebx
131
    jmp  .ok
132
  .now:
133
    cmp  cl,actnSpec
134
    jne  .nos
135
    call ecParseSpecialProperty
136
    jmp  .__ex
137
  .nos:
138
    cmp  cl,actnFloatFS
139
    jne  .bad
140
    mov  [Chp+5],ebx
141
    call updFS
142
    jmp  .ok
143
  .bad:
144
    mov  eax,ecBadTable
145
    Epilog
146
147
 
148
    cmp  dword[Chp+5],0
149
    jnz  .no0
150
    mov  dword[Chp+5],24
151
  .no0:
152
    fild dword[Chp+5]
153
    fmul dword[Free-4]
154
    fst  dword[Free+12]
155
    fstp dword[Free+16]
156
    ret
157
;
158
; %%Function: ecParseSpecialProperty
159
;
160
; Set a property that requires code to evaluate.
161
;
162
163
 
164
; in : eax-iprop, ebx - value
165
;    cmp  al,ipropPard
166
;    jne  .nopap
167
;    push eax
168
;    mov  ecx,SIZE_Pap
169
;    mov  edi,RetroSave+9
170
;    xor  eax,eax
171
;    rep stosb
172
;    pop  eax
173
;  .nopap:
174
    MemSet ipropPard,Pap
175
    MemSet ipropPlain,Chp
176
    MemSet ipropSectd,Sep
177
    mov  eax,ecBadTable
178
    ret
179
  .ms:
180
    xor  eax,eax
181
    rep  stosb
182
    ret
183
184
 
185
; %%Function: ecTranslateKeyword.
186
;
187
; Step 3.
188
; Search rgsymRtf for szKeyword and evaluate it appropriately.
189
;
190
; Inputs:
191
; szKeyword:   The RTF control to evaluate.
192
; param:       The parameter of the RTF control.
193
; fParam:      fTrue if the control had a parameter; (that is, if param is valid
194
195
 
196
ecTranslateKeyword:
197
; in: esi->pasKeyword; ebx-param, eax-fParam
198
    pusha
199
    mov  edx,isymMax
200
    mov  edi,rgsymRtf
201
  .next:
202
    add  edi,5
203
    movzx ecx,byte[edi]
204
    inc  ecx
205
    push  edi esi ecx
206
    repe cmpsb
207
    pop  ecx esi edi
208
    jz   .found
209
    add  edi,ecx
210
;    inc edi
211
    dec  edx
212
    test edx,edx
213
    jne  .next
214
    cmp  dl,[fSkipDestIfUnk]
215
    jz   .discard
216
    mov  [rds],rdsSkip
217
    mov  [fSkipDestIfUnk],dl
218
  .discard:
219
    Return ecOK
220
  .found:
221
    and  [fSkipDestIfUnk],0
222
    mov  cx,[edi-3]
223
    cmp  ch,kwdProp
224
    jne  .nop
225
    test cl,cl
226
    jnz  .usedeflt
227
    test al,al
228
    jnz  .validparm
229
  .usedeflt:
230
    mov  ebx,[edi-5]
231
  .validparm:
232
    movzx eax,byte[edi-1]
233
    call ecApplyPropChange
234
    jmp  .__ex
235
  .nop:
236
    movzx eax,byte[edi-1]
237
    cmp  ch,kwdChar
238
    jne  .noc
239
  .pchar:
240
    mov  edi,[esp]
241
    test eax,eax
242
    jz   .__ex
243
    mov  esi,[esp+36]
244
    call  ecParseChar
245
    mov  [esp],edi
246
    mov  [esp+36],esi
247
    jmp  .__ex
248
  .noc:
249
    cmp  ch,kwdDest
250
    jne  .nod
251
    call ecChangeDest
252
    jmp  .__ex
253
  .nod:
254
    cmp  ch,kwdSpec
255
    jne  .nos
256
    call ecParseSpecialKeyword
257
    jmp  .__ex
258
  .nos:
259
    cmp  ch,kwdColor
260
    jne  .nocol
261
    cmp  [rds],rdsColor
262
    jne  .bad
263
    mov  edx,[colorptr]
264
    mov  ecx,eax
265
    mov  esi,0xff
266
    shl  esi,cl
267
    not  esi
268
    shl  ebx,cl
269
    and  [edx],esi
270
    or   [edx],ebx
271
  .okk:
272
    Return ecOK
273
  .nocol:
274
    cmp  ch,kwdUC
275
    jne  .bad
276
    mov  eax,[esp+36]
277
    cmp  byte[eax],'\'
278
    je   .nobyte
279
    inc  dword[esp+36]
280
  .nobyte:
281
    cmp  ebx,0x400
282
    jb   .okk
283
    mov  eax,ebx
284
    uc2oem
285
    cmp  ecx,1
286
    jae  .pchar
287
    lea  eax,[ebx-0x410+0xc0]
288
    jmp  .pchar
289
  .bad:
290
    mov  eax,ecBadTable
291
    Epilog
292
293
 
294
;
295
; Change to the destination specified by idest.
296
; There's usually more to do here than this...
297
298
 
299
; in: eax- idest
300
    cmp  [rds],rdsSkip
301
    jne  .noskip
302
    jmp  .okk;Return ecOK
303
  .noskip:
304
    cmp  eax,rdsColor
305
    jne  .nocol
306
    mov  [rds],al
307
    jmp  .okk
308
  .nocol:
309
    mov  [rds],rdsSkip
310
  .okk:
311
    mov  eax,ecOK
312
  .ex:
313
    ret
314
315
 
316
;
317
; The destination specified by rds is coming to a close.
318
; If there's any cleanup that needs to be done, do it now.
319
ecEndGroupAction:
320
; in: eax-rds
321
      mov  eax,ecOK
322
      ret
323
324
 
325
;
326
; Evaluate an RTF control that needs special processing.
327
328
 
329
; in: eax-IPFN
330
    cmp  [rds],rdsSkip
331
    jne  .noskip
332
    cmp  eax,ipfnBin
333
    jne  .ok
334
  .noskip:
335
    cmp  eax,ipfnBin
336
    jne  .nobin
337
    mov  [ris],risBin
338
    push [lParam]
339
    pop  [cbBin]
340
    jmp  .ok
341
  .nobin:
342
    cmp  eax,ipfnSkipDest
343
    jne  .noskd
344
    mov  [fSkipDestIfUnk],fTrue
345
    jmp  .ok
346
  .noskd:
347
    cmp  eax,ipfnHex
348
    jne  .nohex
349
    mov  [ris],risHex
350
    jmp  .ok
351
  .nohex:
352
    Return ecBadTable
353
  .ok:
354
    mov  eax,ecOK
355
  .__ex:
356
    ret
357
358
 
359
rgprop:
360
; Property descriptions
361
;PROP rgprop [ipropMax] = {
362
PROP    actnByte,   propChp,    0       ; ipropBold
363
PROP    actnByte,   propChp,    1     ; ipropItalic
364
PROP    actnByte,   propChp,    2  ; ipropUnderline
365
PROP    actnWord,   propPap,    0      ; ipropLeftInd
366
PROP    actnWord,   propPap,    4     ; ipropRightInd
367
PROP    actnWord,   propPap,    8     ; ipropFirstInd
368
PROP    actnWord,   propSep,    0       ; ipropCols
369
PROP    actnWord,   propSep,    5       ; ipropPgnX
370
PROP    actnWord,   propSep,    9       ; ipropPgnY
371
PROP    actnWord,   propDop,    0      ; ipropXaPage
372
PROP    actnWord,   propDop,    4      ; ipropYaPage
373
PROP    actnWord,   propDop,    8      ; ipropXaLeft
374
PROP    actnWord,   propDop,    12     ; ipropXaRight
375
PROP    actnWord,   propDop,    16       ; ipropYaTop
376
PROP    actnWord,   propDop,    20    ; ipropYaBottom
377
PROP    actnWord,   propDop,    24    ; ipropPgnStart
378
PROP    actnByte,   propSep,    4         ; ipropSbk
379
PROP    actnByte,   propSep,    13   ; ipropPgnFormat
380
PROP    actnByte,   propDop,    28    ; ipropFacingp
381
PROP    actnByte,   propDop,    29  ; ipropLandscape
382
PROP    actnByte,   propPap,    12  ; ipropJust
383
PROP    actnSpec,   propPap,    0   ; ipropPard
384
PROP    actnSpec,   propChp,    0   ; ipropPlain
385
PROP    actnSpec,   propSep,    0   ; ipropSectd
386
PROP    actnByte,   propChp,    3   ; ipropForeColor
387
PROP    actnByte,   propChp,    4   ; ipropFont
388
PROP    actnFloatFS,propChp,    5   ; ipropFontSize
389