Index: sw/source/filter/ww8/ww8par5.cxx =================================================================== --- sw/source/filter/ww8/ww8par5.cxx (revision 1367861) +++ sw/source/filter/ww8/ww8par5.cxx (working copy) @@ -986,12 +986,14 @@ aF.nSCode, aF.nLCode, eTextCharSet ); pStrm->Seek( nOldPos ); + //comment part of #124725# change since it makes regression of field import. #i119446,#i119585. + //#124725# field codes which contain '/' or '.' are not displayed in WinWord - if (!aStr.EqualsAscii(" ADDIN", 0, 6) && - (aStr.Search('.') != STRING_NOTFOUND || - aStr.Search('/') != STRING_NOTFOUND)) - return aF.nLen; - else + //if (!aStr.EqualsAscii(" ADDIN", 0, 6) && + // (aStr.Search('.') != STRING_NOTFOUND || + // aStr.Search('/') != STRING_NOTFOUND)) + // return aF.nLen; + //else return aF.nLen - aF.nLRes - 1; // so viele ueberlesen, das Resultfeld // wird wie Haupttext eingelesen } @@ -2506,7 +2508,7 @@ { _ReadFieldParams aReadParam( rStr ); long cChar = aReadParam.SkipToNextToken(); - if ('o' == cChar) + if ('o' == cChar || 'O' == cChar) Read_SubF_Combined(aReadParam); else if ('*' == cChar) Read_SubF_Ruby(aReadParam); @@ -2516,46 +2518,103 @@ void SwWW8ImplReader::Read_SubF_Combined( _ReadFieldParams& rReadParam) { String sCombinedCharacters; - if ((-2 == rReadParam.SkipToNextToken()) && - rReadParam.GetResult().EqualsIgnoreCaseAscii('(', 1, 0)) - { - for (int i=0;i<2;i++) - { - if ('s' == rReadParam.SkipToNextToken()) - { - long cChar = rReadParam.SkipToNextToken(); - if (-2 != rReadParam.SkipToNextToken()) - break; - String sF = rReadParam.GetResult(); - if ((('u' == cChar) && sF.EqualsIgnoreCaseAscii('p', 1, 0)) - || (('d' == cChar) && sF.EqualsIgnoreCaseAscii('o', 1, 0))) - { - if (-2 == rReadParam.SkipToNextToken()) - { - String sPart = rReadParam.GetResult(); - xub_StrLen nBegin = sPart.Search('('); + _ReadFieldParams aOriFldParam = rReadParam; + long cGetChar = rReadParam.SkipToNextToken(); + switch(cGetChar) + { + case 'a': + case 'A': + { + String sTemp = rReadParam.GetResult(); + if ( !sTemp.EqualsIgnoreCaseAscii("d", 1, 0) ) + { + break; + } + rReadParam.SkipToNextToken(); + } + case -2: + { + if ( rReadParam.GetResult().EqualsIgnoreCaseAscii('(', 1, 0) ) + { + for (int i=0;i<2;i++) + { + if ('s' == rReadParam.SkipToNextToken()) + { + long cChar = rReadParam.SkipToNextToken(); + if (-2 != rReadParam.SkipToNextToken()) + break; + String sF = rReadParam.GetResult(); + if ((('u' == cChar) && sF.EqualsIgnoreCaseAscii('p', 1, 0)) + || (('d' == cChar) && sF.EqualsIgnoreCaseAscii('o', 1, 0))) + { + if (-2 == rReadParam.SkipToNextToken()) + { + String sPart = rReadParam.GetResult(); + xub_StrLen nBegin = sPart.Search('('); - //Word disallows brackets in this field, which - //aids figuring out the case of an end of )) vs ) - xub_StrLen nEnd = sPart.Search(')'); + //Word disallows brackets in this field, which + //aids figuring out the case of an end of )) vs ) + xub_StrLen nEnd = sPart.Search(')'); - if ((nBegin != STRING_NOTFOUND) && - (nEnd != STRING_NOTFOUND)) - { - sCombinedCharacters += - sPart.Copy(nBegin+1,nEnd-nBegin-1); - } - } - } - } - } - } - if (sCombinedCharacters.Len()) - { - SwCombinedCharField aFld((SwCombinedCharFieldType*) - rDoc.GetSysFldType(RES_COMBINED_CHARS),sCombinedCharacters); - rDoc.InsertPoolItem(*pPaM, SwFmtFld(aFld), 0); - } + if ((nBegin != STRING_NOTFOUND) && + (nEnd != STRING_NOTFOUND)) + { + sCombinedCharacters += + sPart.Copy(nBegin+1,nEnd-nBegin-1); + } + } + } + } + } + if (sCombinedCharacters.Len()) + { + SwCombinedCharField aFld((SwCombinedCharFieldType*) + rDoc.GetSysFldType(RES_COMBINED_CHARS),sCombinedCharacters); + rDoc.InsertPoolItem(*pPaM, SwFmtFld(aFld), 0); + } + else if ( sCombinedCharacters.Len() == 0 ) + { + String sPart = aOriFldParam.GetResult(); + xub_StrLen nBegin = sPart.Search('('); + xub_StrLen nEnd = sPart.Search(')'); + xub_StrLen nOldBegin = nBegin; + for (int i = nBegin;i< nEnd-1;i++) + { + char cC = sPart.GetChar(nBegin+1); + if ( (-1 < cC) && (cC < 32) ) + { + nBegin++; + } + else if ( i > nOldBegin) + { + nBegin--; + } + else + break; + } + if ((nBegin != STRING_NOTFOUND) && + (nEnd != STRING_NOTFOUND)) + { + sCombinedCharacters += + sPart.Copy(nBegin+1,nEnd-nBegin-1); + } + if (sCombinedCharacters.Len()) + { + if (STRING_NOTFOUND != (nEnd = sPart.Search(','))) + { + sCombinedCharacters = + sPart.Copy(nBegin+1,nEnd-nBegin-1); + } + SwInputField aFld( (SwInputFieldType*)rDoc.GetSysFldType( RES_INPUTFLD ), + sCombinedCharacters, sCombinedCharacters, INP_TXT, 0 ); + rDoc.InsertPoolItem( *pPaM, SwFmtFld( aFld ), 0 ); // insert input field + } + } + } + } + default: + break; + } } void SwWW8ImplReader::Read_SubF_Ruby( _ReadFieldParams& rReadParam)