BLC 사용 예제 - BLC에 인코딩 추가하기
BLC 라이브러리 다운로드
BLC 라이브러리에서 다른 인코딩을 추가하여 사용하는 방법에 대해 설명한 문서입니다. 자세한 예제는 BLC 내부에 예제로 만들어둔 아래 세 파일을 참고하세요.
다만 예제에는 편의상 CP949 코드와 유니코드를 맵핑시킨 데이터를 소스파일(.cpp파일)에 그대로 집어넣어 만들었기 때문에 실제로 다른 인코딩을 추가하고자 한다면,
다른 방법(파일에서 데이터를 불러온다던지)을 사용하는 것이 낫습니다. 이 문서에서는 새로운 인코딩을 추가하는 방법만 소개합니다.
-
blc/ustr/encoding/blc_cp949_t.h
-
blc/ustr/encoding/blc_cp949_table.h
-
blc/ustr/encoding/blc_cp949_table.cpp
우선 유니코드와 추가할 인코딩이 사용하는 문자 코드를 변환해주는 코드 테이블이 필요합니다. 이 테이블을 위한 헤더를 하나 만들고 이 헤더에, BLC 내의 헤더 "blc/ustr/encoding/blc_encoding_defines.h"를 포함시킵니다.
그리고 namespace blc::ustr::encoding 내부에 아래의 예제와 같이 작성합니다.
"blc_cp949_table.h" 예제 코드 보기
- #pragma once
-
- #ifndef BLC_CP949_TABLE_H
- #define BLC_CP949_TABLE_H
-
- #include
-
-
- namespace blc {
- namespace ustr {
- namespace encoding {
-
- class CP949Table;
-
-
-
- template <>
- struct IsCodeTableType<CP949Table> final : public std::true_type {};
-
-
-
-
-
-
- class CP949Table final
- {
- public:
-
-
-
-
-
-
-
- static constexpr uint32_t kBom_ = kInvalidCharacter;
-
-
-
-
-
-
- uint32_t CodeToUnicode(uint32_t code) const {
-
-
- }
-
-
-
-
- uint32_t UnicodeToCode(uint32_t unicode) const {
-
-
- }
-
-
-
-
-
-
- bool IsValidCode(uint32_t code) const {
-
- }
- };
-
- }
- }
- }
-
- #endif
"blc_cp949_table.h" 예제 코드 접기
코드 테이블 헤더를 작성했으면 이제 실제 인코딩과 디코딩을 담당할 클래스를 만들어야 합니다. 마찬가지로 헤더를 하나 만들고 이 헤더에, BLC 내의 헤더
"blc/ustr/encoding/blc_encoding_defines.h"와 "blc/ustr/encoding/blc_encoding.h", 그리고 위에서 작성한
코드 페이지 테이블 헤더(여기서는 "blc/ustr/encoding/blc_cp949_table.h")를 포함시킵니다.
위의 예제와 마찬가지로 namespace blc::ustr::encoding 내부에 아래의 예제와 같이 작성합니다.
"blc_cp949_t.h" 예제 코드 보기
예제에는 멤버 함수 선언문에 코드 구현까지 직접 작성했지만, 따로 .cpp 파일을 만들어서 선언과 구현을 분리해도 됩니다.
이제 "blc/ustr/blc_mchar.h", "blc/ustr/blc_ustring.h" 헤더 등에 선언된 인코딩 타입을 요구하는 템플릿에, using 선언된 "blc::ustr::encoding::CP949" 타입을 넣어 사용할 수 있습니다.