[ooo-build-commit] bin/add_acor.py bin/piece Makefile.shared patches/dev300 src/acor.csv src/acor_vi-VN.dat

Cédric Bosdonnat cbosdo at kemper.freedesktop.org
Fri Jan 22 08:02:14 PST 2010


 Makefile.shared                  |    3 
 bin/add_acor.py                  |   84 +
 bin/piece/unpack-extras          |    4 
 patches/dev300/cws-cbosdo01.diff | 1807 ++++++++++++++++++++++++++++++++++-----
 src/acor.csv                     |    4 
 src/acor_vi-VN.dat               |binary
 6 files changed, 1700 insertions(+), 202 deletions(-)

New commits:
commit 688b8a53cd679808f0f0d70b8cdf42c780b8c0f0
Author: Cédric Bosdonnat <cedricbosdo at openoffice.org>
Date:   Fri Jan 22 16:56:57 2010 +0100

    Update cws-cbosdo01.diff with CWS changes
    
    * Makefile.shared:
        Added some target to run add_acor.py
    
    * bin/add_acor.py:
        Script adding the new autocorrection elements from src/acor.csv
    
    * bin/piece/unpack-extras:
        Added some lines to update acor_vi-VN.dat
    
    * patches/dev300/cws-cbosdo01.diff:
        Updated from CWS cbosdo01
    
    * src/acor.csv:
        the 1/2, 1/4 and 3/4 autocorrection to add due to changes in
    cbosdo01. These values will be added by the upstream once the CWS is
    integrated.
    
    * src/acor_vi-VN.dat:
        Fixes for the Vietnamese autocorrection replacement list:
    badly-formed DocumentList.xml file.

diff --git a/Makefile.shared b/Makefile.shared
index 7fa3e87..ece1b34 100644
--- a/Makefile.shared
+++ b/Makefile.shared
@@ -30,6 +30,9 @@ $(STAMP_DIR)/artwork.install : $(OOBUILDDIR)/unpack \
 	$(TOOLSDIR)/bin/install-artwork $(top_srcdir)/src $(OOBUILDDIR)
 	touch $@
 
