-
예외로 다루어야 할 문자열들을 처리하는 가장 손쉬운 꼼수가 그것들을 실재할 가능성이 희박한 것으로 바꾸어 놓았다가 모든 처리가 완료될 때 원래대로 되돌리는 것이다.
<!-- <와 >를 ```로 바꾸었다가 --> <xsl:variable name="tmp" select="replace(., '<([가-힣]+?)>', '```$1```')"/> <xsl:variable name="tmp" select="replace($tmp, '<(POI|OK|%s)>', '```$1```')"/> <!-- 되돌려 놓기 --> <xsl:variable name="tmp" select="replace($tmp, '```(.+?)```', '<$1>')"/>이것이 효과적인 방법이지만, 정작 어려움은 문제아를 찾는 데에 있다. 다른 수십 파일들이 문제 없이 처리되고, 그래서 완벽한 해법을 만들었다고 스스로 자랑스러워할 때, 한 파일에서 에러 메시지가 쏟아지고 처리가 멈춰서면, 코드 전체가 못 미더워진다. 코드를 이리저리 바꾸어보았지만 계속 실패했다. 코드가 틀린 것이 아니고, 내가 찾지 못한 문제아가 어딘가에 숨어있는 것이 아닐까?
"절반 날리기" 신공을 써야 할 때가 왔다. 문제의 파일이 39172 줄. 뒤의 절반을 지우고 돌리니 정상적으로 종료된다. 문제아가 뒤쪽에 숨어있다는 말이다. 뒤의 절반을 되살리고, 앞의 절반을 지웠다. 이 짓을 거듭 반복하여 마침내 38878 번째 줄에서 문제아를 찾아내었다.
<bpt i="1" type="18" x="1"/><<ept i="1"/><만 있는 경우를 상상하지 못했다. 아래와 같이 조건을 변경하여 해결했다.
<xsl:when test="starts-with(., '<') and string-length(.) gt 4">'TeX과 친구들' 카테고리의 다른 글
아랍어 합자 (0) 2026.06.30 XSLT에 대하여 (0) 2025.12.18 Python에서 immutable object와 mutable object (0) 2025.09.23 readhanja 루아텍 패키지 (0) 2025.09.01 VS Code에서 한자 찾기 (0) 2025.08.29