WW8: Fixed the import of nested SET / FILLIN fields

n#634478
diff --git a/sw/source/filter/ww8/ww8par5.cxx b/sw/source/filter/ww8/ww8par5.cxx
index 5d8e89b..b63924d 100644
--- a/sw/source/filter/ww8/ww8par5.cxx
+++ b/sw/source/filter/ww8/ww8par5.cxx
@@ -234,19 +234,28 @@ xub_StrLen _ReadFieldParams::FindNextStringPiece(const xub_StrLen nStart)
    while( (nLen > n) && (aData.GetChar( n ) == ' ') )
        ++n;

    if ( aData.GetChar( n ) == 0x13 )
    {
        // Skip the nested field code since it's not supported
        while ( ( nLen > n ) && ( aData.GetChar( n ) != 0x14 ) )
            n++;
    }

    if( nLen == n )
        return STRING_NOTFOUND;     // String End reached!

    if(     (aData.GetChar( n ) == '"')     // Anfuehrungszeichen vor Para?
        ||  (aData.GetChar( n ) == 0x201c)
        ||  (aData.GetChar( n ) == 132) )
        ||  (aData.GetChar( n ) == 132)
        ||  (aData.GetChar( n ) == 0x14) )
    {
        n++;                        // Anfuehrungszeichen ueberlesen
        n2 = n;                     // ab hier nach Ende suchen
        while(     (nLen > n2)
                && (aData.GetChar( n2 ) != '"')
                && (aData.GetChar( n2 ) != 0x201d)
                && (aData.GetChar( n2 ) != 147) )
                && (aData.GetChar( n2 ) != 147)
                && (aData.GetChar( n2 ) != 0x15) )
            n2++;                   // Ende d. Paras suchen
    }
    else                        // keine Anfuehrungszeichen
@@ -1025,6 +1034,8 @@ long SwWW8ImplReader::Read_Field(WW8PLCFManResult* pRes)

    ASSERT(bOk, "WW8: Bad Field!\n");
    if (aF.nId == 33) aF.bCodeNest=false; //#124716#: do not recurse into nested page fields
    bool bCodeNest = aF.bCodeNest;
    if ( aF.nId == 6 ) bCodeNest = false; // We can handle them and loose the inner data

    maFieldStack.push_back(FieldEntry(*pPaM->GetPoint(), aF.nId));

@@ -1054,7 +1065,7 @@ long SwWW8ImplReader::Read_Field(WW8PLCFManResult* pRes)
        return aF.nLen;

    // keine Routine vorhanden
    if (bNested || !aWW8FieldTab[aF.nId] || aF.bCodeNest)
    if (bNested || !aWW8FieldTab[aF.nId] || bCodeNest)
    {
        if( nFieldTagBad[nI] & nMask )      // Flag: Tag it when bad
            return Read_F_Tag( &aF );       // Resultat nicht als Text
@@ -1073,8 +1084,9 @@ long SwWW8ImplReader::Read_Field(WW8PLCFManResult* pRes)
        if ( STRING_NOTFOUND == nSpacePos )
            nSpacePos = aStr.Len( );
        xub_StrLen nSearchPos = STRING_NOTFOUND;
        if ( ( ( nSearchPos = aStr.Search('.') ) != STRING_NOTFOUND && nSearchPos < nSpacePos ) ||
             ( ( nSearchPos = aStr.Search('/') ) != STRING_NOTFOUND && nSearchPos < nSpacePos ) )
        if ( !( aStr.EqualsAscii( "=", 1, 1 ) ) && (
                ( ( nSearchPos = aStr.Search('.') ) != STRING_NOTFOUND && nSearchPos < nSpacePos ) ||
                ( ( nSearchPos = aStr.Search('/') ) != STRING_NOTFOUND && nSearchPos < nSpacePos ) ) )
            return aF.nLen;
        else
        {
@@ -1092,8 +1104,17 @@ long SwWW8ImplReader::Read_Field(WW8PLCFManResult* pRes)
    {                                   // Lies Feld
        long nOldPos = pStrm->Tell();
        String aStr;
        aF.nLCode = pSBase->WW8ReadString( *pStrm, aStr, pPlcxMan->GetCpOfs()+
            aF.nSCode, aF.nLCode, eTextCharSet );
        if ( aF.nId == 6 && aF.bCodeNest )
        {
            // TODO Extract the whole code string using the nested codes
            aF.nLCode = pSBase->WW8ReadString( *pStrm, aStr, pPlcxMan->GetCpOfs() +
                aF.nSCode, aF.nSRes - aF.nSCode - 1, eTextCharSet );
        }
        else
        {
            aF.nLCode = pSBase->WW8ReadString( *pStrm, aStr, pPlcxMan->GetCpOfs()+
                aF.nSCode, aF.nLCode, eTextCharSet );
        }

        // --> OD 2005-07-25 #i51312# - graphics inside field code not supported
        // by Writer. Thus, delete character 0x01, which stands for such a graphic.
@@ -2147,7 +2168,7 @@ eF_ResT SwWW8ImplReader::Read_F_Ref( WW8FieldDesc*, String& rStr )
            */
            SwGetRefField aFld(
                (SwGetRefFieldType*)rDoc.GetSysFldType( RES_GETREFFLD ),
                sOrigBkmName,REF_BOOKMARK,0,REF_CONTENT);
                sBkmName,REF_BOOKMARK,0,REF_CONTENT);
            pReffingStck->NewAttr( *pPaM->GetPoint(), SwFmtFld(aFld) );
            pReffingStck->SetAttr( *pPaM->GetPoint(), RES_TXTATR_FIELD);
        }