Lines 2048-2071
uno::Reference< XHyphenatedWord > SwDoc
Link Here
|
2048 |
return aHyphArg.GetHyphWord(); // will be set by lcl_HyphenateNode |
2048 |
return aHyphArg.GetHyphWord(); // will be set by lcl_HyphenateNode |
2049 |
} |
2049 |
} |
2050 |
|
2050 |
|
2051 |
void ReplaceTabsStr( String& rStr, const String& rSrch, const String& rRepl ) |
2051 |
void ActualStrReplace( String& rReplStr, const String& rFndStr, SwPaM& rPam ) |
2052 |
{ |
2052 |
{ |
|
|
2053 |
String sTab( '\t' ); |
2054 |
sal_Unicode sSrchChrs[] = {'\\', '&', 0}; |
2055 |
String sTmp; |
2056 |
|
2053 |
xub_StrLen nPos = 0; |
2057 |
xub_StrLen nPos = 0; |
2054 |
while( STRING_NOTFOUND != ( nPos = rStr.Search( rSrch, nPos )) ) |
2058 |
sal_Char sFndChar; |
|
|
2059 |
while( STRING_NOTFOUND != ( nPos = rReplStr.SearchChar( sSrchChrs, nPos )) ) |
2055 |
{ |
2060 |
{ |
2056 |
// wurde das escaped? |
2061 |
// Ampersand gefunden? |
2057 |
if( nPos && '\\' == rStr.GetChar( nPos-1 )) |
2062 |
if(rReplStr.GetChar( nPos ) == '&') |
2058 |
{ |
2063 |
{ |
2059 |
// noch nicht am Ende ?? |
2064 |
rReplStr.Erase( nPos, 1 ); // Ampersand löschen |
2060 |
rStr.Erase( nPos-1, 1 ); // den \\ noch loeschen |
2065 |
// kompletten Fundstring einsetzen |
2061 |
if( nPos >= rStr.Len() ) |
2066 |
rReplStr.Insert( rFndStr, nPos ); |
2062 |
break; |
2067 |
// und drübersteigen |
|
|
2068 |
nPos += rFndStr.Len(); |
2063 |
} |
2069 |
} |
2064 |
else |
2070 |
else |
2065 |
{ |
2071 |
{ |
2066 |
rStr.Erase( nPos, rSrch.Len() ); |
2072 |
// noch mindestens ein Zeichen mehr vorhanden? |
2067 |
rStr.Insert( rRepl, nPos ); |
2073 |
if( nPos + 1 < rReplStr.Len()) |
2068 |
nPos += rRepl.Len(); |
2074 |
{ |
|
|
2075 |
sFndChar = rReplStr.GetChar( nPos + 1 ); |
2076 |
switch(sFndChar) |
2077 |
{ |
2078 |
// sind beide zusammen ein escapter Backslash |
2079 |
// oder ein escaptes Ampersand? |
2080 |
case '\\': |
2081 |
case '&': |
2082 |
rReplStr.Erase( nPos, 1 ); // dann unescapen |
2083 |
nPos++; // und dann drübersteigen |
2084 |
break; |
2085 |
// sind beide zusammen ein Tab? |
2086 |
case 't': |
2087 |
rReplStr.Erase( nPos, 2 ); // beide löschen |
2088 |
rReplStr.Insert( sTab, nPos ); // echten Tab einsetzen |
2089 |
nPos++; // und dann drübersteigen |
2090 |
break; |
2091 |
// sind beide zusammen ein Platzhalter für ein Register? |
2092 |
case '0': |
2093 |
case '1': |
2094 |
case '2': |
2095 |
case '3': |
2096 |
case '4': |
2097 |
case '5': |
2098 |
case '6': |
2099 |
case '7': |
2100 |
case '8': |
2101 |
case '9': |
2102 |
// index draus machen |
2103 |
int i = sFndChar - '0'; // geht's besser? |
2104 |
// ist das angegebene Register überhaupt befüllt? |
2105 |
// was tun wenn nicht? Stehen lassen, Fehlermeldung oder entfernen (wie jetzt)? |
2106 |
if(i <= rPam.searchResult.subRegExpressions) |
2107 |
{ |
2108 |
rReplStr.Erase( nPos, 2 ); // beide löschen |
2109 |
// nStt ist der Anfang der Selektion |
2110 |
// die Positionen in den Registern sind absolut und |
2111 |
// müssen erst auf den Selektionsanfang relativiert werden |
2112 |
xub_StrLen nSttReg = rPam.searchResult.startOffset[i] - |
2113 |
rPam.searchResult.startOffset[0], |
2114 |
nRegLen = rPam.searchResult.endOffset[i] - |
2115 |
rPam.searchResult.startOffset[i]; |
2116 |
// Registerteil aus Fundstring kopieren, |
2117 |
sTmp = rFndStr.Copy(nSttReg, nRegLen); |
2118 |
// einsetzen |
2119 |
rReplStr.Insert( sTmp, nPos ); |
2120 |
// und drübersteigen |
2121 |
nPos += sTmp.Len(); |
2122 |
} |
2123 |
break; |
2124 |
// folgt ein Zeichen ohne Sonderbedeutung? |
2125 |
// was dann? Stehen lassen(wie jetzt), Fehlermeldung oder entfernen? |
2126 |
default: |
2127 |
nPos += 2; // beide Zeichen übergehen |
2128 |
break; |
2129 |
} |
2130 |
} |
2069 |
} |
2131 |
} |
2070 |
} |
2132 |
} |
2071 |
} |
2133 |
} |
Lines 2143-2152
sal_Bool SwDoc::Replace( SwPaM& rPam, co
Link Here
|
2143 |
sFndStr.EraseAllChars( CH_TXTATR_BREAKWORD ); |
2205 |
sFndStr.EraseAllChars( CH_TXTATR_BREAKWORD ); |
2144 |
sFndStr.EraseAllChars( CH_TXTATR_INWORD ); |
2206 |
sFndStr.EraseAllChars( CH_TXTATR_INWORD ); |
2145 |
|
2207 |
|
2146 |
String sTmp( String::CreateFromAscii( |
2208 |
ActualStrReplace(sRepl, sFndStr, rPam); |
2147 |
RTL_CONSTASCII_STRINGPARAM( "\\t" ))); |
|
|
2148 |
ReplaceTabsStr( sRepl, String( '&' ), sFndStr ); |
2149 |
ReplaceTabsStr( sRepl, sTmp, String( '\t' ) ); |
2150 |
} |
2209 |
} |
2151 |
|
2210 |
|
2152 |
SwDataChanged aTmp( aDelPam, 0 ); |
2211 |
SwDataChanged aTmp( aDelPam, 0 ); |