이번에 Python을 이용하여 LibreOffice의 Unittest 소스코드에 공헌을 해보았습니다.
출처:
- Remapping NatNum-DBNum in Korean for compatibility tdf#130193
https://gerrit.libreoffice.org/c/core/+/94747
관련 링크:
- tdf#130193 Japanese Traditional Numeric texts are wrong such as 1,2,3, 10, 1000, 10000
- tdf#130140 There is a string display error with numbers above 10 about All Korean Numeric text and Japanese Modern Numeric text
- tdf#130077 Korea's Hanja Upper Numbers[한자 갖은자] 5 and 1000 are wrong
링크의 Cppunit 소스코드에 보면 입력된 값에 대해서 이 값이 기대된 값(Expected value)인지 검사하는 로직이 있습니다.
이 단위테스트에서 주석과 결과를 넣어야할텐데, 문자열의 유니코드 코드포인트값을 어떻게 빠르게 뽑아낼까 고민을 하다 역시 Python이 있었지 하면서 Python으로 결과값을 뽑아내서 cppunittest 소스코드를 수정 작성하였습니다.
// DBNum1 -> NatNum4: Korean lower case characters
// 一億二千三百四十五万六千七百八十九
sExpected = u"\u4e00\u5104\u4e8c\u5343\u4e09\u767e\u56db\u5341\u4e94\u4e07\u516d\u5343\u4e03\u767e\u516b\u5341\u4e5d ";
sCode = "[NatNum4][$-0412]General\\ ";
checkPreviewString(aFormatter, sCode, 123456789, eLang, sExpected);
sCode = "[DBNum1][$-0412]General\\ ";
checkPreviewString(aFormatter, sCode, 123456789, eLang, sExpected);
아래는, 주석에 적은 문자열를 Python을 이용하여 Unicode Codepoint로 변환하는 예제입니다.
Python 3.8.3 (default, May 27 2020, 20:54:22)
[Clang 11.0.3 (clang-1103.0.32.59)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> "一億二千三百四十五万六千七百八十九".encode("unicode_escape")
b'\\u4e00\\u5104\\u4e8c\\u5343\\u4e09\\u767e\\u56db\\u5341\\u4e94\\u4e07\\u516d\\u5343\\u4e03\\u767e\\u516b\\u5341\\u4e5d'
>>> "壹億貳阡參佰四拾伍萬六阡七佰八拾九".encode("unicode_escape")
b'\\u58f9\\u5104\\u8cb3\\u9621\\u53c3\\u4f70\\u56db\\u62fe\\u4f0d\\u842c\\u516d\\u9621\\u4e03\\u4f70\\u516b\\u62fe\\u4e5d'
>>> "1억2천3백4십5만6천7백8십9".encode("unicode_escape")
b'\\uff11\\uc5b5\\uff12\\ucc9c\\uff13\\ubc31\\uff14\\uc2ed\\uff15\\ub9cc\\uff16\\ucc9c\\uff17\\ubc31\\uff18\\uc2ed\\uff19'
>>> "일억이천삼백사십오만육천칠백팔십구".encode("unicode_escape")
b'\\uc77c\\uc5b5\\uc774\\ucc9c\\uc0bc\\ubc31\\uc0ac\\uc2ed\\uc624\\ub9cc\\uc721\\ucc9c\\uce60\\ubc31\\ud314\\uc2ed\\uad6c'
>>>
Python의 결과값을 이용하여 Cppunittest의 결과값 비교를 하는데 유용하여 사용했습니다.
Python이 아니였으면 일본사람인 小笠原徳彦(Naruhiko Ogasawara)님과 협업으로 리브레오피스 소스코드 수정하는데 많이 지연이 되었을 것 같아요.
ps. 파이썬(Python)같이 생산성 빠른 언어를 익혀두면 언젠간 쓸 일이 생긴다.
ps2. 참고할만한 글
https://towardsdatascience.com/a-guide-to-unicode-utf-8-and-strings-in-python-757a232db95c