Module: wine Branch: master Commit: bcbf9eeb2d23bba9c664bb2e865e247cdb01f7cb URL: http://source.winehq.org/git/wine.git/?a=commit;h=bcbf9eeb2d23bba9c664bb2e86...
Author: Eric Pouech eric.pouech@orange.fr Date: Sun Jan 27 19:02:28 2008 +0100
riched20: Start implementing object reading out RTF stream.
---
dlls/riched20/editor.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 42 insertions(+), 0 deletions(-)
diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c index 02d5ca8..3584525 100644 --- a/dlls/riched20/editor.c +++ b/dlls/riched20/editor.c @@ -849,6 +849,47 @@ skip_group: RTFRouteToken(info); /* feed "}" back to router */ }
+/* for now, lookup the \result part and use it, whatever the object */ +static void ME_RTFReadObjectGroup(RTF_Info *info) +{ + for (;;) + { + RTFGetToken (info); + if (info->rtfClass == rtfEOF) + return; + if (RTFCheckCM(info, rtfGroup, rtfEndGroup)) + break; + if (RTFCheckCM(info, rtfGroup, rtfBeginGroup)) + { + RTFGetToken (info); + if (info->rtfClass == rtfEOF) + return; + if (RTFCheckCMM(info, rtfControl, rtfDestination, rtfObjResult)) + { + int level = 1; + + while (RTFGetToken (info) != rtfEOF) + { + if (info->rtfClass == rtfGroup) + { + if (info->rtfMajor == rtfBeginGroup) level++; + else if (info->rtfMajor == rtfEndGroup && --level < 0) break; + } + RTFRouteToken(info); + } + } + else RTFSkipGroup(info); + continue; + } + if (!RTFCheckCM (info, rtfControl, rtfObjAttr)) + { + FIXME("Non supported attribute: %d %d %d\n", info->rtfClass, info->rtfMajor, info->rtfMinor); + return; + } + } + RTFRouteToken(info); /* feed "}" back to router */ +} + static void ME_RTFReadHook(RTF_Info *info) { switch(info->rtfClass) { @@ -988,6 +1029,7 @@ static LRESULT ME_StreamIn(ME_TextEditor *editor, DWORD format, EDITSTREAM *stre RTFInit(&parser); RTFSetReadHook(&parser, ME_RTFReadHook); RTFSetDestinationCallback(&parser, rtfPict, ME_RTFReadPictGroup); + RTFSetDestinationCallback(&parser, rtfObject, ME_RTFReadObjectGroup); BeginFile(&parser);
/* do the parsing */