+autocorr.apply: $(top_srcdir)/bin/add_acor.py $(top_srcdir)/src/acor.csv $(STAMP_DIR)/autocorr.apply
+	$(top_srcdir)/bin/add_acor.py $(OOBUILDDIR) $(top_srcdir)/src/acor.csv
+
 patch.apply: $(OOBUILDDIR)/unpack $(STAMP_DIR)/patch.apply 
 $(STAMP_DIR)/patch.apply : $(top_srcdir)/patches/apply.pl \
 			   $(top_srcdir)/patches/*/*.diff \
diff --git a/bin/add_acor.py b/bin/add_acor.py
new file mode 100755
index 0000000..aeeaf1f
--- /dev/null
+++ b/bin/add_acor.py
@@ -0,0 +1,84 @@
+#!/usr/bin/python
+
+import zipfile
+import xml.dom.minidom
+import os
+import csv
+import sys
+
+
+def read_list( file ):
+    langs = dict();
+
+    file_hd = open( file )
+    reader = csv.reader( file_hd )
+    reader.next( ) # Skip the headers line
+    for row in reader:
+        locale = row[0]
+        if locale == "":
+            locale = 'all'
+        values = []
+        if locale in langs:
+            values = langs[locale]
+        values.append( ( row[1], unicode( row[2], "utf-8" ) ) )
+        langs[locale] = values
+    return langs
+
+def extract_items( data, locale ):
+    entries = []
+    if 'all' in data:
+        entries = entries + data['all']
+    if locale in data:
+        entries = entries + data[locale]
+    return entries
+
+def update_zip( file, items ):
+    tmpname = file + ".new"
+
+    # First open the dat to extract the existing Documentlist.xml file
+    inFile = zipfile.ZipFile( file, "r" )
+    content = inFile.read( "DocumentList.xml" )
+   
+    xmlDoc = xml.dom.minidom.parseString( content )
+
+    # Actually add the elements in the XML file
+    for pair in items:
+        node = xmlDoc.createElement( "block-list:block" )
+        node.setAttribute( "block-list:addreviated-name", pair[0] )
+        node.setAttribute( "block-list:name", pair[1] )
+        xmlDoc.documentElement.appendChild( node )
+    
+    # Open the dat file for writing now
+    outFile = zipfile.ZipFile( tmpname, "w" )
+    data = xmlDoc.toxml().encode( "utf-8" )
+    for name in inFile.namelist( ):
+        if name != "DocumentList.xml":
+            outFile.writestr( name, inFile.read( name ) )
+    
+    outFile.writestr( "DocumentList.xml", data )
+    inFile.close()
+    outFile.close()
+    
+    # Rename the new file
+    os.rename( tmpname, file )
+
+def main():
+    if ( len( sys.argv ) == 3 ):
+        builddir = sys.argv[1]
+        datafile = sys.argv[2]
+    else:
+        print "arguments: build-dir data-file.csv"
+        sys.exit( 1 )
+
+    data = read_list( datafile )
+    for root, dirs, files in os.walk( os.path.join( builddir, "extras", "source", "autotext", "lang" ) ):
+        for f in files:
+            if ( f.endswith( ".dat" ) ):
+                locale = os.path.basename( root )
+                items = extract_items( data, locale )
+                if len( items ) > 0:
+                    print "Updating: " + os.path.join( root, f )
+                    update_zip( os.path.join( root, f ), items )
+
+if __name__ == '__main__':
+    main( )
diff --git a/bin/piece/unpack-extras b/bin/piece/unpack-extras
index ccc442d..3ca8b3a 100755
--- a/bin/piece/unpack-extras
+++ b/bin/piece/unpack-extras
@@ -17,3 +17,7 @@ $GNUCP -f $TOOLSDIR/src/acor_ru-RU.dat $OOBUILDDIR/extras/source/autotext/lang/r
 # FIXME: remove when it goes upstream (i#91304)
 echo "Copying Slovak autocorrection into tree"
 $GNUCP -f $TOOLSDIR/src/acor_sk-SK.dat $OOBUILDDIR/extras/source/autotext/lang/sk || exit 1;
+
+# FIXME Remove when upstreamed (cbosdo01)
+echo "Copying Vietnamese autocorrection into tree"
+$GNUCP -f $TOOLSDIR/src/acor_vi-VN.dat $OOBUILDDIR/extras/source/autotext/lang/vi || exit 1;
diff --git a/patches/dev300/cws-cbosdo01.diff b/patches/dev300/cws-cbosdo01.diff
index 7c3e782..a190b50 100644
--- a/patches/dev300/cws-cbosdo01.diff
+++ b/patches/dev300/cws-cbosdo01.diff
@@ -1,60 +1,151 @@
 diff --git officecfg/registry/schema/org/openoffice/Office/Common.xcs officecfg/registry/schema/org/openoffice/Office/Common.xcs
-index 8057641..d158081 100644
+index 25d1b55..1ae36e4 100644
 --- officecfg/registry/schema/org/openoffice/Office/Common.xcs
 +++ officecfg/registry/schema/org/openoffice/Office/Common.xcs
-@@ -1320,6 +1320,17 @@ Dymamic border coloring means that when the mouse is hovered over a control, and
+@@ -1298,25 +1298,25 @@ Dymamic border coloring means that when the mouse is hovered over a control, and
  				</info>
  				<value>true</value>
  			</prop>
+-			<prop oor:name="ChangeFraction" oor:type="xs:boolean">
++			<prop oor:name="ChangeDash" oor:type="xs:boolean">
+ 				<!-- OldPath: AutoCorrect/Options/All -->
+ 				<!-- OldLocation: Soffice.cfg -->
+-				<!-- UIHints: Tools  AutoCorrect/AutoFormat  Options  Replace 1/2... -->
++				<!-- UIHints: Tools  AutoCorrect/AutoFormat  Options - Replace dashes -->
+ 				<info>
+ 					<author>OS</author>
+-					<desc>Specifies if character combinations for fractions should be replaced with a corresponding single character.</desc>
+-					<label>Replace fractions</label>
++					<desc>Specifies if minus signs should be replaced by dashes automatically.</desc>
++					<label>Replace dashes</label>
+ 				</info>
+ 				<value>true</value>
+ 			</prop>
+-			<prop oor:name="ChangeDash" oor:type="xs:boolean">
 +			<prop oor:name="AddNonBreakingSpace" oor:type="xs:boolean">
-+				<!-- OldPath: AutoCorrect/Options/All -->
-+				<!-- OldLocation: Soffice.cfg -->
+ 				<!-- OldPath: AutoCorrect/Options/All -->
+ 				<!-- OldLocation: Soffice.cfg -->
+-				<!-- UIHints: Tools  AutoCorrect/AutoFormat  Options - Replace dashes -->
 +				<!-- UIHints: Tools  AutoCorrect/AutoFormat  Options - Add non-breaking space -->
-+				<info>
+ 				<info>
+-					<author>OS</author>
+-					<desc>Specifies if minus signs should be replaced by dashes automatically.</desc>
+-					<label>Replace dashes</label>
 +					<author>cedricbosdo</author>
 +					<desc>Adds a non-breaking space before the characters :;!? in french.</desc>
 +					<label>Add non-breaking space</label>
-+				</info>
-+				<value>true</value>
-+			</prop>
- 			<prop oor:name="RemoveDoubleSpaces" oor:type="xs:boolean">
- 				<!-- OldPath: AutoCorrect/Options/All -->
- 				<!-- OldLocation: Soffice.cfg -->
+ 				</info>
+ 				<value>true</value>
+ 			</prop>
 diff --git officecfg/registry/schema/org/openoffice/Office/Writer.xcs officecfg/registry/schema/org/openoffice/Office/Writer.xcs
-index 70e0888..f7155fd 100644
+index 70e0888..b2188dc 100644
 --- officecfg/registry/schema/org/openoffice/Office/Writer.xcs
 +++ officecfg/registry/schema/org/openoffice/Office/Writer.xcs
-@@ -4437,6 +4437,17 @@
+@@ -4415,25 +4415,25 @@
  						</info>
  						<value>true</value>
  					</prop>
+-					<prop oor:name="ChangeFraction" oor:type="xs:boolean">
++					<prop oor:name="ChangeDash" oor:type="xs:boolean">
+ 						<!-- OldPath: Writer/AutoFormat/Options -->
+ 						<!-- OldLocation: Soffice.cfg -->
+-						<!-- UIHints: Tools  AutoCorrect/AutoFormat  Options  Replace 1/2... -->
++						<!-- UIHints: Tools  AutoCorrect/AutoFormat  Options - Replace dashes -->
+ 						<info>
+ 							<author>OS</author>
+-							<desc>Specifies if character combinations for fractions are replaced with a corresponding single character.</desc>
+-							<label>Replace fractions</label>
++							<desc>Specifies if dashes are replaced automatically.</desc>
++							<label>Replace dashes</label>
+ 						</info>
+ 						<value>true</value>
+ 					</prop>
+-					<prop oor:name="ChangeDash" oor:type="xs:boolean">
 +					<prop oor:name="AddNonBreakingSpace" oor:type="xs:boolean">
-+						<!-- OldPath: Writer/AutoFormat/Options -->
-+						<!-- OldLocation: Soffice.cfg -->
+ 						<!-- OldPath: Writer/AutoFormat/Options -->
+ 						<!-- OldLocation: Soffice.cfg -->
+-						<!-- UIHints: Tools  AutoCorrect/AutoFormat  Options - Replace dashes -->
 +						<!-- UIHints: Tools  AutoCorrect/AutoFormat  Options - Add non-breaking space -->
-+						<info>
+ 						<info>
+-							<author>OS</author>
+-							<desc>Specifies if dashes are replaced automatically.</desc>
+-							<label>Replace dashes</label>
 +							<author>cedricbosdo</author>
 +							<desc>Adds a non-breaking space before the characters :!;? in french.</desc>
 +							<label>Add non-breaking space</label>
-+						</info>
-+						<value>true</value>
-+					</prop>
- 					<prop oor:name="DelEmptyParagraphs" oor:type="xs:boolean">
+ 						</info>
+ 						<value>true</value>
+ 					</prop>
+@@ -4459,17 +4459,6 @@
+ 						</info>
+ 						<value>true</value>
+ 					</prop>
+-					<prop oor:name="ReplaceQuote" oor:type="xs:boolean">
+-						<!-- OldPath: Writer/AutoFormat/Options -->
+-						<!-- OldLocation: Soffice.cfg -->
+-						<!-- UIHints: Tools  AutoCorrect/AutoFormat  Options  Replace Standard Quotes... -->
+-						<info>
+-							<author>OS</author>
+-							<desc>Specifies if standard quotes are replaced with custom quotes.</desc>
+-							<label>Replace standard quotes with custom quotes</label>
+-						</info>
+-						<value>true</value>
+-					</prop>
+ 					<prop oor:name="CombineParagraphs" oor:type="xs:boolean">
  						<!-- OldPath: Writer/AutoFormat/Options -->
  						<!-- OldLocation: Soffice.cfg -->
+diff --git svx/inc/helpid.hrc svx/inc/helpid.hrc
+index 22d3175..1d82b0b 100644
+--- svx/inc/helpid.hrc
++++ svx/inc/helpid.hrc
+@@ -607,6 +607,8 @@
+ #define HID_DBPATH_CTL_PATH					(HID_OFA_START + 125)
+ #define HID_DBPATH_HEADERBAR				(HID_OFA_START + 126)
+ #define HID_OFAPAGE_SMARTTAG_OPTIONS	    (HID_OFA_START + 127)
++#define HID_OFAPAGE_QUOTE_SW_CLB            (HID_OFA_START + 128)
++#define HID_OFAPAGE_QUOTE_CLB               (HID_OFA_START + 129)
+ 
+ #define HID_OPTIONS_DICT_EDIT_ENTRIES_LIST      (HID_SVX_EXT0_START + 28)
+ 
 diff --git svx/inc/svx/svxacorr.hxx svx/inc/svx/svxacorr.hxx
-index 6771086..d414aed 100644
+index 6771086..63c8d7c 100644
 --- svx/inc/svx/svxacorr.hxx
 +++ svx/inc/svx/svxacorr.hxx
-@@ -67,6 +67,7 @@ const long SaveWordWrdSttLst= 0x00000400;	// 2 GrB. am WortAnf. auto. aufnehmen
- const long IngnoreDoubleSpace= 0x00000800;	// 2 Spaces ignorieren
+@@ -55,7 +55,7 @@ class Window;
+ // Flags fuer die AutoKorrekt-Flags
+ const long CptlSttSntnc		= 0x00000001;	// Gross-Buchstaben am SatzAnfang
+ const long CptlSttWrd		= 0x00000002;	// keine 2 Gr.-Buchst. am WordAnfang
+-const long ChgFractionSymbol= 0x00000004;	// 1/2, 1/4, .. ersetzen
++const long AddNonBrkSpace   = 0x00000004;	// Add non breaking space before :;?!
+ const long ChgOrdinalNumber = 0x00000008;	// Ordinal-Number 1st, 2nd,..
+ const long ChgToEnEmDash    = 0x00000010;	// - -> Endash/Emdash
+ const long ChgWeightUnderl  = 0x00000020;	// * -> Fett, _ -> unterstreichen
+@@ -64,7 +64,7 @@ const long Autocorrect 		= 0x00000080;	// Autokorrektur aufrufen
+ const long ChgQuotes		= 0x00000100;	// doppelte Quotes ersetzen
+ const long SaveWordCplSttLst= 0x00000200;	// GrB. am SatzAnf. auto. aufnehmen
+ const long SaveWordWrdSttLst= 0x00000400;	// 2 GrB. am WortAnf. auto. aufnehmen
+-const long IngnoreDoubleSpace= 0x00000800;	// 2 Spaces ignorieren
++const long IgnoreDoubleSpace= 0x00000800;	// 2 Spaces ignorieren
  const long ChgSglQuotes		= 0x00001000;	// einfache Quotes ersetzen
  const long CorrectCapsLock  = 0x00002000;   // Correct accidental use of cAPS LOCK key
-+const long AddNonBrkSpace	= 0x00004000;	// Add non breaking space before :;?!
  
- const long ChgWordLstLoad	= 0x20000000;	// Ersetzungsliste geladen
- const long CplSttLstLoad	= 0x40000000;	// Exceptionlist fuer CplStart geladen
-@@ -369,6 +370,9 @@ public:
+@@ -218,7 +218,6 @@ class SVX_DLLPUBLIC SvxAutoCorrect
+ 
+     long nFlags;
+     sal_Unicode cStartDQuote, cEndDQuote, cStartSQuote, cEndSQuote,
+-                c1Div2, c1Div4, c3Div4,
+                 cEmDash, cEnDash;
+ 
+ 
+@@ -361,14 +360,15 @@ public:
+     BOOL FnCptlSttWrd( SvxAutoCorrDoc&, const String&,
+                                 xub_StrLen nSttPos, xub_StrLen nEndPos,
+                                 LanguageType eLang = LANGUAGE_SYSTEM );
+-    BOOL FnChgFractionSymbol( SvxAutoCorrDoc&, const String&,
+-                                xub_StrLen nSttPos, xub_StrLen nEndPos );
+     BOOL FnChgOrdinalNumber( SvxAutoCorrDoc&, const String&,
+                                 xub_StrLen nSttPos, xub_StrLen nEndPos,
+                                 LanguageType eLang = LANGUAGE_SYSTEM );
      BOOL FnChgToEnEmDash( SvxAutoCorrDoc&, const String&,
                                  xub_StrLen nSttPos, xub_StrLen nEndPos,
                                  LanguageType eLang = LANGUAGE_SYSTEM );
@@ -64,12 +155,32 @@ index 6771086..d414aed 100644
      BOOL FnSetINetAttr( SvxAutoCorrDoc&, const String&,
                                  xub_StrLen nSttPos, xub_StrLen nEndPos,
                                  LanguageType eLang = LANGUAGE_SYSTEM );
+@@ -390,6 +390,8 @@ public:
+ // (used to avoid occasional 'collisions' with (Thai) input-sequence-checking)
+     static sal_Bool		IsAutoCorrectChar( sal_Unicode cChar );
+ 
++    sal_Bool NeedsHardspaceAutocorr( sal_Unicode cChar );
++
+     CharClass& GetCharClass( LanguageType eLang )
+     {
+         if( !pCharClass || eLang != eCharClassLang )
 diff --git svx/inc/svx/swafopt.hxx svx/inc/svx/swafopt.hxx
-index 18ae7e0..eb557ea 100644
+index 18ae7e0..065ad24 100644
 --- svx/inc/svx/swafopt.hxx
 +++ svx/inc/svx/swafopt.hxx
-@@ -68,6 +68,7 @@ struct SVX_DLLPUBLIC SvxSwAutoFmtFlags
-     BOOL bChgFracionSymbol : 1;
+@@ -52,7 +52,6 @@ struct SVX_DLLPUBLIC SvxSwAutoFmtFlags
+ 
+     BYTE nRightMargin;
+ 
+-    BOOL bReplaceQuote : 1;
+     BOOL bAutoCorrect : 1;
+     BOOL bCptlSttSntnc : 1;
+     BOOL bCptlSttWrd : 1;
+@@ -65,9 +64,9 @@ struct SVX_DLLPUBLIC SvxSwAutoFmtFlags
+     BOOL bDelEmptyNode : 1;
+     BOOL bSetNumRule : 1;
+ 
+-    BOOL bChgFracionSymbol : 1;
      BOOL bChgOrdinalNumber : 1;
      BOOL bChgToEnEmDash : 1;
 +    BOOL bAddNonBrkSpace : 1;
@@ -77,193 +188,1001 @@ index 18ae7e0..eb557ea 100644
      BOOL bSetINetAttr : 1;
  
 diff --git svx/source/cui/autocdlg.cxx svx/source/cui/autocdlg.cxx
-index f4c0a21..15710a5 100644
+index f4c0a21..9afde32 100644
 --- svx/source/cui/autocdlg.cxx
 +++ svx/source/cui/autocdlg.cxx
-@@ -233,6 +233,7 @@ OfaAutocorrOptionsPage::OfaAutocorrOptionsPage( Window* pParent,
+@@ -231,9 +231,7 @@ OfaAutocorrOptionsPage::OfaAutocorrOptionsPage( Window* pParent,
+     sBoldUnderline      (SVX_RES(ST_BOLD_UNDER        )),
+     sURL                (SVX_RES(ST_DETECT_URL        )),
      sNoDblSpaces        (SVX_RES(STR_NO_DBL_SPACES    )),
-     sHalf               (SVX_RES(ST_FRACTION          )),
+-    sHalf               (SVX_RES(ST_FRACTION          )),
      sDash    			(SVX_RES(ST_DASH	         	)),
-+    sNonBrkSpace		(SVX_RES(ST_NON_BREAK_SPACE   )),
-     sFirst              (SVX_RES(ST_ORDINAL           )),
+-    sFirst              (SVX_RES(ST_ORDINAL           )),
      sAccidentalCaps     (SVX_RES(ST_CORRECT_ACCIDENTAL_CAPS_LOCK))
  {
-@@ -279,6 +280,7 @@ BOOL OfaAutocorrOptionsPage::FillItemSet( SfxItemSet& )
-     pAutoCorrect->SetAutoCorrFlag(ChgOrdinalNumber,		aCheckLB.IsChecked(nPos++));
-     pAutoCorrect->SetAutoCorrFlag(ChgFractionSymbol,	aCheckLB.IsChecked(nPos++));
+     FreeResource();
+@@ -276,10 +274,8 @@ BOOL OfaAutocorrOptionsPage::FillItemSet( SfxItemSet& )
+     pAutoCorrect->SetAutoCorrFlag(CptlSttSntnc, 		aCheckLB.IsChecked(nPos++));
+     pAutoCorrect->SetAutoCorrFlag(ChgWeightUnderl,		aCheckLB.IsChecked(nPos++));
+     pAutoCorrect->SetAutoCorrFlag(SetINetAttr, 			aCheckLB.IsChecked(nPos++));
+-    pAutoCorrect->SetAutoCorrFlag(ChgOrdinalNumber,		aCheckLB.IsChecked(nPos++));
+-    pAutoCorrect->SetAutoCorrFlag(ChgFractionSymbol,	aCheckLB.IsChecked(nPos++));
      pAutoCorrect->SetAutoCorrFlag(ChgToEnEmDash,		aCheckLB.IsChecked(nPos++));
-+    pAutoCorrect->SetAutoCorrFlag(AddNonBrkSpace,		aCheckLB.IsChecked(nPos++));
-     pAutoCorrect->SetAutoCorrFlag(IngnoreDoubleSpace,	aCheckLB.IsChecked(nPos++));
+-    pAutoCorrect->SetAutoCorrFlag(IngnoreDoubleSpace,	aCheckLB.IsChecked(nPos++));
++    pAutoCorrect->SetAutoCorrFlag(IgnoreDoubleSpace,	aCheckLB.IsChecked(nPos++));
      pAutoCorrect->SetAutoCorrFlag(CorrectCapsLock,      aCheckLB.IsChecked(nPos++));
  
-@@ -321,6 +323,7 @@ void OfaAutocorrOptionsPage::Reset( const SfxItemSet& )
-     aCheckLB.InsertEntry(sFirst);
-     aCheckLB.InsertEntry(sHalf);
+     BOOL bReturn = nFlags != pAutoCorrect->GetFlags();
+@@ -318,8 +314,6 @@ void OfaAutocorrOptionsPage::Reset( const SfxItemSet& )
+     aCheckLB.InsertEntry(sStartCap);
+     aCheckLB.InsertEntry(sBoldUnderline);
+     aCheckLB.InsertEntry(sURL);
+-    aCheckLB.InsertEntry(sFirst);
+-    aCheckLB.InsertEntry(sHalf);
      aCheckLB.InsertEntry(sDash);
-+    aCheckLB.InsertEntry(sNonBrkSpace);
      aCheckLB.InsertEntry(sNoDblSpaces);
      aCheckLB.InsertEntry(sAccidentalCaps);
- 
-@@ -333,6 +336,7 @@ void OfaAutocorrOptionsPage::Reset( const SfxItemSet& )
-     aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & ChgOrdinalNumber) );
-     aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & ChgFractionSymbol) );
+@@ -330,10 +324,8 @@ void OfaAutocorrOptionsPage::Reset( const SfxItemSet& )
+     aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & CptlSttSntnc) );
+     aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & ChgWeightUnderl) );
+     aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & SetINetAttr) );
+-    aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & ChgOrdinalNumber) );
+-    aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & ChgFractionSymbol) );
      aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & ChgToEnEmDash) );
-+    aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & AddNonBrkSpace) );
-     aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & IngnoreDoubleSpace) );
+-    aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & IngnoreDoubleSpace) );
++    aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & IgnoreDoubleSpace) );
      aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & CorrectCapsLock) );
  
-@@ -464,6 +468,7 @@ enum OfaAutoFmtOptions
-     REPLACE_1ST,
-     REPLACE_HALF,
+     aCheckLB.SetUpdateMode(TRUE);
+@@ -461,8 +453,6 @@ enum OfaAutoFmtOptions
+     BEGIN_UPPER,
+     BOLD_UNDERLINE,
+     DETECT_URL,
+-    REPLACE_1ST,
+-    REPLACE_HALF,
      REPLACE_DASHES,
-+    ADD_NON_BRK_SPACE,
      DEL_SPACES_AT_STT_END,
      DEL_SPACES_BETWEEN_LINES,
-     IGNORE_DBLSPACE,
-@@ -501,6 +506,7 @@ OfaSwAutoFmtOptionsPage::OfaSwAutoFmtOptionsPage( Window* pParent,
-     sFraction			(SVX_RES(	ST_FRACTION     )),
+@@ -475,7 +465,6 @@ enum OfaAutoFmtOptions
+     DEL_EMPTY_NODE,
+     REPLACE_USER_COLL,
+     REPLACE_BULLETS,
+-    REPLACE_QUOTATION,
+     MERGE_SINGLE_LINE_PARA
+ };
+ 
+@@ -492,16 +481,13 @@ OfaSwAutoFmtOptionsPage::OfaSwAutoFmtOptionsPage( Window* pParent,
+     sUseReplaceTbl		(SVX_RES(	ST_USE_REPLACE  )),
+     sCptlSttWord		(SVX_RES(	ST_CPTL_STT_WORD)),
+     sCptlSttSent		(SVX_RES(	ST_CPTL_STT_SENT)),
+-    sTypo				(SVX_RES(	ST_TYPO         )),
+     sUserStyle			(SVX_RES(	ST_USER_STYLE   )),
+     sBullet				(SVX_RES(	ST_BULLET       )),
+     sBoldUnder			(SVX_RES(	ST_BOLD_UNDER   )),
+     sNoDblSpaces		(SVX_RES(	STR_NO_DBL_SPACES)),
+     sCorrectCapsLock    (SVX_RES(   ST_CORRECT_ACCIDENTAL_CAPS_LOCK)),
+-    sFraction			(SVX_RES(	ST_FRACTION     )),
      sDetectURL			(SVX_RES(	ST_DETECT_URL   )),
      sDash				(SVX_RES(	ST_DASH         )),
-+    sNonBrkSpace        (SVX_RES(   ST_NON_BREAK_SPACE )),
-     sOrdinal			(SVX_RES(	ST_ORDINAL      )),
+-    sOrdinal			(SVX_RES(	ST_ORDINAL      )),
      sRightMargin		(SVX_RES(	ST_RIGHT_MARGIN	)),
      sNum				(SVX_RES(	STR_NUM			)),
-@@ -711,6 +717,12 @@ BOOL OfaSwAutoFmtOptionsPage::FillItemSet( SfxItemSet&  )
+     sBorder				(SVX_RES(	STR_BORDER		)),
+@@ -519,10 +505,6 @@ OfaSwAutoFmtOptionsPage::OfaSwAutoFmtOptionsPage( Window* pParent,
+     //typ. Anfuehrungszeichen einsetzen
+     SvtSysLocale aSysLcl;
+     const LocaleDataWrapper& rLcl = aSysLcl.GetLocaleData();
+-    sTypo.SearchAndReplace( String::CreateFromAscii("%1"),
+-                                        rLcl.getDoubleQuotationMarkStart());
+-    sTypo.SearchAndReplace( String::CreateFromAscii("%2"),
+-                                        rLcl.getDoubleQuotationMarkEnd());
+ 
+     aCheckLB.SetHelpId(HID_OFAPAGE_AUTOFORMAT_CLB);
+     aCheckLB.SetWindowBits(WB_HSCROLL| WB_VSCROLL);
+@@ -550,7 +532,7 @@ OfaSwAutoFmtOptionsPage::OfaSwAutoFmtOptionsPage( Window* pParent,
+ /*                                                                   */
+ /*********************************************************************/
+ 
+-SvLBoxEntry* OfaSwAutoFmtOptionsPage::CreateEntry(String& rTxt, USHORT nCol)
++SvLBoxEntry* OfaSwAutoFmtOptionsPage::CreateEntry(String& rTxt, USHORT nCol) 
+ {
+     SvLBoxEntry* pEntry = new SvLBoxEntry;
+ 
+@@ -635,7 +617,7 @@ BOOL OfaSwAutoFmtOptionsPage::FillItemSet( SfxItemSet&  )
+     pAutoCorrect->SetAutoCorrFlag(ChgWeightUnderl,
+                         aCheckLB.IsChecked(BOLD_UNDERLINE, CBCOL_SECOND));
+ 
+-    pAutoCorrect->SetAutoCorrFlag(IngnoreDoubleSpace,
++	pAutoCorrect->SetAutoCorrFlag(IgnoreDoubleSpace,
+                         aCheckLB.IsChecked(IGNORE_DBLSPACE, CBCOL_SECOND));
+ 
+     pAutoCorrect->SetAutoCorrFlag(CorrectCapsLock,
+@@ -647,20 +629,10 @@ BOOL OfaSwAutoFmtOptionsPage::FillItemSet( SfxItemSet&  )
+     pAutoCorrect->SetAutoCorrFlag(SetINetAttr,
+                         aCheckLB.IsChecked(DETECT_URL, CBCOL_SECOND));
+ 
+-    bCheck = aCheckLB.IsChecked(REPLACE_1ST, CBCOL_FIRST);
+-    bModified |= pOpt->bChgOrdinalNumber != bCheck;
+-    pOpt->bChgOrdinalNumber = bCheck;
+-    pAutoCorrect->SetAutoCorrFlag(ChgOrdinalNumber,
+-                        aCheckLB.IsChecked(REPLACE_1ST, CBCOL_SECOND));
+-
+     bCheck = aCheckLB.IsChecked(DEL_EMPTY_NODE, CBCOL_FIRST);
+     bModified |= pOpt->bDelEmptyNode != bCheck;
+     pOpt->bDelEmptyNode = bCheck;
+ 
+-    bCheck = aCheckLB.IsChecked(REPLACE_QUOTATION, CBCOL_FIRST);
+-    bModified |= pOpt->bReplaceQuote != bCheck;
+-    pOpt->bReplaceQuote = bCheck;
+-
+     bCheck = aCheckLB.IsChecked(REPLACE_USER_COLL, CBCOL_FIRST);
+     bModified |= pOpt->bChgUserColl != bCheck;
+     pOpt->bChgUserColl = bCheck;
+@@ -700,12 +672,6 @@ BOOL OfaSwAutoFmtOptionsPage::FillItemSet( SfxItemSet&  )
+     bModified |= pOpt->bReplaceStyles != bCheck;
+     pOpt->bReplaceStyles = bCheck;
+ 
+-    bCheck = aCheckLB.IsChecked(REPLACE_HALF, CBCOL_FIRST);
+-    bModified |= pOpt->bChgFracionSymbol != bCheck;
+-    pOpt->bChgFracionSymbol = bCheck;
+-    pAutoCorrect->SetAutoCorrFlag(ChgFractionSymbol,
+-                        aCheckLB.IsChecked(REPLACE_HALF, CBCOL_SECOND));
+-
+     bCheck = aCheckLB.IsChecked(REPLACE_DASHES, CBCOL_FIRST);
+     bModified |= pOpt->bChgToEnEmDash != bCheck;
      pOpt->bChgToEnEmDash = bCheck;
-     pAutoCorrect->SetAutoCorrFlag(ChgToEnEmDash,
-                         aCheckLB.IsChecked(REPLACE_DASHES, CBCOL_SECOND));
-+    
-+    bCheck = aCheckLB.IsChecked(ADD_NON_BRK_SPACE, CBCOL_FIRST);
-+    bModified |= pOpt->bAddNonBrkSpace != bCheck;
-+    pOpt->bAddNonBrkSpace = bCheck;
-+    pAutoCorrect->SetAutoCorrFlag(AddNonBrkSpace,
-+                        aCheckLB.IsChecked(ADD_NON_BRK_SPACE, CBCOL_SECOND));
- 
-     bCheck = aCheckLB.IsChecked(DEL_SPACES_AT_STT_END, CBCOL_FIRST);
-     bModified |= pOpt->bAFmtDelSpacesAtSttEnd != bCheck;
-@@ -768,6 +780,7 @@ void OfaSwAutoFmtOptionsPage::Reset( const SfxItemSet& )
-     aCheckLB.GetModel()->Insert(CreateEntry(sOrdinal,			CBCOL_BOTH	));
-     aCheckLB.GetModel()->Insert(CreateEntry(sFraction,			CBCOL_BOTH  ));
+@@ -765,8 +731,6 @@ void OfaSwAutoFmtOptionsPage::Reset( const SfxItemSet& )
+     aCheckLB.GetModel()->Insert(CreateEntry(sCptlSttSent,		CBCOL_BOTH	));
+     aCheckLB.GetModel()->Insert(CreateEntry(sBoldUnder,			CBCOL_BOTH	));
+     aCheckLB.GetModel()->Insert(CreateEntry(sDetectURL,			CBCOL_BOTH	));
+-    aCheckLB.GetModel()->Insert(CreateEntry(sOrdinal,			CBCOL_BOTH	));
+-    aCheckLB.GetModel()->Insert(CreateEntry(sFraction,			CBCOL_BOTH  ));
      aCheckLB.GetModel()->Insert(CreateEntry(sDash,				CBCOL_BOTH  ));
-+    aCheckLB.GetModel()->Insert(CreateEntry(sNonBrkSpace,       CBCOL_BOTH  ));
      aCheckLB.GetModel()->Insert(CreateEntry(sDelSpaceAtSttEnd,	CBCOL_BOTH  ));
      aCheckLB.GetModel()->Insert(CreateEntry(sDelSpaceBetweenLines, CBCOL_BOTH  ));
+@@ -780,7 +744,6 @@ void OfaSwAutoFmtOptionsPage::Reset( const SfxItemSet& )
+     aCheckLB.GetModel()->Insert(CreateEntry(sDeleteEmptyPara,	CBCOL_FIRST	));
+     aCheckLB.GetModel()->Insert(CreateEntry(sUserStyle,			CBCOL_FIRST	));
+     aCheckLB.GetModel()->Insert(CreateEntry(sBullet,			CBCOL_FIRST	));
+-    aCheckLB.GetModel()->Insert(CreateEntry(sTypo,				CBCOL_FIRST	));
+     aCheckLB.GetModel()->Insert(CreateEntry(sRightMargin,		CBCOL_FIRST	));
  
-@@ -801,6 +814,8 @@ void OfaSwAutoFmtOptionsPage::Reset( const SfxItemSet& )
-     aCheckLB.CheckEntryPos( REPLACE_HALF,		CBCOL_SECOND,	0 != (nFlags & ChgFractionSymbol) );
+     aCheckLB.CheckEntryPos( USE_REPLACE_TABLE, 	CBCOL_FIRST,	pOpt->bAutoCorrect );
+@@ -791,14 +754,10 @@ void OfaSwAutoFmtOptionsPage::Reset( const SfxItemSet& )
+     aCheckLB.CheckEntryPos( BEGIN_UPPER,		CBCOL_SECOND,	0 != (nFlags & CptlSttSntnc) );
+     aCheckLB.CheckEntryPos( BOLD_UNDERLINE,		CBCOL_FIRST,	pOpt->bChgWeightUnderl );
+     aCheckLB.CheckEntryPos( BOLD_UNDERLINE,		CBCOL_SECOND,	0 != (nFlags & ChgWeightUnderl) );
+-    aCheckLB.CheckEntryPos( IGNORE_DBLSPACE,	CBCOL_SECOND,	0 != (nFlags & IngnoreDoubleSpace) );
++    aCheckLB.CheckEntryPos( IGNORE_DBLSPACE,	CBCOL_SECOND,	0 != (nFlags & IgnoreDoubleSpace) );
+     aCheckLB.CheckEntryPos( CORRECT_CAPS_LOCK,  CBCOL_SECOND,   0 != (nFlags & CorrectCapsLock) );
+     aCheckLB.CheckEntryPos( DETECT_URL,			CBCOL_FIRST,	pOpt->bSetINetAttr );
+     aCheckLB.CheckEntryPos( DETECT_URL,			CBCOL_SECOND,	0 != (nFlags & SetINetAttr) );
+-    aCheckLB.CheckEntryPos( REPLACE_1ST,		CBCOL_FIRST,	pOpt->bChgOrdinalNumber );
+-    aCheckLB.CheckEntryPos( REPLACE_1ST,		CBCOL_SECOND,	0 != (nFlags & ChgOrdinalNumber) );
+-    aCheckLB.CheckEntryPos( REPLACE_HALF,		CBCOL_FIRST,	pOpt->bChgFracionSymbol );
+-    aCheckLB.CheckEntryPos( REPLACE_HALF,		CBCOL_SECOND,	0 != (nFlags & ChgFractionSymbol) );
      aCheckLB.CheckEntryPos( REPLACE_DASHES,		CBCOL_FIRST,	pOpt->bChgToEnEmDash );
      aCheckLB.CheckEntryPos( REPLACE_DASHES,		CBCOL_SECOND,	0 != (nFlags & ChgToEnEmDash) );
-+    aCheckLB.CheckEntryPos( ADD_NON_BRK_SPACE,  CBCOL_FIRST,	0 != ( pOpt->bAddNonBrkSpace ) );
-+    aCheckLB.CheckEntryPos( ADD_NON_BRK_SPACE,	CBCOL_SECOND,	0 != (nFlags & AddNonBrkSpace) );
      aCheckLB.CheckEntryPos( DEL_SPACES_AT_STT_END,		CBCOL_FIRST,	pOpt->bAFmtDelSpacesAtSttEnd );
-     aCheckLB.CheckEntryPos( DEL_SPACES_AT_STT_END,		CBCOL_SECOND,	pOpt->bAFmtByInpDelSpacesAtSttEnd );
+@@ -806,7 +765,6 @@ void OfaSwAutoFmtOptionsPage::Reset( const SfxItemSet& )
      aCheckLB.CheckEntryPos( DEL_SPACES_BETWEEN_LINES,	CBCOL_FIRST,	pOpt->bAFmtDelSpacesBetweenLines );
+     aCheckLB.CheckEntryPos( DEL_SPACES_BETWEEN_LINES,	CBCOL_SECOND,	pOpt->bAFmtByInpDelSpacesBetweenLines );
+     aCheckLB.CheckEntryPos( DEL_EMPTY_NODE,		CBCOL_FIRST,	pOpt->bDelEmptyNode );
+-    aCheckLB.CheckEntryPos( REPLACE_QUOTATION,	CBCOL_FIRST,	pOpt->bReplaceQuote );
+     aCheckLB.CheckEntryPos( REPLACE_USER_COLL,	CBCOL_FIRST,	pOpt->bChgUserColl );
+     aCheckLB.CheckEntryPos( REPLACE_BULLETS,	CBCOL_FIRST,	pOpt->bChgEnumNum );
+ 
+@@ -2050,8 +2008,50 @@ void AutoCorrEdit::KeyInput( const KeyEvent& rKEvt )
+ 
+ --------------------------------------------------*/
+ 
++enum OfaQuoteOptions
++{
++    ADD_NONBRK_SPACE,
++    REPLACE_1ST
++};
++
++SvLBoxEntry* OfaQuoteTabPage::CreateEntry(String& rTxt, USHORT nCol) 
++{
++    SvLBoxEntry* pEntry = new SvLBoxEntry;
++	
++    if ( !pCheckButtonData )
++	{
++		pCheckButtonData = new SvLBoxButtonData( &aSwCheckLB );
++		aSwCheckLB.SetCheckButtonData( pCheckButtonData );
++	}
++
++	pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), 0));	// Sonst Puff!
++
++	String sEmpty;
++	if (nCol == CBCOL_SECOND)
++		pEntry->AddItem( new SvLBoxString( pEntry, 0, sEmpty) );	// Leerspalte
++	else
++		pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox, 0, pCheckButtonData ) );
++
++	if (nCol == CBCOL_FIRST)
++		pEntry->AddItem( new SvLBoxString( pEntry, 0, sEmpty) );	// Leerspalte
++	else
++		pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox, 0, pCheckButtonData ) );
++
++	pEntry->AddItem( new OfaImpBrwString( pEntry, 0, rTxt ) );
++
++	return pEntry;
++}
++
+ OfaQuoteTabPage::OfaQuoteTabPage( Window* pParent, const SfxItemSet& rSet ) :
+     SfxTabPage(pParent, SVX_RES( RID_OFAPAGE_AUTOCORR_QUOTE ), rSet),
++	aCheckLB			(this, SVX_RES(CLB_SETTINGS     )),
++	aSwCheckLB			(this, SVX_RES(CLB_SETTINGS     )),
++	sHeader1			(SVX_RES( STR_HEADER1		    )),
++	sHeader2			(SVX_RES( STR_HEADER2		    )),
++    sNonBrkSpace		(SVX_RES( ST_NON_BREAK_SPACE    )),
++	sOrdinal			(SVX_RES( ST_ORDINAL            )),
++    pCheckButtonData    ( NULL ),
++
+     aSingleFL           (this, SVX_RES(FL_SINGLE		 )),
+     aSingleTypoCB       (this, SVX_RES(CB_SGL_TYPO     )),
+     aSglStartQuoteFT    (this, SVX_RES(FT_SGL_STARTQUOTE )),
+@@ -2078,6 +2078,38 @@ OfaQuoteTabPage::OfaQuoteTabPage( Window* pParent, const SfxItemSet& rSet ) :
+     sStandard(SVX_RES(ST_STANDARD))
+ {
+     FreeResource();
++	
++    BOOL bShowSWOptions = FALSE;
++
++    aCheckLB.SetHelpId( HID_OFAPAGE_QUOTE_CLB );
++    aSwCheckLB.SetHelpId( HID_OFAPAGE_QUOTE_SW_CLB );
++
++    SFX_ITEMSET_ARG( &rSet, pItem, SfxBoolItem, SID_AUTO_CORRECT_DLG, FALSE );
++    if ( pItem && pItem->GetValue() )
++	    bShowSWOptions = TRUE;
++
++    if ( bShowSWOptions )
++    {
++    	static long aStaticTabs[]=
++	    {
++		    3, 0, 20, 40
++    	};
++	
++    	aSwCheckLB.SetWindowBits(WB_HSCROLL| WB_VSCROLL);
++
++    	aSwCheckLB.SvxSimpleTable::SetTabs(aStaticTabs);
++	    String sHeader( sHeader1 );
++    	sHeader += '\t';
++	    sHeader += sHeader2;
++    	sHeader += '\t';
++	    aSwCheckLB.InsertHeaderEntry( sHeader, HEADERBAR_APPEND,
++						HIB_CENTER | HIB_VCENTER | HIB_FIXEDPOS | HIB_FIXED);
++        aCheckLB.Hide( TRUE );
++    }
++    else
++    {
++        aSwCheckLB.HideTable( );
++    }
+ 
+     aStartQuotePB.SetClickHdl(LINK(this, 	OfaQuoteTabPage, QuoteHdl));
+     aEndQuotePB.SetClickHdl(LINK(this, 		OfaQuoteTabPage, QuoteHdl));
+@@ -2092,6 +2124,7 @@ OfaQuoteTabPage::OfaQuoteTabPage( Window* pParent, const SfxItemSet& rSet ) :
+ --------------------------------------------------*/
+ OfaQuoteTabPage::~OfaQuoteTabPage()
+ {
++    delete( pCheckButtonData );
+ }
+ /*-----------------03.07.97 13:17-------------------
+ 
+@@ -2109,6 +2142,32 @@ BOOL OfaQuoteTabPage::FillItemSet( SfxItemSet&  )
+     SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ 
+     long nFlags = pAutoCorrect->GetFlags();
++
++    if ( aCheckLB.IsVisible( ) )
++    {
++	    USHORT nPos = 0;
++        pAutoCorrect->SetAutoCorrFlag(AddNonBrkSpace,		aCheckLB.IsChecked(nPos++));
++	    pAutoCorrect->SetAutoCorrFlag(ChgOrdinalNumber,		aCheckLB.IsChecked(nPos++));
++    }
++
++    BOOL bModified = FALSE;
++    if ( aSwCheckLB.IsVisible( ) )
++    {
++	    SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
++
++        BOOL bCheck = aSwCheckLB.IsChecked(ADD_NONBRK_SPACE, CBCOL_FIRST);
++	    bModified |= pOpt->bAddNonBrkSpace != bCheck;
++        pOpt->bAddNonBrkSpace = bCheck;
++        pAutoCorrect->SetAutoCorrFlag(AddNonBrkSpace,
++                            aSwCheckLB.IsChecked(ADD_NONBRK_SPACE, CBCOL_SECOND));
++
++    	bCheck = aSwCheckLB.IsChecked(REPLACE_1ST, CBCOL_FIRST);
++	    bModified |= pOpt->bChgOrdinalNumber != bCheck;
++    	pOpt->bChgOrdinalNumber = bCheck;
++	    pAutoCorrect->SetAutoCorrFlag(ChgOrdinalNumber,
++						aSwCheckLB.IsChecked(REPLACE_1ST, CBCOL_SECOND));
++    }
++
+     pAutoCorrect->SetAutoCorrFlag(ChgQuotes, 		aTypoCB.IsChecked());
+     pAutoCorrect->SetAutoCorrFlag(ChgSglQuotes, 	aSingleTypoCB.IsChecked());
+     BOOL bReturn = nFlags != pAutoCorrect->GetFlags();
+@@ -2137,7 +2196,7 @@ BOOL OfaQuoteTabPage::FillItemSet( SfxItemSet&  )
+         pAutoCorrect->SetEndSingleQuote(cUCS2);
+     }
+ 
+-    if(bReturn )
++	if( bModified || bReturn )
+     {
+         SvxAutoCorrCfg* pCfg = SvxAutoCorrCfg::Get();
+         pCfg->SetModified();
+@@ -2160,6 +2219,42 @@ void OfaQuoteTabPage::Reset( const SfxItemSet& )
+     SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+     const long nFlags = pAutoCorrect->GetFlags();
+ 
++    // Initialize the Sw options
++    if ( aSwCheckLB.IsVisible( ) )
++    {
++        SvxSwAutoFmtFlags *pOpt = &pAutoCorrect->GetSwFlags();
++
++        aSwCheckLB.SetUpdateMode( FALSE );
++        aSwCheckLB.Clear();
++
++        aSwCheckLB.GetModel()->Insert(CreateEntry(sNonBrkSpace,       CBCOL_BOTH ));
++        aSwCheckLB.GetModel()->Insert(CreateEntry(sOrdinal,           CBCOL_BOTH ));
++
++        aSwCheckLB.CheckEntryPos( ADD_NONBRK_SPACE, CBCOL_FIRST,	pOpt->bAddNonBrkSpace );
++        aSwCheckLB.CheckEntryPos( ADD_NONBRK_SPACE,	CBCOL_SECOND,	0 != (nFlags & AddNonBrkSpace) );
++        aSwCheckLB.CheckEntryPos( REPLACE_1ST,		CBCOL_FIRST,	pOpt->bChgOrdinalNumber );
++        aSwCheckLB.CheckEntryPos( REPLACE_1ST,		CBCOL_SECOND,	0 != (nFlags & ChgOrdinalNumber) );
++
++        aSwCheckLB.SetUpdateMode( TRUE );
++    }
++
++    // Initialize the non Sw options
++    if ( aCheckLB.IsVisible( ) )
++    {
++        aCheckLB.SetUpdateMode( FALSE );
++        aCheckLB.Clear( );
++
++        aCheckLB.InsertEntry( sNonBrkSpace );
++        aCheckLB.InsertEntry( sOrdinal );
++    
++        USHORT nPos = 0;
++        aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & AddNonBrkSpace) );
++        aCheckLB.CheckEntryPos( nPos++, 0 != (nFlags & ChgOrdinalNumber) );
++
++        aCheckLB.SetUpdateMode( TRUE );
++    }
++
++    // Initialize the quote stuffs
+     aTypoCB    			.Check(0 != (nFlags & ChgQuotes));
+     aSingleTypoCB    	.Check(0 != (nFlags & ChgSglQuotes));
+     aTypoCB    			.SaveValue();
 diff --git svx/source/cui/autocdlg.hrc svx/source/cui/autocdlg.hrc
-index 38b3507..7aef1e4 100644
+index 38b3507..8a2c51b 100644
 --- svx/source/cui/autocdlg.hrc
 +++ svx/source/cui/autocdlg.hrc
-@@ -153,6 +153,7 @@
+@@ -148,7 +148,7 @@
+ #define STR_NO_DBL_SPACES               204
+ #define ST_DETECT_URL                   205
+ #define ST_ORDINAL                      206
+-#define ST_FRACTION                     207
++#define ST_NON_BREAK_SPACE              207
+ #define ST_DASH                         208
  #define FT_LANG                         209
  #define LB_LANG                         210
- #define ST_CORRECT_ACCIDENTAL_CAPS_LOCK 211
-+#define ST_NON_BREAK_SPACE              212
- 
- #define CB_SMARTTAGS                    220
- #define FT_SMARTTAGS                    221
 diff --git svx/source/cui/autocdlg.hxx svx/source/cui/autocdlg.hxx
-index ea5ee11..e3d1d3f 100644
+index ea5ee11..2c30af3 100644
 --- svx/source/cui/autocdlg.hxx
 +++ svx/source/cui/autocdlg.hxx
-@@ -118,6 +118,7 @@ private:
+@@ -116,8 +116,8 @@ private:
+     String		sBoldUnderline;
+     String		sURL;
      String		sNoDblSpaces;
-     String		sHalf;
+-    String		sHalf;
      String		sDash;
 +    String      sNonBrkSpace;
      String		sFirst;
      String      sAccidentalCaps;
  
-@@ -162,6 +163,7 @@ class OfaSwAutoFmtOptionsPage : public SfxTabPage
-     String			sFraction;
+@@ -152,16 +152,15 @@ class OfaSwAutoFmtOptionsPage : public SfxTabPage
+     String			sUseReplaceTbl;
+     String			sCptlSttWord;
+     String			sCptlSttSent;
+-    String			sTypo;
+     String			sUserStyle;
+     String			sBullet;
+     String			sByInputBullet;
+     String			sBoldUnder;
+     String			sNoDblSpaces;
+     String          sCorrectCapsLock;
+-    String			sFraction;
      String			sDetectURL;
      String          sDash;
 +    String          sNonBrkSpace;
      String			sOrdinal;
      String			sRightMargin;
      String			sNum;
+@@ -336,6 +335,18 @@ class OfaQuoteTabPage : public SfxTabPage
+     using TabPage::ActivatePage;
+ 
+ private:
++    // For anything but writer
++	SvxCheckListBox	aCheckLB;
++
++    // Just for writer
++	OfaACorrCheckListBox	aSwCheckLB;	
++    String			sHeader1;
++	String			sHeader2;
++    
++    String          sNonBrkSpace;
++    String          sOrdinal;
++	
++    SvLBoxButtonData*	pCheckButtonData;
+ 
+     FixedLine	aSingleFL;
+     CheckBox    aSingleTypoCB;
+@@ -374,6 +385,8 @@ private:
+ 
+     String 				ChangeStringExt_Impl( sal_UCS4 );
+ 
++    SvLBoxEntry* CreateEntry(String& rTxt, USHORT nCol);
++
+                         OfaQuoteTabPage( Window* pParent, const SfxItemSet& rSet );
+ public:
+                         ~OfaQuoteTabPage();
 diff --git svx/source/cui/autocdlg.src svx/source/cui/autocdlg.src
-index edbd265..e207c5f 100644
+index edbd265..d78ca4b 100644
 --- svx/source/cui/autocdlg.src
 +++ svx/source/cui/autocdlg.src
-@@ -144,6 +144,10 @@ TabDialog RID_OFA_AUTOCORR_DLG
-     String ST_CORRECT_ACCIDENTAL_CAPS_LOCK \
+@@ -73,7 +73,7 @@ TabDialog RID_OFA_AUTOCORR_DLG
+             PageItem
+             {
+                 Identifier = RID_OFAPAGE_AUTOCORR_QUOTE ;
+-                Text [ en-US ] = "Custom Quotes" ;
++				Text [ en-US ] = "Localized Options" ;
+             };
+             PageItem
+             {
+@@ -129,14 +129,6 @@ TabDialog RID_OFA_AUTOCORR_DLG
      { \
-         Text [ en-US ] = "Correct accidental use of cAPS LOCK key" ; \
-+    }; \
-+    String ST_NON_BREAK_SPACE \
-+    { \
-+       Text [ en-US ] = "Add non breaking space before : ; ? ! in french text" ; \
+         Text [ en-US ] = "URL Recognition" ; \
+     }; \
+-    String ST_ORDINAL \
+-    { \
+-        Text [ en-US ] = "Replace 1st... with 1^st..." ; \
+-    }; \
+-    String ST_FRACTION \
+-    { \
+-        Text [ en-US ] = "Replace 1/2 ... with ½ ..." ; \
+-    }; \
+     String ST_DASH \
+     { \
+         Text [ en-US ] = "Replace dashes" ; \
+@@ -219,10 +211,6 @@ TabPage RID_OFAPAGE_AUTOFMT_APPLY
+         /* ### ACHTUNG: Neuer Text in Resource? Leere Absätze entfernen : Leere Absõtze entfernen */
+         Text [ en-US ] = "Remove blank paragraphs" ;
+     };
+-    String ST_TYPO
+-    {
+-        Text [ en-US ] = "Replace \"standard\" quotes with %1custom%2 quotes" ;
+-    };
+     String ST_USER_STYLE
+     {
+         Text [ en-US ] = "Replace Custom Styles" ;
+@@ -498,114 +486,137 @@ TabPage RID_OFAPAGE_AUTOCORR_QUOTE
+     Size = MAP_APPFONT ( 260 , 185 ) ;
+     SVLook = TRUE ;
+     Hide = TRUE ;
+-    Text [ en-US ] = "Custom Quotes" ;
++	Text [ en-US ] = "Localized Options" ;
++	Control CLB_SETTINGS
++	{
++		Pos = MAP_APPFONT ( 4 , 3 ) ;
++		Size = MAP_APPFONT ( 252 , 85 ) ;
++		Border = TRUE ;
++		TabStop = TRUE ;
++	};
++	String STR_HEADER1
++	{
++		Text [ en-US ] = "[M]" ;
++	};
++	String STR_HEADER2
++	{
++		Text [ en-US ] = "[T]" ;
++	};
++    String ST_NON_BREAK_SPACE
++    {
++       Text [ en-US ] = "Add non breaking space before specific punctuation marks in french text" ;
++	};
++    String ST_ORDINAL
++    {
++        Text [ en-US ] = "Format ordinal numbers suffixes (1st -> 1^st)" ;
++	};
+     FixedLine FL_SINGLE
+     {
+-        Pos = MAP_APPFONT ( 4 , 3 ) ;
+-        Size = MAP_APPFONT ( 252 , 8 ) ;
++		Pos = MAP_APPFONT ( 4 , 90 ) ;
++		Size = MAP_APPFONT ( 122 , 8 ) ;
+         Text [ en-US ] = "Single quotes" ;
+     };
+     Checkbox CB_SGL_TYPO
+     {
+-        Pos = MAP_APPFONT ( 7 , 14 ) ;
++		Pos = MAP_APPFONT ( 7 , 101 ) ;
+         Size = MAP_APPFONT ( 86 , 10 ) ;
+         Text [ en-US ] = "Repla~ce" ;
+     };
+     FixedText FT_SGL_STARTQUOTE
+     {
+-        Pos = MAP_APPFONT ( 7 , 30 ) ;
++		Pos = MAP_APPFONT ( 7 , 114 ) ;
+         Size = MAP_APPFONT ( 86 , 8 ) ;
+         Text [ en-US ] = "~Start quote:" ;
+     };
+     PushButton PB_SGL_STARTQUOTE
+     {
+-        Pos = MAP_APPFONT ( 105 , 28 ) ;
++		Pos = MAP_APPFONT ( 10 , 125 ) ;
+         Size = MAP_APPFONT ( 12 , 12 ) ;
+         Text = "\'" ;
+         TabStop = TRUE ;
+     };
+     FixedText FT_SGSTEX
+     {
+-        Pos = MAP_APPFONT ( 124 , 30 ) ;
++		Pos = MAP_APPFONT ( 26 , 127 ) ;
+         Size = MAP_APPFONT ( 50 , 8 ) ;
+     };
+     FixedText FT_SGL_ENDQUOTE
+     {
+-        Pos = MAP_APPFONT ( 7 , 46 ) ;
++		Pos = MAP_APPFONT ( 7 , 139 ) ;
+         Size = MAP_APPFONT ( 86 , 8 ) ;
+         Text [ en-US ] = "~End quote:" ;
+     };
+     PushButton PB_SGL_ENDQUOTE
+     {
+-        Pos = MAP_APPFONT ( 105 , 44 ) ;
++		Pos = MAP_APPFONT ( 10 , 151 ) ;
+         Size = MAP_APPFONT ( 12 , 12 ) ;
+         Text = "\'" ;
+         TabStop = TRUE ;
+     };
+     FixedText FT_SGENEX
+     {
+-        Pos = MAP_APPFONT ( 124 , 46 ) ;
++		Pos = MAP_APPFONT ( 26 , 153 ) ;
+         Size = MAP_APPFONT ( 50 , 8 ) ;
+     };
+     PushButton PB_SGL_STD
+     {
+-        Pos = MAP_APPFONT ( 198 , 63 ) ;
++		Pos = MAP_APPFONT ( 7 , 167 ) ;
+         Size = MAP_APPFONT ( 50 , 14 ) ;
+         TabStop = TRUE ;
+         Text [ en-US ] = "~Default" ;
+     };
+     FixedLine FL_DOUBLE
+     {
+-        Pos = MAP_APPFONT ( 4 , 83 ) ;
+-        Size = MAP_APPFONT ( 252 , 8 ) ;
++		Pos = MAP_APPFONT ( 134 , 90 ) ;
++		Size = MAP_APPFONT ( 122 , 8 ) ;
+         Text [ en-US ] = "Double quotes" ;
+     };
+     CheckBox CB_TYPO
+     {
+-        Pos = MAP_APPFONT ( 7 , 94 ) ;
++		Pos = MAP_APPFONT ( 137 , 101 ) ;
+         Size = MAP_APPFONT ( 86 , 10 ) ;
+         TabStop = TRUE ;
+         Text [ en-US ] = "Repl~ace" ;
      };
+     FixedText FT_STARTQUOTE
+     {
+-        Pos = MAP_APPFONT ( 7 , 110 ) ;
++		Pos = MAP_APPFONT ( 137 , 114 ) ;
+         Size = MAP_APPFONT ( 86 , 8 ) ;
+         Text [ en-US ] = "Start q~uote:" ;
+     };
+     PushButton PB_STARTQUOTE
+     {
+-        Pos = MAP_APPFONT ( 105 , 108 ) ;
++		Pos = MAP_APPFONT ( 140 , 125 ) ;
+         Size = MAP_APPFONT ( 12 , 12 ) ;
+         Text = "\"" ;
+         TabStop = TRUE ;
+     };
+     FixedText FT_DBSTEX
+     {
+-        Pos = MAP_APPFONT ( 124 , 110 ) ;
++		Pos = MAP_APPFONT ( 156 , 127 ) ;
+         Size = MAP_APPFONT ( 50 , 8 ) ;
+     };
+     FixedText FT_ENDQUOTE
+     {
+-        Pos = MAP_APPFONT ( 7 , 126 ) ;
++		Pos = MAP_APPFONT ( 137 , 139 ) ;
+         Size = MAP_APPFONT ( 86 , 10 ) ;
+         Text [ en-US ] = "E~nd quote:" ;
+     };
+     PushButton PB_ENDQUOTE
+     {
+-        Pos = MAP_APPFONT ( 105 , 124 ) ;
++		Pos = MAP_APPFONT ( 140 , 151 ) ;
+         Size = MAP_APPFONT ( 12 , 12 ) ;
+         Text = "\"" ;
+         TabStop = TRUE ;
+     };
+     FixedText FT_DBECEX
+     {
+-        Pos = MAP_APPFONT ( 124 , 126 ) ;
++		Pos = MAP_APPFONT ( 156 , 153 ) ;
+         Size = MAP_APPFONT ( 50 , 8 ) ;
+     };
+     PushButton PB_DBL_STD
+     {
+-        Pos = MAP_APPFONT ( 195 , 143 ) ;
++		Pos = MAP_APPFONT ( 137 , 167 ) ;
+         Size = MAP_APPFONT ( 50 , 14 ) ;
+         TabStop = TRUE ;
+         Text [ en-US ] = "De~fault" ;
+diff --git svx/source/dialog/simptabl.cxx svx/source/dialog/simptabl.cxx
+index 4a3ad5e..d8fbe2d 100644
+--- svx/source/dialog/simptabl.cxx
++++ svx/source/dialog/simptabl.cxx
+@@ -291,7 +291,7 @@ void SvxSimpleTable::ShowTable()
  
- /**************************************************************************/
+ void SvxSimpleTable::HideTable()
+ {
+-    aPrivContainer.Show();
++	aPrivContainer.Hide();
+ }
+ 
+ BOOL SvxSimpleTable::IsVisible() const
 diff --git svx/source/editeng/acorrcfg.cxx svx/source/editeng/acorrcfg.cxx
-index 95ecf61..4dca043 100644
+index 95ecf61..282500b 100644
 --- svx/source/editeng/acorrcfg.cxx
 +++ svx/source/editeng/acorrcfg.cxx
-@@ -128,9 +128,10 @@ Sequence<OUString> 	SvxBaseAutoCorrCfg::GetPropertyNames()
-         "ReplaceDoubleQuote",					// 14
-         "DoubleQuoteAtStart",					// 15
- 		"DoubleQuoteAtEnd",						// 16
--        "CorrectAccidentalCapsLock"             // 17
-+        "CorrectAccidentalCapsLock",            // 17
-+        "AddNonBreakingSpace"                   // 18
-     };
--	const int nCount = 18;
-+	const int nCount = 19;
-     Sequence<OUString> aNames(nCount);
-     OUString* pNames = aNames.getArray();
-     for(int i = 0; i < nCount; i++)
-@@ -234,6 +235,10 @@ void SvxBaseAutoCorrCfg::Load(sal_Bool bInit)
+@@ -119,7 +119,7 @@ Sequence<OUString> 	SvxBaseAutoCorrCfg::GetPropertyNames()
+         "ChangeUnderlineWeight",				//  5
+         "SetInetAttribute",						//  6
+         "ChangeOrdinalNumber",					//  7
+-        "ChangeFraction",						//  8
++        "AddNonBreakingSpace",                  //  8
+         "ChangeDash",							//  9
+         "RemoveDoubleSpaces",					// 10
+         "ReplaceSingleQuote",					// 11
+@@ -190,17 +190,17 @@ void SvxBaseAutoCorrCfg::Load(sal_Bool bInit)
+                         if(*(sal_Bool*)pValues[nProp].getValue())
+                             nFlags |= ChgOrdinalNumber;
+                     break;//"ChangeOrdinalNumber",
+-                    case  8:
++                    case 8:
                          if(*(sal_Bool*)pValues[nProp].getValue())
-                             nFlags |= CorrectCapsLock;
-                     break;//"CorrectAccidentalCapsLock"
-+                    case 18:
-+                        if(*(sal_Bool*)pValues[nProp].getValue())
+-                            nFlags |= ChgFractionSymbol;
+-                    break;//"ChangeFraction",
 +                             nFlags |= AddNonBrkSpace;
-+                     break;//"AddNonBreakingSpace"
-                 }
-             }
-         }
-@@ -408,8 +413,9 @@ Sequence<OUString> 	SvxSwAutoCorrCfg::GetPropertyNames()
-         "Format/ByInput/ApplyNumbering/SpecialCharacter/FontFamily",    //45
-         "Format/ByInput/ApplyNumbering/SpecialCharacter/FontCharset",   //46
-         "Format/ByInput/ApplyNumbering/SpecialCharacter/FontPitch",     //47
-+        "Format/Option/AddNonBreakingSpace",                            //48
++                    break;//"AddNonBreakingSpace"
+                     case  9:
+                         if(*(sal_Bool*)pValues[nProp].getValue())
+                             nFlags |= ChgToEnEmDash;
+                     break;//"ChangeDash",
+                     case 10:
+                         if(*(sal_Bool*)pValues[nProp].getValue())
+-                            nFlags |= IngnoreDoubleSpace;
++							nFlags |= IgnoreDoubleSpace;
+                     break;//"RemoveDoubleSpaces",
+                     case 11:
+                         if(*(sal_Bool*)pValues[nProp].getValue())
+@@ -306,16 +306,16 @@ void SvxBaseAutoCorrCfg::Commit()
+                 bVal = 0 != (nFlags & ChgOrdinalNumber);
+                 pValues[nProp].setValue(&bVal, rType);
+             break;//"ChangeOrdinalNumber",
+-            case  8:
+-                bVal = 0 != (nFlags & ChgFractionSymbol);
++			case 8:
++                bVal = 0 != (nFlags & AddNonBrkSpace);
+                 pValues[nProp].setValue(&bVal, rType);
+-            break;//"ChangeFraction",
++			break;//"AddNonBreakingSpace"
+             case  9:
+                 bVal = 0 != (nFlags & ChgToEnEmDash);
+                 pValues[nProp].setValue(&bVal, rType);
+             break;//"ChangeDash",
+             case 10:
+-                bVal = 0 != (nFlags & IngnoreDoubleSpace);
++                bVal = 0 != (nFlags & IgnoreDoubleSpace);
+                 pValues[nProp].setValue(&bVal, rType);
+             break;//"RemoveDoubleSpaces",
+             case 11:
+@@ -371,7 +371,7 @@ Sequence<OUString> 	SvxSwAutoCorrCfg::GetPropertyNames()
+         "Format/Option/ChangeUnderlineWeight",                          // 8
+         "Format/Option/SetInetAttribute",                               // 9
+         "Format/Option/ChangeOrdinalNumber",                            //10
+-        "Format/Option/ChangeFraction",                                 //11
++        "Format/Option/AddNonBreakingSpace",                            //11
+         "Format/Option/ChangeDash",                                     //12
+         "Format/Option/DelEmptyParagraphs",                             //13
+         "Format/Option/ReplaceUserStyle",                               //14
+@@ -381,35 +381,34 @@ Sequence<OUString> 	SvxSwAutoCorrCfg::GetPropertyNames()
+         "Format/Option/ChangeToBullets/SpecialCharacter/FontFamily",    //18  
+         "Format/Option/ChangeToBullets/SpecialCharacter/FontCharset",   //19
+         "Format/Option/ChangeToBullets/SpecialCharacter/FontPitch",     //20
+-        "Format/Option/ReplaceQuote",                                   //21
+-        "Format/Option/CombineParagraphs",                              //22
+-        "Format/Option/CombineValue",                                   //23
+-        "Format/Option/DelSpacesAtStartEnd",                            //24
+-        "Format/Option/DelSpacesBetween",                               //25
+-        "Format/ByInput/Enable",                                        //26
+-        "Format/ByInput/ChangeDash",                                    //27
+-        "Format/ByInput/ApplyNumbering/Enable",                         //28
+-        "Format/ByInput/ChangeToBorders",                               //29
+-        "Format/ByInput/ChangeToTable",                                 //30
+-        "Format/ByInput/ReplaceStyle",                                  //31
+-        "Format/ByInput/DelSpacesAtStartEnd",                           //32
+-        "Format/ByInput/DelSpacesBetween",                              //33
+-        "Completion/Enable",                                            //34
+-        "Completion/MinWordLen",                                        //35
+-        "Completion/MaxListLen",                                        //36
+-        "Completion/CollectWords",                                      //37
+-        "Completion/EndlessList",                                       //38
+-        "Completion/AppendBlank",                                       //39
+-        "Completion/ShowAsTip",                                         //40
+-        "Completion/AcceptKey",                                         //41
+-        "Completion/KeepList",                                          //42
+-        "Format/ByInput/ApplyNumbering/SpecialCharacter/Char",          //43
+-        "Format/ByInput/ApplyNumbering/SpecialCharacter/Font",          //44
+-        "Format/ByInput/ApplyNumbering/SpecialCharacter/FontFamily",    //45
+-        "Format/ByInput/ApplyNumbering/SpecialCharacter/FontCharset",   //46
+-        "Format/ByInput/ApplyNumbering/SpecialCharacter/FontPitch",     //47
++        "Format/Option/CombineParagraphs",                              //21
++        "Format/Option/CombineValue",                                   //22
++        "Format/Option/DelSpacesAtStartEnd",                            //23
++        "Format/Option/DelSpacesBetween",                               //24
++        "Format/ByInput/Enable",                                        //25
++        "Format/ByInput/ChangeDash",                                    //26
++        "Format/ByInput/ApplyNumbering/Enable",                         //27
++        "Format/ByInput/ChangeToBorders",                               //28
++        "Format/ByInput/ChangeToTable",                                 //29
++        "Format/ByInput/ReplaceStyle",                                  //30
++        "Format/ByInput/DelSpacesAtStartEnd",                           //31
++        "Format/ByInput/DelSpacesBetween",                              //32
++        "Completion/Enable",                                            //33
++        "Completion/MinWordLen",                                        //34
++        "Completion/MaxListLen",                                        //35
++        "Completion/CollectWords",                                      //36
++        "Completion/EndlessList",                                       //37
++        "Completion/AppendBlank",                                       //38
++        "Completion/ShowAsTip",                                         //39
++        "Completion/AcceptKey",                                         //40
++        "Completion/KeepList",                                          //41
++        "Format/ByInput/ApplyNumbering/SpecialCharacter/Char",          //42
++        "Format/ByInput/ApplyNumbering/SpecialCharacter/Font",          //43
++        "Format/ByInput/ApplyNumbering/SpecialCharacter/FontFamily",    //44
++        "Format/ByInput/ApplyNumbering/SpecialCharacter/FontCharset",   //45
++        "Format/ByInput/ApplyNumbering/SpecialCharacter/FontPitch"      //46
      };
 -    const int nCount = 48;
