riched20: Start implementing object reading out RTF stream.

This commit is contained in:
Eric Pouech 2008-01-27 19:02:28 +01:00 committed by Alexandre Julliard
parent e5f91bab15
commit bcbf9eeb2d
1 changed files with 42 additions and 0 deletions

View File

@ -849,6 +849,47 @@ skip_group:
RTFRouteToken(info); /* feed "}" back to router */ 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) { static void ME_RTFReadHook(RTF_Info *info) {
switch(info->rtfClass) switch(info->rtfClass)
{ {
@ -988,6 +1029,7 @@ static LRESULT ME_StreamIn(ME_TextEditor *editor, DWORD format, EDITSTREAM *stre
RTFInit(&parser); RTFInit(&parser);
RTFSetReadHook(&parser, ME_RTFReadHook); RTFSetReadHook(&parser, ME_RTFReadHook);
RTFSetDestinationCallback(&parser, rtfPict, ME_RTFReadPictGroup); RTFSetDestinationCallback(&parser, rtfPict, ME_RTFReadPictGroup);
RTFSetDestinationCallback(&parser, rtfObject, ME_RTFReadObjectGroup);
BeginFile(&parser); BeginFile(&parser);
/* do the parsing */ /* do the parsing */