저는 CLisp을위한 휴대용 IDE를 잠시 동안 작성하고 싶었고 최근에 C#을 사용하여 시작했습니다.코드에서 일치하는 대괄호 강조하기
대괄호 강조 표시는 현재 문자가 대괄호인지 확인한 다음 텍스트 전체에서 앞뒤로 이동하면서 대괄호 강조 표시를 구현했지만 여는 대괄호와 닫는 대괄호가 동등해질 때까지 다음 대괄호를 추적합니다.
간단한 for 루프를 사용하여이 작업을 수행했지만 (일치하는 대괄호가 발견되면 for 루프를 "중단") 코드의 크기가 커지면 메소드가 느려집니다. RichTextBox에서 텍스트를 강조 표시하는 방법은 프로그래밍 방식으로 커서를 이동하고 강조 표시를 적용한 다음 커서의 원래 위치로 다시 선택 취소하고 이동하여 문자를 선택하는 데 비효율적 인 것으로 보입니다. 괄호에서 벗어나면 강조 표시가 지워야하므로 모든 텍스트를 선택하고 그 텍스트의 서식을 제거하기 만하면됩니다.
가끔 사용자가 커서를 너무 빠르게 움직이면 (키보드의 화살표 키 사용) 응용 프로그램이 커서가 있어야하는 위치를 추적 할 수 없으며 응용 프로그램이 실수로 이전 위치로 다시 이동할 수 있습니다. 간단히 말해서, 내가 쓴 하이라이트 기능은 사용자가 키보드를 사용하여 큰 코드 블록을 스크롤 할 때 따라 잡을 수 없다.
for 루프 이외의 다른 방법에 대한 효율적인 방법이 있습니까? 괄호를 강조 표시하고 강조 표시하는 비효율적 인 방법을 사용하고 있습니까? Regex가 여기서 해결책을 제시 할 수 있습니까? 나는 본질적으로 코드를 자신의 내 작품을 썼다 동안
나는 빌 도마뱀 여기에 무슨 짓을했는지 정확히 수행 한 : How do I find the position of matching parentheses or braces in a given piece of text?
그래, 그게 Lisp의 문제이고, 왜 적절한 (그리고 빠른) 괄호 하이라이트가 나에게 그렇게 중요한지. 나는 괄호의 모든 색인을 기억하고 있다는 당신의 생각을 좋아합니다. 아마도 그것은 심지어 배경 스레드에 의해 수행 될 수 있습니다. – janvdl
@janvdl 그래, 단지 그것이 일관성을 유지하는지 확인하십시오. 당신은 실제로 그 인덱스를 적절하게 증가시킵니다. (한 번에 하나의 증가 작업 만 허용 할 수 있습니다. 둘 이상의 변경 사항을 버퍼링 한 경우 한 번에 적용하려고 시도하십시오. 예를 들어 10을 작성하는 경우 문자가 색인 유지 전에 유지 관리하려면 두 번 - 첫 번째 문자에 대해 한 번, 그리고 다른 9 개의 문자에 대해 한 번 - 두 번만 업데이트를 수행하십시오. 특히 문자가 하나에서 작성된 경우 위치 (경우에 따라 다름)를 사용하면 많은 시간을 절약 할 수 있습니다. – Luaan