diff --git a/csaori_util.cpp b/csaori_util.cpp index 54191df..8de01a9 100644 --- a/csaori_util.cpp +++ b/csaori_util.cpp @@ -57,27 +57,31 @@ namespace SAORI_FUNC{ std::string UnicodeToMultiByte(const wchar_t *Source, unsigned int CodePage, DWORD Flags) { - if (int Len = ::WideCharToMultiByte(CodePage, Flags, Source, (int)wcslen(Source), NULL, 0, NULL, NULL)) { - std::vector Dest(Len); - if (Len = ::WideCharToMultiByte(CodePage, Flags, Source, (int)wcslen(Source), &Dest[0], static_cast(Dest.size()), NULL, NULL)) { - return std::string(Dest.begin(), Dest.begin() + Len); + if ( Source && *Source ) { + if (int Len = ::WideCharToMultiByte(CodePage, Flags, Source, (int)wcslen(Source), NULL, 0, NULL, NULL)) { + std::vector Dest(Len); + if (Len = ::WideCharToMultiByte(CodePage, Flags, Source, (int)wcslen(Source), &Dest[0], static_cast(Dest.size()), NULL, NULL)) { + return std::string(Dest.begin(), Dest.begin() + Len); + } + } } - } - return ""; + return ""; } - - + + std::wstring MultiByteToUnicode(const char* Source, unsigned int CodePage, DWORD Flags) { - if (int Len = ::MultiByteToWideChar(CodePage, Flags, Source, (int)strlen(Source), NULL, 0)) { - std::vector Dest(Len); - if (Len = ::MultiByteToWideChar(CodePage, 0, Source, (int)strlen(Source), &Dest[0], static_cast(Dest.size()))) { - return std::wstring(Dest.begin(), Dest.begin() + Len); + if ( Source && *Source ) { + if (int Len = ::MultiByteToWideChar(CodePage, Flags, Source, (int)strlen(Source), NULL, 0)) { + std::vector Dest(Len); + if (Len = ::MultiByteToWideChar(CodePage, 0, Source, (int)strlen(Source), &Dest[0], static_cast(Dest.size()))) { + return std::wstring(Dest.begin(), Dest.begin() + Len); + } + } } - } - return L""; + return L""; } - + std::wstring CodePagetoString(unsigned int cset){ switch(cset){ case CP_SJIS: diff --git a/impl_saori/kisaragi/kisaragi.cpp b/impl_saori/kisaragi/kisaragi.cpp index 2f1098f..df53032 100644 --- a/impl_saori/kisaragi/kisaragi.cpp +++ b/impl_saori/kisaragi/kisaragi.cpp @@ -125,15 +125,38 @@ void CSAORIKisaragi::exec_type(const CSAORIInput& in,CSAORIOutput& out,string_t string_t result = SAORI_FUNC::MultiByteToUnicode(pLattice->toString(),CP_UTF8); string_t sl; - string_t::size_type pos = 0; - do { - pos = SAORI_FUNC::getLine(sl, result, pos); - out.values.push_back(sl); - } while ( pos != string_t::npos ); - - out.result = SAORI_FUNC::intToString(out.values.size()); + if ( m_outFormat.compare(L"yomi") == 0 ) { + string_t::iterator ypos = result.begin(); + char_t c; + + while ( ypos != result.end() ) { + c = *ypos; + + //ひらがな->カタカナ + if ( (c >= L'\x3041' && c <= L'\x3094') || (c == L'\x309D') || (c == L'\x309E') ) { + c += (char_t)0x60U; + *ypos = c; + } + + ypos += 1; + } + } + + if ( result.size() > 0 ) { + string_t::size_type pos = 0; + do { + pos = SAORI_FUNC::getLine(sl, result, pos); + out.values.push_back(sl); + } while ( pos != string_t::npos ); + + out.result = SAORI_FUNC::intToString(out.values.size()); + } + else { + out.result = L"-1"; + } out.result_code = SAORIRESULT_OK; + return; } diff --git a/impl_saori/kisaragi/kisaragi.dsp b/impl_saori/kisaragi/kisaragi.dsp index 451317d..2216e95 100644 --- a/impl_saori/kisaragi/kisaragi.dsp +++ b/impl_saori/kisaragi/kisaragi.dsp @@ -102,6 +102,10 @@ SOURCE=..\..\csaori_base.cpp # End Source File # Begin Source File +SOURCE=..\..\csaori_util.cpp +# End Source File +# Begin Source File + SOURCE=.\kisaragi.cpp # End Source File # End Group @@ -118,6 +122,10 @@ SOURCE=..\..\csaori_base.h # End Source File # Begin Source File +SOURCE=..\..\csaori_util.h +# End Source File +# Begin Source File + SOURCE=.\resource.h # End Source File # End Group diff --git a/impl_saori/kisaragi/kisaragi.rc b/impl_saori/kisaragi/kisaragi.rc index d477f2b..8c92bdb 100644 --- a/impl_saori/kisaragi/kisaragi.rc +++ b/impl_saori/kisaragi/kisaragi.rc @@ -54,7 +54,7 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,1,1,0 + FILEVERSION 1,1,2,0 PRODUCTVERSION 1,0,0,0 FILEFLAGSMASK 0x17L #ifdef _DEBUG @@ -73,7 +73,7 @@ BEGIN VALUE "Comments", " \0" VALUE "CompanyName", " \0" VALUE "FileDescription", "kisaragi SAORI Extension\0" - VALUE "FileVersion", "1, 1, 1, 0\0" + VALUE "FileVersion", "1, 1, 2, 0\0" VALUE "InternalName", "kisaragi\0" VALUE "LegalCopyright", " \0" VALUE "LegalTrademarks", " \0" diff --git a/impl_saori/kisaragi/readme.txt b/impl_saori/kisaragi/readme.txt index e721645..a9da718 100644 --- a/impl_saori/kisaragi/readme.txt +++ b/impl_saori/kisaragi/readme.txt @@ -72,11 +72,10 @@ dic フォーマットの違いについては、例えば下記が参考になります。 http://d.hatena.ne.jp/Kshi_Kshi/20110102/1293920002 - ○wakati 引数 - Argument0: parse + Argument0: wakati Argument1: 解析する文字列 戻り値(Result) @@ -112,6 +111,8 @@ dic 機能 カタカナで読み仮名を振ります。 + 辞書にない読み仮名が未知の言葉の場合は、ひらがなの場合はカタカナ変換、それ以外はそのまま出力されます。 + ゆえに、出力にカタカナ以外の文字が混じる場合があるのを想定してください。 例 Argument0: yomi @@ -152,3 +153,6 @@ license.txt ・2017/9/10 v1.1.1  dicrcまでのパスに2バイト文字が含まれるとうまく読み込まない問題を修正 +・2020/4/3 v1.1.2 + yomiで未知語に出会った場合、かつそれがひらがなだった場合に、カタカナに変換する処理を追加 +