-+    const int nCount = 49;
++    const int nCount = 47;
      Sequence<OUString> aNames(nCount);
      OUString* pNames = aNames.getArray();
      for(int i = 0; i < nCount; i++)
-@@ -561,6 +567,7 @@ void SvxSwAutoCorrCfg::Load(sal_Bool bInit)
-                         rSwFlags.aByInputBulletFont.SetPitch(FontPitch(nVal));
+@@ -447,7 +446,7 @@ void SvxSwAutoCorrCfg::Load(sal_Bool bInit)
+                     case   8: rSwFlags.bChgWeightUnderl = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/Option/ChangeUnderlineWeight",
+                     case   9: rSwFlags.bSetINetAttr = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/Option/SetInetAttribute",
+                     case  10: rSwFlags.bChgOrdinalNumber = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/Option/ChangeOrdinalNumber",
+-                    case  11: rSwFlags.bChgFracionSymbol = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/Option/ChangeFraction",
++                    case  11: rSwFlags.bAddNonBrkSpace = *(sal_Bool*)pValues[nProp].getValue( ); break; // "Format/Option/AddNonBreakingSpace",
+ // it doesn't exist here - the common flags are used for that -> LM
+ //                  case  12: rSwFlags.bChgToEnEmDash = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/Option/ChangeDash",
+                     case  13: rSwFlags.bDelEmptyNode = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/Option/DelEmptyParagraphs",
+@@ -484,78 +483,77 @@ void SvxSwAutoCorrCfg::Load(sal_Bool bInit)
+                         rSwFlags.aBulletFont.SetPitch(FontPitch(nVal));
                      }
