[NEW] Add new encodings, make status bar work for the new encodings.

git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@566 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
Don Ho 2009-11-21 02:38:48 +00:00
parent 90f5338cb5
commit 10e6cbfb61
7 changed files with 154 additions and 86 deletions

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="Windows-1252" ?>
<?xml version="1.0" encoding="Windows-1250" ?>
<NotepadPlus>
<Native-Langue name = "Slovenèina">
<Menu>

View File

@ -36,11 +36,6 @@
#define NPP_CP_TIS_620 874
#ifdef UNICODE
#define NppMainEntry wWinMain
#define generic_strtol wcstol

View File

@ -40,6 +40,25 @@ const char *urlHttpRegExpr = "http://[a-z0-9_\\-\\+~.:?&@=/%#]*";
int docTabIconIDs[] = {IDI_SAVED_ICON, IDI_UNSAVED_ICON, IDI_READONLY_ICON};
enum tb_stat {tb_saved, tb_unsaved, tb_ro};
int encoding_table[] = {
NPP_CP_WIN_1250,
NPP_CP_WIN_1251,
NPP_CP_WIN_1252,
NPP_CP_WIN_1253,
NPP_CP_WIN_1254,
NPP_CP_WIN_1255,
NPP_CP_WIN_1256,
NPP_CP_WIN_1257,
NPP_CP_WIN_1258,
NPP_CP_BIG5,
NPP_CP_GB2312,
NPP_CP_SHIFT_JIS,
NPP_CP_EUC_KR,
NPP_CP_TIS_620,
NPP_CP_ISO_8859_8
};
#define DIR_LEFT true
#define DIR_RIGHT false
@ -3094,27 +3113,59 @@ void Notepad_plus::setDisplayFormat(formatType f)
_statusBar.setText(str.c_str(), STATUSBAR_EOF_FORMAT);
}
void Notepad_plus::setUniModeText(UniMode um)
void Notepad_plus::setUniModeText(/*UniMode um*/)
{
TCHAR *uniModeText;
switch (um)
Buffer *buf = _pEditView->getCurrentBuffer();
int encoding = buf->getEncoding();
UniMode um = buf->getUnicodeMode();
generic_string uniModeTextString;
if (encoding == -1)
{
case uniUTF8:
uniModeText = TEXT("UTF-8"); break;
case uni16BE:
uniModeText = TEXT("UCS-2 Big Endian"); break;
case uni16LE:
uniModeText = TEXT("UCS-2 Little Endian"); break;
case uni16BE_NoBOM:
uniModeText = TEXT("UCS-2 BE w/o BOM"); break;
case uni16LE_NoBOM:
uniModeText = TEXT("UCS-2 LE w/o BOM"); break;
case uniCookie:
uniModeText = TEXT("ANSI as UTF-8"); break;
default :
uniModeText = TEXT("ANSI");
switch (um)
{
case uniUTF8:
uniModeTextString = TEXT("UTF-8"); break;
case uni16BE:
uniModeTextString = TEXT("UCS-2 Big Endian"); break;
case uni16LE:
uniModeTextString = TEXT("UCS-2 Little Endian"); break;
case uni16BE_NoBOM:
uniModeTextString = TEXT("UCS-2 BE w/o BOM"); break;
case uni16LE_NoBOM:
uniModeTextString = TEXT("UCS-2 LE w/o BOM"); break;
case uniCookie:
uniModeTextString = TEXT("ANSI as UTF-8"); break;
default :
uniModeTextString = TEXT("ANSI");
}
}
_statusBar.setText(uniModeText, STATUSBAR_UNICODE_TYPE);
else
{
bool found = false;
size_t nbItem = sizeof(encoding_table)/sizeof(int);
size_t i = 0;
for ( ; i < nbItem ; i++)
{
if (encoding_table[i] == encoding)
{
found = true;
break;
}
}
if (!found)
{
printStr(TEXT("Encoding problem. Encoding is not added in encoding_table?"));
return;
}
const int itemSize = 64;
TCHAR uniModeText[itemSize];
::GetMenuString(_mainMenuHandle, i+IDM_FORMAT_ENCODE, uniModeText, itemSize, MF_BYCOMMAND);
uniModeTextString = uniModeText;
}
_statusBar.setText(uniModeTextString.c_str(), STATUSBAR_UNICODE_TYPE);
}
int Notepad_plus::getFolderMarginStyle() const
@ -4369,8 +4420,17 @@ void Notepad_plus::command(int id)
if (shoulBeDirty)
buf->setDirty(true);
}
buf->setEncoding(-1);
break;
}
case IDM_FORMAT_WIN1255 :
case IDM_FORMAT_WIN1257 :
case IDM_FORMAT_WIN1258 :
case IDM_FORMAT_WIN1251 :
case IDM_FORMAT_WIN1252 :
case IDM_FORMAT_WIN1254 :
case IDM_FORMAT_ISO_8859_8 :
case IDM_FORMAT_WIN1250 :
case IDM_FORMAT_WIN1253 :
case IDM_FORMAT_WIN1256 :
@ -4380,47 +4440,56 @@ void Notepad_plus::command(int id)
case IDM_FORMAT_EUC_KR :
case IDM_FORMAT_BIG5 :
{
int encoding = -1;
switch (id)
size_t nbItem = sizeof(encoding_table)/sizeof(int);
int index = id - IDM_FORMAT_ENCODE;
if (index < 0 || index >= int(nbItem))
{
case IDM_FORMAT_BIG5:
encoding = NPP_CP_BIG5;
break;
case IDM_FORMAT_EUC_KR:
encoding = NPP_CP_EUC_KR;
break;
case IDM_FORMAT_SHIFT_JIS:
encoding = NPP_CP_SHIFT_JIS;
break;
case IDM_FORMAT_GB2312:
encoding = NPP_CP_GB2312;
break;
case IDM_FORMAT_TIS_620:
encoding = NPP_CP_TIS_620;
break;
case IDM_FORMAT_WIN1256:
encoding = NPP_CP_WIN_1256;
break;
case IDM_FORMAT_WIN1253:
encoding = NPP_CP_WIN_1253;
break;
case IDM_FORMAT_WIN1250:
encoding = NPP_CP_WIN_1250;
break;
default : // IDM_FORMAT_ANSI
encoding = CP_ACP;
printStr(TEXT("Encoding problem. Command is not added in encoding_table?"));
return;
}
Buffer * buf = _pEditView->getCurrentBuffer();
if (buf->isDirty())
{
int answer = ::MessageBox(NULL, TEXT("You should save the current modification.\rAll the saved modifications can not be undone.\r\rContinue?"), TEXT("Save Current Modification"), MB_YESNO);
if (answer == IDYES)
{
fileSave();
_pEditView->execute(SCI_EMPTYUNDOBUFFER);
}
else
return;
}
int len = _pEditView->getCurrentDocLen();
char *content = new char[len+1];
_pEditView->execute(SCI_GETTEXT, len+1, (LPARAM)content);
WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance();
const char *newContent = wmc->encode(encoding, SC_CP_UTF8, content);
_pEditView->execute(SCI_SETCODEPAGE, SC_CP_UTF8);
_pEditView->execute(SCI_SETTEXT, 0, (LPARAM)newContent);
_pEditView->getCurrentBuffer()->setEncoding(encoding);
delete [] content;
if (_pEditView->execute(SCI_CANUNDO) == TRUE)
{
int answer = ::MessageBox(NULL, TEXT("All the saved modifications can not be undone.\r\rContinue?"), TEXT("Loss Undo Ability Waning"), MB_YESNO);
if (answer == IDYES)
{
// Do nothing
}
else
return;
}
if (!buf->isDirty())
{
int len = _pEditView->getCurrentDocLen();
char *content = new char[len+1];
_pEditView->execute(SCI_GETTEXT, len+1, (LPARAM)content);
WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance();
const char *newContent = wmc->encode(encoding_table[index], SC_CP_UTF8, content);
_pEditView->execute(SCI_SETCODEPAGE, SC_CP_UTF8);
_pEditView->execute(SCI_SETTEXT, 0, (LPARAM)newContent);
Buffer *buf = _pEditView->getCurrentBuffer();
buf->setEncoding(encoding_table[index]);
delete [] content;
buf->setUnicodeMode(uniEnd);
_pEditView->execute(SCI_EMPTYUNDOBUFFER);
buf->setDirty(false);
}
break;
}
@ -7699,8 +7768,6 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
_subEditView.showMargin(ScintillaEditView::_SC_MARGE_LINENUMBER, svp2._lineNumberMarginShow);
_mainEditView.showMargin(ScintillaEditView::_SC_MARGE_SYBOLE, svp1._bookMarkMarginShow);
_subEditView.showMargin(ScintillaEditView::_SC_MARGE_SYBOLE, svp2._bookMarkMarginShow);
//_mainEditView.showMargin(ScintillaEditView::_SC_MARGE_MODIFMARKER, svp1._docChangeStateMarginShow);
//_subEditView.showMargin(ScintillaEditView::_SC_MARGE_MODIFMARKER, svp2._docChangeStateMarginShow);
_mainEditView.showIndentGuideLine(svp1._indentGuideLineShow);
_subEditView.showIndentGuideLine(svp2._indentGuideLineShow);
@ -7745,8 +7812,6 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
_mainEditView.execute(SCI_SETZOOM, svp1._zoom);
_subEditView.execute(SCI_SETZOOM, svp2._zoom);
//_mainEditView.execute(SCI_SETMULTIPLESELECTION, true);
//_subEditView.execute(SCI_SETMULTIPLESELECTION, true);
::SendMessage(hwnd, NPPM_INTERNAL_SETMULTISELCTION, 0, 0);
_mainEditView.execute(SCI_SETADDITIONALSELECTIONTYPING, true);
@ -7792,7 +7857,7 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
_statusBar.setPartWidth(STATUSBAR_DOC_SIZE, 200);
_statusBar.setPartWidth(STATUSBAR_CUR_POS, 250);
_statusBar.setPartWidth(STATUSBAR_EOF_FORMAT, 80);
_statusBar.setPartWidth(STATUSBAR_UNICODE_TYPE, 100);
_statusBar.setPartWidth(STATUSBAR_UNICODE_TYPE, 150);
_statusBar.setPartWidth(STATUSBAR_TYPING_MODE, 30);
_statusBar.display(willBeShown);
@ -10568,7 +10633,7 @@ void Notepad_plus::notifyBufferChanged(Buffer * buffer, int mask) {
{
updateStatusBar();
checkUnicodeMenuItems(buffer->getUnicodeMode());
setUniModeText(buffer->getUnicodeMode());
setUniModeText(/*buffer->getUnicodeMode()*/);
setDisplayFormat(buffer->getFormat());
enableConvertMenuItems(buffer->getFormat());
}
@ -10593,7 +10658,7 @@ void Notepad_plus::notifyBufferActivated(BufferID bufid, int view) {
setLangStatus(buf->getLangType());
updateStatusBar();
checkUnicodeMenuItems(buf->getUnicodeMode());
setUniModeText(buf->getUnicodeMode());
setUniModeText(/*buf->getUnicodeMode()*/);
setDisplayFormat(buf->getFormat());
enableConvertMenuItems(buf->getFormat());
generic_string dir(buf->getFullPathName());

View File

@ -468,7 +468,7 @@ private:
void setDisplayFormat(formatType f);
void setUniModeText(UniMode um);
void setUniModeText(/*UniMode um*/);
void checkLangsMenu(int id) const ;
void setLanguage(LangType langType);

View File

@ -399,13 +399,20 @@ BEGIN
POPUP "More..."
BEGIN
MENUITEM "Arabic(Windows)", IDM_FORMAT_WIN1256
MENUITEM "Central European(Windows)" IDM_FORMAT_WIN1250
MENUITEM "Baltic(Windows)", IDM_FORMAT_WIN1257
MENUITEM "Cyrillic(Windows)", IDM_FORMAT_WIN1251
MENUITEM "Central European(Windows)", IDM_FORMAT_WIN1250
MENUITEM "Chinese Traditional(Big5)", IDM_FORMAT_BIG5
MENUITEM "Chinese Simplified(GB2312)", IDM_FORMAT_GB2312
MENUITEM "Greek(Windows)", IDM_FORMAT_WIN1253
MENUITEM "Hebrew(iso8859-8)", IDM_FORMAT_ISO_8859_8
MENUITEM "Hebrew(Windows)", IDM_FORMAT_WIN1255
MENUITEM "Japanese(Shift-JIS)", IDM_FORMAT_SHIFT_JIS
MENUITEM "Korean(EUC)", IDM_FORMAT_EUC_KR
MENUITEM "Thai(Windows)", IDM_FORMAT_TIS_620
MENUITEM "Turkish(Windows)", IDM_FORMAT_WIN1254
MENUITEM "Western European(Windows)", IDM_FORMAT_WIN1252
MENUITEM "Vietnamese(Windows)", IDM_FORMAT_WIN1258
END
MENUITEM SEPARATOR
MENUITEM "Convert to ANSI", IDM_FORMAT_CONV2_ANSI

Binary file not shown.

View File

@ -238,21 +238,22 @@
#define IDM_FORMAT_CONV2_UCS_2BE (IDM_FORMAT + 12)
#define IDM_FORMAT_CONV2_UCS_2LE (IDM_FORMAT + 13)
#define IDM_FORMAT_WIN1250 (IDM_FORMAT + 20)
#define IDM_FORMAT_WIN1251 (IDM_FORMAT + 21)
#define IDM_FORMAT_WIN1252 (IDM_FORMAT + 22)
#define IDM_FORMAT_WIN1253 (IDM_FORMAT + 23)
#define IDM_FORMAT_WIN1254 (IDM_FORMAT + 24)
#define IDM_FORMAT_WIN1255 (IDM_FORMAT + 25)
#define IDM_FORMAT_WIN1256 (IDM_FORMAT + 26)
#define IDM_FORMAT_WIN1257 (IDM_FORMAT + 27)
#define IDM_FORMAT_WIN1258 (IDM_FORMAT + 28)
#define IDM_FORMAT_BIG5 (IDM_FORMAT + 29)
#define IDM_FORMAT_GB2312 (IDM_FORMAT + 30)
#define IDM_FORMAT_SHIFT_JIS (IDM_FORMAT + 31)
#define IDM_FORMAT_EUC_KR (IDM_FORMAT + 32)
#define IDM_FORMAT_TIS_620 (IDM_FORMAT + 33)
#define IDM_FORMAT_ENCODE (IDM_FORMAT + 20)
#define IDM_FORMAT_WIN1250 (IDM_FORMAT_ENCODE + 0)
#define IDM_FORMAT_WIN1251 (IDM_FORMAT_ENCODE + 1)
#define IDM_FORMAT_WIN1252 (IDM_FORMAT_ENCODE + 2)
#define IDM_FORMAT_WIN1253 (IDM_FORMAT_ENCODE + 3)
#define IDM_FORMAT_WIN1254 (IDM_FORMAT_ENCODE + 4)
#define IDM_FORMAT_WIN1255 (IDM_FORMAT_ENCODE + 5)
#define IDM_FORMAT_WIN1256 (IDM_FORMAT_ENCODE + 6)
#define IDM_FORMAT_WIN1257 (IDM_FORMAT_ENCODE + 7)
#define IDM_FORMAT_WIN1258 (IDM_FORMAT_ENCODE + 8)
#define IDM_FORMAT_BIG5 (IDM_FORMAT_ENCODE + 9)
#define IDM_FORMAT_GB2312 (IDM_FORMAT_ENCODE + 10)
#define IDM_FORMAT_SHIFT_JIS (IDM_FORMAT_ENCODE + 11)
#define IDM_FORMAT_EUC_KR (IDM_FORMAT_ENCODE + 12)
#define IDM_FORMAT_TIS_620 (IDM_FORMAT_ENCODE + 13)
#define IDM_FORMAT_ISO_8859_8 (IDM_FORMAT_ENCODE + 14)
#define IDM_LANG (IDM + 6000)
#define IDM_LANGSTYLE_CONFIG_DLG (IDM_LANG + 1)