이 문제에 대해 GitHub 이슈도 생성해 두었지만, 더 많은 분들이 보고 계실 수 있으니 이곳에도 공유합니다:
이메일 트리밍 로직을 개선하여 코드 블록 내부에서 트리밍이 일어나지 않도록 하면 좋겠습니다. 예를 들어 다음과 같은 이메일이 있는 경우:
```
# This should not be deleted
#
# Or trimmed
# It is code
####
Code code code
```
첫 번째 ‘#’ 아래에 있는 모든 내용이 트리밍됩니다. 이는 다소 불편한 점입니다. 많은 분들이 코드의 섹션을 나누기 위해 주석 마커를 사용하며, 때로는 출력용 멀티라인 문자열에서도 이를 사용하거든요. 또한 프로그램 출력을 이메일에 복사해서 붙여넣을 때, 해당 출력에 이러한 줄이 포함되어 있더라도 프로그램 출력이 따옴표(틱)로 감싸져 있다면 이메일이 그 부분에서 트리밍되지 않는다는 편리한 기능이 있습니다. 이것이 충분히 일반적인 문제여서 누군가 개선할 수 있는지 살펴볼 시간이 있을까요? 매칭이 이루어지는 정규식(regex) 부분까지는 파악했지만, 코드 블록에 대한 예외를 추가하는 것이 얼마나 복잡한지 확신이 서지 않습니다.
저도 비슷한 방법을 생각해 보았으며, 해당 구현이 작동하고 브라우저 내 파서의 동작과 최대한 일치한다면 그렇게 구현해 주셔도 좋습니다. 예를 들어, 브라우저 인터페이스에서는 언어 선언 전에 공백을 허용하고, 닫는 태그 이후에도 공백을 허용합니다:
``` (여기에 많은 공백) c++
int x=42;
``` (여기에 많은 공백)
아직도 올바르게 다음과 같이 렌더링됩니다:
int x=42;
위 PR에서는 파서에서 식별할 수 있었던 규칙들을 따르려고 노력했습니다.
구현 방식에 대해 추가로 질문드리고 싶은 두 가지가 있습니다. 하나는 이것이 실제로 preprocess!에서 처리되어야 하는지, 즉 블록이 EmailReplyTrimmer 클래스에 의해 전달되거나 유지되어야 하는지(그리고 이것이 선호되는 방식인지)에 대한 것이며, 다른 하나는 버그가 있을 수 있다는 점입니다. 왜냐하면 거기서 반환되는 text는 치환이 수행되지 않은 원래 텍스트와 동일하기 때문입니다(겉보기에는 gsub가 매칭된 항목의 enumerators를 반환하는 것 같지만, 실제로는 치환을 수행하지 않는 것 같습니다?).
어쨌든, 위 PR에 추가된 테스트를 사용하셔도 좋으며, 만약 파서에 이 기능을 직접 추가하시길 원하시거나, 위에서 언급한 몇 가지 문제에 대해 알려주시면 새로운 pull request를 만들 수 있습니다. 문제를 정확히 파악하신 것 같고, 당신의 해결책이 거의 완성된 것으로 보이지만, 어떻게 마무리를 원하시는지 정확히 알지 못하겠습니다.