-                     break;// "Format/ByInput/ApplyNumbering/SpecialCharacter/FontPitch",
-+                    case 48 : rSwFlags.bAddNonBrkSpace = *(sal_Bool*)pValues[nProp].getValue( ); break;// "Format/Output/AddNonBreakingSpace",
-                 }
-             }
-         }
-@@ -676,6 +683,9 @@ void SvxSwAutoCorrCfg::Commit()
-             case 47 :
+                     break; // "Format/Option/ChangeToBullets/SpecialCharacter/FontPitch",
+-                    case  21: rSwFlags.bReplaceQuote = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/Option/ReplaceQuote",
+-                    case  22: rSwFlags.bRightMargin = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/Option/CombineParagraphs",
+-                    case  23:
++                    case  21: rSwFlags.bRightMargin = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/Option/CombineParagraphs",
++                    case  22:
+                     {
+                         sal_Int32 nVal = 0; pValues[nProp] >>= nVal;
+                         rSwFlags.nRightMargin =
+                             sal::static_int_cast< BYTE >(nVal);
+                     }
+                     break; // "Format/Option/CombineValue",
+-                    case  24: rSwFlags.bAFmtDelSpacesAtSttEnd =  *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/Option/DelSpacesAtStartEnd",
+-                    case  25: rSwFlags.bAFmtDelSpacesBetweenLines = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/Option/DelSpacesBetween",
+-                    case  26: rParent.bAutoFmtByInput = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/ByInput/Enable",
+-                    case  27: rSwFlags.bChgToEnEmDash = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/ByInput/ChangeDash",
+-                    case  28: rSwFlags.bSetNumRule = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/ByInput/ApplyNumbering/Enable",
+-                    case  29: rSwFlags.bSetBorder = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/ByInput/ChangeToBorders",
+-                    case  30: rSwFlags.bCreateTable = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/ByInput/ChangeToTable",
+-                    case  31: rSwFlags.bReplaceStyles =  *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/ByInput/ReplaceStyle",
+-                    case  32: rSwFlags.bAFmtByInpDelSpacesAtSttEnd =  *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/ByInput/DelSpacesAtStartEnd",
+-                    case  33: rSwFlags.bAFmtByInpDelSpacesBetweenLines = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/ByInput/DelSpacesBetween",
+-                    case  34: rSwFlags.bAutoCompleteWords = *(sal_Bool*)pValues[nProp].getValue(); break; // "Completion/Enable",
+-                    case  35:
++                    case  23: rSwFlags.bAFmtDelSpacesAtSttEnd =  *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/Option/DelSpacesAtStartEnd",
++                    case  24: rSwFlags.bAFmtDelSpacesBetweenLines = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/Option/DelSpacesBetween",
++                    case  25: rParent.bAutoFmtByInput = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/ByInput/Enable",
++                    case  26: rSwFlags.bChgToEnEmDash = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/ByInput/ChangeDash",
++                    case  27: rSwFlags.bSetNumRule = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/ByInput/ApplyNumbering/Enable",
++                    case  28: rSwFlags.bSetBorder = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/ByInput/ChangeToBorders",
++                    case  29: rSwFlags.bCreateTable = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/ByInput/ChangeToTable",
++                    case  30: rSwFlags.bReplaceStyles =  *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/ByInput/ReplaceStyle",
++                    case  31: rSwFlags.bAFmtByInpDelSpacesAtSttEnd =  *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/ByInput/DelSpacesAtStartEnd",
++                    case  32: rSwFlags.bAFmtByInpDelSpacesBetweenLines = *(sal_Bool*)pValues[nProp].getValue(); break; // "Format/ByInput/DelSpacesBetween",
++                    case  33: rSwFlags.bAutoCompleteWords = *(sal_Bool*)pValues[nProp].getValue(); break; // "Completion/Enable",
++                    case  34:
+                     {
+                         sal_Int32 nVal = 0; pValues[nProp] >>= nVal;
+                         rSwFlags.nAutoCmpltWordLen =
+                             sal::static_int_cast< USHORT >(nVal);
+                     }
+                     break; // "Completion/MinWordLen",
+-                    case  36:
++                    case  35:
+                     {
+                         sal_Int32 nVal = 0; pValues[nProp] >>= nVal;
+                         rSwFlags.nAutoCmpltListLen =
+                             sal::static_int_cast< USHORT >(nVal);
+                     }
+                     break; // "Completion/MaxListLen",
+-                    case  37: rSwFlags.bAutoCmpltCollectWords = *(sal_Bool*)pValues[nProp].getValue(); break; // "Completion/CollectWords",
+-                    case  38: rSwFlags.bAutoCmpltEndless = *(sal_Bool*)pValues[nProp].getValue(); break; // "Completion/EndlessList",
+-                    case  39: rSwFlags.bAutoCmpltAppendBlanc = *(sal_Bool*)pValues[nProp].getValue(); break; // "Completion/AppendBlank",
+-                    case  40: rSwFlags.bAutoCmpltShowAsTip = *(sal_Bool*)pValues[nProp].getValue(); break; // "Completion/ShowAsTip",
+-                    case  41:
++                    case  36: rSwFlags.bAutoCmpltCollectWords = *(sal_Bool*)pValues[nProp].getValue(); break; // "Completion/CollectWords",
++                    case  37: rSwFlags.bAutoCmpltEndless = *(sal_Bool*)pValues[nProp].getValue(); break; // "Completion/EndlessList",
++                    case  38: rSwFlags.bAutoCmpltAppendBlanc = *(sal_Bool*)pValues[nProp].getValue(); break; // "Completion/AppendBlank",
++                    case  39: rSwFlags.bAutoCmpltShowAsTip = *(sal_Bool*)pValues[nProp].getValue(); break; // "Completion/ShowAsTip",
++                    case  40:
+                     {
+                         sal_Int32 nVal = 0; pValues[nProp] >>= nVal;
+                         rSwFlags.nAutoCmpltExpandKey =
+                             sal::static_int_cast< USHORT >(nVal);
+                     }
+                     break; // "Completion/AcceptKey"
+-                    case 42 :rSwFlags.bAutoCmpltKeepList = *(sal_Bool*)pValues[nProp].getValue(); break;//"Completion/KeepList"
+-                    case 43 :
++                    case 41 :rSwFlags.bAutoCmpltKeepList = *(sal_Bool*)pValues[nProp].getValue(); break;//"Completion/KeepList"
++                    case 42 :
+                     {
+                         sal_Int32 nVal = 0; pValues[nProp] >>= nVal;
+                         rSwFlags.cByInputBullet =
+                             sal::static_int_cast< sal_Unicode >(nVal);
+                     }
+                     break;// "Format/ByInput/ApplyNumbering/SpecialCharacter/Char",
+-                    case 44 :
++                    case 43 :
+                     {
+                         OUString sTemp; pValues[nProp] >>= sTemp;
+                         rSwFlags.aByInputBulletFont.SetName(sTemp);
+                     }
+                     break;// "Format/ByInput/ApplyNumbering/SpecialCharacter/Font",
+-                    case 45 :
++                    case 44 :
+                     {
+                         sal_Int32 nVal = 0; pValues[nProp] >>= nVal;
+                         rSwFlags.aByInputBulletFont.SetFamily(FontFamily(nVal));
+                     }
+                     break;// "Format/ByInput/ApplyNumbering/SpecialCharacter/FontFamily",
+-                    case 46 :
++                    case 45 :
+                     {
+                         sal_Int32 nVal = 0; pValues[nProp] >>= nVal;
+                         rSwFlags.aByInputBulletFont.SetCharSet(CharSet(nVal));
+                     }
+                     break;// "Format/ByInput/ApplyNumbering/SpecialCharacter/FontCharset",
+-                    case 47 :
++                    case 46 :
+                     {
+                         sal_Int32 nVal = 0; pValues[nProp] >>= nVal;
+                         rSwFlags.aByInputBulletFont.SetPitch(FontPitch(nVal));
+@@ -608,7 +606,7 @@ void SvxSwAutoCorrCfg::Commit()
+             case   8: bVal = rSwFlags.bChgWeightUnderl; pValues[nProp].setValue(&bVal, rType); break; // "Format/Option/ChangeUnderlineWeight",
+             case   9: bVal = rSwFlags.bSetINetAttr; pValues[nProp].setValue(&bVal, rType); break; // "Format/Option/SetInetAttribute",
+             case  10: bVal = rSwFlags.bChgOrdinalNumber; pValues[nProp].setValue(&bVal, rType); break; // "Format/Option/ChangeOrdinalNumber",
+-            case  11: bVal = rSwFlags.bChgFracionSymbol; pValues[nProp].setValue(&bVal, rType); break; // "Format/Option/ChangeFraction",
++            case  11: bVal = rSwFlags.bAddNonBrkSpace;  pValues[nProp].setValue(&bVal, rType); break; // "Format/Option/AddNonBreakingSpace",
+ // it doesn't exist here - the common flags are used for that -> LM
+             case  12:
+                 bVal = sal_True;  pValues[nProp].setValue(&bVal, rType);
+@@ -631,49 +629,48 @@ void SvxSwAutoCorrCfg::Commit()
+             case  20:
+                 pValues[nProp] <<= (sal_Int32)rSwFlags.aBulletFont.GetPitch();
+             break; // "Format/Option/ChangeToBullets/SpecialCharacter/FontPitch",
+-            case  21: bVal = rSwFlags.bReplaceQuote; pValues[nProp].setValue(&bVal, rType); break; // "Format/Option/ReplaceQuote",
+-            case  22: bVal = rSwFlags.bRightMargin; pValues[nProp].setValue(&bVal, rType); break; // "Format/Option/CombineParagraphs",
+-            case  23:
++            case  21: bVal = rSwFlags.bRightMargin; pValues[nProp].setValue(&bVal, rType); break; // "Format/Option/CombineParagraphs",
++            case  22:
+                 pValues[nProp] <<= (sal_Int32)rSwFlags.nRightMargin;
+             break; // "Format/Option/CombineValue",
+-            case  24: bVal = rSwFlags.bAFmtDelSpacesAtSttEnd; pValues[nProp].setValue(&bVal, rType); break; // "Format/Option/DelSpacesAtStartEnd",
+-            case  25: bVal = rSwFlags.bAFmtDelSpacesBetweenLines; pValues[nProp].setValue(&bVal, rType); break; // "Format/Option/DelSpacesBetween",
+-            case  26: bVal = rParent.bAutoFmtByInput; pValues[nProp].setValue(&bVal, rType); break; // "Format/ByInput/Enable",
+-            case  27: bVal = rSwFlags.bChgToEnEmDash; pValues[nProp].setValue(&bVal, rType); break; // "Format/ByInput/ChangeDash",
+-            case  28: bVal = rSwFlags.bSetNumRule; pValues[nProp].setValue(&bVal, rType); break; // "Format/ByInput/ApplyNumbering/Enable",
+-            case  29: bVal = rSwFlags.bSetBorder; pValues[nProp].setValue(&bVal, rType); break; // "Format/ByInput/ChangeToBorders",
+-            case  30: bVal = rSwFlags.bCreateTable; pValues[nProp].setValue(&bVal, rType); break; // "Format/ByInput/ChangeToTable",
+-            case  31: bVal = rSwFlags.bReplaceStyles; pValues[nProp].setValue(&bVal, rType); break; // "Format/ByInput/ReplaceStyle",
+-            case  32: bVal = rSwFlags.bAFmtByInpDelSpacesAtSttEnd; pValues[nProp].setValue(&bVal, rType); break; // "Format/ByInput/DelSpacesAtStartEnd",
+-            case  33: bVal = rSwFlags.bAFmtByInpDelSpacesBetweenLines; pValues[nProp].setValue(&bVal, rType); break; // "Format/ByInput/DelSpacesBetween",
+-            case  34: bVal = rSwFlags.bAutoCompleteWords; pValues[nProp].setValue(&bVal, rType); break; // "Completion/Enable",
+-            case  35:
++            case  23: bVal = rSwFlags.bAFmtDelSpacesAtSttEnd; pValues[nProp].setValue(&bVal, rType); break; // "Format/Option/DelSpacesAtStartEnd",
++            case  24: bVal = rSwFlags.bAFmtDelSpacesBetweenLines; pValues[nProp].setValue(&bVal, rType); break; // "Format/Option/DelSpacesBetween",
++            case  25: bVal = rParent.bAutoFmtByInput; pValues[nProp].setValue(&bVal, rType); break; // "Format/ByInput/Enable",
++            case  26: bVal = rSwFlags.bChgToEnEmDash; pValues[nProp].setValue(&bVal, rType); break; // "Format/ByInput/ChangeDash",
++            case  27: bVal = rSwFlags.bSetNumRule; pValues[nProp].setValue(&bVal, rType); break; // "Format/ByInput/ApplyNumbering/Enable",
++            case  28: bVal = rSwFlags.bSetBorder; pValues[nProp].setValue(&bVal, rType); break; // "Format/ByInput/ChangeToBorders",
++            case  29: bVal = rSwFlags.bCreateTable; pValues[nProp].setValue(&bVal, rType); break; // "Format/ByInput/ChangeToTable",
++            case  30: bVal = rSwFlags.bReplaceStyles; pValues[nProp].setValue(&bVal, rType); break; // "Format/ByInput/ReplaceStyle",
++            case  31: bVal = rSwFlags.bAFmtByInpDelSpacesAtSttEnd; pValues[nProp].setValue(&bVal, rType); break; // "Format/ByInput/DelSpacesAtStartEnd",
++            case  32: bVal = rSwFlags.bAFmtByInpDelSpacesBetweenLines; pValues[nProp].setValue(&bVal, rType); break; // "Format/ByInput/DelSpacesBetween",
++            case  33: bVal = rSwFlags.bAutoCompleteWords; pValues[nProp].setValue(&bVal, rType); break; // "Completion/Enable",
++            case  34:
+                 pValues[nProp] <<= (sal_Int32)rSwFlags.nAutoCmpltWordLen;
+             break; // "Completion/MinWordLen",
+-            case  36:
++            case  35:
+                 pValues[nProp] <<= (sal_Int32)rSwFlags.nAutoCmpltListLen;
+             break; // "Completion/MaxListLen",
+-            case  37: bVal = rSwFlags.bAutoCmpltCollectWords; pValues[nProp].setValue(&bVal, rType); break; // "Completion/CollectWords",
+-            case  38: bVal = rSwFlags.bAutoCmpltEndless; pValues[nProp].setValue(&bVal, rType); break; // "Completion/EndlessList",
+-            case  39: bVal = rSwFlags.bAutoCmpltAppendBlanc; pValues[nProp].setValue(&bVal, rType); break; // "Completion/AppendBlank",
+-            case  40: bVal = rSwFlags.bAutoCmpltShowAsTip; pValues[nProp].setValue(&bVal, rType); break; // "Completion/ShowAsTip",
+-            case  41:
++            case  36: bVal = rSwFlags.bAutoCmpltCollectWords; pValues[nProp].setValue(&bVal, rType); break; // "Completion/CollectWords",
++            case  37: bVal = rSwFlags.bAutoCmpltEndless; pValues[nProp].setValue(&bVal, rType); break; // "Completion/EndlessList",
++            case  38: bVal = rSwFlags.bAutoCmpltAppendBlanc; pValues[nProp].setValue(&bVal, rType); break; // "Completion/AppendBlank",
++            case  39: bVal = rSwFlags.bAutoCmpltShowAsTip; pValues[nProp].setValue(&bVal, rType); break; // "Completion/ShowAsTip",
++            case  40:
+                 pValues[nProp] <<= (sal_Int32)rSwFlags.nAutoCmpltExpandKey;
+             break; // "Completion/AcceptKey"
+-            case 42 :bVal = rSwFlags.bAutoCmpltKeepList; pValues[nProp].setValue(&bVal, rType); break;// "Completion/KeepList"
+-            case 43 :
++            case 41 :bVal = rSwFlags.bAutoCmpltKeepList; pValues[nProp].setValue(&bVal, rType); break;// "Completion/KeepList"
++            case 42 :
+                 pValues[nProp] <<= (sal_Int32)rSwFlags.cByInputBullet;
+             break;// "Format/ByInput/ApplyNumbering/SpecialCharacter/Char",
+-            case 44 :
++            case 43 :
+                 pValues[nProp] <<= OUString(rSwFlags.aByInputBulletFont.GetName());
+             break;// "Format/ByInput/ApplyNumbering/SpecialCharacter/Font",
+-            case 45 :
++            case 44 :
+                 pValues[nProp] <<= (sal_Int32)rSwFlags.aByInputBulletFont.GetFamily();
+             break;// "Format/ByInput/ApplyNumbering/SpecialCharacter/FontFamily",
+-            case 46 :
++            case 45 :
+                 pValues[nProp] <<= (sal_Int32)rSwFlags.aByInputBulletFont.GetCharSet();
+             break;// "Format/ByInput/ApplyNumbering/SpecialCharacter/FontCharset",
+-            case 47 :
++            case 46 :
                  pValues[nProp] <<= (sal_Int32)rSwFlags.aByInputBulletFont.GetPitch();
              break;// "Format/ByInput/ApplyNumbering/SpecialCharacter/FontPitch",
-+            case  48:
-+                bVal = rSwFlags.bAddNonBrkSpace;  pValues[nProp].setValue(&bVal, rType);
-+            break; // "Format/Option/AddNonBreakingSpace",
          }
