2727#define SAKURA_CCODEBASE_1AB194FB_933C_495E_A3A3_62E117C72644_H_
2828#pragma once
2929
30+ #include < cstddef>
31+ #include < string>
32+ #include < string_view>
33+
3034#include " mem/CNativeW.h"
3135#include " CEol.h"
3236
@@ -39,6 +43,12 @@ enum EConvertResult{
3943
4044struct CommonSetting_Statusbar ;
4145
46+ // ! 変換元バイナリシーケンスを表す型。
47+ using BinarySequenceView = std::basic_string_view<std::byte>;
48+
49+ // ! 復元後バイナリシーケンスを表す型。
50+ using BinarySequence = std::basic_string<std::byte>;
51+
4252/* !
4353 文字コード基底クラス。
4454
@@ -47,8 +57,42 @@ struct CommonSetting_Statusbar;
4757*/
4858class CCodeBase {
4959public:
50- virtual ~CCodeBase (){}
51- // virtual bool IsCode(const CMemory* pMem){return false;} //!< 特定コードであればtrue
60+ virtual ~CCodeBase () noexcept = default ;
61+
62+ /* !
63+ 特定コードをUnicodeにエンコードする
64+
65+ @param [in] cSrc 変換対象のバイナリシーケンス
66+ @param [out,opt] pResult 変換結果を受け取る変数
67+ @returns サクラエディタ仕様のUnicode文字列
68+ */
69+ virtual CNativeW CodeToUnicode ( BinarySequenceView cSrc, bool * pResult = nullptr )
70+ {
71+ CMemory cmemSrc ( cSrc.data (), cSrc.size () );
72+ CNativeW cDest;
73+ auto result = CodeToUnicode ( cmemSrc, &cDest );
74+ if ( pResult ){
75+ *pResult = result == RESULT_COMPLETE;
76+ }
77+ return cDest;
78+ }
79+
80+ /* !
81+ Unicodeを特定コードにデコードする
82+
83+ @param [in] cSrc 変換対象のUnicodeシーケンス
84+ @param [out,opt] pResult 変換結果を受け取る変数
85+ @returns バイナリシーケンス
86+ */
87+ virtual BinarySequence UnicodeToCode ( const CNativeW& cSrc, bool * pResult = nullptr )
88+ {
89+ CMemory cDest;
90+ auto result = UnicodeToCode ( cSrc, &cDest );
91+ if ( pResult ){
92+ *pResult = result == RESULT_COMPLETE;
93+ }
94+ return BinarySequence ( static_cast <std::byte*>(cDest.GetRawPtr ()), cDest.GetRawLength () );
95+ }
5296
5397 // 文字コード変換
5498 virtual EConvertResult CodeToUnicode (const CMemory& cSrc, CNativeW* pDst)=0; // !< 特定コード → UNICODE 変換
0 commit comments