Subject: Patch: Remember Text Encoding
From: Andrew Dunbar (hippietrail@yahoo.com)
Date: Fri Jun 08 2001 - 18:50:25 CDT
This is my patch to store the encoding of a document between
opening and saving so you don't have to use the encoding dialog
every save.
This fixes bug 1466.
Andrew Dunbar.
-- http://linguaphile.sourceforge.net
Index: src/af/xap/xp/xad_Document.cpp =================================================================== RCS file: /cvsroot/abi/src/af/xap/xp/xad_Document.cpp,v retrieving revision 1.17 diff -u -r1.17 xad_Document.cpp --- src/af/xap/xp/xad_Document.cpp 2001/05/25 18:02:26 1.17 +++ src/af/xap/xp/xad_Document.cpp 2001/06/08 23:31:56 @@ -28,6 +28,7 @@ { m_iRefCount = 1; m_szFilename = NULL; + *m_szEncodingName = '\0'; // TODO do we need to auto-increase the bucket count, // TODO if the ignore list gets long? @@ -188,4 +189,22 @@ UT_ASSERT(m_pIgnoreList); return true; +} + +// Document-wide Encoding name used for some file formats (Text, RTF, HTML) + +void AD_Document::setEncodingName(const char *szEncodingName) +{ + if (szEncodingName == NULL) + szEncodingName = ""; + + UT_ASSERT(strlen(szEncodingName) < 16); + + strncpy(m_szEncodingName,szEncodingName,16); + m_szEncodingName[15] = 0; +} + +const char * AD_Document::getEncodingName(void) const +{ + return *m_szEncodingName ? m_szEncodingName : 0; } Index: src/af/xap/xp/xad_Document.h =================================================================== RCS file: /cvsroot/abi/src/af/xap/xp/xad_Document.h,v retrieving revision 1.17 diff -u -r1.17 xad_Document.h --- src/af/xap/xp/xad_Document.h 2001/05/25 05:52:12 1.17 +++ src/af/xap/xp/xad_Document.h 2001/06/08 23:31:56 @@ -60,11 +60,15 @@ bool enumIgnores(UT_uint32 k, const UT_UCSChar ** pszWord) const; bool clearIgnores(void); + void setEncodingName(const char * szEncodingName); + const char * getEncodingName(void) const; + protected: virtual ~AD_Document(); // Use unref() instead. int m_iRefCount; const char * m_szFilename; + char m_szEncodingName[16]; UT_HashTable * m_pIgnoreList; }; Index: src/wp/impexp/xp/ie_exp_Text.cpp =================================================================== RCS file: /cvsroot/abi/src/wp/impexp/xp/ie_exp_Text.cpp,v retrieving revision 1.25 diff -u -r1.25 ie_exp_Text.cpp --- src/wp/impexp/xp/ie_exp_Text.cpp 2001/06/07 15:52:42 1.25 +++ src/wp/impexp/xp/ie_exp_Text.cpp 2001/06/08 23:33:15 @@ -104,11 +104,18 @@ IE_Exp_Text::IE_Exp_Text(PD_Document * pDocument, bool bEncoded) : IE_Exp(pDocument) { + UT_ASSERT(pDocument); + + const char *szEncodingName = pDocument->getEncodingName(); + if (!szEncodingName || !*szEncodingName) + szEncodingName = XAP_EncodingManager::get_instance()->getNativeEncodingName(); + m_error = 0; m_pListener = NULL; m_bIsEncoded = bEncoded; + // TODO Use persistent document encoding when it exists - _setEncoding(XAP_EncodingManager::get_instance()->getNativeEncodingName()); + _setEncoding(szEncodingName); } /*! @@ -255,6 +262,7 @@ strcpy(szEnc,s); _setEncoding((const char *)szEnc); + m_pDocument->setEncodingName(szEnc); } pDialogFactory->releaseDialog(pDialog); Index: src/wp/impexp/xp/ie_imp_Text.cpp =================================================================== RCS file: /cvsroot/abi/src/wp/impexp/xp/ie_imp_Text.cpp,v retrieving revision 1.26 diff -u -r1.26 ie_imp_Text.cpp --- src/wp/impexp/xp/ie_imp_Text.cpp 2001/06/07 15:52:42 1.26 +++ src/wp/impexp/xp/ie_imp_Text.cpp 2001/06/08 23:33:38 @@ -292,8 +292,9 @@ UT_Error error; - // First we need to determine the encoding. - X_CleanupIfError(error,_recognizeEncoding(fp)); + // First we try to determine the encoding. + if (_recognizeEncoding(fp) == UT_OK) + m_pDocument->setEncodingName(m_szEncoding); X_CleanupIfError(error,_writeHeader(fp)); X_CleanupIfError(error,_parseFile(fp)); @@ -319,9 +320,16 @@ IE_Imp_Text::IE_Imp_Text(PD_Document * pDocument, bool bEncoded) : IE_Imp(pDocument) { + UT_ASSERT(pDocument); + + const char *szEncodingName = pDocument->getEncodingName(); + if (!szEncodingName || !*szEncodingName) + szEncodingName = XAP_EncodingManager::get_instance()->getNativeEncodingName(); + m_bIsEncoded = bEncoded; + // TODO Use persistent document encoding when it exists - _setEncoding(XAP_EncodingManager::get_instance()->getNativeEncodingName()); + _setEncoding(szEncodingName); } /*****************************************************************/ @@ -491,6 +499,7 @@ strcpy(szEnc,s); _setEncoding((const char *)szEnc); + m_pDocument->setEncodingName(szEnc); } pDialogFactory->releaseDialog(pDialog);
_________________________________________________________ Do You Yahoo!? Get your free @yahoo.com address at http://mail.yahoo.com
This archive was generated by hypermail 2b25 : Fri Jun 08 2001 - 18:48:29 CDT