-     }
-     PutProperties(aNames, aValues);
+diff --git svx/source/editeng/editeng.cxx svx/source/editeng/editeng.cxx
+index bf84fa2..e485c33 100644
+--- svx/source/editeng/editeng.cxx
++++ svx/source/editeng/editeng.cxx
+@@ -1146,9 +1146,7 @@ sal_Bool EditEngine::PostKeyEvent( const KeyEvent& rKeyEvent, EditView* pEditVie
+                     pEditView->pImpEditView->DrawSelection();
+                     // Autokorrektur ?
+                     if ( ( pImpEditEngine->GetStatus().DoAutoCorrect() ) &&
+-                         (  ( nCharCode == ' ' ) || ( nCharCode == '*' ) ||
+-                             ( nCharCode == '\"' ) || ( nCharCode == '\'' ) ||
+-                            ( nCharCode == '_' )  ))
++                        SvxAutoCorrect::IsAutoCorrectChar( nCharCode ) )
+                     {
+ 						aCurSel = pImpEditEngine->AutoCorrect( 
+                             aCurSel, nCharCode, !pEditView->IsInsertMode(), pFrameWin );
 diff --git svx/source/editeng/svxacorr.cxx svx/source/editeng/svxacorr.cxx
-index a6e7401..902e592 100644
+index a6e7401..8db1d87 100644
 --- svx/source/editeng/svxacorr.cxx
 +++ svx/source/editeng/svxacorr.cxx
 @@ -33,6 +33,7 @@
@@ -283,21 +1202,98 @@ index a6e7401..902e592 100644
  using namespace ::com::sun::star::ucb;
  using namespace ::com::sun::star::uno;
  using namespace ::com::sun::star;
-@@ -348,6 +351,7 @@ long SvxAutoCorrect::GetDefaultFlags()
-                     | ChgFractionSymbol
+@@ -334,7 +337,13 @@ sal_Bool SvxAutoCorrect::IsAutoCorrectChar( sal_Unicode cChar )
+             cChar == ' '  || cChar == '\'' || cChar == '\"' ||
+             cChar == '*'  || cChar == '_'  ||
+             cChar == '.'  || cChar == ','  || cChar == ';' ||
+-            cChar == ':'  || cChar == '?' || cChar == '!';
++            cChar == ':'  || cChar == '?' || cChar == '!' || cChar == '/';
++}
++
++sal_Bool SvxAutoCorrect::NeedsHardspaceAutocorr( sal_Unicode cChar )
++{
++    return cChar == ';' || cChar == ':'  || cChar == '?' || cChar == '!' || 
++        cChar == '/' /*case for the urls exception*/;
+ }
+ 
+ /* -----------------19.11.98 10:15-------------------
+@@ -345,9 +354,9 @@ long SvxAutoCorrect::GetDefaultFlags()
+     long nRet = Autocorrect
+                     | CptlSttSntnc
+                     | CptlSttWrd
+-                    | ChgFractionSymbol
                      | ChgOrdinalNumber
                      | ChgToEnEmDash
 +                    | AddNonBrkSpace
                      | ChgWeightUnderl
                      | SetINetAttr
                      | ChgQuotes
-@@ -694,6 +698,54 @@ BOOL SvxAutoCorrect::FnChgToEnEmDash(
+@@ -385,9 +394,6 @@ SvxAutoCorrect::SvxAutoCorrect( const String& rShareAutocorrFile,
+ {
+     nFlags = SvxAutoCorrect::GetDefaultFlags();
+ 
+-    c1Div2 = ByteString::ConvertToUnicode( '\xBD', RTL_TEXTENCODING_MS_1252 );
+-    c1Div4 = ByteString::ConvertToUnicode( '\xBC', RTL_TEXTENCODING_MS_1252 );
+-    c3Div4 = ByteString::ConvertToUnicode( '\xBE', RTL_TEXTENCODING_MS_1252 );
+     cEmDash = ByteString::ConvertToUnicode( '\x97', RTL_TEXTENCODING_MS_1252 );
+     cEnDash = ByteString::ConvertToUnicode( '\x96', RTL_TEXTENCODING_MS_1252 );
+ }
+@@ -405,7 +411,6 @@ SvxAutoCorrect::SvxAutoCorrect( const SvxAutoCorrect& rCpy )
+     nFlags( rCpy.nFlags & ~(ChgWordLstLoad|CplSttLstLoad|WrdSttLstLoad)),
+     cStartDQuote( rCpy.cStartDQuote ), cEndDQuote( rCpy.cEndDQuote ),
+     cStartSQuote( rCpy.cStartSQuote ), cEndSQuote( rCpy.cEndSQuote ),
+-    c1Div2( rCpy.c1Div2 ), c1Div4( rCpy.c1Div4 ), c3Div4( rCpy.c3Div4 ),
+     cEmDash( rCpy.cEmDash ), cEnDash( rCpy.cEnDash )
+ {
+ }
+@@ -489,40 +494,6 @@ BOOL SvxAutoCorrect::FnCptlSttWrd( SvxAutoCorrDoc& rDoc, const String& rTxt,
+ }
+ 
+ 
+-BOOL SvxAutoCorrect::FnChgFractionSymbol(
+-                                SvxAutoCorrDoc& rDoc, const String& rTxt,
+-                                xub_StrLen nSttPos, xub_StrLen nEndPos )
+-{
+-    sal_Unicode cChar = 0;
+-
+-    for( ; nSttPos < nEndPos; ++nSttPos )
+-        if( !lcl_IsInAsciiArr( sImplSttSkipChars, rTxt.GetChar( nSttPos ) ))
+-            break;
+-    for( ; nSttPos < nEndPos; --nEndPos )
+-        if( !lcl_IsInAsciiArr( sImplEndSkipChars, rTxt.GetChar( nEndPos - 1 ) ))
+-            break;
+-
+-    // 1/2, 1/4, ... ersetzen durch das entsprechende Zeichen vom Font
+-    if( 3 == nEndPos - nSttPos && '/' == rTxt.GetChar( nSttPos+1 ))
+-    {
+-        switch( ( rTxt.GetChar( nSttPos )) * 256 + rTxt.GetChar( nEndPos-1 ))
+-        {
+-        case '1' * 256 + '2':		cChar = c1Div2;		break;
+-        case '1' * 256 + '4':		cChar = c1Div4;		break;
+-        case '3' * 256 + '4':		cChar = c3Div4;		break;
+-        }
+-
+-        if( cChar )
+-        {
+-            // also austauschen:
+-            rDoc.Delete( nSttPos+1, nEndPos );
+-            rDoc.Replace( nSttPos, cChar );
+-        }
+-    }
+-    return 0 != cChar;
+-}
+-
+-
+ BOOL SvxAutoCorrect::FnChgOrdinalNumber(
+                                 SvxAutoCorrDoc& rDoc, const String& rTxt,
+                                 xub_StrLen nSttPos, xub_StrLen nEndPos,
+@@ -694,6 +665,80 @@ BOOL SvxAutoCorrect::FnChgToEnEmDash(
      return bRet;
  }
  
 +BOOL SvxAutoCorrect::FnAddNonBrkSpace(
 +                                SvxAutoCorrDoc& rDoc, const String& rTxt,
-+                                xub_StrLen , xub_StrLen nEndPos,
++                                xub_StrLen, xub_StrLen nEndPos,
 +                                LanguageType eLang )
 +{
 +    bool bRet = false;
@@ -307,38 +1303,64 @@ index a6e7401..902e592 100644
 +
 +    if ( rLocale.Language == OUString::createFromAscii( "fr" ) )
 +    {
-+        OUString chars = OUString::createFromAscii( ":;!?" );
-+        if ( rLocale.Country == OUString::createFromAscii( "CA" ) )
++        bool bFrCA = rLocale.Country == OUString::createFromAscii( "CA" );
++        OUString allChars = OUString::createFromAscii( ":;!?" );
++        OUString chars( allChars );
++        if ( bFrCA )
 +            chars = OUString::createFromAscii( ":" );
 +
 +        sal_Unicode cChar = rTxt.GetChar( nEndPos );
-+        if ( chars.indexOf( sal_Unicode( cChar ) ) != -1 )
++        bool bHasSpace = chars.indexOf( sal_Unicode( cChar ) ) != -1;
++        bool bIsSpecial = allChars.indexOf( sal_Unicode( cChar ) ) != -1;
++        if ( bIsSpecial )
 +        {
-+            // Check the previous char
-+            sal_Unicode cPrevChar = rTxt.GetChar( nEndPos - 1 );
-+            if ( ( chars.indexOf( sal_Unicode( cPrevChar ) ) == -1 ) && cPrevChar != '\t' )
-+            { 
-+                // Remove any previous normal space
-+                xub_StrLen nPos = nEndPos - 1;
-+                while ( cPrevChar == ' ' || cPrevChar == CHAR_HARDBLANK )
-+                {
-+                    if ( nPos == 0 ) break;
-+                    nPos--;
-+                    cPrevChar = rTxt.GetChar( nPos );
-+                }
-+
-+                if ( nPos != 0 )
-+                {
-+                    nPos++;
-+                    if ( nEndPos - nPos > 0 )
-+                        rDoc.Delete( nPos, nEndPos );
-+
-+                    // Add the non-breaking space at the end pos
-+                    rDoc.Insert( nPos, CHAR_HARDBLANK );
-+                    bRet = true;
++            // Get the last word delimiter position
++            xub_StrLen nSttWdPos = nEndPos;
++            while( nSttWdPos && !IsWordDelim( rTxt.GetChar( --nSttWdPos )))
++                ;
++            
++            // Check the presence of "://" in the word
++            xub_StrLen nStrPos = rTxt.Search( String::CreateFromAscii( "://" ), nSttWdPos + 1 );
++            if ( STRING_NOTFOUND == nStrPos )
++            {
++                // Check the previous char
++                sal_Unicode cPrevChar = rTxt.GetChar( nEndPos - 1 );
++                if ( ( chars.indexOf( sal_Unicode( cPrevChar ) ) == -1 ) && cPrevChar != '\t' )
++                { 
++                    // Remove any previous normal space
++                    xub_StrLen nPos = nEndPos - 1;
++                    while ( cPrevChar == ' ' || cPrevChar == CHAR_HARDBLANK )
++                    {
++                        if ( nPos == 0 ) break;
++                        nPos--;
++                        cPrevChar = rTxt.GetChar( nPos );
++                    }
++    
++                    if ( nPos != 0 )
++                    {
++                        nPos++;
++                        if ( nEndPos - nPos > 0 )
++                            rDoc.Delete( nPos, nEndPos );
++    
++                        // Add the non-breaking space at the end pos
++                        if ( bHasSpace )
++                            rDoc.Insert( nPos, CHAR_HARDBLANK );
++                        bRet = true;
++                    }
 +                }
 +            }
 +        }
++        else if ( cChar == '/' )
++        {
++            // Remove the hardspace right before to avoid formatting URLs
++            sal_Unicode cPrevChar = rTxt.GetChar( nEndPos - 1 );
++            sal_Unicode cMaybeSpaceChar = rTxt.GetChar( nEndPos - 2 );
++            if ( cPrevChar == ':' && cMaybeSpaceChar == CHAR_HARDBLANK )
++            {
++                rDoc.Delete( nEndPos - 2, nEndPos - 1 );
++                bRet = true;
++            }
++        }
 +    }
 +
 +    return bRet;
@@ -346,35 +1368,254 @@ index a6e7401..902e592 100644
  
  BOOL SvxAutoCorrect::FnSetINetAttr( SvxAutoCorrDoc& rDoc, const String& rTxt,
                                      xub_StrLen nSttPos, xub_StrLen nEndPos,
-@@ -1347,6 +1399,8 @@ ULONG SvxAutoCorrect::AutoCorrect( SvxAutoCorrDoc& rDoc, const String& rTxt,
-                 FnChgFractionSymbol( rDoc, rTxt, nCapLttrPos, nInsPos ) ) ||
-             ( IsAutoCorrFlag( nRet = ChgOrdinalNumber ) &&
+@@ -1218,10 +1263,10 @@ ULONG SvxAutoCorrect::AutoCorrect( SvxAutoCorrDoc& rDoc, const String& rTxt,
+         {
+             //JP 10.02.97: doppelte Spaces verhindern
+             if( nInsPos && ' ' == cChar &&
+-                IsAutoCorrFlag( IngnoreDoubleSpace ) &&
++				IsAutoCorrFlag( IgnoreDoubleSpace ) &&
+                 ' ' == rTxt.GetChar( nInsPos - 1 ) )
+             {
+-                nRet = IngnoreDoubleSpace;
++				nRet = IgnoreDoubleSpace;
+                 break;
+             }
+ 
+@@ -1249,6 +1294,13 @@ ULONG SvxAutoCorrect::AutoCorrect( SvxAutoCorrDoc& rDoc, const String& rTxt,
+                 rDoc.Insert( nInsPos, cChar );
+             else
+                 rDoc.Replace( nInsPos, cChar );
++    
++            // Hardspaces autocorrection    
++            if ( NeedsHardspaceAutocorr( cChar ) && IsAutoCorrFlag( AddNonBrkSpace ) &&
++                FnAddNonBrkSpace( rDoc, rTxt, 0, nInsPos, rDoc.GetLanguage( nInsPos, FALSE ) ) )
++            {
++                nRet = AddNonBrkSpace;
++            }
+         }
+ 
+         if( !nInsPos )
+@@ -1286,7 +1338,7 @@ ULONG SvxAutoCorrect::AutoCorrect( SvxAutoCorrDoc& rDoc, const String& rTxt,
+         // Bug 19285: Symbolzeichen nicht anfassen
+         if( lcl_IsSymbolChar( rCC, rTxt, nCapLttrPos, nInsPos ))
+             break;
+-
++            
+         if( IsAutoCorrFlag( Autocorrect ) )
+         {
+             const String* pPara = 0;
+@@ -1343,9 +1395,7 @@ ULONG SvxAutoCorrect::AutoCorrect( SvxAutoCorrDoc& rDoc, const String& rTxt,
+             }
+         }
+ 
+-        if( ( IsAutoCorrFlag( nRet = ChgFractionSymbol ) &&
+-                FnChgFractionSymbol( rDoc, rTxt, nCapLttrPos, nInsPos ) ) ||
+-            ( IsAutoCorrFlag( nRet = ChgOrdinalNumber ) &&
++		if( ( IsAutoCorrFlag( nRet = ChgOrdinalNumber ) &&
                  FnChgOrdinalNumber( rDoc, rTxt, nCapLttrPos, nInsPos, eLang ) ) ||
-+            ( IsAutoCorrFlag( nRet = AddNonBrkSpace ) &&
-+                FnAddNonBrkSpace( rDoc, rTxt, nCapLttrPos, nInsPos - 1, eLang ) ) ||
              ( IsAutoCorrFlag( nRet = SetINetAttr ) &&
                  ( ' ' == cChar || '\t' == cChar || 0x0a == cChar || !cChar ) &&
-                 FnSetINetAttr( rDoc, rTxt, nCapLttrPos, nInsPos, eLang ) ) )
+@@ -1405,9 +1455,9 @@ ULONG SvxAutoCorrect::AutoCorrect( SvxAutoCorrDoc& rDoc, const String& rTxt,
+                  if( nRet & ChgQuotes) 			nHelpId = 16;
+             else if( nRet & ChgSglQuotes) 		nHelpId = 17;
+             else if( nRet & SetINetAttr) 		nHelpId = 18;
+-            else if( nRet & IngnoreDoubleSpace) nHelpId = 19;
++			else if( nRet & IgnoreDoubleSpace)  nHelpId = 19;
+             else if( nRet & ChgWeightUnderl) 	nHelpId = 20;
+-            else if( nRet & ChgFractionSymbol ) nHelpId = 21;
++            else if( nRet & AddNonBrkSpace)     nHelpId = 21;
+             else if( nRet & ChgOrdinalNumber)	nHelpId = 22;
+         }
+ 
 diff --git svx/source/editeng/swafopt.cxx svx/source/editeng/swafopt.cxx
-index 0940a4e..113e6e3 100644
+index 0940a4e..9cd98f5 100644
 --- svx/source/editeng/swafopt.cxx
 +++ svx/source/editeng/swafopt.cxx
-@@ -53,6 +53,7 @@ SvxSwAutoFmtFlags::SvxSwAutoFmtFlags()
+@@ -44,14 +44,13 @@ SvxSwAutoFmtFlags::SvxSwAutoFmtFlags()
+                         RTL_CONSTASCII_STRINGPARAM( "StarSymbol" )),
+                     Size( 0, 14 ) )
+ {
+-    bReplaceQuote =
+     bAutoCorrect =
+     bCptlSttSntnc =
+     bCptlSttWrd =
+     bChkFontAttr =
+     bChgUserColl =
      bChgEnumNum =
-     bChgFracionSymbol =
+-    bChgFracionSymbol =
++	bAddNonBrkSpace =
      bChgOrdinalNumber =
-+    bAddNonBrkSpace =
      bChgToEnEmDash =
      bChgWeightUnderl =
-     bSetINetAttr =
-@@ -117,6 +118,7 @@ SvxSwAutoFmtFlags& SvxSwAutoFmtFlags::operator=( const SvxSwAutoFmtFlags& rAFFla
+@@ -104,7 +103,6 @@ SvxSwAutoFmtFlags::SvxSwAutoFmtFlags()
+ SvxSwAutoFmtFlags& SvxSwAutoFmtFlags::operator=( const SvxSwAutoFmtFlags& rAFFlags )
+ {
+     bAutoCorrect = rAFFlags.bAutoCorrect;
+-    bReplaceQuote = rAFFlags.bReplaceQuote;
+     bCptlSttSntnc = rAFFlags.bCptlSttSntnc;
+     bCptlSttWrd = rAFFlags.bCptlSttWrd;
+     bChkFontAttr = rAFFlags.bChkFontAttr;
+@@ -115,7 +113,7 @@ SvxSwAutoFmtFlags& SvxSwAutoFmtFlags::operator=( const SvxSwAutoFmtFlags& rAFFla
+     bSetNumRule = rAFFlags.bSetNumRule;
+     bAFmtByInput = rAFFlags.bAFmtByInput;
  
-     bChgFracionSymbol = rAFFlags.bChgFracionSymbol;
-     bChgOrdinalNumber = rAFFlags.bChgOrdinalNumber;
+-    bChgFracionSymbol = rAFFlags.bChgFracionSymbol;
 +    bAddNonBrkSpace = rAFFlags.bAddNonBrkSpace;
+     bChgOrdinalNumber = rAFFlags.bChgOrdinalNumber;
      bChgToEnEmDash = rAFFlags.bChgToEnEmDash;
      bChgWeightUnderl = rAFFlags.bChgWeightUnderl;
-     bSetINetAttr = rAFFlags.bSetINetAttr;
+diff --git svx/source/tbxctrls/extrusioncontrols.cxx svx/source/tbxctrls/extrusioncontrols.cxx
+index 01f6824..a65f5a1 100644
+--- svx/source/tbxctrls/extrusioncontrols.cxx
++++ svx/source/tbxctrls/extrusioncontrols.cxx
+@@ -1474,9 +1474,16 @@ SfxPopupWindow*	ExtrusionColorControl::CreatePopupWindow()
+         m_xFrame, 
+         SVX_RESSTR( RID_SVXSTR_EXTRUSION_COLOR ),
+         &GetToolBox() );
++
++    pColorWin->EnableDocking(true);
++    pColorWin->GetDockingManager()->StartPopupMode(&GetToolBox(),pColorWin);
++
++#if 0
+     pColorWin->StartPopupMode( &GetToolBox(), FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_ALLOWTEAROFF );
+-    pColorWin->StartSelection();
+     SetPopupWindow( pColorWin );
++#endif
++    pColorWin->StartSelection();
++
+     return pColorWin;
+ }
+ 
+diff --git svx/source/tbxctrls/tbcontrl.cxx svx/source/tbxctrls/tbcontrl.cxx
+index 94494aa..feddd99 100644
+--- svx/source/tbxctrls/tbcontrl.cxx
++++ svx/source/tbxctrls/tbcontrl.cxx
+@@ -832,7 +832,7 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString&            rCommand,
+                                           const String&              rWndTitle,
+                                           Window*                    pParentWindow ) :
+ 
+-    SfxPopupWindow( nSlotId, rFrame, pParentWindow, WinBits( WB_BORDER | WB_STDFLOATWIN | WB_3DLOOK|WB_DIALOGCONTROL ) ),
++    SfxPopupWindow( nSlotId, rFrame, pParentWindow, WinBits( WB_DIALOGCONTROL | WB_SYSTEMWINDOW ) ),
+ 
+     theSlotId( nSlotId ),
+     aColorSet( this, WinBits( WB_ITEMBORDER | WB_NAMEFIELD | WB_3DLOOK | WB_NO_DIRECTSELECT) ),
+@@ -917,6 +917,9 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString&            rCommand,
+     AddStatusListener( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:ColorTableState" )));
+     if ( bKillTable )
+         delete pColorTable;
++
++    WinBits nBits = GetStyle();
++    SetStyle( nBits & ~WB_MOVEABLE );
+ }
+ 
+ SvxColorWindow_Impl::~SvxColorWindow_Impl()
+@@ -1058,11 +1061,14 @@ void SvxColorWindow_Impl::StateChanged( USHORT nSID, SfxItemState eState, const
+ 
+ SvxFrameWindow_Impl::SvxFrameWindow_Impl( USHORT nId, const Reference< XFrame >& rFrame, Window* pParentWindow ) :
+ 
+-    SfxPopupWindow( nId, rFrame, pParentWindow, WinBits( WB_BORDER | WB_STDFLOATWIN | WB_3DLOOK | WB_DIALOGCONTROL ) ),
++    SfxPopupWindow( nId, rFrame, pParentWindow, WinBits( WB_DIALOGCONTROL | WB_SYSTEMWINDOW ) ),
+     aFrameSet   ( this, WinBits( WB_ITEMBORDER | WB_DOUBLEBORDER | WB_3DLOOK | WB_NO_DIRECTSELECT ) ),
+     bParagraphMode(sal_False)
+ 
+ {
++    WinBits nBits = GetStyle();
++    SetStyle( nBits & ~WB_MOVEABLE );
++
+     BindListener();
+     String sCommand(String::CreateFromAscii( ".uno:BorderReducedMode" ));
+     AddStatusListener( sCommand );
+@@ -1332,10 +1338,13 @@ BOOL SvxFrameWindow_Impl::Close()
+ 
+ SvxLineWindow_Impl::SvxLineWindow_Impl( USHORT nId, const Reference< XFrame >& rFrame, Window* pParentWindow ) :
+ 
+-    SfxPopupWindow( nId, rFrame, pParentWindow, WinBits( WB_BORDER | WB_STDFLOATWIN | WB_3DLOOK | WB_DIALOGCONTROL ) ),
++    SfxPopupWindow( nId, rFrame, pParentWindow, WinBits( WB_DIALOGCONTROL | WB_SYSTEMWINDOW ) ),
+ 
+-    aLineSet( this, WinBits( WB_3DLOOK | WB_ITEMBORDER | WB_DOUBLEBORDER | WB_NAMEFIELD | WB_NONEFIELD | WB_NO_DIRECTSELECT ) )
++    aLineSet( this, WinBits( WB_3DLOOK | WB_ITEMBORDER | WB_NAMEFIELD | WB_NONEFIELD | WB_NO_DIRECTSELECT ) )
+ {
++    WinBits nBits = GetStyle();
++    SetStyle( nBits & ~WB_MOVEABLE );
++
+     try
+     {
+         Reference< lang::XServiceInfo > xServices( rFrame->getController()->getModel(), UNO_QUERY_THROW );
+@@ -1344,6 +1353,13 @@ SvxLineWindow_Impl::SvxLineWindow_Impl( USHORT nId, const Reference< XFrame >& r
+     catch(const uno::Exception& )
+     {
+     }
++
++    FixedText aLabel( this, WinBits( WB_NOMULTILINE ) );
++    aLabel.SetText( SVX_RESSTR( RID_SVXSTR_FRAME_STYLE ) );
++    Size aTxtSize( 100, 15 );
++    aLabel.SetSizePixel( aTxtSize );
++    aLabel.SetPosPixel( Point( 3, 3 ) );
++
+     Size	aBmpSize( 55, 12 );
+     CreateBitmaps();
+ 
+@@ -2351,10 +2367,11 @@ SfxPopupWindow*	SvxFontColorToolBoxControl::CreatePopupWindow()
+                 SVX_RESSTR( RID_SVXITEMS_EXTRAS_CHARCOLOR ),
+                 &GetToolBox() );
+ 
+-    pColorWin->StartPopupMode( &GetToolBox(),
+-        FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_ALLOWTEAROFF );
++    pColorWin->EnableDocking(true);
++    pColorWin->GetDockingManager()->StartPopupMode(&GetToolBox(),pColorWin);
++
+     pColorWin->StartSelection();
+-    SetPopupWindow( pColorWin );
++
+     return pColorWin;
+ }
+ 
+@@ -2640,9 +2657,13 @@ SfxPopupWindowType SvxFrameLineStyleToolBoxControl::GetPopupWindowType() const
+ SfxPopupWindow*	SvxFrameLineStyleToolBoxControl::CreatePopupWindow()
+ {
+     SvxLineWindow_Impl* pLineWin = new SvxLineWindow_Impl( GetSlotId(), m_xFrame, &GetToolBox() );
++    pLineWin->EnableDocking( true );
++    pLineWin->GetDockingManager()->StartPopupMode(&GetToolBox(),pLineWin);
++#if 0
+     pLineWin->StartPopupMode( &GetToolBox(), TRUE );
+-    pLineWin->StartSelection();
+     SetPopupWindow( pLineWin );
++#endif
++    pLineWin->StartSelection();
+ 
+     return pLineWin;
+ }
+diff --git svx/util/hidother.src svx/util/hidother.src
+index 5bce7c3..edb459c 100644
+--- svx/util/hidother.src
++++ svx/util/hidother.src
+@@ -133,7 +133,7 @@ hidspecial HID_HYPERDLG_DOC_PATH			{ HelpID = HID_HYPERDLG_DOC_PATH ;};
+ #define HID_AUTOCORR_HELP_SETINETATTR			HID_AUTOCORR_HELP_START+17
+ #define HID_AUTOCORR_HELP_INGNOREDOUBLESPACE	HID_AUTOCORR_HELP_START+18
+ #define HID_AUTOCORR_HELP_CHGWEIGHTUNDERL		HID_AUTOCORR_HELP_START+19
+-#define HID_AUTOCORR_HELP_CHGFRACTIONSYMBOL  	HID_AUTOCORR_HELP_START+20
++#define HID_AUTOCORR_HELP_CHGNONBRKSPACE      	HID_AUTOCORR_HELP_START+20
+ #define HID_AUTOCORR_HELP_CHGORDINALNUMBER		HID_AUTOCORR_HELP_START+21
+ 
+ hidspecial HID_AUTOCORR_HELP_WORD			{ HelpID =  HID_AUTOCORR_HELP_WORD;};
+@@ -156,7 +156,7 @@ hidspecial HID_AUTOCORR_HELP_CHGSGLQUOTES		{ HelpID =  HID_AUTOCORR_HELP_CHGSGLQ
+ hidspecial HID_AUTOCORR_HELP_SETINETATTR		{ HelpID =  HID_AUTOCORR_HELP_SETINETATTR;};
+ hidspecial HID_AUTOCORR_HELP_INGNOREDOUBLESPACE	{ HelpID =  HID_AUTOCORR_HELP_INGNOREDOUBLESPACE;};
+ hidspecial HID_AUTOCORR_HELP_CHGWEIGHTUNDERL	{ HelpID =  HID_AUTOCORR_HELP_CHGWEIGHTUNDERL;};
+-hidspecial HID_AUTOCORR_HELP_CHGFRACTIONSYMBOL  { HelpID =  HID_AUTOCORR_HELP_CHGFRACTIONSYMBOL;};
++hidspecial HID_AUTOCORR_HELP_CHGNONBRKSPACE     { HelpID =  HID_AUTOCORR_HELP_CHGNONBRKSPACE;};
+ hidspecial HID_AUTOCORR_HELP_CHGORDINALNUMBER	{ HelpID =  HID_AUTOCORR_HELP_CHGORDINALNUMBER;};
+ 
+ hidspecial HID_CLB_EDIT_MODULES_DICS			{ HelpID =  HID_CLB_EDIT_MODULES_DICS	    ;};
+@@ -338,6 +338,8 @@ hidspecial HID_OFADLG_TREE_DRAWING        			{ HelpId = HID_OFADLG_TREE_DRAWING
+ hidspecial HID_OFADLG_TREE_IMAGE          			{ HelpId = HID_OFADLG_TREE_IMAGE				; };
+ hidspecial HID_OFADLG_TREE_FORMULA        			{ HelpId = HID_OFADLG_TREE_FORMULA				; };
+ hidspecial HID_OFAPAGE_MSFLTR2_CLB                   { HelpId = HID_OFAPAGE_MSFLTR2_CLB             ; };
++hidspecial HID_OFAPAGE_QUOTE_CLB                    { HelpId = HID_OFAPAGE_QUOTE_CLB; };
++hidspecial HID_OFAPAGE_QUOTE_SW_CLB                 { HelpId = HID_OFAPAGE_QUOTE_SW_CLB; };
+ 
+ hidspecial UID_OFA_CONNPOOL_DRIVERLIST_BACK			{ HelpId = UID_OFA_CONNPOOL_DRIVERLIST_BACK; };
+ hidspecial HID_OFA_CONNPOOL_DRIVERLIST				{ HelpId = HID_OFA_CONNPOOL_DRIVERLIST; };
 diff --git sw/inc/comcore.hrc sw/inc/comcore.hrc
 index 8260814..9122841 100644
 --- sw/inc/comcore.hrc
@@ -391,7 +1632,7 @@ index 8260814..9122841 100644
  
  #endif
 diff --git sw/source/core/edit/autofmt.cxx sw/source/core/edit/autofmt.cxx
-index 114ae91..cfed93c 100644
+index 114ae91..62ebf86 100644
 --- sw/source/core/edit/autofmt.cxx
 +++ sw/source/core/edit/autofmt.cxx
 @@ -316,6 +316,7 @@ void SwAutoFormat::_SetRedlineTxt( USHORT nActionId )
@@ -402,16 +1643,28 @@ index 114ae91..cfed93c 100644
              nSeqNo = ++nRedlAutoFmtSeqId;
              break;
          }
-@@ -1896,7 +1897,7 @@ void SwAutoFormat::AutoCorrect( xub_StrLen nPos )
+@@ -1891,12 +1892,17 @@ void SwAutoFormat::BuildHeadLine( USHORT nLvl )
+         // dann lasse doch mal das AutoCorrect auf den akt. TextNode los
+ void SwAutoFormat::AutoCorrect( xub_StrLen nPos )
+ {
++	SvxAutoCorrect* pATst = SvxAutoCorrCfg::Get()->GetAutoCorrect();
++    long aSvxFlags = pATst->GetFlags( );
++    bool bReplaceQuote = ( aSvxFlags & ChgQuotes ) > 0;
++    bool bReplaceSglQuote = ( aSvxFlags & ChgSglQuotes ) > 0;
++
+     if( aFlags.bAFmtByInput ||
+-        (!aFlags.bAutoCorrect && !aFlags.bReplaceQuote &&
++		(!aFlags.bAutoCorrect && !bReplaceQuote && !bReplaceSglQuote &&
          !aFlags.bCptlSttSntnc && !aFlags.bCptlSttWrd &&
-         !aFlags.bChgFracionSymbol && !aFlags.bChgOrdinalNumber &&
+-        !aFlags.bChgFracionSymbol && !aFlags.bChgOrdinalNumber &&
++		!aFlags.bChgOrdinalNumber &&
          !aFlags.bChgToEnEmDash && !aFlags.bSetINetAttr &&
 -        !aFlags.bChgWeightUnderl) )
 +		!aFlags.bChgWeightUnderl && !aFlags.bAddNonBrkSpace) )
          return;
  
      const String* pTxt = &pAktTxtNd->GetTxt();
-@@ -1905,7 +1906,8 @@ void SwAutoFormat::AutoCorrect( xub_StrLen nPos )
+@@ -1905,7 +1911,8 @@ void SwAutoFormat::AutoCorrect( xub_StrLen nPos )
  
      BOOL bGetLanguage = aFlags.bChgOrdinalNumber ||
                          aFlags.bChgToEnEmDash || aFlags.bSetINetAttr ||
@@ -421,16 +1674,115 @@ index 114ae91..cfed93c 100644
  
  
      aDelPam.DeleteMark();
-@@ -2134,6 +2136,9 @@ void SwAutoFormat::AutoCorrect( xub_StrLen nPos )
+@@ -1913,7 +1920,6 @@ void SwAutoFormat::AutoCorrect( xub_StrLen nPos )
+     aDelPam.GetPoint()->nContent.Assign( pAktTxtNd, 0 );
+ 
+     SwAutoCorrDoc aACorrDoc( *pEditShell, aDelPam );
+-    SvxAutoCorrect* pATst = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+ 
+     SwTxtFrmInfo aFInfo( 0 );
+ 
+@@ -1929,8 +1935,8 @@ void SwAutoFormat::AutoCorrect( xub_StrLen nPos )
+         if( nPos == pTxt->Len() )
+             break;		// das wars
+ 
+-        if( aFlags.bReplaceQuote &&
+-            ( '\"' == cChar || '\'' == cChar ) &&
++		if( ( ( bReplaceQuote && '\"' == cChar ) || 
++              ( bReplaceSglQuote && '\'' == cChar ) ) &&
+             ( !nPos || ' ' == pTxt->GetChar( nPos-1 ) ) )
+         {
+             // --------------------------------------
+@@ -1983,7 +1989,7 @@ void SwAutoFormat::AutoCorrect( xub_StrLen nPos )
+             {
+             case '\"':
+             case '\'':
+-                if( aFlags.bReplaceQuote )
++				if( ( cChar == '\"' && bReplaceQuote ) || ( cChar == '\'' && bReplaceSglQuote ) )
+                 {
+                     // --------------------------------------
+                     // beachte: Sonderfall Symbolfonts !!!
+@@ -2068,6 +2074,18 @@ void SwAutoFormat::AutoCorrect( xub_StrLen nPos )
+                     }
+                 }
+                 break;
++            case '/':
++                if ( aFlags.bAddNonBrkSpace )
++                {
++			        LanguageType eLang = (bGetLanguage && pAktTxtNd)
++										   ? pAktTxtNd->GetLang( nSttPos )
++										   : LANGUAGE_SYSTEM;
++                
++                    SetRedlineTxt( STR_AUTOFMTREDL_NON_BREAK_SPACE );
++                    if ( pATst->FnAddNonBrkSpace( aACorrDoc, *pTxt, nSttPos, nPos, eLang ) )
++                        --nPos;
++                }
++                break;
+ 
+             case '.':
+             case '!':
+@@ -2076,7 +2094,6 @@ void SwAutoFormat::AutoCorrect( xub_StrLen nPos )
+                     bFirstSent = TRUE;
+ //alle Wortrenner loesen die Autokorrektur aus!
+ //				break;
+-
+             default:
+ //alle Wortrenner loesen die Autokorrektur aus!
+ //			case ' ':
+@@ -2124,11 +2141,14 @@ void SwAutoFormat::AutoCorrect( xub_StrLen nPos )
+             LanguageType eLang = (bGetLanguage && pAktTxtNd)
+                                            ? pAktTxtNd->GetLang( nSttPos )
+                                            : LANGUAGE_SYSTEM;
++                
++            if ( aFlags.bAddNonBrkSpace )
++            {
++                SetRedlineTxt( STR_AUTOFMTREDL_NON_BREAK_SPACE );
++                pATst->FnAddNonBrkSpace( aACorrDoc, *pTxt, nSttPos, nPos, eLang );
++            }
+ 
+-            if( ( aFlags.bChgFracionSymbol &&
+-                    SetRedlineTxt( STR_AUTOFMTREDL_FRACTION ) &&
+-                    pATst->FnChgFractionSymbol( aACorrDoc, *pTxt, nSttPos, nPos ) ) ||
+-                ( aFlags.bChgOrdinalNumber &&
++			if( ( aFlags.bChgOrdinalNumber &&
+                     SetRedlineTxt( STR_AUTOFMTREDL_ORDINAL ) &&
+                     pATst->FnChgOrdinalNumber( aACorrDoc, *pTxt, nSttPos, nPos, eLang ) ) ||
                  ( aFlags.bChgToEnEmDash &&
-                     SetRedlineTxt( STR_AUTOFMTREDL_DASH ) &&
-                     pATst->FnChgToEnEmDash( aACorrDoc, *pTxt, nSttPos, nPos, eLang ) ) ||
-+                ( aFlags.bAddNonBrkSpace &&
-+                    SetRedlineTxt( STR_AUTOFMTREDL_NON_BREAK_SPACE ) &&
-+                    pATst->FnAddNonBrkSpace( aACorrDoc, *pTxt, nSttPos, nPos, eLang ) ) ||
-                 ( aFlags.bSetINetAttr &&
-                     ( nPos == pTxt->Len() || IsSpace( pTxt->GetChar( nPos )) ) &&
-                     SetRedlineTxt( STR_AUTOFMTREDL_DETECT_URL ) &&
+diff --git sw/source/ui/docvw/edtwin.cxx sw/source/ui/docvw/edtwin.cxx
+index 6baa2d6..3adca95 100644
+--- sw/source/ui/docvw/edtwin.cxx
++++ sw/source/ui/docvw/edtwin.cxx
+@@ -2299,7 +2299,7 @@ KEYINPUT_CHECKTABLE_INSDEL:
+                 else if( !aKeyEvent.GetRepeat() && pACorr && bIsAutoCorrectChar &&
+                         pACfg->IsAutoFmtByInput() &&
+                     pACorr->IsAutoCorrFlag( CptlSttSntnc | CptlSttWrd |
+-                                            ChgFractionSymbol | ChgOrdinalNumber |
++                                            ChgOrdinalNumber |
+                                             ChgToEnEmDash | SetINetAttr |
+                                             Autocorrect ) &&
+                     '\"' != aCh && '\'' != aCh && '*' != aCh && '_' != aCh &&
+@@ -2331,7 +2331,7 @@ KEYINPUT_CHECKTABLE_INSDEL:
+         {
+             if( pACorr && pACfg->IsAutoFmtByInput() &&
+                 pACorr->IsAutoCorrFlag( CptlSttSntnc | CptlSttWrd |
+-                                        ChgFractionSymbol | ChgOrdinalNumber |
++										ChgOrdinalNumber |
+                                         ChgToEnEmDash | SetINetAttr |
+                                         Autocorrect ) &&
+                 !rSh.HasReadonlySel() )
+diff --git sw/source/ui/shells/textsh.cxx sw/source/ui/shells/textsh.cxx
+index 965b0f5..f65f0a2 100644
+--- sw/source/ui/shells/textsh.cxx
++++ sw/source/ui/shells/textsh.cxx
+@@ -202,7 +202,7 @@ void SwTextShell::ExecInsert(SfxRequest &rReq)
+             SvxAutoCorrect* pACorr = pACfg->GetAutoCorrect();
+             if( pACorr && pACfg->IsAutoFmtByInput() &&
+                     pACorr->IsAutoCorrFlag( CptlSttSntnc | CptlSttWrd |
+-                                ChgFractionSymbol | ChgOrdinalNumber |
++								AddNonBrkSpace | ChgOrdinalNumber |
+                                 ChgToEnEmDash | SetINetAttr | Autocorrect ))
+                 rSh.AutoCorrect( *pACorr, cIns );
+             else
 diff --git sw/source/ui/utlui/utlui.src sw/source/ui/utlui/utlui.src
 index 34d9186..03c4a84 100644
 --- sw/source/ui/utlui/utlui.src
@@ -446,3 +1798,54 @@ index 34d9186..03c4a84 100644
  
  };
  
+diff --git sw/source/ui/wrtsh/wrtsh1.cxx sw/source/ui/wrtsh/wrtsh1.cxx
+index e50d1b6..4aa6fff 100644
+--- sw/source/ui/wrtsh/wrtsh1.cxx
++++ sw/source/ui/wrtsh/wrtsh1.cxx
+@@ -162,7 +162,7 @@ SvxAutoCorrect* lcl_IsAutoCorr()
+ {
+        SvxAutoCorrect* pACorr = SvxAutoCorrCfg::Get()->GetAutoCorrect();
+     if( pACorr && !pACorr->IsAutoCorrFlag( CptlSttSntnc | CptlSttWrd |
+-                            ChgFractionSymbol | ChgOrdinalNumber |
++							AddNonBrkSpace | ChgOrdinalNumber |
+                             ChgToEnEmDash | SetINetAttr | Autocorrect ))
+         pACorr = 0;
+     return pACorr;
+diff --git vcl/source/window/dockmgr.cxx vcl/source/window/dockmgr.cxx
+index 6d70c20..bec6e08 100644
+--- vcl/source/window/dockmgr.cxx
++++ vcl/source/window/dockmgr.cxx
+@@ -650,19 +650,22 @@ void ImplPopupFloatWin::DrawGrip()
+     aRect.nLeft+=3;
+     aRect.nRight-=3;
+ 
+-    if( mbHighlight )
+-    {
+-        Erase( aRect );
+-        DrawSelectionBackground( aRect, 2, FALSE, TRUE, FALSE );
+-    }
+-    else
+-    {
+-        SetFillColor( GetSettings().GetStyleSettings().GetFaceColor() );
+-        SetLineColor();
+-        DrawRect( aRect );
++    bool bMoveable = ( mpDockingWin->GetFloatStyle() & WB_MOVEABLE) > 0;
++    if ( bMoveable ) {
++        if( mbHighlight )
++        {
++            Erase( aRect );
++            DrawSelectionBackground( aRect, 2, FALSE, TRUE, FALSE );
++        }
++        else
++        {
++            SetFillColor( GetSettings().GetStyleSettings().GetFaceColor() );
++            SetLineColor();
++            DrawRect( aRect );
++        }
+     }
+ 
+-    if( !ToolBox::AlwaysLocked() )  // no grip if toolboxes are locked
++    if( bMoveable && !ToolBox::AlwaysLocked() )  // no grip if toolboxes are locked
+     {
+ #ifdef TEAROFF_DASHED
+         // draw single dashed line
diff --git a/src/acor.csv b/src/acor.csv
new file mode 100644
index 0000000..f9e74fe
--- /dev/null
+++ b/src/acor.csv
@@ -0,0 +1,4 @@
+locale,string,replacement
+,"1/2","½"
+,"1/4","¼"
+,"3/4","¾"
diff --git a/src/acor_vi-VN.dat b/src/acor_vi-VN.dat
new file mode 100755
index 0000000..831f202
Binary files /dev/null and b/src/acor_vi-VN.dat differ


More information about the ooo-build-commit mailing list