Subversion Repositories Kolibri OS

Rev

Rev 31 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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