Scintilla icon

신틸라 문서

5.3.6 버전 한글판 johnsonj 230726

Scintilla 5에서는 렉서를 새로운 Lexilla 프로젝트로 옮겼다.
렉실라 이전 지침서를 참조하자.

신틸라의 내부 디자인.
신틸라 사용에 관한 주의사항.
신틸라 편집 콘트롤을 윈도우즈에서 사용하는 법.
윈도우즈에서 C++로 신틸라를 사용하는 간단한 예.
비주얼 베이직으로 신틸라를 사용하는 간단한 예.
Bait는 GTK에서 신틸라를 사용하는 간단한 예이다.
버그를 찾거나 새로운 특징을 구현하려면 ScintillaTest가 더 완벽한 GTK 샘플이다.
접기를 포함하여 어휘분석기를 작성하는 법에 관한 상세한 설명.
컨테이너에 어휘분석기를 구현하는 법.
접기를 구현하는 법.
바락 언어를 위한 구문 강조 & 코드 접기.
Qt용 테스트 어플 Haven.

신틸라에 코드를 공헌하고 싶다면 강제적인 것은 아니지만 신틸라와 SciTE에 사용된 코딩 스타일을 따를 가치가 있다.

들어가는 말

신틸라 윈도우즈 버전은 윈도우즈 콘트롤이다. 그래서 기본적인 프로그래밍 인터페이스는 윈도우즈 메시지를 통한다. 이전 버전의 신틸라는 표준 윈도우즈의 Edit 그리고 RichEdit 콘트롤에 정의된 API를 대부분 흉내내었다. 그러나 그런 API들은 이제 신틸라 만의 더 일관성이 있는 API가 있기 때문에 추천하지 않는다. 보통의 Edit 콘트롤의 행위를 수행하는 메시지와 더불어, 신틸라는 구문 멋내기, 접기, 표식, 자동완성 그리고 콜팁을 제어할 수 있다.

GTK 버전도 윈도우즈 버전과 비슷하게 메시지를 사용한다. 이 방식은 정상적인 GTK 관행과 다르지만 더 빠르고 쉽게 구현할 수 있다.

신틸라는 아랍어나 헤브루 언어 같이 오른쪽에서 왼쪽으로 쓰는 언어를 제대로 지원하지 않는다. 이런 언어에서 텍스트는 올바르게 보이겠지만 정상적으로 편집할 수는 없다.

이 문서는 신틸라가 사용하는 개별 메시지와 고지를 기술한다. 함께 연결해서 유용한 편집기를 만드는 법은 기술하지 않는다. 지금 당장 신틸라 사용법을 개발하는 방법을 알아보려면 가장 좋은 방법은 SciTE가 신틸라를 어떻게 사용하는지 살펴보는 것이다. SciTE는 신틸라의 편의 기능 대부분을 최대한 이용한다.

유형에 더 안전한 API가 있어서 C++에 사용할 수 있다. ScintillaTypes.h와 ScintillaMessages.h 그리고 ScintillaStructures.h 헤더와 call/ScintillaCall.cxx에 구현되어 있다. ScintillaTypes.h와 ScintillaMessages.h 그리고 ScintillaStructures.h 헤더는 ScintillaCall이 없어도 사용할수는 있지만 ScintillaCall을 사용하면 더 쉽게 다른 헤더들을 사용할 수 있다. 메쏘드 안에 메시지들을 포장해 넣어주기 때문에 과도한 유형 변환을 하지 않아도 된다. ScintillaCall은 호출이 실패하면 Scintilla::Failure 예외를 던진다.

아래의 기술에서 메시지는 한 두 개의 인자를 가진 함수 호출로 기술된다. 이 두 인자는 표준인 wParamlParam로서 윈도우즈 프로그래머라면 친숙할 것이다. 이런 매개변수들은 포인터를 담을 만큼 충분히 큰 정수이다. 그리고 반환 값도 포인터를 담을 만큼 충분히 큰 정수이다. 명령어는 기술한 인자만을 사용함에도 불구하고, 신틸라가 사용하든 안 하든 모든 메시지는 두 개의 인자를 가지므로, 사용하지 않는 인자는 0으로 설정하기를 적극 권장한다. 이렇게 하면 앞으로 기존의 코드를 깨트리는 부담없이 메시지를 개선할 수 있다. 일반적인 인자 유형은 다음과 같다:

bool 값이 0인 false 또는 값이 1인 true를 예상하는 인자.
int 32-비트 부호있는 정수인 인자.
position 문서의 위치와 길이. intptr_t과 같다.
line 문서의 줄 번호. intptr_t과 같다.
const char * 신틸라에게 건넬 그러나 수정되지 않은 텍스트를 가리키는 인자. 텍스트는 널로 종료한다. 아니면 또다른 인자로 문자 개수를 지정할 수 있다. 나중에 더 자세하게 설명한다.
char * 신틸라가 텍스트로 채울 텍스트 버퍼를 가리는 인자. 어떤 경우, 또다른 인자가 신틸라에게 버퍼 크기를 알려준다. 또 어떤 경우, 요청한 텍스트를 담기에 버퍼가 충분히 큰지 확인해야 한다. NULL 포인터 (0)가 건네지면, SCI_* calls에 대하여, 할당될 길이가 반환된다. 널 종료 문자열은 포함하지 않는다. 어떤 호출은 ("NUL-종료" 표식이 붙으면) NUL 문자를 그 결과에 추가하지만, 어떤 호출은 그렇지 않다: 일반적으로 두 유형을 모두 처리하려면, 한 바이트를 더 할당하고 거기에 NUL을 설정하면 된다.
colour 색깔은 RGB 형태로 설정된다 (Red, Green, Blue). 각 색깔의 채도는 0에서 255 사이의 범위에서 설정된다. 다음과 같이 조합할 수 있다: red | (green << 8) | (blue << 16) | (alpha << 24). 채도를 모두 255로 설정하면, 하얀색이다. 채도가 모두 0이면, 검정색이다. 완전한 투명은 알파값이 255이다. 색깔을 설정한다는 것은, 요청을 하는 것이다. 무엇을 얻을지는 시스템과 현재 화면 모드의 능력에 달려있다.
alpha 투명도는 알파 값으로 설정된다. 알파 범위는 (SC_ALPHA_TRANSPARENT) 완전히 투명한 0으로 시작하여 불투명한 255 (SC_ALPHA_OPAQUE)까지이다. 값 256은 (SC_ALPHA_NOALPHA) 불투명하고 알파를-인지하지 않는 코드를 사용하므로 좀 더 빠르다. 모든 플랫폼에서 투명도를 지원하는 것은 아니며 오직 몇가지 신틸라 특징만 투명도를 구현한다. 대부분의 특징에 대하여 기본 알파 값은 SC_ALPHA_NOALPHA이다.
<unused> 사용되지 않는 인자이다. 이것을 0으로 설정해 두면 나중에 개선할 때 호환성을 담보할 수 있다.

Lexilla

Scintilla 5.0부터 어휘분석기가 별도의 Lexilla 라이브러리로 들어간다. 신틸라는 GUI를 책임진다. 그리고 Lexilla로 어휘분석기를 호출한다.

Lexilla는 공유 라이브러리와 정적 라이브러리로 빌드된다. 어플리케이션은 어디에 링크할지 결정하기만 하면 된다.

렉실라(Lexilla)는 외부 어휘분석 프로토콜을 따르므로 이를 따르는 어플리케이션에 적재해 넣을 수 있다. 이 프로토콜은 객체 어휘분석기만 지원하므로, 추가로CreateLexer(const char *name) 함수를 제공하는데 이는 (ILexer5 *) 렉서 객체를 만들어 낸다.

Lexilla와 같은 기능을 제공하는 Lexer 라이브러리는 Lexilla가 제공하는 기능을 줄이거나 늘려서 신틸라가 사용할 수 있도록 어휘분석기를 제공할 수 있다.

Lexilla로 만든 어휘분석기는 SCI_SETILEXER를 호출해 사용한다.

목차

텍스트 열람과 수정 검색과 교체 덮어쓰기(Overtype)
자르기, 복사하기 그리고 붙이기 에러처리 언두(Undo)와 리두(Redo)
선택과 정보 다중 선택과 가상 공간 스크롤과 자동 스크롤
공간 커서(Cursor) 마우스 나포
줄 끝내기 단어 스타일처리(Styling)
스타일 정의 엘리먼트 색깔 캐럿(Caret), 선택 그리고 집화점(hotspot) 스타일
여백(Margins) 주해(Annotations) 기타 설정
괄호 강조 탭과 들여쓰기 가이드 표식(Markers)
표시자(Indicators) 자동완성 사용자 리스트
콜팁(호출정보) 키보드 명령어 키 묶기
편집 메뉴 띄우기 매크로 기록 인쇄
직접 접근 다중 뷰 배경 적재와 저장
접기(Folding) 줄 넘기기(Line wrapping) 확대
긴 줄 어휘분석기(Lexer) 어휘분석기 객체
고지 이미지 GTK
잠정적인 메시지 비추천 메시지 지원하지 않는 편집 메시지
신틸라 빌드하기 문자 단위 또는 UTF-16 코드 단위 선택 줄끝 주석
변경이력 문자 표현

SCI_SETxxxxx 형태의 이름을 가지는 메시지는 보통 짝으로 SCI_GETxxxxx가 있다. 지겨운 반복을 피하기 위해 SCI_GETxxxxx 메시지가 돌려주는 값이 SCI_SETxxxxx 메시지로 설정되어 있다면 SET 루틴을 설명하고 난 다음의 GET 루틴의 설명은 여러분의 상상에 남겨둔다.

텍스트 열람과 수정

신틸라 문서에서 각 바이트는 스타일 정보를 담은 바이트와 관련되어 있다. 문자 바이트와 스타일 바이트를 합쳐서 셀이라고 부른다. 스타일 바이트는 스타일 배열의 지표로 번역된다.

3.50부터 삭제됨 - 스타일 바이트는 지표 그리고 표시자 집합으로 나뉠 수 있지만 이런 사용법은 권장할 수 없다. 표시자는 이제 SCI_INDICATORFILLRANGE 그리고 관련 호출을 이용해야 한다. 기본으로 하위 5 비트를 지표로 하고 상위 3 비트를 표시자로 하여 가른다. 이렇게 하면 32개의 기본 스타일을 사용할 수 있으면, 이 정도면 대부분의 언어에 충분한 양이다. 나머지 3개 비트는 독립 표시자로서 구문 에러, 비추천 이름 그리고 나쁜 들여쓰기를 모두 한 번에 나타낼 수 있다. 스타일에 사용된 비트 개수는 SCI_SETSTYLEBITS로 최대 8비트까지 바꿀 수 있다. 나머지 비트는 표시자에 사용한다.

이 문서에서, '문자(character)'는 멀티-바이트 문자가 사용되더라도 보통 바이트를 가리킨다. 길이는 바이트의 개수로 측정하지, 그런 바이트가 모인 문자의 양으로 측정하지 않는다.

신틸라 문서 안에서 위치는 문자를 가리킨다. 또는 그 문자 앞의 빈틈을 가리킨다. 문서에서 첫 문자는 위치가 0이고, 두 번째 문자는 1 등등 이다. 문서에 nLen 문자가 있다면, 마지막 문자는 번호가 nLen-1이다. 캐럿은 문자 위치 사이에 존재하고 첫 문자 앞 (0)에서부터 마지막 문자 뒤 (nLen)까지 위치할 수 있다.

캐럿이 들어갈 수 없는 곳이 있다. 문자 두 바이트가 하나의 문자를 구성하는 곳에는 들어갈 수 없다. 이는 한국어 같이 DBCS 문자가 문서에 포함될 경우 일어나는 일이다. 또는 줄 끝에 CP/M 표준인 CR/LF로 표식되어 있다면 그런 일이 일어난다. INVALID_POSITION 상수(-1)은 문서 안에서 잘못된 위치를 나타낸다.

신틸라에서 모든 줄은 높이가 같다. 이 높이는 현재 스타일에서 가장 큰 글꼴을 기준으로 계산된다. 이 제한은 수행성능을 위한 것이다; 줄이 높이가 다르다면 텍스트의 위치를 잡기 위해 먼저 스타일을 결정해야 하기 때문이다.

SCI_GETTEXT(int length, char *text) → int
SCI_SETTEXT(<unused>, const char *text)
SCI_SETSAVEPOINT
SCI_GETLINE(int line, char *text) → int
SCI_REPLACESEL(<unused>, const char *text)
SCI_SETREADONLY(bool readOnly)
SCI_GETREADONLY → bool
SCI_GETTEXTRANGE(<unused>, Sci_TextRange *tr) → int
SCI_GETTEXTRANGEFULL(<unused>, Sci_TextRangeFull *tr) → position
SCI_ALLOCATE(int bytes)
SCI_ALLOCATELINES(line lines)
SCI_ADDTEXT(int length, const char *text)
SCI_ADDSTYLEDTEXT(int length, cell *c)
SCI_APPENDTEXT(int length, const char *text)
SCI_INSERTTEXT(int pos, const char *text)
SCI_CHANGEINSERTION(int length, const char *text)
SCI_CLEARALL
SCI_DELETERANGE(int start, int lengthDelete)
SCI_CLEARDOCUMENTSTYLE
SCI_GETCHARAT(int pos) → int
SCI_GETSTYLEAT(int pos) → int
SCI_GETSTYLEINDEXAT(position pos) → int
SCI_GETSTYLEDTEXT(<unused>, Sci_TextRange *tr) → int
SCI_GETSTYLEDTEXTFULL(<unused>, Sci_TextRangeFull *tr) → position
SCI_SETSTYLEBITS(int bits) - 3.50부터 삭제
SCI_GETSTYLEBITS - 3.50부터 삭제
SCI_RELEASEALLEXTENDEDSTYLES
SCI_ALLOCATEEXTENDEDSTYLES(int numberStyles) → int
SCI_TARGETASUTF8(<unused>, char *s) → int
SCI_ENCODEDFROMUTF8(const char *utf8, char *encoded) → int
SCI_SETLENGTHFORENCODE(int bytes)

SCI_GETTEXT(int length, char *text NUL-terminated) → int
이 함수는 문서의 시작에서부터 텍스트 최소 length 개의 문자와 0 종료 문자 하나를 돌려준다. length가 문서 길이를 넘어가면 문서 길이를 돌려준다. 문서 안의 모든 텍스트를 모으려면, SCI_GETLENGTH를 사용하여 문서 안의 문자 개수(nLen)를 얻어, nLen+1 바이트 길이의 문자 버퍼를 할당하고, SCI_GETTEXT(nLen+1, char *text)를 호출하자. 텍스트 인자가 NULL(0)이라면 전체 문서를 저장하기 위하여 할당해야 할 길이가 반환된다. 다음, 텍스트를 저장하면, SCI_SETSAVEPOINT를 사용하여 텍스트를 수정되지 않은 것으로 표식을 붙여야 한다.

다음도 참조: SCI_GETSELTEXT, SCI_GETCURLINE, SCI_GETLINE, SCI_GETSTYLEDTEXT, SCI_GETTEXTRANGE

SCI_SETTEXT(<unused>, const char *text)
문서 안의 모든 텍스트를 여러분이 건넨 널종료 텍스트 문자열로 교체한다.

SCI_SETSAVEPOINT
이 메시지는 신틸라에게 문서의 현재 상태가 수정되지 않은 상태라고 알려준다. 보통 파일이 저장되거나 적재될 때 알려주므로, 그 이름이 "저장 시점(save point)"이다. 신틸라는 언두와 리두 연산을 수행하면서, 저장 시점에 들어오거나 떠나는 것을 SCN_SAVEPOINTREACHEDSCN_SAVEPOINTLEFT 고지 메시지로 컨테이너에게 고지한다. 그러면 컨테이너는 그 파일이 수정되었는지 아닌지 알 수 있다.

다음도 참조하자: SCI_EMPTYUNDOBUFFER, SCI_GETMODIFY

SCI_GETLINE(int line, char *text) → int
text에서 정의한 버퍼를 지명한 줄의 내용으로 채운다 (줄은 0에서 시작한다). 버퍼는 NULL(0) 종료 문자로 끝나지 않는다. 버퍼가 텍스트를 담기에 충분히 긴지 확인하는 것은 여러분의 몫이다. SCI_LINELENGTH(int line)를 사용하자. 반환 값은 버퍼에 복사한 문자의 개수이다. 반환된 텍스트에는 줄 끝문자가 포함된다. 문서의 줄 범위를 벗어난 줄 번호를 요구하면, 0개의 문자가 복사된다. text 인자가 0이면 전체 줄을 저장하기 위해 할당해야 할 길이가 반환된다.

다음도 참조: SCI_GETCURLINE, SCI_GETSELTEXT, SCI_GETTEXTRANGE, SCI_GETSTYLEDTEXT, SCI_GETTEXT

SCI_REPLACESEL(<unused>, const char text)
앵커와 현재 위치 사이에 선택된 텍스트가 널 종료 텍스트 문자열로 교체된다. 앵커와 현재 위치가 같다면, 텍스트가 캐럿 위치에 삽입된다. 캐럿은 삽입된 텍스트 다음에 위치하고 보이도록 스크롤된다.

SCI_SETREADONLY(bool readOnly)
SCI_GETREADONLY → bool
이 메시지들은 문서에 읽기-전용 속성을 설정하고 얻는다. 문서를 읽기 전용으로 표식하면, 텍스트를 수정하려고 할 경우 SCN_MODIFYATTEMPTRO 고지가 야기된다.

SCI_GETTEXTRANGE(<unused>, Sci_TextRange *tr) → position
SCI_GETTEXTRANGEFULL(<unused>, Sci_TextRangeFull *tr) → position
cpMincpMax 사이의 텍스트를 모아서 그것을 lpstrText에 복사한다 (Scintilla.h에서 struct Sci_TextRange를 참조). cpMax가 -1이라면, 텍스트가 문서의 끝까지 반환된다. 텍스트는 널문자로 종료한다. 그래서 읽고 싶은 문자의 개수보다 적어도 1문자 이상 더 큰 버퍼를 공급해야 한다. 반환 값은 반환된 텍스트의 길이이며 여기에는 널종료 문자는 포함되지 않는다.

SCI_GETTEXTRANGEFULL은 64-비트 위치를 사용한다. 그래서 2GB를 넘는 문서에도 안전하다. 이것을 SCI_GETTEXTRANGE 대신에 사용하는 것이 좋다. 앞으로 SCI_GETTEXTRANGE는 폐기 예정이다.

다음도 참조: SCI_GETCURLINE, SCI_GETSELTEXT, SCI_GETTEXTRANGE, SCI_GETSTYLEDTEXT, SCI_GETTEXT

SCI_GETSTYLEDTEXT(<unused>, Sci_TextRange *tr) → position
SCI_GETSTYLEDTEXTFULL(<unused>, Sci_TextRangeFull *tr) → position
각 셀당 두 바이트를 사용하여 스타일처리된 텍스트를 버퍼에 모은다. 각 쌍마다 하위 주소에 문자 그리고 상위 주소에 스타일 바이트로 구성된다. cpMincpMax 위치 사이의 문자들이 lpstrText로 복사된다 (Scintilla.h에서 struct Sci_TextRangestruct Sci_TextRangeFull를 참조). 두개의 0 바이트가 텍스트의 끝에 추가된다. 그래서 lpstrText가 가리키는 버퍼는 길이가 적어도 2*(cpMax-cpMin)+2 바이트이다. cpMin이나 cpMax의 값이 합리적이면 점검하지 않는다. 문서 바깥의 위치는 값이 0인 문자 코드와 스타일 바이트를 돌려준다.

SCI_GETSTYLEDTEXTFULL은 모드 플랫폼에서 위치가 64-비트이다. 그래서 2GB가 넘는 문서에도 안전하다. 앞으로 비추천될 SCI_GETSTYLEDTEXT 보다는 SCI_GETSTYLEDTEXT를 항상 사용하는 편이 좋다.

다음도 참조: SCI_GETSELTEXT, SCI_GETLINE, SCI_GETCURLINE, SCI_GETTEXTRANGE, SCI_GETTEXT

SCI_ALLOCATE(int bytes)
주어진 개수의 바이트를 저장하기에 충분한 문서 버퍼를 할당한다. 문서는 현재 내용보다 더 작게 만들어지지 않는다.

SCI_ALLOCATELINES(line lines)
lines 인자에 부합하도록 줄 인덱스를 할당한다. 인덱스를 여러 번 중복할당하지 않도록 최적화한다. 어플이 문서의 줄 갯수를 예측할 수 있으면 텍스트가 삽입되기 때문이다. 이 호출로 인하여 줄 갯수가 감소하지는 않는다.

SCI_ADDTEXT(int length, const char *text)
문자열 text의 앞쪽 length 개의 문자를 현재 위치에 삽입한다. 문자열에 삽입 연산을 중지하라고 예상한 곳에 0 종료 문자가 얼마든지 포함된다. 현재 위치는 삽입된 텍스트의 끝에 설정되지만, 스크롤되어 보이지는 않는다.

SCI_ADDSTYLEDTEXT(int length, cell *c)
마치 SCI_ADDTEXT처럼 행동하지만, 스타일 텍스트를 삽입한다.

SCI_APPENDTEXT(int length, const char *text)
문서의 끝에 문자열 textlength개의 문자열을 추가한다. 문자열에 삽입 연산을 멈추리라고 예상하는 곳에 얼마든지 NULL(0)종료 문자가 포함된다. 현재 선택은 바뀌지 않는다. 그리고 새로운 텍스트는 스크롤되므로 보이지 않는다.

SCI_INSERTTEXT(int pos, const char *text)
0 종료 text 문자열을 pos 위치에 또는 pos가 -1이면 현재 위치에 삽입한다. 현재 위치가 삽입 위치 뒤이면, 그를 둘러싼 텍스트와 함께 이동된다. 그러나 스크롤은 수행되지 않는다.

SCI_CHANGEINSERTION(int length, const char *text)
이 메시지는 SC_MOD_INSERTCHECK 고지에서만 호출되고 삽입중인 텍스트를 제공한 텍스트로 바꾼다.

SCI_CHANGEINSERTION(int length, const char *text)
오직 SC_MOD_INSERTCHECK 고지 처리자에서만 호출된다. 삽입중인 텍스트를 제공한 텍스트로 바꾼다.

SCI_CLEARALL
문서가 읽기-전용이 아닌 한, 텍스트를 모두 지운다.

SCI_DELETERANGE(int start, int lengthDelete)
문서에서 한 범위의 텍스트를 삭제한다.

SCI_CLEARDOCUMENTSTYLE
문서를 완전히 다시 치장하고 싶다면, 예를 들어 어휘분석기를 고른 후에, SCI_CLEARDOCUMENTSTYLE를 사용하여 모든 스타일 정보를 지우고 접기 상태를 재설정할 수 있다.

SCI_GETCHARAT(int pos) → int
문서에서 pos 위치의 문자를 반환한다. 또는 pos가 음수이거나 문서의 끝을 지나면 0을 반환한다.

SCI_GETSTYLEAT(int pos) → int
문서에서 pos 위치의 스타일을 돌려준다. 또는 pos가 음수이거나 문서의 끝을 지나면 0을 돌려준다.

SCI_SETSTYLEBITS(int bits) 3.50부터 삭제
SCI_GETSTYLEBITS 3.50부터 삭제
이 한 쌍의 루틴은 각 셀마다 스타일처리에 사용할 비트 개수를, 최대 8 개의 스타일 비트까지 설정하고 읽어 들인다. 나머지 비트는 표시자(indicators)로 사용할 수 있다. 표준 설정은 SCI_SETSTYLEBITS(5)이다. 현재 어휘분석기가 필요로 하는 스타일 비트의 개수는 SCI_GETSTYLEBITSNEEDED로 찾을 수 있다.

SCI_GETSTYLEAT(position pos) → int
SCI_GETSTYLEINDEXAT(position pos) → int
문서에서 pos 지점의 스타일을 돌려준다. pos가 음수이거나 문서의 끝을 지나면 0을 돌려준다.

SCI_GETSTYLEAT은 127을 넘을 경우 음수를 돌려주지만 SCI_GETSTYLEINDEXAT은 오직 양수만 돌려준다. 스타일을 더 일관되게 다루고 128 스타일을 넘어 정의되는 렉서와의 문제를 피하려면 SCI_GETSTYLEINDEXAT을 사용해야 한다.

SCI_RELEASEALLEXTENDEDSTYLES
SCI_ALLOCATEEXTENDEDSTYLES(int numberStyles) → int
텍스트 여백과 주해와 같은 특징들에는 확장 스타일이 사용된다 뿐만 아니라 신틸라 내부적으로 사용된다. 확장 스타일은 범위가 0..255 밖이며 문서 바이트에 연관된 스타일 바이트에 사용된다. 다음 함수는 컴포넌트들이 정의된 스타일 안에서 협력하도록 확장 스타일의 사용을 관리한다. SCI_RELEASEALLEXTENDEDSTYLES은 컨테이너가 할당한 확장 스타일을 해제한다. SCI_ALLOCATEEXTENDEDSTYLES은 바이트 스타일 값 다음에 한 범위의 스타일 번호를 할당한다. 그리고 제일 먼저 할당된 스타일 번호를 돌려준다. 여백과 주해 스타일에 대한 범위를 반드시 먼저 할당하고 나서 SCI_MARGINSETSTYLEOFFSET이나 SCI_ANNOTATIONSETSTYLEOFFSET을 호출해야 한다.

Sci_TextRange 그리고 Sci_CharacterRange
신틸라를 RichEdit으로 취급하는 이전 코드가 작동하도록 이 구조는 정확하게 Win32 TEXTRANGE 그리고 CHARRANGE와 똑같은 모양으로 정의된다.

앞으로 Scintilla가 모든 플랫폼에서 64-비트로 빌드될 때 Sci_PositionCR 유형은 64-비트가 되도록 재정의될 것이다.

대신에 SCI_GETTEXTRANGEFULL, Sci_TextRangeFull 그리고 Sci_CharacterRangeFull에 사용될 것이다.

typedef long Sci_PositionCR;

struct Sci_CharacterRange {
    Sci_PositionCR cpMin;
    Sci_PositionCR cpMax;
};

struct Sci_TextRange {
    struct Sci_CharacterRange chrg;
    char *lpstrText;
};

Sci_TextRangeFull 그리고 Sci_CharacterRangeFull
이 구조체는 Sci_TextRange 그리고 Sci_CharacterRange와 같은데 단지 위치가 언제나 64비트이므로 2GB가 넘은 문서에도 작동한다는 점이 다르다.

typedef ptrdiff_t Sci_Position;

struct Sci_CharacterRangeFull {
	Sci_Position cpMin;
	Sci_Position cpMax;
};

struct Sci_TextRangeFull {
	struct Sci_CharacterRangeFull chrg;
	char *lpstrText;
};

GTK-, Cocoa, Windows 전용: 인코드된 텍스트에 접근하는 법

SCI_TARGETASUTF8(<unused>, char *s) → int
이 메쏘드는 UTF-8로 인코드된 대상의 값을 돌려준다. UTF-8은 GTK의 기본 인코딩이므로 텍스트를 열람하는데 유용하다. 찾기와 바꾸기 대화상자 같은 사용자 인터페이스에 사용하면 편리하다. 인코드된 텍스트의 길이가 바이트 단위로 반환된다.

코코아는 UTF-16을 사용하며 이는 손쉽게 UTF-8에서 변환해 얻을 수 있으므로 이 메쏘드는 좀 더 복잡한 작업을 수행하는데 사용할 수 있다. 예를 들면 지원되는 다양한 인코딩으로부터 코드를 변환하는 것과 같은 작업을 할 수 있다.

SCI_ENCODEDFROMUTF8(const char *utf8, char *encoded) → int
SCI_SETLENGTHFORENCODE(int bytes)
SCI_ENCODEDFROMUTF8는 UTF-8 문자열을 문서의 인코딩으로 변환한다. 찾기 대화상자의 결과를 취하는데 그리고, 예를 들어, 문서에서 검색할 수 있는 바이트 문자열을 받는데 유용하다. 텍스트는 널 바이트를 포함할 수 있으므로, 변환될 길이를 설정하는데 SCI_SETLENGTHFORENCODE 메쏘드를 사용할 수 있다. 만약 -1로 설정하면, 그 길이는 널 바이트를 찾아서 결정한다. 변환된 문자열의 길이가 반환된다.

찾기

텍스트 검색과 정규 표현식 검색을 위한 메쏘드가 있다. 어플리케이션은 SCI_SEARCHINTARGET을 검색 구현에 토대로 사용해야 한다. 다른 호출들은 여기에 덧붙거나 또는 SCI_SEARCHINTARGET 전에 구현되어 있다.

C++11 지원 컴파일러와 런타임을 사용할 때, CXX11_REGEX을 가지고 신틸라를 컴파일해서 <regex> 런타임 구현을 사용해도 좋다.(버전 3.6.6에서 제거)

버전 3.6.6 부터 C++11 <regex>의 사용이 기본값이다.

기본 정규 표현식 지원은 제한적이며 오직 간단한 경우와 초기 개발에만 사용해야 한다. SCFIND_CXX11REGEX 검색 깃발을 들어서 C++ 실행시간 <regex> 라이브러리를 사용해도 된다. C++11 <regex>를 지원하지 않으려면 NO_CXX11_REGEX를 정의해 신틸라를 컴파일하면 된다. 다른 정규 표현식 라이브러리를 신틸라에 통합해 넣을 수 있다. 또는 SCI_GETCHARACTERPOINTER를 통하여 버퍼 내용에 직접 접근하면 컨테이너로부터 호출할 수 있다.

목표를 이용한 찾기와 바꾸기

3.50부터 삭제

SCI_REPLACESEL을 사용하여, 수정하면 스크롤링과 기타 시각적 변화가 야기된다. 이는 시간이 걸릴 수 있고 원하지 않는 화면 갱신을 야기할 수 있다. 모든 명령어를 교체하는 것과 같이 많은 변경을 수행하면, 대신에 목표를 사용할 수 있다. 먼저, 목표를 설정한다. 즉, 교체될 범위를 설정한다. 다음으로 SCI_REPLACETARGET이나 SCI_REPLACETARGETRE를 호출한다.

검색은 SCI_SEARCHINTARGET로 목표 범위 안에서 수행된다. 문자열을 세어서 사용하므로 널 문자를 검색할 수 있다. 실패하면 -1을 돌려주고 그렇지 않으면 부합된 텍스트 범위의 시작 위치를 돌려준다. 어느 경우든 목표는 움직이지 않는다. 예를 들어 SCFIND_MATCHCASE, SCFIND_WHOLEWORD, SCFIND_WORDSTART, 그리고SCFIND_REGEXP와 같은 SCI_SEARCHINTARGET가 사용하는 플래그는 SCI_SETSEARCHFLAGS로 설정할 수 있다. 포인터를 구조에 사용해야 하기 때문에 SCI_FINDTEXT보다 SCI_SEARCHINTARGET를 클라이언트가 사용하는 것이 더 간단할 수 있다.

SCI_SEARCHINTARGET으로 대상 범위 안에서 검색할 수 있다. 계수된 문자열을 사용하므로 널 문자들을 검색할 수 있다. 부합하는 텍스트 범위의 시작 위치를 돌려주거나, 아니면 실패시 -1을 돌려준다. 이 경우 목표는 움직이지 않는다. SCFIND_MATCHCASE, SCFIND_WHOLEWORD, SCFIND_WORDSTART, 그리고 SCFIND_REGEXP 같이 SCI_SEARCHINTARGET에 사용되는 깃발을 SCI_SETSEARCHFLAGS에 설정할 수 있다.

SCI_SETTARGETSTART(int start)
SCI_GETTARGETSTART → position
SCI_SETTARGETSTARTVIRTUALSPACE(position space)
SCI_GETTARGETSTARTVIRTUALSPACE → position
SCI_SETTARGETEND(int end)
SCI_GETTARGETEND → position
SCI_SETTARGETENDVIRTUALSPACE(position space)
SCI_GETTARGETENDVIRTUALSPACE → position
SCI_SETTARGETRANGE(int start, int end)
SCI_TARGETFROMSELECTION
SCI_TARGETWHOLEDOCUMENT
SCI_GETSEARCHFLAGS → int
SCI_SEARCHINTARGET(int length, const char *text) → int
SCI_GETTARGETTEXT(<unused>, char *text) → int
SCI_REPLACETARGET(int length, const char *text) → int
SCI_REPLACETARGETMINIMAL(position length, const char *text) → position
SCI_REPLACETARGETRE(int length, const char *text) → int
SCI_GETTAG(int tagNumber, char *tagValue) → int

SCI_SETTARGETSTART(int start)
SCI_GETTARGETSTART → position
SCI_SETTARGETSTARTVIRTUALSPACE(position space)
SCI_GETTARGETSTARTVIRTUALSPACE → position
SCI_SETTARGETEND(position end)
SCI_GETTARGETEND → position
SCI_SETTARGETENDVIRTUALSPACE(position space)
SCI_GETTARGETENDVIRTUALSPACE → position
SCI_SETTARGETRANGE(int start, int end)
이 함수들은 목표의 시작과 끝을 설정하고 돌려준다. 비-정규 표현식 모드로 검색할 때, 끝보다 시작을 더 크게 설정하면 처음 부합하는 텍스트가 아니라 마지막으로 부합한 텍스트를 목표에서 찾을 수 있다. SCI_SETTARGETSTARTSCI_SETTARGETEND 또는 SCI_SETTARGETRANGE로 가상 공간을 설정하면 가상공간은 0이 된다. 목표는 또한 SCI_SEARCHINTARGET로 설정할 수 있다.

대상 범위의 가상 공간은 각각 상응하는 ...VIRTUALSPACE 메쏘드로 설정하고 질의할 수 있다. 그러면 가상 공간 안에 텍스트를 보다 쉽게 삽입할 수 있다.

SCI_TARGETFROMSELECTION
선택의 시작 위치와 끝 위치에 목표의 시작과 끝을 설정한다.

SCI_TARGETWHOLEDOCUMENT
목표 시작을 문서의 처음으로, 목표 끝을 문서의 마지막으로 설정한다.

SCI_SETSEARCHFLAGS(int searchFlags)
SCI_GETSEARCHFLAGS → int
SCI_SEARCHINTARGET가 사용하는 searchFlags를 설정하고 얻는다. 간단한 정규 표현식을 포함하여 여러 옵션 플래그가 있다.

SCI_SEARCHINTARGET(int length, const char *text) → int
SCI_SETTARGETSTARTSCI_SETTARGETEND로 정의한 목표에서 처음으로 출현한 텍스트 문자열을 찾는다. 이 텍스트 문자열은 0종료 문자열이 아니다; 크기는 length로 설정한다. 검색은 SCI_SETSEARCHFLAGS로 설정한 검색 플래그로 바꿀 수 있다. 검색에 성공하면, 목표는 발견된 텍스트로 설정되고 반환 값은 부합한 텍스트의 시작 위치이다. 검색에 실패하면, 결과는 -1이다.

SCI_GETTARGETTEXT(<unused>, char *text) → int
목표에 있는 값을 열람한다.

SCI_REPLACETARGET(int length, const char *text) → int
length가 -1이면, text는 0 종료 문자열이다. 그렇지 않으면 length는 목표를 교체할 문자의 개수를 설정한다. 교체하고 나면, 목표 범위는 교체 텍스트를 가리킨다. 반환 값은 교체 문자열의 길이이다.
문서에서 텍스트를 삭제하는 방법은 목표를 삭제될 텍스트에 설정하고, 빈 문자열로 목표를 교체하는 것이 권장할 만한 방법이다.

SCI_REPLACETARGETMINIMAL(position length, const char *text) → position
이 설정은 SCI_REPLACETARGET과 비슷하다 그러나 당해 목표 텍스트가 교체 문자열과 접두사 또는 접미사를 공유하면 변경이력을 최소화하려고 시도한다. 실제로 다른 텍스트만 변경으로 표식이 붙는다. 이 방법은 자동으로 텍스트를 다시 정형화할 때 사용될 수 있다. 그러면 전체 지역이 포맷된 것으로 표식이 붙지 않는다. length가 -1이면, text는 0으로 끝나는 문자열이다. 그렇지 않고 length에 목표 문자열를 교체할 문자의 개수가 담기면, 교체 후에 해당 목표 범위는 교체된 텍스트를 가리킨다. 반환 값은 교체된 문자열의 길이이다.

SCI_REPLACETARGETRE(int length, const char *text) → int
정규 표현식을 사용하여 목표를 교체한다. length가 -1이면, text는 0 종료 문자열이다. 그렇지 않으면 length는 사용할 문자의 개수이다. 최근의 정규 표현식 검색에 부합한 태그 표현식으로 \1에서 \9까지 교체한 텍스트 문자열로부터 교체 문자열을 만든다. 교체 후에, 목표 범위는 교체 텍스트를 가리킨다. 반환 값은 교체 문자열의 길이이다.

SCI_GETTAG(int tagNumber, char *tagValue NUL-terminated) → int
정규 표현식 검색에서 태그 표현식에 어떤 텍스트가 부합되었는지 알아낸다. 어플리케이션에서 교체 문자열을 그 자체로 해석하고 싶을 경우 유용하다.

다음도 참조: SCI_FINDTEXT

searchFlags
검색 루틴 중에는 플래그 옵션을 사용하는 것이 있다. 여기에는 간단한 정규 표현식 검색이 포함된다. 플래그 옵션을 결합하려면 다음과 같이 더하면 된다:

SCFIND_NONE 기본 설정은 대소문자를 구별하지 않고 문자 그대로 부합시킨다.
SCFIND_MATCHCASE 검색 문자열의 격에 맞는 텍스트에 일치가 일어난다.
SCFIND_WHOLEWORD 문자 앞과 뒤에 단어 문자가 없을 때만 일치가 일어난다. 단어에 해당하는 문자는 SCI_SETWORDCHARS에 정의한다.
SCFIND_WORDSTART 문자 앞에 단어 문자가 없을 경우에만 일치가 일어난다. 단어에 해당하는 문자는 SCI_SETWORDCHARS에 정의한다.
SCFIND_REGEXP 검색 문자열을 정규 표현식으로 이해해야 한다. SCFIND_CXX11REGEX와 조합해 사용하지 않는 한 신틸라의 기본 구현을 사용한다.
SCFIND_POSIX 정규 표현식을 더 POSIX 호환적인 방식으로 취급한다. 태그 선택에 대하여 \( 그리고 \)보다는 간략하게 ( 그리고 )로 번역한다. SCFIND_CXX11REGEX이 설정되어 있으면 효과가 없다.
SCFIND_CXX11REGEX CXX11_REGEX으로 컴파일했다면 이 플래그를 설정해 신틸라의 기본 정규 표현식 대신에 <regex>를 사용할 수 있다. 정규 표현식이 유효하지 않으면 -1이 반환되고 status는 SC_STATUS_WARN_REGEX로 설정된다. ECMAScript 플래그가 정규표현식 객체에 설정되고 UTF-8 문서는 유니코드에 순응해 행위한다. wchar_t가 16비트인 MSVC에 대하여, 정규 표현식 ".."는 한 개의 DBCS(astral-plane) 문자에 부합한다. 컴파일러마다 행위가 다를 수 있다. SCFIND_REGEXP도 반드시 설정해야 한다.

3.50부터 삭제 - SCFIND_REGEXPsearchFlags에 포함되어 있지 않으면, 시작보다 앞에 검색 범위의 끝을 설정하면 거꾸로 검색하면서 검색 문자열이 앞에서 나타나는지 찾을 수 있다. SCFIND_REGEXP가 포함되어 있으면, 검색 범위가 거꾸로 설정되어 있을지라도 검색은 언제나 낮은 위치부터 높은 위치로 수행된다.

정규 표현식에서 신틸라의 기본 구현을 사용할 때 특수 문자는 다음과 같다:

. 어떤 문자에도 부합한다
\( 태그 구역의 시작을 표식한다.
\) 이 표식은 태그 구역의 마지막이다.
\n n은 1부터 9까지로서 교체할 때 태그 구역을 1번부터 9번까지 가리킨다. 예를 들어, 검색 문자열이 Fred\([1-9]\)XXX이고 교체 문자열이 Sam\1YYY일 경우, Fred2XXX에 적용하면 Sam2YYY가 만들어진다.
\< 신틸라의 단어 정의를 사용하여 단어의 시작에 부합한다.
\> 신틸라의 단어 정의를 사용하여 단어의 끝에 부합한다.
\x 특수한 의미를 가지는 문자 x를 평범하게 사용할 수 있다. 예를 들어, \[는 [로 해석되지 문자 집합의 시작으로 해석되지 않는다.
[...] 문자 집합을 가리킨다. 예를 들어, [abc]는 문자 a, b 또는 c 중 하나를 의미한다. 범위를 사용할 수도 있다. 예를 들어 [a-z]는 소문자를 뜻한다.
[^...] 집합에 있는 문자들의 여집합이다. 예를 들어, [^A-Za-z]는 알파벳 문자를 제외하고 모든 문자를 뜻한다.
^ (위와 같이, 집합 안에서 사용되지 않는 한) 줄의 시작에 부합한다.
$ 줄의 끝에 부합한다.
* 0회 이상 부합한다. 예를 들어, Sa*mSm, Sam, Saam, Saaam 등등에 부합한다.
+ 1회 이상 부합한다. 예를 들어, Sa+mSam, Saam, Saaam 등등에 부합한다.

정규 표현식은 오직 한 줄 범위에만 부합한다. 여러 줄에는 절대 부합하지 않는다.

SCFIND_CXX11REGEX를 사용하면 여러 특징을 더 사용할 수 있다. 일반적으로 자바스크립가 지원하는 정규 표현식과 비슷하다. 무엇을 지원하는지 자세한 것은 C++ 실행시간 문서를 참고하라.

SCI_FINDTEXT(int searchFlags, Sci_TextToFind *ft) → position
SCI_FINDTEXTFULL(int searchFlags, Sci_TextToFindFull *ft) → position
SCI_SEARCHANCHOR
SCI_SEARCHNEXT(int searchFlags, const char *text) → int
SCI_SEARCHPREV(int searchFlags, const char *text) → int

SCI_FINDTEXT(int searchFlags, Sci_TextToFind *ft) → position
SCI_FINDTEXTFULL(int searchFlags, Sci_TextToFindFull *ft) → position
이 메시지들은 문서 안에서 텍스트를 찾는다. 현재 위치를 사용하거나 이동시키지 않는다. searchFlags 인자는 검색 유형을 제어한다. 여기에는 정규 표현식 검색을 포함한다.

역방향으로 검색해서 앞의 검색 문자열을 찾을 수 있다. 검색 범위에서 시작 위치보다 먼저 끝을 지정하면 된다.

Sci_TextToFind 구조는 Scintilla.h에 정의되어 있다; chrg.cpMinchrg.cpMax를 문서에서 검색할 범위로 설정한다. SCFIND_REGEXP가 이 플래그에 포함되지 않으면, chrg.cpMaxchrg.cpMin보다 작게 설정하여 거꾸로 검색할 수 있다. SCFIND_REGEXP가 포함되면, 검색은 (chrg.cpMaxchrg.cpMin보다 작더라도) 언제나 앞으로 수행된다. Sci_TextToFindlpstrText 멤버를 그 검색 패턴을 보유한 0 종료 텍스트 문자열을 가리키도록 설정한다. 언어에서 Sci_TextToFind를 사용하기가 어렵다면, 대신에 SCI_SEARCHINTARGET을 사용해 보자.

검색에 실패하면 반환 값은 -1이다. 성공하면 발견된 텍스트의 시작 위치를 돌려준다. Sci_TextToFind의 멤버인 chrgText.cpMinchrgText.cpMax는 발견된 텍스트의 시작 위치와 끝 위치로 채워진다.

다음도 참조: SCI_SEARCHINTARGET

Sci_TextToFind
이 구조는 Win32 구조 FINDTEXTEX와 정확하게 같은 모양을 갖도록 정의된다. 예전 코드는 신틸라를 RichEdit 콘트롤로 취급했었다.

struct Sci_TextToFind {
    struct Sci_CharacterRange chrg;     // 검색할 범위;
    char *lpstrText;                    // 검색 패턴 (0 종료)
    struct Sci_CharacterRange chrgText; // 부합한 텍스트의 위치로 반환됨
};

SCI_SEARCHANCHOR
SCI_SEARCHNEXT(int searchFlags, const char *text) → int
SCI_SEARCHPREV(int searchFlags, const char *text) → int
이 메시지들은 재배치 가능한 검색을 지원한다. 점진적 다중 상호대화 검색을 매크로로 기록하면서 여전히 선택에 발견된 텍스트를 설정한다. 그래서 찾기/선택 연산이 자체 충족된다. 이 세개의 메시지는 매크로 기록이 활성화 상태이면 SCN_MACRORECORD 고지를 전송한다.

SCI_SEARCHANCHORSCI_SEARCHNEXTSCI_SEARCHPREV가 사용하는 검색 시작 점을 현재 선택의 시작지점에 설정한다. 즉, 문서의 시작쪽으로 더 까까운 선택의 끝을 설정한다. 언제나 SCI_SEARCHNEXT이나 SCI_SEARCHPREV를 호출하기 전에 먼저 이 함수를 호출해야 한다.

SCI_SEARCHNEXTSCI_SEARCHPREV는 text가 지정하는 0 종료 검색 문자열이 앞과 다음에 나타나는 것을 검색한다. 검색은 searchFlags로 수정할 수 있다. 정규 표현식을 요청하면, SCI_SEARCHPREV는 문서에서 앵커 위치보다 앞의 문자열이 아니라 처음 나타나는 검색 문자열을 찾는다.

아무것도 발견되지 않으면 반환값은 -1이다. 그렇지 않으면 부합한 텍스트의 시작 위치를 돌려준다. 선택은 부합된 텍스트를 보여주도록 갱신되지만, 스크롤되어 뷰에 보이지는 않는다.

다음도 참조: SCI_SEARCHINTARGET, SCI_FINDTEXT

덮어쓰기(Overtype)

SCI_SETOVERTYPE(bool overType)
SCI_GETOVERTYPE → bool

SCI_SETOVERTYPE(bool overType)
SCI_GETOVERTYPE → bool
덮어쓰기가 활성화 되어 있으면, 타자되는 문자마다 텍스트 캐럿의 오른쪽 문제를 교체한다. 덮어쓰기가 비활성 상태이면, 문자는 캐럿 위치에 삽입된다. SCI_GETOVERTYPE는 덮어쓰기가 활성 상태이면 true (1)를 돌려준다. 그렇지 않으면 false (0)가 반환된다. SCI_SETOVERTYPE를 사용하여 덮어쓰기 모드를 설정한다.

잘라내기, 복사하기, 그리고 붙여넣기

SCI_CUT
SCI_COPY
SCI_PASTE
SCI_CLEAR
SCI_CANPASTE → bool
SCI_COPYRANGE(int start, int end)
SCI_COPYTEXT(int length, const char *text)
SCI_COPYALLOWLINE
SCI_SETPASTECONVERTENDINGS(bool convert)
SCI_GETPASTECONVERTENDINGS → bool

SCI_CUT
SCI_COPY
SCI_PASTE
SCI_CLEAR
SCI_CANPASTE → bool
SCI_COPYALLOWLINE
이 명령어들은 데이터를 잘라내어 클립보드로 복사하고, 클립보드로부터 문서 안으로 붙여 넣으며, 문서를 지우는 표준 작업을 수행한다. SCI_CANPASTE는 문서가 읽기 전용이 아니고 선택에 보호된 텍스트가 담겨 있지 않으면 0 아닌 값을 돌려준다. "복사"나 "잘라내기"가 필요하면, SCI_GETSELECTIONSTART()-SCI_GETSELECTIONEND()을 사용하자. 결과는 클립보드로 잘라내어 복사할 수 있으면 0 아닌 값이다.

GTK는 실제로는 SCI_CANPASTE를 지원하지 않으며 문서가 읽기 전용이 아닌 한 언제나 true를 돌려준다.

X에서, 클립보드는 비동기적이며 목표 어플리케이션과 소스 어플리케이션 사이에 여러 메시지를 요구할 수 있다. SCI_PASTE로부터 얻은 데이터는 즉시 문서 안에 도달하지 않는다.

SCI_COPYALLOWLINE는 선택이 비어있다면 현재 줄이 복사된다는 점만 제외하면 SCI_COPY와 똑같이 작동한다. 윈도우즈에서, 기타 "MSDEVLineSelect" 표식이 클립보드에 추가되면 SCI_PASTE에 사용되어 현재 줄 앞에 전체 줄을 붙여 넣는다.

SCI_COPYRANGE(int start, int end)
SCI_COPYTEXT(int length, const char *text)

SCI_COPYRANGE는 문서로부터 일정 범위의 텍스트를 시스템 클립보드로 복사하고 SCI_COPYTEXT는 제공된 텍스트 조각을 시스템 클립보드로 복사한다.

SCI_SETPASTECONVERTENDINGS(bool convert)
SCI_GETPASTECONVERTENDINGS → bool
이 특성이 설정되면 텍스트가 붙여넣기 될 경우 줄 끝 문자는 모조리 SCI_SETEOLMODE로 설정된 그 문서의 줄끝 모드에 맞게 변환된다. 기본값은 참이다.

SCI_REPLACERECTANGULAR(position length, const char *text)

SCI_REPLACERECTANGULAR(position length, const char *text)
선택된 텍스트 또는 빈 선택을 주어진 텍스트로 교체한다. 사각 붙여넣기와 비슷하지만 문서의 끝에 다다르지 않는 한 주어진 텍스트 안의 새줄문자를 새 줄을 삽입하지 않고 다음 줄로 이동하라는 뜻으로 이해한다.

에러 처리

SCI_SETSTATUS(int status)
SCI_GETSTATUS → int

SCI_SETSTATUS(int status)
SCI_GETSTATUS → int
에러가 일어나면, 신틸라는 내부 에러 번호를 설정할 수 있다. SCI_GETSTATUS로 열람할 수 있다. 에러 상태를 소거하려면 SCI_SETSTATUS(0)를 호출하면 된다. 상태 값은 1부터 999까지 에러이고 상태 값이 SC_STATUS_WARN_START (1000) 이상이면 경고이다. 현재 정의된 상태는 다음과 같다:

SC_STATUS_OK 0 실패 없음
SC_STATUS_FAILURE 1 일반 실패
SC_STATUS_BADALLOC 2 메모리가 고갈됨
SC_STATUS_WARN_REGEX 1001 정규 표현식이 유효하지 않다

언두(Undo)와 리두(Redo)

신틸라는 다중 레벨의 언두와 리두가 있다. 메모리가 고갈될 때까지 취소가능한 조치들을 모은다. 신틸라는 문서를 바꾼 행위들을 저장한다. 신틸라는 캐럿과 선택 이동, 뷰 스크롤링 등등을 저장하지 않는다. 타자나 삭제의 연속은 한개짜리 조치로 압축된다. 합리적인 세부 레벨에서 더 쉽게 리두와 언두를 수행하기 위해서이다. 조치의 연속은 트랜잭션으로 조합될 수 있다. 트랙잭션 단위로 취소된다. 이런 연속들은 SCI_BEGINUNDOACTIONSCI_ENDUNDOACTION 메시지 사이에서 일어난다. 이 트랜잭션들은 내포될 수 있다. 그리고 오직 최상위 레벨의 연속만 단위별로 취소가 가능하다.

SCI_UNDO
SCI_CANUNDO → bool
SCI_EMPTYUNDOBUFFER
SCI_REDO
SCI_CANREDO → bool
SCI_SETUNDOCOLLECTION(bool collectUndo)
SCI_GETUNDOCOLLECTION → bool
SCI_BEGINUNDOACTION
SCI_ENDUNDOACTION
SCI_ADDUNDOACTION(int token, int flags)

SCI_UNDO
SCI_CANUNDO → bool
SCI_UNDO는 조치를 환원한다. 또는 언두 버퍼가 SCI_ENDUNDOACTION 점에 도달하면, 모든 조치는 다시 상응하는 SCI_BEGINUNDOACTION로 돌아간다.

SCI_CANUNDO는 언두할 것이 없으면 0을 돌려준다. 그리고 있으면 1을 돌려준다. 전형적으로 이 메시지의 결과를 사용하여 Edit 메뉴의 Undo 명령어를 활성화/비활성화한다.

SCI_REDO
SCI_CANREDO → bool
SCI_REDO는 마지막 SCI_UNDO 연산의 효과를 환원한다.

SCI_CANREDO는 리두할 조치가 없으면 0을 돌려준다. 리두할 언두 조치가 있으면 1을 돌려준다. 전형적으로 이 메시지의 결과를 사용하여 Edit 메뉴의 Redo 명령어를 활성화/비활성화한다.

SCI_EMPTYUNDOBUFFER
이 명령어는 신틸라에게 저장된 언두나 리두 기록을 모조리 잊어버리도록 명령한다. 저장 점을 언두 버퍼의 시작에 설정한다. 그래서 문서는 수정되지 않은 것처럼 보인다. 이렇게 하면 SCN_SAVEPOINTREACHED 고지가 컨테이너에게 전송되지 않는다.

다음도 참조: SCI_SETSAVEPOINT

SCI_SETUNDOCOLLECTION(bool collectUndo)
SCI_GETUNDOCOLLECTION → bool
SCI_SETUNDOCOLLECTION로 신틸라가 언두 정보를 수집할지 말지 제어할 수 있다. true (1)를 건네면 정보를 수집하고 false (0)를 건네면 수집을 중지한다. 수집을 중지하면, SCI_EMPTYUNDOBUFFER도 사용하여 언두 버퍼가 버퍼에 있는 데이터와 동기화가 깨지는 것을 피하도록 해야 한다.

프로그램이 만들어낸 텍스트를 저장하는데 신틸라를 사용하고 있다면 (로그 뷰), 또는 텍스트가 자주 삭제되고 재생산되는 화면 창에서는 언두 정보를 저장하는 것을 끄고 싶을 수 있다.

SCI_BEGINUNDOACTION
SCI_ENDUNDOACTION
이 두 메시지를 신틸라에 보내면, 여러 연산을 모아서 하나의 연산으로 언두하고 싶을 경우에 연산 집합의 시작과 끝을 표식할 수 있다. 대안적으로, 이를 이용하여 언두하면 앞이나 뒤의 연산과 조합하고 싶지 않은 연산 집합을 표식할 수 있다.

SCI_ADDUNDOACTION(int token, int flags)
컨테이너는 SCI_ADDUNDOACTION을 호출하면 언두 스택 안에 자신만의 조치를 추가할 수 있다. 그 조치를 언두(SC_PERFORMED_UNDO)하거나 리두(SC_PERFORMED_REDO)할 때 SCN_MODIFIED 고지가 SC_MOD_CONTAINER 플래그로 컨테이너에 전송된다. 공급된 token 인자는 고지의 token 필드에 반환된다.

예를 들어, 컨테이너가 '책갈피 토글' 명령어의 언두와 리두를 허용하고 싶다면, 그 명령어가 수행될 때마다 SCI_ADDUNDOACTION(line, 0)를 호출할 수 있다. 그러면 언두나 리두하라는 고지를 받을 때 token 필드가 부여한 줄에 책갈피를 토글한다. 다른 유형의 명령어나 매개변수를 언두 스택에 저장할 필요가 있다면 컨테이너는 문서에 대하여 자신만의 스택을 유지관리해야 한다. 그리고 그 스택에서의 현재 위치를 SCI_ADDUNDOACTION(line)에 건넬 인자로 사용해야 한다. SCI_BEGINUNDOACTIONSCI_ENDUNDOACTION으로 그룹을 지어주지 않는 한, SCI_ADDUNDOACTION 명령어들은 단일 언두 트랜잭선으로 함께 조합되어 들어가지 않는다.

다른 삽입 조치와 삭제 조치와 함께 컨테이너 조치가 하나의 복합 조치로 합쳐지면, flags 인자는 UNDO_MAY_COALESCE (1)이다. 그렇지 않으면 UNDO_NONE (0)이다. 컨테이너 조치들을 합치면 투명하게 취급된다. 그래서 여전히 타자 같은 삽입들만 하나로 그룹짓거나 또는 백스페이키나 삭제 키를 여러번 사용하는 것과 같은 삭제만 하나로 그룹짓는다.

변경 이력

신틸라는 문서 변경 이력(수정, 저장등)을 여백이나 본문에 보여줄 수 있다.

상태로는 변경없음, 수정 그리고 수정후 저장됨이 있다. 저장 지점 전까지 언두가 가능하므로, 저장된 상태로부터 복구와 저장된 상태로부터 원본으로 복구가 상태가 추가된다. 복구된 상태는 디스크에 저장된 문서와 다르므로 어플리케이션에 따라 이 상태를 마치 수정 상태처럼 보여주고 싶을 수도 있다.

Change history markers and indicators.

그림을 보면 어플리케이션에서 기본 모습을 바꿀 수 있음을 알 수 있다. 텍스트에 삽입된 문자들은 색 밑줄이 그어지고 문자가 삭제된 지점들은 작은 삼각형으로 보여진다. 여백에 보이는 블록 표시자는 연속적으로 변경되는 상태를 집약하여, 줄의 전체 상태를 보여준다. 상태를 보면 수정 (orange), 저장 (green), 저장한 다음 변경 상태로 복구 (green-yellow), 저장한 다음 원본으로 복구 (cyan)가 있다.

이 특징은 변경 횟수가 늘어남에 따라 상당량의 메모리를 사용한다. 문서가 크다면 이 특징은 과도한 메모리 사용을 초래하므로 비활성화해도 된다.

복구된 수정사항들을 무시하고 어플리케이션에서 간단하고 보여주고 싶다면 같은 속성을 여러 표식과 지시자에 할당하라.

SCI_SETCHANGEHISTORY(int changeHistory)
SCI_GETCHANGEHISTORY → int

SCI_SETCHANGEHISTORY(int changeHistory)
SCI_GETCHANGEHISTORY → int
SCI_SETCHANGEHISTORY는 이 특징을 활성화하거나 비활성화하고 변경사항을 여백이나 본문에 보여준다.

변경 이력은 언두 이력에 따라 달라진다. 언두 이력이 활성화되어 있고 비어 있을 때에만 사용이 가능하다. 하나의 파일이 적재되어 SCI_SETUNDOCOLLECTION(true)SCI_SETSAVEPOINT를 호출한 후에 한 번만 활성화해야 한다.

changeHistory 인자는 다음과 같이 구성된다:

SC_CHANGE_HISTORY_DISABLED 0 기본값은 비활성이다.
SC_CHANGE_HISTORY_ENABLED 1 문서의 변경을 추적한다.
SC_CHANGE_HISTORY_MARKERS 2 SC_MARKNUM_HISTORY 표식을 사용하여 변경사항을 여백에 보여준다.
SC_CHANGE_HISTORY_INDICATORS 4 INDICATOR_HISTORY 표시자를 사용하여 본문에 변경사항을 보여준다.

이력 표식과 표시자마다 기본적인 모습이 할당되어 있지만 어플리케이션에서 바꿀 수 있다.

표식:

SC_MARKNUM_HISTORY_REVERTED_TO_ORIGIN 21 이줄을 변경했고 저장되었지만 원래 상태로 복구됨. 이 줄은 디스크의 상태와 다르다.
SC_MARKNUM_HISTORY_SAVED 22 이 줄은 수정 저장되었다. 이 줄의 상태는 원래 디스크의 상태와 같다.
SC_MARKNUM_HISTORY_MODIFIED 23 이 줄은 수정되었지만 아직 저장되지 않았다. 이 줄은 디스크와 상태가 다르다.
SC_MARKNUM_HISTORY_REVERTED_TO_MODIFIED 24 이 줄에 변경이 있었고 저장되어 복구되었다. 그렇지만 원래 상태와 같지는 않다. 이 줄은 상태가 디스크와 다르다.

표시자:

INDICATOR_HISTORY_REVERTED_TO_ORIGIN_INSERTION 36 텍스트가 삭제되어 저장되었지만 원래 상태로 복구되었다. 이 텍스트는 아직 디스크에 저장되지 않았다.
INDICATOR_HISTORY_REVERTED_TO_ORIGIN_DELETION 37 텍스트가 삽입되고 저장되었지만 원래 상태로 복구되었다. 디스크에 존재하지 않는 텍스트가 있다.
INDICATOR_HISTORY_SAVED_INSERTION 38 텍스트가 삽입되고 저장되었다. 이 텍스트는 디스크에 있는 텍스트와 같다.
INDICATOR_HISTORY_SAVED_DELETION 39 텍스트가 삭제되어 저장되었다. 이 범위는 디스크에 있는 범위와 같다.
INDICATOR_HISTORY_MODIFIED_INSERTION 40 텍스트가 삽입되었지만 아직 저장되지 않았다. 이 텍스트는 아직 디스크에 저장되어 않았다.
INDICATOR_HISTORY_MODIFIED_DELETION 41 텍스트가 삭제되었지만 아직 저정되지 않았다. 디스크에 사라진 텍스트가 있다.
INDICATOR_HISTORY_REVERTED_TO_MODIFIED_INSERTION 42 텍스트가 삭제되어 저장되었지만 복구되었다. 그러나 원래 상태로 복구된 것은 아니다. 이 텍스트는 디스크에 저장되지 않았다.
INDICATOR_HISTORY_REVERTED_TO_MODIFIED_DELETION 43 텍스트가 삽입되어 저장되었지만 복구되었다. 그러나 원래 상태로 복구된 것은 아니다. 디스크에 없는 텍스트가 있다.

선택과 정보

신틸라는 앵커와 현재 위치 두 지점 사이에 걸친 선택을 관리한다. 앵커와 현재 위치가 같으면, 아무 텍스트도 선택되지 않는다. 문서에서 위치는 범위가 0 (첫 문자 앞)에서, 문서의 크기까지 (마지막 문자)이다. 메시지를 사용한다면, CRLF 쌍 사이 또는 2 바이트 문자의 사이에 위치를 설정하지 못하도록 막을 방법이 없다. 그렇지만, 키보드 명령어는 캐럿을 그런 위치로 이동시키지 않는다.

SCI_GETTEXTLENGTH → int
SCI_GETLENGTH → int
SCI_GETLINECOUNT → int
SCI_LINESONSCREEN → int
SCI_GETMODIFY → bool
SCI_SETSEL(int anchor, int caret)
SCI_GOTOPOS(int caret)
SCI_GOTOLINE(int line)
SCI_SETCURRENTPOS(int caret)
SCI_GETCURRENTPOS → position
SCI_SETANCHOR(int anchor)
SCI_GETANCHOR → position
SCI_SETSELECTIONSTART(int anchor)
SCI_GETSELECTIONSTART → position
SCI_SETSELECTIONEND(int caret)
SCI_GETSELECTIONEND → position
SCI_SETEMPTYSELECTION(int caret)
SCI_SELECTALL
SCI_LINEFROMPOSITION(int pos) → int
SCI_POSITIONFROMLINE(int line) → position
SCI_GETLINEENDPOSITION(int line) → position
SCI_LINELENGTH(int line) → int
SCI_GETCOLUMN(int pos) → int
SCI_FINDCOLUMN(int line, int column) → int
SCI_POSITIONFROMPOINT(int x, int y) → position
SCI_POSITIONFROMPOINTCLOSE(int x, int y) → position
SCI_CHARPOSITIONFROMPOINT(int x, int y) → position
SCI_CHARPOSITIONFROMPOINTCLOSE(int x, int y) → position
SCI_POINTXFROMPOSITION(<unused>, int pos) → int
SCI_POINTYFROMPOSITION(<unused>, int pos) → int
SCI_HIDESELECTION(bool hide)
SCI_GETSELTEXT(<unused>, char *text) → int
SCI_GETCURLINE(int length, char *text) → int
SCI_SELECTIONISRECTANGLE → bool
SCI_SETSELECTIONMODE(int selectionMode)
SCI_GETSELECTIONMODE → int
SCI_GETMOVEEXTENDSSELECTION → bool
SCI_GETLINESELSTARTPOSITION(int line) → position
SCI_GETLINESELENDPOSITION(int line) → position
SCI_MOVECARETINSIDEVIEW
SCI_POSITIONBEFORE(int pos) → position
SCI_POSITIONAFTER(int pos) → position
SCI_TEXTWIDTH(int style, const char *text) → int
SCI_TEXTHEIGHT(int line) → int
SCI_CHOOSECARETX
SCI_MOVESELECTEDLINESUP
SCI_MOVESELECTEDLINESDOWN
SCI_SETMOUSESELECTIONRECTANGULARSWITCH(bool mouseSelectionRectangularSwitch)
SCI_GETMOUSESELECTIONRECTANGULARSWITCH → bool

SCI_GETTEXTLENGTH → int
SCI_GETLENGTH → int
이 메시지들은 문서의 길이를 바이트 단위로 돌려준다.

SCI_GETLINECOUNT → int
문서에서 줄의 개수를 돌려준다. 빈 문서는 1 줄을 포함한다. 줄끝 문자 하나만 가지고 있는 문서는 2 줄이다.

SCI_LINESONSCREEN → int
화면에 보이는 완전한 줄의 개수를 돌려준다. 줄 높이는 일정한데, 수직 공간을 그 줄 개수로 나누어 얻을 수 있다. 완전한 줄 개수에 맞게 창의 크기를 조정하지 않는, 뷰의 아래에 부분적으로 줄이 보일 수 있다.

SCI_GETMODIFY → bool
문서가 수정되었으면 0이 아닌 값을 돌려주고 수정되지 않았으면 0을 돌려준다. 문서의 수정 상태는 저장 점에 상대적인 언두 위치로 결정된다. 보통 데이터를 파일에 저장할 때, 저장 점은 SCI_SETSAVEPOINT로 설정된다.

문서가 수정될 때 고지를 받을 필요가 있다면, 신틸라는 컨테이너에게 저장 점에 들어왔는지 아니면 떠났는지 SCN_SAVEPOINTREACHED 그리고 SCN_SAVEPOINTLEFT 고지 메시지로 고지한다.

SCI_SETSEL(int anchor, int caret)
이 메시지는 앵커와 현재 위치를 모두 설정한다. caret가 음수이면, 문서의 끝을 의미한다. anchor가 음수이면, 선택을 제거함을 의미한다 (즉, 앵커를 caret과 같은 위치에 설정한 것이다). 이 연산이 끝나면 캐럿은 스크롤되어 나타난다.

SCI_GOTOPOS(int caret)
선택을 모두 제거하고, 캐럿을 caret에 설정하고, 필요하면 뷰를 스크롤하여 그 캐럿을 보이도록 만든다. SCI_SETSEL(caret, caret)과 동등하다. 앵커 위치는 현재 위치와 같은 곳에 설정된다.

SCI_GOTOLINE(int line)
선택을 제거하고 캐럿을 line번 줄의 시작에 설정하고 (필요하면) 뷰를 스크롤하여 보이게 만든다. 앵커 위치는 현재 위치와 같다. line이 문서 밖에 있는 줄이라면 (첫 줄은 0이다), 그 줄은 첫 줄이나 마지막 줄로 설정된다.

SCI_SETCURRENTPOS(int caret)
현재 위치를 설정하고 앵커와 현재 위치 사이에 선택을 만든다. 캐럿은 뷰에 나타나도록 스크롤된다.

다음도 참조: SCI_SCROLLCARET

SCI_GETCURRENTPOS → position
현재 위치를 돌려준다.

SCI_SETANCHOR(int anchor)
앵커 위치를 설정하고 앵커 위치와 현재 위치 사이에 선택을 만든다. 캐럿은 스크롤되어 뷰에 나타난다.

다음도 참조: SCI_SCROLLCARET

SCI_GETANCHOR → position
현재 앵커 위치를 돌려준다.

SCI_GETSELECTIONSTART → position
SCI_GETSELECTIONEND → position
끝이 현재 위치인지 앵커 위치인지 전혀 고려하지 않고 선택의 시작과 끝을 돌려준다. SCI_GETSELECTIONSTART는 현재 위치나 앵커 위치보다 더 작은 값을 돌려준다. SCI_GETSELECTIONEND는 더 큰 값을 돌려준다.

새 값 앵커 위치 캐럿 위치
SCI_SETSELECTIONSTART anchor Max(anchor, current)
SCI_SETSELECTIONEND Min(anchor, caret) caret

다음도 참조: SCI_SCROLLCARET

SCI_SETEMPTYSELECTION(int caret)
선택한 것을 모두 취소하고 caret 위치에 캐럿을 설정한다. 캐럿은 스크롤되어 뷰에 나타나지 않는다.

SCI_SELECTALL
문서의 모든 텍스트를 선택한다. 현재 위치는 스크롤되어 뷰에 보이지 않는다.

SCI_LINEFROMPOSITION(int pos) → int
이메시지는 문서에서 pos가 위치한 줄을 돌려준다. pos <= 0이면 반환값은 0이다. pos가 문서의 끝을 넘어서면 반환값은 마지막 줄이다.

SCI_POSITIONFROMLINE(int line) → position
줄의 처음에 상응하는 문서 위치를 돌려준다. line이 음수이면, 선택의 시작을 보유한 줄의 위치가 반환된다. line이 문서의 줄의 개수보다 크면, 반환값은 -1이다. line이 문서의 줄의 개수와 동일하면 (즉, 마지막 줄을 지나 1 줄이면), 반환값은 그 문서의 끝이다.

SCI_GETLINEENDPOSITION(int line) → position
줄의 끝 위치, 줄끝 문자 바로 앞을 돌려준다. line이 문서의 마지막 줄이면 (줄끝 문자가 없기 때문에), 그 결과는 문서의 크기이다. line이 음수이거나 line >= SCI_GETLINECOUNT()이면, 그 결과는 정의되어 있지 않다.

SCI_LINELENGTH(int line) → int
줄끝 문자를 포함, 줄의 길이를 돌려준다. line이 음수이거나 문서의 마지막 줄을 넘어서면, 그 결과는 0이다. 줄끝 문자를 빼고 줄의 길이를 원한다면, SCI_GETLINEENDPOSITION(line) - SCI_POSITIONFROMLINE(line)를 사용하자.

SCI_GETSELTEXT(<unused>, char *text NUL-terminated) → int
현재 선택된 텍스트와 0 종료 바이트를 text 버퍼에 복사한다. 버퍼 크기는 text 인자에 NULL 포인터를 가지고SCI_GETSELTEXT(0,0)를 호출하여 결정한다. 단순한 선택은 물론이고 사각 선택과 불연속 선택이 가능하다. 다중 선택과 사각 선택 그리고 가상 공간이 어떻게 복사되는지에 관한 정보는 다중 선택을 참고하자.

다음도 참조: SCI_GETCURLINE, SCI_GETLINE, SCI_GETTEXT, SCI_GETSTYLEDTEXT, SCI_GETTEXTRANGE

SCI_GETCURLINE(int length, char *text NUL-terminated) → int
캐럿이 있는 줄의 텍스트를 열람하고 캐럿이 있는 줄 안에서의 위치를 돌려준다. 버퍼를 가리키는 char* text를 건네자. 버퍼는 열람하고 싶은 텍스트와 0 종료 문자를 담을 만큼 충분히 커야 한다. length에 버퍼 길이를 설정한다. 최소한 길이가 1은 되어야 0 종료 문자를 담을 수 있다. text 인자가 0이면 현재 줄 전체를 저장하는데 할당해야 할 길이가 반환된다.

다음도 참조: SCI_GETSELTEXT, SCI_GETLINE, SCI_GETTEXT, SCI_GETSTYLEDTEXT, SCI_GETTEXTRANGE

SCI_SELECTIONISRECTANGLE → bool
현재 선택이 사각 모드이면 1을 돌려주고, 그렇지 않으면, 0을 돌려준다.

SCI_SETSELECTIONMODE(int selectionMode)
SCI_GETSELECTIONMODE → int
이 두 함수는 선택 모드를 얻고 설정한다. 모드는 스트림 (SC_SEL_STREAM=0)이나 사각 (SC_SEL_RECTANGLE=1) 또는 줄 (SC_SEL_LINES=2) 아니면 얇은 사각 (SC_SEL_THIN=3)일 수 있다. 이런 모드가 설정되면, 같은 값으로 호출하거나 SCI_CANCEL를 호출하여 모드가 취소될 때까지 정규 캐럿은 선택을 늘이거나 줄인다. get 함수는 마우스로 선택했든 아니면 정규 확장 이동으로 선택했든 상관없이 현재 모드를 돌려준다. SC_SEL_THIN는 사각 선택에 타자가 되고 아무 문자도 선택되지 않는 것을 확인한 후의 모드이다.

SCI_GETMOVEEXTENDSSELECTION → bool
표준 캐럿 이동이 선택을 늘리거나 줄이면 1을 돌려준다. 그렇지 않으면 0을 돌려준다. SCI_SETSELECTIONMODE는 이 설정을 토글한다.

SCI_GETLINESELSTARTPOSITION(int line) → position
SCI_GETLINESELENDPOSITION(int line) → position
주어진 줄에서 선택의 처음과 끝 위치를 열람한다. 이 줄에 아무 선택이 없으면 INVALID_POSITION이 반환된다.

SCI_MOVECARETINSIDEVIEW
캐럿이 뷰의 위나 아래로 사라지면, 현재 위치에서 보이는가장 가까운 줄로 이동한다. 선택은 다 사라진다.

SCI_POSITIONBEFORE(int pos) → position
SCI_POSITIONAFTER(int pos) → position
이 메시지들은 현재 코드 페이지를 고려하여 문서의 해당 위치와 다른 앞과 뒤의 위치를 돌려준다. 반환되는 최소 위치는 0이고 최대는 문서의 마지막 위치이다. 여러바이트 문자 안의 위치로 호출하면 그 문자의 처음/끝의 위치를 돌려준다.

SCI_TEXTWIDTH(int style, const char *text) → int
주어진 style로 그려진 문자열의 픽셀 너비를 돌려준다. 예를 들어, 주어진 숫자들을 화면에 보여주기 위하여 줄 번호 여백을 얼마나 넓게 만들어야 하는지 결정하는데 사용할 수 있다.

SCI_TEXTHEIGHT(int line) → int
특정한 줄의 높이를 픽셀 단위로 돌려준다. 현재 모든 줄은 높이가 같다.

SCI_GETCOLUMN(int pos) → int
이 메시지는 문서 안에서 탭의 너비를 고려하여 pos 위치의 컬럼 번호를 돌려준다. 그 줄에서 pos 앞의 마지막 탭의 컬럼 번호를 돌려준다. 게다가 마지막 탭과 pos사이의 문자의 개수도 돌려준다. 그 줄에 탭 문자가 없으면, 반환 값은 그 줄에서 해당 위치까지의 문자 개수이다. 두 경우 모두, 2 바이트 문자는 문자 하나로 센다. 아마도 이는 고정폭 글꼴에서 유용할 것이다.

SCI_FINDCOLUMN(int line, int column) → int
이 메시지는 line에서 탭의 너비를 고려하여 column의 위치를 돌려준다. 다중-바이트 문자를 하나의 컬럼으로 취급한다. 컬럼 번호는 줄처럼 0에서 시작한다.

SCI_POSITIONFROMPOINT(int x, int y) → position
SCI_POSITIONFROMPOINTCLOSE(int x, int y) → position
SCI_POSITIONFROMPOINT는 한 점에 가장 가까운 문자 위치를 찾는다. 그리고 SCI_POSITIONFROMPOINTCLOSE도 비슷하지만 그 점이 창 밖에 있거나 어떤 문자에도 가깝지 않다면 -1을 돌려준다.

SCI_CHARPOSITIONFROMPOINT(int x, int y) → position
SCI_CHARPOSITIONFROMPOINTCLOSE(int x, int y) → position
SCI_CHARPOSITIONFROMPOINT는 한 점에 가장 까운 문자를 돌려준다. 그리고 SCI_CHARPOSITIONFROMPOINTCLOSE도 비슷하지만 그 점이 창 밖에 있거나 어떤 문자도 가깝지 않다면 -1을 돌려준다. 이것은 앞의 메쏘드와 비슷하다. 그러나 문자-사이의 위치가 아니라 문자들을 찾는다.

SCI_POINTXFROMPOSITION(<unused>, int pos) → int
SCI_POINTYFROMPOSITION(<unused>, int pos) → int
이 메시지들은 문서에서 텍스트의 pos 위치의 x와 y의 화면 픽셀 위치를 돌려준다.

SCI_HIDESELECTION(bool hide)
정상 상태는 SCI_SETSELFORE 그리고 SCI_SETSELBACK에 설정된 대로 그려서 선택이 보이도록 하는 것이다. 그렇지만, 선택을 감추면, 정상 텍스트로 그려진다.

SCI_CHOOSECARETX
신틸라는 사용자가 명시적으로 수평으로 이동한 마지막 위치의 x 값을 기억한다. 그리고 이 값은 위 아래 키를 사용하여 수직으로 이동할 때 사용된다. 이 메시지는 캐럿의 현재 x 위치를 그 기억된 값으로 설정한다.

SCI_MOVESELECTEDLINESUP
선택된 줄들을 한 줄 위로 이동시키고, 바로 윗줄과 바꾼다. 선택은 선택된 첫줄의 처음부터 끝줄의 마지막까지 자동으로 확대된다. 아무것도 선택되지 않았다면, 현재 커서가 위치한 줄이 선택된다.

SCI_MOVESELECTEDLINESDOWN
선택된 줄들을 한 줄 아래로 이동시키고, 바로 아래의 줄과 바꾼다. 선택은 선택된 첫줄의 처음부터 마지막 줄의 끝까지 자동으로 확대된다. 아무것도 선택되지 않았다면, 현재 커서가 있는 줄이 선택된다.

SCI_GETMOUSESELECTIONRECTANGULARSWITCH → bool
mouseSelectionRectangularSwitch)
SCI_GETMOUSESELECTIONRECTANGULARSWITCH
마우스로 사각형 선택을 전환하지 못하도록 막거나 풀어준다. 이 옵션이 활성화 되어 있으면, 마우스 선택 중에 상응하는 수식 키를 눌러서 스트림 모드에서 사각형 모드로 전환할 수 있다. 그러면 수식키를 다시 놓더라도 사각 모드를 유지한다. 이 옵션이 꺼져 있으면, 마우스 선택은 언제나 시작했던 선택 모드를 유지한다. 기본 값은 꺼져 있다.

문자 또는 UTF-16 코드 단위로 선택

대부분의 신틸라 API는 바이트 위치를 사용한다. 그러나 문자(UTF-32) 또는 코드 단위(UTF-16)의 위치를 사용하여 다른 코드와 통신을 하고자 하는 어플리케이션이 있다. 바이트 위치만 가지고도 여러개의 바이트 갯수를 세면 문자나 코드 단위를 셀 수 있다. 그러나 코드 단위나 문자로 줄의 시작 위치를 인덱스하면 속도가 빨라질 수 있다.

SCI_POSITIONRELATIVE(int pos, int relative) → position
SCI_POSITIONRELATIVECODEUNITS(int pos, int relative) → position
SCI_COUNTCHARACTERS(int start, int end) → int
SCI_COUNTCODEUNITS(int start, int end) → int
SCI_GETLINECHARACTERINDEX → int
SCI_ALLOCATELINECHARACTERINDEX(int lineCharacterIndex)
SCI_RELEASELINECHARACTERINDEX(int lineCharacterIndex)
SCI_LINEFROMINDEXPOSITION(int pos, int lineCharacterIndex) → int
SCI_INDEXPOSITIONFROMLINE(int line, int lineCharacterIndex) → position

SCI_POSITIONRELATIVE(int pos, int relative) → position
인자 position 앞이나 뒤에 있는 전체 문자의 개수를 세어서 그 위치를 돌려준다. 최소 반환 위치는 0이고 최대 반환 위치는 문서의 마지막 위치이다. 위치가 문서 끝을 넘어가면 0이 반환된다.

SCI_COUNTCHARACTERS(int start, int end) → int
두 위치 사이에 있는 온전한 문자의 개수를 돌려준다.

SCI_POSITIONRELATIVECODEUNITS(int pos, int relative) → position
SCI_COUNTCODEUNITS(int start, int end) → int
UTF-16 버전의 SCI_POSITIONRELATIVESCI_COUNTCHARACTERS이다. UTF-16 코드 단위로 작동한다.

SCI_GETLINECHARACTERINDEX → int
활성화된 인덱스를 돌려준다. 인덱스가 없으면 SC_LINECHARACTERINDEX_NONE(0)를 돌려주거나 문자 전체가 인덱스되어 있으면 SC_LINECHARACTERINDEX_UTF32(1)를 돌려준다. UTF-16 코드 단위 인덱스이면 SC_LINECHARACTERINDEX_UTF16(2)을 돌려준다. 문자 인덱스는 현재 UTF-8 문서만 지원한다.

SCI_ALLOCATELINECHARACTERINDEX(int lineCharacterIndex)
SCI_RELEASELINECHARACTERINDEX(int lineCharacterIndex)
SCI_GETLINECHARACTERINDEX와 같은 인덱스를 할당하거나 해제한다. 어플리케이션마다 인덱스 할당 시간이 다를 수 있다. 인덱스는 추가 메모리를 사용하기 때문에 메모리를 해제하면 좋겠지만 그러면 재계산에 시간이 더 든다. 신틸라는 접근성 개선이나 입력 방법의 개선을 위해 인덱스를 할당할 수도 있다. 문서에 각 유형마다 한 번에 한 가지 인덱스만 생성된다.

SCI_LINEFROMINDEXPOSITION(int pos, int lineCharacterIndex) → int
SCI_INDEXPOSITIONFROMLINE(int line, int lineCharacterIndex) → position
특정 문자나 코드 단위가 든 줄은 SCI_LINEFROMINDEXPOSITIONSC_LINECHARACTERINDEX_UTF32(1)이나 SC_LINECHARACTERINDEX_UTF16(2)를 건네어 찾는다. 반대로, 문자나 코드 단위로 문서 줄의 시작 위치를 찾는다. 똑같이 lineCharacterIndex 인자를 SCI_INDEXPOSITIONFROMLINE에 건네어 호출하면 된다.

다중 선택과 가상 공간

SCI_SETMULTIPLESELECTION(bool multipleSelection)
SCI_GETMULTIPLESELECTION → bool
SCI_SETADDITIONALSELECTIONTYPING(bool additionalSelectionTyping)
SCI_GETADDITIONALSELECTIONTYPING → bool
SCI_SETMULTIPASTE(int multiPaste)
SCI_GETMULTIPASTE → int
SCI_SETVIRTUALSPACEOPTIONS(int virtualSpaceOptions)
SCI_GETVIRTUALSPACEOPTIONS → int
SCI_SETRECTANGULARSELECTIONMODIFIER(int modifier)
SCI_GETRECTANGULARSELECTIONMODIFIER → int

SCI_GETSELECTIONS → int
SCI_GETSELECTIONEMPTY → bool
SCI_CLEARSELECTIONS
SCI_SETSELECTION(int caret, int anchor) → int
SCI_ADDSELECTION(int caret, int anchor) → int
SCI_DROPSELECTIONN(int selection)
SCI_SETMAINSELECTION(int selection)
SCI_GETMAINSELECTION → int

SCI_SETSELECTIONNCARET(int selection, int caret)
SCI_GETSELECTIONNCARET(int selection) → position
SCI_SETSELECTIONNCARETVIRTUALSPACE(int selection, int space)
SCI_GETSELECTIONNCARETVIRTUALSPACE(int selection) → int
SCI_SETSELECTIONNANCHOR(int selection, int anchor)
SCI_GETSELECTIONNANCHOR(int selection) → position
SCI_SETSELECTIONNANCHORVIRTUALSPACE(int selection, int space)
SCI_GETSELECTIONNANCHORVIRTUALSPACE(int selection) → int
SCI_SETSELECTIONNSTART(int selection, int anchor)
SCI_GETSELECTIONNSTART(int selection) → position
SCI_GETSELECTIONNSTARTVIRTUALSPACE(int selection) → position
SCI_SETSELECTIONNEND(int selection, int caret)
SCI_GETSELECTIONNEND(int selection) → position
SCI_GETSELECTIONNENDVIRTUALSPACE(int selection) → position

SCI_SETRECTANGULARSELECTIONCARET(int caret)
SCI_GETRECTANGULARSELECTIONCARET → position
SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE(int space)
SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE → int
SCI_SETRECTANGULARSELECTIONANCHOR(int anchor)
SCI_GETRECTANGULARSELECTIONANCHOR → position
SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE(int space)
SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE → int

SC_ELEMENT_SELECTION_ADDITIONAL_TEXT : colouralpha
SC_ELEMENT_SELECTION_ADDITIONAL_BACK : colouralpha
SC_ELEMENT_SELECTION_ADDITIONAL_TEXT : colouralpha
SC_ELEMENT_SELECTION_ADDITIONAL_BACK : colouralpha
SCI_SETADDITIONALSELALPHA(alpha alpha)
SCI_GETADDITIONALSELALPHA → int
SCI_SETADDITIONALSELFORE(colour fore)
SCI_SETADDITIONALSELBACK(colour back)
SC_ELEMENT_CARET_ADDITIONAL : colouralpha
SCI_SETADDITIONALCARETFORE(colour fore)
SCI_GETADDITIONALCARETFORE → colour
SCI_SETADDITIONALCARETSBLINK(bool additionalCaretsBlink)
SCI_GETADDITIONALCARETSBLINK → bool
SCI_SETADDITIONALCARETSVISIBLE(bool additionalCaretsVisible)
SCI_GETADDITIONALCARETSVISIBLE → bool

SCI_SWAPMAINANCHORCARET
SCI_ROTATESELECTION
SCI_MULTIPLESELECTADDNEXT
SCI_MULTIPLESELECTADDEACH

한 번에 다중 선택을 할 수 있다. Ctrl 키를 누르면서 마우스를 끌면 더 많이 선택할 수 있다. 가장 최근의 선택이 메인 선택이고 문서의 어느 부분이 자동으로 보이는지 결정한다. 앞 섹션의 호출들은 메인 선택에 작용한다. 적어도 언제나 하나의 선택은 있다. SCI_CANCEL이면 선택을 그냥 메인 선택 하나로 단순화시킬 수 있다. 취소는 보통 Esc 키에 짝지어져 있다.

사각 선택은 다중 선택처럼 처리된다. 뒷따르는 연산이 사각 선택과 다르게 취급될 수 있도록 원래의 사각 범위가 기억된다. 예를 들어, 사각 선택을 붙여 넣으면 수직 컬럼에 각 조각이 배치된다.

가상 공간은 각 줄의 끝을 넘어선 공간이다. 캐럿은 가상 공간으로 이동할 수 있지만, 텍스트가 타자되거나 다른 어떤 텍스트가 삽입될 때까지 실제 공간이 문서 끝에 추가되는 것은 아니다.

불연속 선택이 클립보드에 복사될 때, 각 선택은 클립도드 텍스트에 순서대로 아무 구분 문자 없이 추가된다. 사각 선택에 대하여 각 줄의 텍스트마다 줄끝문자가 추가된다. 사각 선택은 선택 순서가 아니라 언제나 위에서 아래 줄까지 복사된다. 가상 공간은 복사되지 않는다.

SCI_SETMULTIPLESELECTION(bool multipleSelection)
SCI_GETMULTIPLESELECTION → bool
다중 선택을 가능 또는 불가능하게 한다. 다중 선택이 비활성 상태이면, 마우스로 끌면서 Ctrl 키를 누르고 있어도 여러 범위를 선택할 수 없다.

SCI_SETADDITIONALSELECTIONTYPING(bool additionalSelectionTyping)
SCI_GETADDITIONALSELECTIONTYPING → bool
타자나 지우기 또는 삭제가 다중 선택과 동시에 작동하도록 만든다.

타자, 새줄, 상/하/좌/우 커서 이동, 백스페이스, 델키와 엔드키가 각각 다중 선택과 동시에 작동한다. 또 선택은 물론이고 단어와 줄 삭제 명령어도 허용한다.

SCI_SETMULTIPASTE(int multiPaste)
SCI_GETMULTIPASTE → int
다중 선택 안으로 복사하면, 복사된 텍스트는 SC_MULTIPASTE_ONCE=0이면 메인 선택 안으로 들어가고 SC_MULTIPASTE_EACH=1이면 각 선택 안으로 들어간다. 기본값은 SC_MULTIPASTE_ONCE이다.

SCI_SETVIRTUALSPACEOPTIONS(int virtualSpaceOptions)
SCI_GETVIRTUALSPACEOPTIONS → int
가상 공간은 사각 선택에 대하여 또는 다른 환경에서 아니면 둘 모두의 환경에서 활성화 또는 비활성화할 수 있다. 세개의 비트 플래그 SCVS_RECTANGULARSELECTION=1, SCVS_USERACCESSIBLE=2 그리고 SCVS_NOWRAPLINESTART=4가 있다. 각각 따로 설정할 수 있다. 기본값인 SCVS_NONE=0이면, 모든 가상 공간의 사용이 불능화된다.

SCVS_NOWRAPLINESTART 줄넘기기 모드에서 이전 줄로 왼쪽 화살표의 이동과 선택을 막는다. 보통 가상 공간과 함께 사용하면 아주 바람직하다. 그러나 독자적으로 설정하기 때문에 가상 공간이 없어도 작동한다.

SCI_SETRECTANGULARSELECTIONMODIFIER(int modifier)
SCI_GETRECTANGULARSELECTIONMODIFIER → int
GTK에서, 마우스 드래그와 결합할 때 사각 구역이 만들어져야 한다고 지시하는데 사용되는 키를 설정할 수 있다. 세 개의 가능한 값은 SCMOD_CTRL=2 (기본값), SCMOD_ALT=4 또는 SCMOD_SUPER=8이다. SCMOD_ALT는 종종 이미 창 관리자가 사용하고 있으므로, 창 관리자는 이 선택을 허용하도록 환경을 구성해 줄 필요가 있다. SCMOD_SUPER는 종종 시스템 종속적인 꾸밈 키이다. 예를 들어 윈도우즈 키보드에서는 왼쪽의 Windows 키 또는 맥에서는 Command 키이다.

SCI_GETSELECTIONS → int
현재 활성상태인 선택의 개수를 돌려준다.

SCI_GETSELECTIONEMPTY → bool
선택된 범위가 비어 있으면 1을 돌려준다. 그렇지 않으면 0을 돌려준다.

SCI_CLEARSELECTIONS
0에 빈 선택 하나를 유일한 선택으로 설정한다.

SCI_SETSELECTION(int caret, int anchor) → int
anchor에서 caret까지 선택 하나를 유일한 선택으로 설정한다.

SCI_ADDSELECTION(int caret, int anchor) → int
다른 모든 선택을 추가 선택으로 유지하면서 anchor에서 caret까지 새로운 선택을 메인 선택으로 추가한다. 언제나 적어도 하나의 선택은 있기 때문에, 선택 리스트를 설정하려면, 첫 선택은 SCI_SETSELECTION으로 추가하여야 하고 나중 선택들은 SCI_ADDSELECTION으로 추가하여야 한다

SCI_DROPSELECTIONN(int selection)
여러개의 선택이 있다면, 지정한 선택을 제거한다. 지정한 선택이 메인 선택이라면 바로 앞의 선택을 메인으로 만든다. 첫 번째 선택이라면 미지막 선택이 메인이 된다. 선택이 하나라면, 또는 selection 선택이 없다면, 아무 영향이 없다.

SCI_SETMAINSELECTION(int selection)
SCI_GETMAINSELECTION → int
선택 중의 하나가 어느 범위의 텍스트가 자동으로 보일지 결정하는데 사용되는 메인 선택이다. 메인 선택은 다른 색으로 화면에 보여줄 수 있다. 또는 다른 스타일의 캐럿으로 보여줄 수 있다. 이미 존재하는 선택만 메인이 될 수 있다.

SCI_SETSELECTIONNCARET(int selection, int caret)
SCI_GETSELECTIONNCARET(int selection) → position
SCI_SETSELECTIONNCARETVIRTUALSPACE(int selection, int space)
SCI_GETSELECTIONNCARETVIRTUALSPACE(int selection) → int
SCI_SETSELECTIONNANCHOR(int selection, int anchor)
SCI_GETSELECTIONNANCHOR(int selection) → position
SCI_SETSELECTIONNANCHORVIRTUALSPACE(int selection, int space)
SCI_GETSELECTIONNANCHORVIRTUALSPACE(int selection) → int
이미 존재하는 각 선택의 캐럿과 앵커에 대하여 가상 공간의 위치와 양을 질의하고 설정한다.

SCI_SETSELECTIONNSTART(int selection, int anchor)
SCI_GETSELECTIONNSTART(int selection) → position
SCI_GETSELECTIONNSTARTVIRTUALSPACE(int selection) → position
SCI_SETSELECTIONNEND(int selection, int caret)
SCI_GETSELECTIONNEND(int selection) → position
SCI_GETSELECTIONNENDVIRTUALSPACE(int selection) → position
이미 존재하는 각 선택의 시작 위치와 끝 위치를 질의하고 설정한다. 대부분은 텍스트에 대하여 각 범위를 질의하는데 사용된다. 각 선택마다 가상 공간의 시작과 끝 위치를 질의한다. 주로 각 텍스트의 범위를 질의하는데 사용된다. selection 매개변수는 0부터 시작한다.

SCI_SETRECTANGULARSELECTIONCARET(int caret)
SCI_GETRECTANGULARSELECTIONCARET → position
SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE(int space)
SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE → int
SCI_SETRECTANGULARSELECTIONANCHOR(int anchor)
SCI_GETRECTANGULARSELECTIONANCHOR → position
SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE(int space)
SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE → int
사각 선택의 캐럿과 앵커에 대하여 가상 공간의 양과 위치를 질의하고 설정한다. 사각 선택을 설정한 후, 한 줄에 하나씩 여러 선택으로 조각난다.

SC_ELEMENT_SELECTION_ADDITIONAL_TEXT : colouralpha
SC_ELEMENT_SELECTION_ADDITIONAL_BACK : colouralpha
SC_ELEMENT_SELECTION_ADDITIONAL_TEXT : colouralpha
SC_ELEMENT_SELECTION_ADDITIONAL_BACK : colouralpha
SCI_SETADDITIONALSELALPHA(alpha alpha)
SCI_GETADDITIONALSELALPHA → int
SCI_SETADDITIONALSELFORE(colour fore)
SCI_SETADDITIONALSELBACK(colour back)
추가 선택의 모습을 수정한다. 메인 선택과 차별화할 수 있다. 메인 선택의 모습은 SC_ELEMENT_SELECTION_TEXT, SC_ELEMENT_SELECTION_BACK, SC_ELEMENT_SELECTION_TEXT, SC_ELEMENT_SELECTION_BACK, SCI_SETSELALPHA, SCI_GETSELALPHA, SCI_SETSELFORE, 그리고 SCI_SETSELBACK로 설정된다. 엘리먼트 API를 권장하면 다음 메시지들은 권하지 않는다. 추가 선택 배경은 SCI_SETSELECTIONLAYER에 의하여 정의된 레이어 위에 그려진다. SCI_SETADDITIONALSELFORE 그리고 SCI_SETADDITIONALSELBACK 호출은 useSelection*Colour 값을 true로 설정한 채로 SCI_SETSELFORESCI_SETSELBACK이 호출될 때까지 영향을 미치지 않는다. 잇달아 SCI_SETSELFORESCI_SETSELBACK을 호출하면 SCI_SETADDITIONALSEL* 함수가 설정한 값들이 오버라이드된다. 요소 API가 더 좋다. 다음 메시지들은 권하지 않는다. 추가 선택의 배경은 SCI_SETSELECTIONLAYER로 모든 선택 배경에 정의된 레이어 위에 그려진다.

SC_ELEMENT_CARET_ADDITIONAL : colouralpha
SCI_SETADDITIONALCARETFORE(colour fore)
SCI_GETADDITIONALCARETFORE → colour
SCI_SETADDITIONALCARETSBLINK(bool additionalCaretsBlink)
SCI_GETADDITIONALCARETSBLINK → bool
추가 캐럿의 모습을 수정한다. 메인 캐럿과 차별화할 수 있다. 메인 캐럿의 모습은 SC_ELEMENT_CARET, SCI_SETCARETFORE, SCI_GETCARETFORE, SCI_SETCARETPERIOD, 그리고 SCI_GETCARETPERIOD로 설정한다.

SCI_SETADDITIONALCARETSVISIBLE(bool additionalCaretsVisible)
SCI_GETADDITIONALCARETSVISIBLE → bool
추가 캐럿을 보여줄지 말지를 결정한다 (기본값은 true).

SCI_SWAPMAINANCHORCARET
SCI_ROTATESELECTION
SCI_MULTIPLESELECTADDNEXT
이 명령어들은 다중 선택을 조작할 수 있도록 키에 할당된다. SCI_SWAPMAINANCHORCARET는 캐럿을 메인 선택의 반대편 끝으로 이동시킨다. SCI_ROTATESELECTION는 다음 선택이 메인 선택이 되도록 만든다.


SCI_MULTIPLESELECTADDNEXT는 목표 범위 안에서 다음에 나타나는 선택을 메인 선택에 추가한다. 현재 선택이 비어 있으면 캐럿 둘레의 단어를 선택한다. 현재 searchFlags을 사용하여 어플리케이션은 대소문자 구분과 단어 검색 옵션을 선택할 수 있다.
SCI_MULTIPLESELECTADDEACHSCI_MULTIPLESELECTADDNEXT와 비슷하지만 한 개 말고 여러 개를 추가할 수 있다.

말기 그리고 자동 말기

SCI_LINESCROLL(int column, int line)
SCI_SETFIRSTVISIBLELINE(int displayLine)
SCI_GETFIRSTVISIBLELINE → int
SCI_SETXOFFSET(int xOffset)
SCI_GETXOFFSET → int
SCI_LINESCROLL(int columns, int lines)
SCI_SCROLLCARET
SCI_SCROLLRANGE(int secondary, int primary)
SCI_SETXCARETPOLICY(int caretPolicy, int caretSlop)
SCI_SETYCARETPOLICY(int caretPolicy, int caretSlop)
SCI_SETVISIBLEPOLICY(int visiblePolicy, int visibleSlop)
SCI_SETHSCROLLBAR(bool visible)
SCI_GETHSCROLLBAR → bool
SCI_SETVSCROLLBAR(bool visible)
SCI_GETVSCROLLBAR → bool
SCI_SETSCROLLWIDTH(int pixelWidth)
SCI_GETSCROLLWIDTH → int
SCI_SETSCROLLWIDTHTRACKING(bool tracking)
SCI_GETSCROLLWIDTHTRACKING → bool
SCI_SETENDATLASTLINE(bool endAtLastLine)
SCI_GETENDATLASTLINE → bool

SCI_SETFIRSTVISIBLELINE(int displayLine)
SCI_GETFIRSTVISIBLELINE → int
이 메시지들은 신틸라 뷰에서 제일 먼저 보이는 줄의 번호를 열람하고 설정한다. 문서에서 첫 줄은 번호가 0이다. 그 값은 문서 줄이라기 보다 보이는 줄이다.

SCI_SETXOFFSET(int xOffset)
SCI_GETXOFFSET → int
xOffset는 픽셀 단위로 텍스트 뷰의 시작의 수평 스크롤 위치이다. 값이 0이면 첫 텍스트 컬럼이 뷰의 왼쪽에 보이는 정상 위치이다.

다음도 참조: SCI_LINESCROLL

SCI_LINESCROLL(int columns, int lines)
지정한 컬럼 개수와 줄 개수 만큼 화면을 스크롤하려고 시도한다. 양수 줄 값은 화면 상단의 줄 번호를 증가시킨다 (즉, 사용자의 관점에서 보면 텍스트를 위로 이동시킨다). 음수 줄 번호는 역으로 수행된다.

컬럼은 기본 스타일의 공간 너비로 측정한다. 양수 값은 뷰의 왼쪽 가장자리에 있는 컬럼을 증가시킨다 (즉, 사용자의 관점에서 보면 텍스트를 왼쪽으로 이동시킨다). 음수 값은 그 반대이다.

다음도 참조: SCI_SETXOFFSET

SCI_SCROLLCARET
현재 위치가 보이지 않으면 (선택이 없으면 현재 위치는 캐럿이다), 뷰는 말기되어 현재 캐럿 정책에 맞게 그 위치를 보이게 만든다.

SCI_SCROLLRANGE(int secondary, int primary)
인자 위치와 그 사이의 범위를 말아서 보이게 만든다. 기본 위치가 우선 순위가 있고 보조 위치가 그 다음이다. SCI_SCROLLCARET와 행위가 비슷하다. 캐럿 대신에 기본 위치를 사용한다. 그 다음에 보조 위치와 그 사이의 범위도 보이도록 시도한다. 이 메시지는 검색에 부합한 것을 보여주는 데 사용할 수 있다.

SCI_SETXCARETPOLICY(int caretPolicy, int caretSlop)
SCI_SETYCARETPOLICY(int caretPolicy, int caretSlop)
캐럿 정책을 설정한다. caretPolicy의 값은 CARET_SLOP, CARET_STRICT, CARET_JUMPS 그리고 CARET_EVEN를 조합해 구성된다.

CARET_SLOP 설정되면, slop 값을 정의할 수 있다: caretSlop. 이 값은 거부 지역(unwanted zone (UZ))을 정의한다. 캐럿이 거부 지역에 들어가면... 거부된다. 이 지역은 수직 여백에 가깝게 픽셀 개수로 그리고 수평 여백에 가깝게 줄 개수로 정의된다. 캐럿을 가장자리에 떨어뜨려 두어서, 그의 문맥 안에 캐럿을 보이게 만든다. 이렇게 하면 캐럿이 위치한 식별자가 완전하게 보일 가능성이 높으며, 현재 줄이 그를 따르는 줄들과 함께 보일 가능성이 높다. 보통 이 줄들은 그 줄에 의존한다.
CARET_STRICT 설정되면, CARET_SLOP에 설정한 정책이 엄격하게... 실시된다. caretSlop가 설정되어 있지 않으면 캐럿은 화면 중앙에 위치한다. 그리고 caretSlop가 설정되어 있으면 UZ에 들어갈 수 없다.
CARET_JUMPS 설정되면, 화면은 좀 더 강력하게 움직인다. 캐럿은 정책이 다시 적용되기 전에 같은 방향으로 더 멀리 갈 수 있다. 여백까지의 거리가 UZ의 세 배를 가리키는데 '3UZ' 표기법이 사용된다.
CARET_EVEN 설정되지 않으면, 대칭적인 UZ를 사용하는 대신에, 왼쪽과 아래쪽 UZ가 각각 오른쪽과 위쪽 UZ까지 확장된다. 이런 식으로, 유용한 정보를 보여주는 혜택을 입을 수 있다: 대부분의 코드가 존재하는 줄의 시작, 캐럿 뒤의 줄들, 예를 들어, 함수 몸체.

slop strict jumps even 캐럿은 여백까지 갈 수 있다 한계에 도달하면 (보이지 않게 되거나
UZ에 들어가면) 화면은...
0 0 0 0 Yes 이동해서 캐럿을 우/상에 놓는다
0 0 0 1 Yes 한 위치씩 이동한다
0 0 1 0 Yes 이동해서 캐럿을 우/상에 놓는다
0 0 1 1 yes 캐럿이 중앙에 온다
0 1 - 0 캐럿은 언제나 화면의 우/상에 있다 -
0 1 - 1 불가, 캐럿은 언제나 가운데에 위치한다 -
1 0 0 0 yes 이동해서 캐럿을 비대칭 UZ의 바깥에 배치한다
1 0 0 1 yes 이동해서 캐럿을 UZ의 밖에 배치한다
1 0 1 0 Yes 이동해서 캐럿을 위/우 여백의 3UZ에 배치한다
1 0 1 1 Yes 이동해서 캐럿을 여백의 3UZ에 배치한다
1 1 - 0 캐럿은 언제나 우/상 여백의 UZ에 있다 -
1 1 0 1 불가, UZ의 밖에 존재한다 한 위치씩 이동한다
1 1 1 0 불가, UZ의 밖에 존재한다 이동해서 캐럿을 여백의 3UZ에 배치한다

SCI_SETVISIBLEPOLICY(int visiblePolicy, int visibleSlop)
SCI_ENSUREVISIBLEENFORCEPOLICY를 호출할 때 수직 위치를 결정한다. visiblePolicy 매개변수로 VISIBLE_SLOPVISIBLE_STRICT를 취한다. SCI_SETYCARETPOLICY(int caretPolicy, int caretSlop)와 연산이 비슷하다.

SCI_SETHSCROLLBAR(bool visible)
SCI_GETHSCROLLBAR → bool
수평 스크롤바는 오직 예상 너비에 필요할 경우에만 보여진다. 보고 싶지 않으면 SCI_SETHSCROLLBAR(0)를 호출하면 된다. 다시 활성화하려면 SCI_SETHSCROLLBAR(1)를 사용하자. SCI_GETHSCROLLBAR는 현재 상태를 돌려준다. 기본 상태는 필요할 때 화면에 보여주는 것이다.

다음도 참조: SCI_SETSCROLLWIDTH.

SCI_SETVSCROLLBAR(bool visible)
SCI_GETVSCROLLBAR → bool
기본값으로, 수평 스크롤바는 언제나 필요하면 화면에 보여진다. SCI_SETVSCROLLBAR로 숨기거나 보여줄 수 있다. SCI_GETVSCROLLBAR로 현재 상태를 얻는다.

SCI_SETSCROLLWIDTH(int pixelWidth)
SCI_GETSCROLLWIDTH → int
수행성능을 위하여, 신틸라는 문서의 화면 너비를 측정해서 수평 스크롤바의 특성을 결정하지 않는다. 대신에, 예상 너비가 사용된다. 이 메시지들은 신틸라가 예상한 문서 너비를 픽셀 단위로 설정하고 얻는다. 기본 값은 2000이다. 현재 보이는 줄들의 너비가 스크롤될 수 있는지 확인하려면 SCI_SETSCROLLWIDTHTRACKING를 사용하자.

SCI_SETSCROLLWIDTHTRACKING(bool tracking)
SCI_GETSCROLLWIDTHTRACKING → bool
스크롤 너비 추적이 활성화되어 있으면 현재 화면에 보이는 모든 줄이 완전히 스크롤될 수 있도록 스크롤 너비가 조정된다. 이 모드는 절대로 스크롤 너비를 더 좁게 조정하지 않는다.

SCI_SETENDATLASTLINE(bool endAtLastLine)
SCI_GETENDATLASTLINE → bool
SCI_SETENDATLASTLINE는 최대 스크롤 위치가 뷰의 하단에서 마지막 줄을 가지도록 스크롤 범위를 설정한다 (기본값). 이를 false로 설정하면 한 페이지를 마지막 줄 이후로 스크롤할 수 있다.

공백

SCI_SETVIEWWS(int viewWS)
SCI_GETVIEWWS → int
SCI_SETWHITESPACEFORE(bool useSetting, colour fore)
SC_ELEMENT_WHITE_SPACE_BACK : colouralpha
SCI_SETWHITESPACEBACK(bool useSetting, colour back)
SCI_SETWHITESPACESIZE(int size)
SCI_GETWHITESPACESIZE → int
SCI_SETTABDRAWMODE(int tabDrawMode)
SCI_GETTABDRAWMODE → int
SCI_SETEXTRAASCENT(int extraAscent)
SCI_GETEXTRAASCENT → int
SCI_SETEXTRADESCENT(int extraDescent)
SCI_GETEXTRADESCENT → int

SCI_SETVIEWWS(int viewWS)
SCI_GETVIEWWS → int
공백을 보이게 만들 수 있다. 파이썬 같이 공백이 의미가 있는 언어에 유용하다. 공간 문자들은 작은 가운데 점으로 보인다. 탭 문자는 오른쪽을 가리키는 얇은 화살표로 나타난다. 줄끝 문자를 보여주는 방법을 제어할 수도 있다. 두 메시지는 공백 보여주기 모드를 설정하고 얻는다. viewWS 인자는 다음 중 하나가 될 수 있다:

SCWS_INVISIBLE 0 공백을 빈 배경색으로 보여주는 정상 화면 모드이다.
SCWS_VISIBLEALWAYS 1 공백 문자는 점과 화살표로 그려진다,
SCWS_VISIBLEAFTERINDENT 2 들여쓰기에 사용되는 공백은 정상으로 보이지만 처음 보이는 문자 이후로는 점과 화살표로 보여진다.

다른 viewWS 값을 사용하는 효과는 정의되어 있지 않다.

SC_ELEMENT_WHITE_SPACE : colouralpha
SCI_SETWHITESPACEFORE(bool useSetting, colour fore)
SC_ELEMENT_WHITE_SPACE_BACK : colouralpha
SCI_SETWHITESPACEBACK(bool useSetting, colour back)
기본값으로, 보이는 공백의 색은 사용중인 어휘분석기가 결정한다. 모든 가시 공백의 배경/전경 색은 전역적으로 설정할 수 있다. 어휘분석기의 색을 SC_ELEMENT_WHITE_SPACESC_ELEMENT_WHITE_SPACE_BACK로 오버라이딩하면 된다.
SCI_SETWHITESPACEFORESCI_SETWHITESPACEBACK도 역시 공백 색을 바꿀 수 있지만 엘리먼트 API가 더 좋다. SC_ELEMENT_WHITE_SPACE로 바꾸면 투명도를 줄 수 있기 때문이다.

SCI_SETWHITESPACESIZE(int size)
SCI_GETWHITESPACESIZE → int
공간 문자를 표식하는데 사용되는 점의 크기를 설정한다. SCI_GETWHITESPACESIZE 메시지는 현재 크기를 열람한다. 0도 유효한 값으로서 0으로 설정하면 점이 보이지 않는다.

SCI_SETTABDRAWMODE(int tabDrawMode)
SCI_GETTABDRAWMODE → int
이 두 메시지는 공백이 보일 때 탭 문자를 어떻게 그릴지 설정하고 얻는다. tabDrawMode 인자는 다음 중 하나가 될 수 있다:

SCTD_LONGARROW 0 탭 멈춤을 만날 때 까지 늘어지는 화살표. 기본 모드이다.
SCTD_STRIKEOUT 1 탭 멈춤을 만날 때까지 늘어지는 수평 라인.

다른 tabDrawMode 값을 사용하는 것은 정의되어 있지 않다.

SCI_SETEXTRAASCENT(int extraAscent)
SCI_GETEXTRAASCENT → int
SCI_SETEXTRADESCENT(int extraDescent)
SCI_GETEXTRADESCENT → int
텍스트는 '기본선(baseline)' 위에 각 문자를 기반으로 그려진다. 줄의 높이는 '상단(ascent)' 최대값에 '하단(descent)' 최대값을 더해서 얻는다. 상단은 스타일이 기본선 위로 확장되고 하단은 스타일이 기본선 아래로 확장된다. 최대 ascent (SCI_SETEXTRAASCENT)와 최대 descent (SCI_SETEXTRADESCENT)에 공간이 추가되어 줄 사이에 더 많은 공간을 허용할 수 있다. 이렇게 하면 텍스트를 더 쉽게 읽을 수 있거나 밑줄이나 강조에 적응할 수 있다.

초과 어센트와 디센트는 음수일 수는 있지만 줄 사이에 여백을 공유할 때 예상치 못한 간섭이 있을 수 있으므로 주의하여 다루어야 한다.

커서(Cursor)

SCI_SETCURSOR(int cursorType)
SCI_GETCURSOR → int

SCI_SETCURSOR(int cursorType)
SCI_GETCURSOR → int
커서는 보통 문맥 감지로 선택된다. 그래서 텍스트 위에 있을 때와 여백 위에 있을 때가 다르다. 시간이 걸리는 조치를 수행할 때, 기다리기 커서로 바꾸고 싶을 것이다. 커서 유형은 SCI_SETCURSOR로 설정한다. cursorType 인자는 다음과 같다:

SC_CURSORNORMAL -1 정상 커서가 화면에 보인다.
SC_CURSORWAIT  4 마우스가 신틸라 창을 배회하거나 점유하고 있으면 기다리기 커서가 화면에 보여진다.

커서 값 1부터 7까지 커서를 정의한다. 그러나 오직 SC_CURSORWAIT만 유용하게 제어가 가능하다. cursorType의 다른 값들은 포인터가 화면에 보이도록 만든다. SCI_GETCURSOR 메시지는 사용자가 설정한 마지막 커서 유형을 돌려준다. 커서 유형을 설정하지 않았다면 SC_CURSORNORMAL (-1)을 돌려준다.

마우스 나포

SCI_SETMOUSEDOWNCAPTURES(bool captures)
SCI_GETMOUSEDOWNCAPTURES → bool
SCI_SETMOUSEWHEELCAPTURES(bool captures)
SCI_GETMOUSEWHEELCAPTURES → bool

SCI_SETMOUSEDOWNCAPTURES(bool captures)
SCI_GETMOUSEDOWNCAPTURES → bool
마우스가 신틸라 안에서 눌려지면, 그 사건이 나포되어 앞으로의 이동 이벤트가 신틸라에게 전송된다. 이 행위는 SCI_SETMOUSEDOWNCAPTURES(0)로 끌 수 있다.

SCI_SETMOUSEWHEELCAPTURES(bool captures)
SCI_GETMOUSEWHEELCAPTURES → bool
윈도우즈에서 신틸라는 초점을 소유하고 있으면 모든 WM_MOUSEWHEEL 메시지들을 나포한다. 심지어 마우스 포인터가 신틸라 편집창 근처에 전혀 없더라도 모두 나포한다. 이 행위를 SCI_SETMOUSEWHEELCAPTURES(0)로 바꿀 수 있다. 신틸라는 WM_MOUSEWHEEL 메시지를 부모 창으로 건넨다. 마우스 포인터가 편집 창 위에 있으면 신틸라는 여전히 마우스 휠에 반응할 것이다.

줄끝 문자열

신틸라는 주요 줄끝 관행을 처리할 수 있으며, 설정에 따라 현재 어휘분석기도 유니코드 줄 끝 관행을 지원한다. 신틸라는 세 가지 주요 줄 끝 관행을 이해할 수 있다; Macintosh (\r), Unix (\n) 그리고 CP/M / DOS / 윈도우즈 (\r\n). 사용자가 엔터 키를 누르면, 이 줄끝 문자열 중의 하나가 버퍼에 삽입된다. 기본값은 윈도우즈에서 \r\n이고 유닉스에서 \n이다. 그러나 SCI_SETEOLMODE 메시지로 바꿀 수 있다. SCI_CONVERTEOLS로 전체 문서를 이 줄끝 문자중 하나로 바꿀 수도 있다. 마지막으로, SCI_SETVIEWEOL로 줄끝 문자를 보여줄 수 있다.

UTF-8 인코딩에 대해서, 세가지 유니코드 줄 끝 관행이 추가된다. 유니코드 줄 끝 설정이 켜져 있고 현재 어휘분석기도 유니코드 줄 끝을 지원하면, 다음 줄(NEL=U+0085)과 줄 가름자(LS=U+2028) 그리고 문단 가름자(PS=U+2029)는 선택적으로 해석할 수 있다.

SCI_SETEOLMODE(int eolMode)
SCI_GETEOLMODE → int
SCI_CONVERTEOLS(int eolMode)
SCI_SETVIEWEOL(bool visible)
SCI_GETVIEWEOL → bool
SCI_GETLINEENDTYPESSUPPORTED → int
SCI_SETLINEENDTYPESALLOWED(int lineEndBitSet)
SCI_GETLINEENDTYPESALLOWED → int
SCI_GETLINEENDTYPESACTIVE → int

SCI_SETEOLMODE(int eolMode)
SCI_GETEOLMODE → int
SCI_SETEOLMODE는 사용자가 엔터 키를 누를 때 문서에 추가될 문자를 설정한다. eolModeSC_EOL_CRLF (0), SC_EOL_CR (1), 또는 SC_EOL_LF (2) 중의 하나로 설정할 수 있다. SCI_GETEOLMODE 메시지는 현재 상태를 열람한다.

SCI_CONVERTEOLS(int eolMode)
이 메시지는 문서에서 모든 줄끝 문자를 eolMode 에 맞도록 바꾼다. 유효한 값들은 다음과 같다: SC_EOL_CRLF (0), SC_EOL_CR (1), 또는 SC_EOL_LF (2).

SCI_SETVIEWEOL(bool visible)
SCI_GETVIEWEOL → bool
보통, 줄끝 문자는 숨어있지만, SCI_SETVIEWEOLvisibletrue (또는 false)로 설정하면 (숨기거나) 보여줄 수 있다. 줄끝 문자를 보이게 가공처리하면 (CR), (LF), 또는 (CR)(LF)과 비슷하다. SCI_GETVIEWEOL는 현재 상태를 돌려준다.

SCI_GETLINEENDTYPESSUPPORTED → int
SCI_GETLINEENDTYPESSUPPORTED는 현행 어휘분석기가 지원하는 다양한 유형의 줄 끝을 보고한다. 현재로는 SC_LINE_END_TYPE_DEFAULT (0) 또는 SC_LINE_END_TYPE_UNICODE (1)와 같이 한 가지 선택 밖에 없지만 설정해 두었다. 이 값들은 또 유니코드 줄 끝과 관련된 다른 메시지에서도 사용된다..

SCI_SETLINEENDTYPESALLOWED(int lineEndBitSet)
SCI_GETLINEENDTYPESALLOWED → int
기본값으로, 오직 ASCII 줄 끝만 이해한다. 유니코드 줄 끝은 SCI_SETLINEENDTYPESALLOWED(SC_LINE_END_TYPE_UNICODE)으로 요청할 수도 있찌만 이 방법은 해당 어휘분석기도 유니코드 줄 끝을 지원하지 않는다면 효과가 없다. SCI_GETLINEENDTYPESALLOWED는 현재 상태를 돌려준다.

SCI_GETLINEENDTYPESACTIVE → int
SCI_GETLINEENDTYPESACTIVE는 현재 신틸라가 이해하는 줄 끝 세트를 보고한다. 다음 두 가지 SCI_GETLINEENDTYPESSUPPORTED & SCI_GETLINEENDTYPESALLOWED를 보고한다.

단어

단어 단위로 이동하고 선택하며 검색할 수 있다.

단어는 특정하게 지정한 문자가 연속되어 있는 것이다. 네 가지 범주로 단어를 정의한다: 단어, 공백, 구두점, 그리고 줄 끝은 각자 단어의 역할을 하는 범주에 속한다. 더블 클릭하면 해당 단어가 선택된다. 일련의 단어, 구두점 또는 공백 바이트일 수 있다. 줄끝은 더블 클릭으로 선택되지 않지만 단어 가름자로서 역할을 한다.

단어는 문자의 관점에서 정의되며 각 범주에 해당하는 문자 집합을 확장해 지정할 수 있다. NUL 문자(0)는 언제나 공백으로 취급된다. 범주를 설정하는 API들이 NUL-종료 문자열을 사용하기 때문이다. 1-바이트 인코딩은 범주를 어떤 문자에도 지정할 수 있다 (1부터 0xFF까지). 다-바이트 인코딩은 범주를 1부터 0x7F까지의 문자에 지정할 수 있다. 0x80 이후의 문자는 행위가 정해져 있다. UTF-8 인코딩에서, 0x80 이후의 문자는 유니코드에 기반한 범주를 사용한다(재단 불가). 아시아권 코드 페이지 932, 936, 949, 950, 그리고 1361에서 0x80 이후의 문자는 단어 문자로 취급된다.

프로그래밍 언어의 식별자는 단어를 연속적으로 늘어 놓을 때 대문자(aCamelCaseIdentifier)나 밑줄 문자(an_under_bar_ident)로 단어의 경계를 삼는 경우가 많다. SCI_WORDPART* 명령어는 단어 구획 사이를 이동하는데 사용된다: SCI_WORDPARTLEFT, SCI_WORDPARTLEFTEXTEND, SCI_WORDPARTRIGHT, 그리고 SCI_WORDPARTRIGHTEXTEND.

SCI_WORDENDPOSITION(int pos, bool onlyWordCharacters) → int
SCI_WORDSTARTPOSITION(int pos, bool onlyWordCharacters) → int
SCI_ISRANGEWORD(int start, int end) → bool
SCI_SETWORDCHARS(<unused>, const char *characters)
SCI_GETWORDCHARS(<unused>, char *characters) → int
SCI_SETWHITESPACECHARS(<unused>, const char *characters)
SCI_GETWHITESPACECHARS(<unused>, char *characters) → int
SCI_SETPUNCTUATIONCHARS(<unused>, const char *characters)
SCI_GETPUNCTUATIONCHARS(<unused>, char *characters) → int
SCI_SETCHARSDEFAULT
SCI_SETCHARACTERCATEGORYOPTIMIZATION(int countCharacters)
SCI_GETCHARACTERCATEGORYOPTIMIZATION → int

SCI_WORDENDPOSITION(int pos, bool onlyWordCharacters) → int
SCI_WORDSTARTPOSITION(int pos, bool onlyWordCharacters) → int
이 메시지들은 신틸라 내부적으로 사용되는 단어의 정의와 같은 정의를 사용하여 시작과 끝 단어를 돌려준다. SCI_SETWORDCHARS로 단어라고 간주되는 자신만의 문자 리스트를 설정할 수 있다. position는 시작을 설정한다. 그렇지 않으면 끝을 향하여 검색하면 앞으로 검색되고 처음을 향하여 검색하면 거꾸로 검색한다.

SCI_ISRANGEWORD(int start, int end) → bool
start..end의 범위가 단어인가? 이 메시지는 start가 단어 시작 경계에 있는지 그리고 end가 단어 끝 경계에 있는지 점검한다. 그러나 범위 안에 공간이 있는지 없는지는 점검하지 않는다.

SCI_ISRANGEWORD(int start, int end) → bool

onlyWordCharacterstrue (1)로 설정하면 검색 방향으로 처음 비-단어 문자에서 검색을 멈춘다. onlyWordCharactersfalse (0)이면, 검색 방향에서 첫 문자가 검색의 유형을 단어 또는 비-단어로 설정하고 그 검색은 처음으로 일치하지 않는 문자에서 멈춘다. 문서의 시작이나 끝에 이르면 검색도 종료한다.

"w"가 단어 문자를 나타내고 "."가 비-단어 문자를 나타내며 그리고 "|"가 그 위치를 나타낸다면 그리고 truefalseonlyWordCharacters의 상태를 나타낸다고 가정하면:

최초 상태 end, true end, false start, true start, false
..ww..|..ww.. ..ww..|..ww.. ..ww....|ww.. ..ww..|..ww.. ..ww|....ww..
....ww|ww.... ....wwww|.... ....wwww|.... ....|wwww.... ....|wwww....
..ww|....ww.. ..ww|....ww.. ..ww....|ww.. ..|ww....ww.. ..|ww....ww..
..ww....|ww.. ..ww....ww|.. ..ww....ww|.. ..ww....|ww.. ..ww|....ww..
+

SCI_SETWORDCHARS(<unused>, char *characters) → int

이 메시지는 어떤 문자가 단어 집합에 포함될지 정의한다. 이 함수를 처리하기 전에 문자 집합이 기본 값으로 설정된다. 예를 들어, '_'를 문자 집합에 허용하지 않는다면 다음을 사용하자:
SCI_SETWORDCHARS(0, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");

SCI_GETWORDCHARS(<unused>, char *characters)
단어에 포함된 모든 문자들로 characters 매개변수를 채운다. characters 매개변수는 모든 문자들을 담을 만큼 충분히 커야 한다. characters 매개 변수가 0이면 전체 집합을 저장하는데 할당되어야 할 길이가 반환된다.

다-바이트 인코딩에서 이 API는 0x80 이후의 문자에 대하여 의미있는 값을 돌려주지 않을 것이다.

SCI_SETWHITESPACECHARS(<unused>, const char *characters)
SCI_GETWHITESPACECHARS(<unused>, char *characters) → int
SCI_SETWORDCHARS 비슷하다. 이 메시지로 사용자는 어느 문자를 신틸라가 공백문자로 간주할지 정의한다. 공백 문자를 설정하면 사용자는 커서를 단어의 처음이나 끝으로 이동시키는 것과 같이 신틸라의 행위를 섬세하게 조율할 수 있다; 예를 들어, 구두점 문자를 공백으로 정의하면, 사용자가 ctrl+left 또는 ctrl+right를 누를 때 건너뛴다. 이 함수는 공백 문자들을 기본 집합으로 재설정하기 때문에 SCI_SETWORDCHARS 다음에 호출되어야 한다.

SCI_SETPUNCTUATIONCHARS(<unused>, const char *characters)
SCI_GETPUNCTUATIONCHARS(<unused>, char *characters) → int
SCI_SETWORDCHARSSCI_SETWHITESPACECHARS에 비슷하다. 이 메시지로 사용자는 어느 문자를 신틸라가 구두점으로 이해해야 할지 정의할 수 있다. SCI_GETPUNCTUATIONCHARS SCI_GETWORDCHARS와 비슷하게 행위한다.

SCI_SETCHARSDEFAULT
공백 문자와 단어의 기본 집합을 사용한다. 공백문자를 공간문자, 탭문자 그리고 코드가 0x20보다 작은 문자로 설정한다. 단어 문자는 알파벳숫자와 '_'로 설정한다.

SCI_SETCHARACTERCATEGORYOPTIMIZATION(int countCharacters)
SCI_GETCHARACTERCATEGORYOPTIMIZATION → int
메모리를 희생하여 문자가 공백문자인지 숫자인지 결정하는 일과 같이 문자 범주를 가르는 속도를 최적화한다. 주로 유니코드 문서에 사용된다. countCharacters 매개변수는 문자 찾기표에서 0부터 시작하여 얼마나 많은 문자가 추가되어 있는지 결정한다. 찾기표는 각 문자마다 1 바이트를 소모한다. 문서에 사용됨직한 문자 세트 총괄하는 것이 합리적이다. 그래서 단순한 로마 텍스트라면 0x100으로, 대부분의 단순한 알파벳이라면 0x1000으로 총괄할 수 있을 것이고 동아시아 언어라면 0x10000으로, 대부분의 문자는 0x110000으로 포괄할 수 있을 것이다.

단어 단위 키보드 명령어는 다음과 같다:

스타일링(Styling)

스타일 메시지로 스타일을 텍스트에 할당할 수 있다.

표준 신틸라 설정은 8 개의 스타일 비트를 나누어서 각 문자에 대하여 스타일을 설정하는데 5비트를 (0에서 4까지 = 스타일 0에서 31까지) 주고 표시자를 정의하는데 3비트 (5에서 7까지)를 준다. SCI_SETSTYLEBITS로 스타일과 표시자 사이의 균형을 맞출 수 있다.
표준 어휘분석기중 하나로 스타일 필요를 충족하거나, 또는 독자적으로 만들 수 있으면, 어휘분석기가 아마도 문서를 스타일처리하는 가장 쉬운 방법일 것이다. 컨테이너를 사용하여 스타일 처리를 하기로 선택했다면 SCI_SETLEXER 명령어를 사용하여 NULL을 선택할 수 있다. 이 경우 텍스트를 보여주기 위해 스타일 처리할 필요가 있을 때마다 컨테이너에 SCN_STYLENEEDED 고지가 전송된다. 또다른 방법으로서, 쉬는 시간을 활용하여 문서를 스타일 처리할 수 있다. 구분분석기를 사용함에도 불구하고, 스타일 명령어를 사용하여 컴파일러가 탐지한 에러를 표식할 수도 있다. 다음 명령어들을 사용할 수 있다.

SCI_GETENDSTYLED → position
SCI_STARTSTYLING(int start, int unused)
SCI_SETSTYLING(int length, int style)
SCI_SETSTYLINGEX(int length, const char *styles)
SCI_SETIDLESTYLING(int idleStyling)
SCI_GETIDLESTYLING → int
SCI_SETLINESTATE(int line, int state)
SCI_GETLINESTATE(int line) → int
SCI_GETMAXLINESTATE → int

SCI_GETENDSTYLED → position
신틸라는 올바르게 스타일 처리될 가능성이 높은 마지막 문자를 기록 유지한다. 이 문자는 그 뒤의 문자들이 스타일 처리되면 앞으로 이동하고 그 앞의 문서 텍스트에 변화가 가해지면 거꾸로 이동한다. 텍스트를 그리기 전에, 이 위치를 스타일링이 필요한지 알아보기 위해 점검하고, 그렇다면 SCN_STYLENEEDED 고지 메시지가 컨테이너에게 전송된다. 컨테이너는 SCI_GETENDSTYLED를 보내 스타일 처리를 시작할 필요가 있는 곳에서 작업을 한다. 신틸라는 언제나 전체 줄들을 스타일 처리하도록 요구한다.

SCI_STARTSTYLING(int start, int unused)
스타일 처리를 시작할 위치 start를 설정해 스타일 처리 준비를 한다. unused 인자는 이전 버전에 사용됬지만 지금은 무시된다. SCI_STARTSTYLING 후에, 각 어휘 개체에 여러 SCI_SETSTYLING 메시지를 전송해 스타일 처리하거나 아니면SCI_SETSTYLINGEX를 전송해 블록 단위로 스타일 처리한다.

그리고 mask를 설정해 스타일 바이트에서 어느 비트가 설정될 수 있는지 지시한다. 마스크는 스타일이 여러 단계에 걸쳐서 일어나도록 해준다. 예를 들어 최초 단계에 기본 스타일처리를 해서 코드 텍스트가 빠르고 올바르게 보이도록 확인하고 , 다음 두 번째는 느린 단계로, 구문 에러를 탐지하고 표시자를 사용하여 에러의 위치를 보여준다. 예를 들어,5개의 스타일 비트와 3 개의 표시자 비트인 표준 설정이면, 텍스트 스타일을 설정하고 표시자를 바꾸고 싶지 않을 경우 mask 값을 31 (0x1f)로 사용한다.

SCI_SETSTYLING(int length, int style)
이 메시지는 스타일 위치에서 시작하여 문자 length개를 스타일 처리하고 스타일 위치를 length 만큼 늘려서, 다음 호출에 대비한다. 이 메시지를 호출하기 전에 먼저 SCI_STARTSTYLING를 호출해야 한다.

sCell이 스타일 바이트라면, 연산은 다음과 같다:
if ((sCell & mask) != style) sCell = (sCell & ~mask) | (style & mask);

SCI_SETSTYLINGEX(int length, const char *styles)
같은 스타일을 각 바이트에 적용하는 SCI_SETSTYLING의 대안으로서, 이 메시지를 사용할 수 있다. 스타일 위치부터 length개의 바이트마다 스타일을 지정하고 스타일 위치를 length만큼 늘려서, 다음 호출에 대비한다. 이 메시지를 호출하기 전에 먼저 SCI_STARTSTYLING를 호출해야 한다.

styles가 지정한 length 스타일 바이트는 마스크에 설정되지 않은 비트는 포함할 수 없다.

SCI_SETIDLESTYLING(int idleStyling)
SCI_GETIDLESTYLING → int
기본값으로 SC_IDLESTYLING_NONE (0)은 먼저 현재 보이는 모든 텍스트를 스타일 처리한 다음에 보여준다. 큰 파일이라면 이 때문에 스크롤이 느려질 수 있다. SC_IDLESTYLING_TOVISIBLE (1)이면 작은 양만 먼저 스타일 처리한 다음 보여주고 다음에 쉬는 시간을 이용해 배경에서 점진적으로 남은 스타일 처리를 한다. 이 결과로 텍스트는 처음에 색깔 없이 나타났다고, 잠시 후에, 색이 입혀진다. SC_IDLESTYLING_AFTERVISIBLE (2)이면 현재 보이는 부분 다음의 텍스트를 배경에서 스타일 처리한다. 텍스트를 보여주기 전과 후에 모두 배경에서 스타일 처리를 하려면SC_IDLESTYLING_ALL (3)를 사용하면 된다.

줄넘기기도 스타일 처리가 필요하고 역시 쉬는 시간을 이용하기 때문에, 이 설정은 문서가 줄넘기기 설정이 켜진 경우는 아무 효과가 없다.

SCI_SETLINESTATE(int line, int state)
SCI_GETLINESTATE(int line) → int
각 문자에 어휘 상태 8 비트가 저장되어 있고 더불어 각 줄에 정수가 저장되어 있다. ASP 페이지에서 현재 스크립트 언어가 무엇인지와 같이 오랫동안 지속되는 해석 상태에 이것을 사용할 수 있다. SCI_SETLINESTATE을 사용하여 정수 값을 설정하고 SCI_GETLINESTATE로 그 값을 얻는다. 값을 바꾸면 SC_MOD_CHANGELINESTATE 고지가 전송된다.

SCI_GETMAXLINESTATE → int
줄 상태가 있는 마지막 줄을 돌려준다.

스타일 정의

위에서 언급한 스타일 설정 메시지는 텍스트에 연관된 스타일 번호를 바꾼다. 이 메시지들은 어떻게 그런 스타일 번호가 시각적으로 해석되는지 정의한다. 256 개의 구문분석 스타일을 설정할 수 있다. 번호는 0부터 STYLE_MAX (255)까지 매겨진다.

SCI_SETSTYLEBITS를 사용하여 스타일 비트 번호를 바꾸지 않는 한, 0부터 31까지의 스타일은 텍스트 속성을 설정하는데 사용된다.
미리 정의된 스타일 번호는 32부터이다. 다음 STYLE_* 상수들이 정의되어 있다.

STYLE_DEFAULT 32 이 스타일은 SCI_STYLECLEARALL 메시지가 사용될 때 모든 스타일이 받는 속성을 정의한다.
STYLE_LINENUMBER 33 이 스타일은 여백에 줄 번호를 보여주는데 사용된 텍스트의 속성을 설정한다. 또한 이 스타일에 설정된 배경색은 접기 마스크 비트가 설정되어 있지 않은 모든 여백에도 설정된다. 다시 말해, mask & SC_MASK_FOLDERS 처리한 여백은 0이다. 마스크에 관한 더 자세한 정보는 SCI_SETMARGINMASKN를 참조.
STYLE_BRACELIGHT 34 이 스타일에서 설정하는 속성은 SCI_BRACEHIGHLIGHT 메시지로 괄호를 강조할 때 사용되고 그리고 그에 상응하는 들여쓰기를 SCI_SETHIGHLIGHTGUIDE로 강조할 때 사용된다.
STYLE_BRACEBAD 35 이 스타일은 SCI_BRACEBADLIGHT 메시지로 짝이 맞지 않는 괄호를 표식할 때 사용되는 화면 속성을 설정한다.
STYLE_CONTROLCHAR 36 이 스타일은 제어 문자를 그릴 때 사용되는 글꼴을 설정한다. 오직 글꼴, 크기, 강조, 이탤릭, 그리고 문자 집합 속성만 사용되며 색깔 속성은 사용되지 않는다. 다음도 참조: SCI_SETCONTROLCHARSYMBOL.
STYLE_INDENTGUIDE 37 이 스타일은 들여쓰기 가이드를 그릴 때 사용되는 배경색과 전경색을 설정한다.
STYLE_CALLTIP 38 콜팁은 보통 STYLE_DEFAULT에 정의된 글꼴 속성을 사용한다. SCI_CALLTIPUSESTYLE을 사용하면 콜팁이 대신 이 스타일을 사용한다. 오직 글꼴 이름, 글꼴 크기, 전경색과 배경색 그리고 문자 집합 속성만 사용된다.
STYLE_FOLDDISPLAYTEXT 39 접어서 보여주는 텍스트에 붙는 텍스트 태그를 그리는데 사용되는 스타일이다.
STYLE_LASTPREDEFINED 39 미리 정의된 스타일 범위를 클라이언트 코드가 더 쉽게 알아내도록 하기 위해 사용된다. 미리정의된 마지막 스타일의 번호가 설정된다.
STYLE_MAX 255 이것은 스타일이 아니라 설정할 수 있는 최대 스타일 번호이다.
SCI_SETSTYLEBITS를 사용하여 5 가지 이상의 스타일 비트를 설정했다면
STYLE_LASTPREDEFINEDSTYLE_MAX 사이의 스타일을 사용하는 것이 좋다.

각 스타일에 대하여 글꼴 이름, 크기와 볼드의 사용, 이탤릭과 밑줄, 배경색과 전경색 그리고 문자 집합을 설정할 수 있다. 텍스트를 주어진 스타일로 가릴 수도 있고, 모든 문자들을 대문자나 소문자로 보여줄 수 있으며 한 줄에서 그 마지막 문자부터 줄 끝까지 채울 수 있다 (임베드 언어용). 텍스트를 읽기-전용으로 만드는 실험적인 속성이 하나 있다.

어떻게 스타일을 사용할지는 전적으로 여러분의 몫이다. 구문 색깔 입히기를 사용하고 싶다면 스타일 0을 공간 문자에, 스타일 1을 숫자에, 스타일 2는 키워드에, 스타일 3은 문자열, 스타일 4는 전처리기, 스타일 5는 연산자 등등에 설정할 수 있다.

SCI_STYLERESETDEFAULT
SCI_STYLECLEARALL
SCI_STYLESETFONT(int style, const char *fontName)
SCI_STYLEGETFONT(int style, char *fontName) → int
SCI_STYLESETSIZE(int style, int sizePoints)
SCI_STYLEGETSIZE(int style) → int
SCI_STYLESETSIZEFRACTIONAL(int style, int sizeHundredthPoints)
SCI_STYLEGETSIZEFRACTIONAL(int style) → int
SCI_STYLESETBOLD(int style, bool bold)
SCI_STYLEGETBOLD(int style) → bool
SCI_STYLESETWEIGHT(int style, int weight)
SCI_STYLEGETWEIGHT(int style) → int
SCI_STYLESETITALIC(int style, bool italic)
SCI_STYLEGETITALIC(int style) → bool
SCI_STYLESETUNDERLINE(int style, bool underline)
SCI_STYLEGETUNDERLINE(int style) → bool
SCI_STYLESETFORE(int style, colour fore)
SCI_STYLEGETFORE(int style) → colour
SCI_STYLESETBACK(int style, colour back)
SCI_STYLEGETBACK(int style) → colour
SCI_STYLESETEOLFILLED(int style, bool eolFilled)
SCI_STYLEGETEOLFILLED(int style) → bool
SCI_STYLESETCHARACTERSET(int style, int characterSet)
SCI_STYLEGETCHARACTERSET(int style) → int
SCI_STYLESETCASE(int style, int caseVisible)
SCI_STYLEGETCASE(int style) → int
SCI_STYLESETVISIBLE(int style, bool visible)
SCI_STYLEGETVISIBLE(int style) → bool
SCI_STYLESETCHANGEABLE(int style, bool changeable)
SCI_STYLEGETCHANGEABLE(int style) → bool
SCI_STYLESETHOTSPOT(int style, bool hotspot)
SCI_STYLEGETHOTSPOT(int style) → bool
SCI_STYLESETCHECKMONOSPACED(int style, bool checkMonospaced)
SCI_STYLEGETCHECKMONOSPACED(int style) → bool
SCI_STYLESETINVISIBLEREPRESENTATION(int style, const char *representation)
SCI_STYLEGETINVISIBLEREPRESENTATION(int style, char *representation NUL-terminated) → int
SCI_SETFONTLOCALE(<unused>, const char *localeName)
SCI_GETFONTLOCALE(<unused>, char *localeName) → int
SCI_SETFONTLOCALE(<unused>, const char *localeName)
SCI_GETFONTLOCALE(<unused>, char *localeName) → int

SCI_STYLERESETDEFAULT
이 메시지는 STYLE_DEFAULT을 신틸라가 초기화될 때의 상태로 재설정한다.

SCI_STYLECLEARALL
이 메시지는 모든 스타일이 STYLE_DEFAULT와 같은 속성을 갖도록 설정한다. 신틸라가 구문에 색깔을 입히도록 설정하고 있다면, 여러분이 설정하는 구문 스타일이 매우 비슷할 가능성이 높다. 스타일을 설정하는 한 가지 방법은:
1. STYLE_DEFAULT에 모든 스타일에 대한 공통적인 특징을 설정한다.
2. SCI_STYLECLEARALL를 사용하여 이것을 모든 스타일에 복사한다.
3. 구문 스타일을 다르게 만드는 스타일 속성을 설정한다.

SCI_STYLESETFONT(int style, const char *fontName)
SCI_STYLEGETFONT(int style, char *fontName NUL-terminated) → int
SCI_STYLESETSIZE(int style, int sizePoints)
SCI_STYLEGETSIZE(int style) → int
SCI_STYLESETSIZEFRACTIONAL(int style, int sizeHundredthPoints)
SCI_STYLEGETSIZEFRACTIONAL(int style) → int
SCI_STYLESETBOLD(int style, bool bold)
SCI_STYLEGETBOLD(int style) → bool
SCI_STYLESETWEIGHT(int style, int weight)
SCI_STYLEGETWEIGHT(int style) → int
SCI_STYLESETITALIC(int style, bool italic)
SCI_STYLEGETITALIC(int style) → bool
(SCI_STYLESETCHARACTERSET와 함께) 이 메시지들은 글꼴 속성을 설정한다. 요구한 글꼴을 사용가능한 글꼴과 일치시키는데 사용된다. fontName은 0 종료 문자열로서 글꼴의 이름을 가지고 있다. 윈도우즈에서는 오직 이름의 앞쪽 32 문자만 사용된다. 이름은 UTF-8로 디코드 되며 대소문자를 구분하지 않는다. 내부 캐쉬를 위해, 신틸라는 글꼴을 이름으로 추적하고 글꼴 이름의 대소문자를 알아서 처리한다. 그래서 일관성을 유지하기를 바란다. GTK에서, Pango를 사용하여 텍스트를 화면에 보여주며 글꼴 이름은 변환없이 곧바로 팡고에 전송된다. Pango는 텍스트를 안티앨리어스 처리하고, 유니코드와 잘 작동하며 최신 버전의 GTK를 더 잘 지원하지만 GDK가 더 빠르다. '!' 문자를 글꼴 이름 앞에 두면 Pango를 사용한다.

Qt에서 글꼴이름은 UTF-8로 디코드된다. 코코아에서 글꼴 이름은 MacRoman으로 디코드된다.

크기는 SCI_STYLESETSIZE로 전체 점의 개수로 설정하거나 SCI_STYLESETSIZEFRACTIONAL로 1 포인트를 100으로 나눈 분수 포인트 크기로 설정한다. 크기를 100으로 나누면 된다 (SC_FONT_SIZE_MULTIPLIER) . 예를 들어, 9.4 포인트의 텍스트 크기는 SCI_STYLESETSIZEFRACTIONAL(<style>, 940)으로 설정한다.

글꼴의 두께나 무게는 SCI_STYLESETBOLD이나 SCI_STYLESETWEIGHT으로 설정한다. 무게(weight)는 1과 999사이의 숫자로서 1이면 아주 가볍고 999면 매우 무겁다. 어떤 값이든 사용할 수 있지만, 글꼴은 종종 2와 4사이의 무게만을 지원할 경우도 있다. 무게가 3이면 보통 심볼 이름을 가지는데 충분하다: SC_WEIGHT_NORMAL (400)과 SC_WEIGHT_SEMIBOLD (600), 그리고 SC_WEIGHT_BOLD (700). SCI_STYLESETBOLD 메시지는 불리언 인자를 취한다. 0이면 SC_WEIGHT_NORMAL를 선택한 것이고 1이면 SC_WEIGHT_BOLD을 선택한다.

SCI_STYLESETUNDERLINE(int style, bool underline)
SCI_STYLEGETUNDERLINE(int style) → bool
스타일에 밑줄을 긋도록 설정할 수 있다. 밑줄은 전경색으로 그려진다. 밑줄 속성이 들어있는 스타일로 그려지는 모든 문자는 공간문자라고 할지라도 밑줄이 그려진다.

SCI_STYLESETFORE(int style, colour fore)
SCI_STYLEGETFORE(int style) → colour
SCI_STYLESETBACK(int style, colour back)
SCI_STYLEGETBACK(int style) → colour
텍스트는 전경색으로 그려진다. 점유되지 않은 각 문자 셀 사이의 공간은 배경색으로 그려진다.

SCI_STYLESETEOLFILLED(int style, bool eolFilled)
SCI_STYLEGETEOLFILLED(int style) → bool
줄에서 마지막 문자가 이 속성이 설정된 스타일을 가지고 있으면, 창의 오른쪽 끝까지 줄의 나머지는 그 마지막 문자의 배경색으로 채워진다. 예를 들어 HTML 페이지에 JavaScript가 임베드되어 있을 경우와 같이, 문서에 또다른 언어로 임베드된 구역이 있을 경우에 유용하다. eolFilledtrue로 설정하고 일관된 배경색을 (HTML 스타일에 설정된 배경색과 다르게) 모든 JavaScript 스타일에 설정하면 JavaScript 구역은 쉽게 HTML과 구분된다.

SCI_STYLESETCHARACTERSET(int style, int characterSet)
SCI_STYLEGETCHARACTERSET(int style) → int
기본 말고 다른 문자 집합을 사용하도록 스타일을 설정할 수 있다. 그런 문자 집합이 유용할 만한 곳은 주해와 기호상수 문자열일 것이다. 예를 들어, SCI_STYLESETCHARACTERSET(SCE_C_STRING, SC_CHARSET_RUSSIAN)는 러시아어 문자열이 올바르게 C와 C++에 나타나도록 해준다(SCE_C_STRING은 C와 C++ 어휘분석기가 기호상수 문자열을 화면에 보여주는데 사용되는 스타일 번호이다; 값은 6이다). 이 특징은 윈도우즈와 GTK에서 서로 다르게 작동한다.
기본 문자 집합은 SC_CHARSET_DEFAULT이다.

SC_CHARSET_ANSISC_CHARSET_DEFAULT은 코드 페이지가 설정되어 있지 않을 경우 유럽 윈도우즈 코드 페이지 1252가 지정된다.

Character Set Windows GTK Cocoa
SC_CHARSET_ANSI ✓ (8859-1)
SC_CHARSET_ARABIC
SC_CHARSET_BALTIC
SC_CHARSET_CHINESEBIG5
SC_CHARSET_DEFAULT ✓ (8859-1) ✓ (8859-1)
SC_CHARSET_EASTEUROPE
SC_CHARSET_GB2312
SC_CHARSET_GREEK
SC_CHARSET_HANGUL
SC_CHARSET_HEBREW
SC_CHARSET_JOHAB
SC_CHARSET_MAC
SC_CHARSET_OEM
SC_CHARSET_RUSSIAN ✓ (cp1251) ✓ (koi8-r) ✓ (cp1251)
SC_CHARSET_SHIFTJIS
SC_CHARSET_SYMBOL
SC_CHARSET_THAI
SC_CHARSET_TURKISH
SC_CHARSET_VIETNAMESE
SC_CHARSET_OEM866 ✓ (cp866)
SC_CHARSET_CYRILLIC ✓ (cp1251) ✓ (cp1251)
SC_CHARSET_8859_15

SCI_STYLESETCASE(int style, int caseVisible)
SCI_STYLEGETCASE(int style) → int
caseVisible의 값은 어떻게 텍스트가 화면에 보일지 결정한다. 대문자로 설정하거나 (SC_CASE_UPPER, 1) 또는 소문자로 설정하거나 (SC_CASE_LOWER, 2) 또는 낙타등 스타일 (SC_CASE_CAMEL, 3) 아니면 그냥 있는 그대로 보여줄 수 있다 (SC_CASE_MIXED, 0). 저장된 텍스트는 건드리지 않는다. 오직 화면에 보여주는 방식만 바꾼다.

SCI_STYLESETVISIBLE(int style, bool visible)
SCI_STYLEGETVISIBLE(int style) → bool
텍스트는 보통 보인다. 그렇지만, 스타일에 visible을 0으로 설정하면 완전히 감출 수 있다. 이것은 임베드 포맷팅 명령어를 감추거나 HTML이나 XML에서 하이퍼텍스트 키워드를 감추는데 사용할 수 있다. 보이지 않는 텍스트는 사용자가 삭제할 수 없지만 어플리케이션에서 SCI_DELETERANGE를 호출하면 지울 수 있다.

SCI_STYLESETCHANGEABLE(int style, bool changeable)
SCI_STYLEGETCHANGEABLE(int style) → bool
실험적이며 불완전하게 구현된 스타일 속성이다. 기본 설정은 changeabletrue이지만 false로 설정하면 텍스트를 읽기-전용으로 만든다.

현재는 캐럿이 변경 불가능 텍스트 안에 있지 못하도록 막을 뿐이다. 아직 변경 불가능 텍스트가 포함된 범위를 삭제하는 것은 막지 못한다.
사용자는 변경-불능 텍스트 안에서 캐럿을 이동시킬 수 없다. 그러므로 사용자는 지울 수 없다. 하지만 어플리케이션에서 SCI_DELETERANGE를 호출하면 삭제할 수 있다.

SCI_STYLESETHOTSPOT(int style, bool hotspot)
SCI_STYLEGETHOTSPOT(int style) → bool
이 스타일은 마우스 클릭을 탐지할 수 있는 텍스트 범위를 표식하는데 사용된다. 커서는 집화점마다 손모양으로 바뀐다. 그리고 전경색과 배경색이 바뀔 수 있다. 그리고 이런 구역이 마우스 클릭에 민감하다는 사실을 알리기 위해 밑줄이 보여진다. 이 특징은 다른 문서로의 하이퍼링크를 허용하는데 사용할 수도 있다.

SCI_STYLESETCHECKMONOSPACED(int style, bool checkMonospaced)
SCI_STYLEGETCHECKMONOSPACED(int style) → bool
이 속성은 ASCII 문자 (다음 ' ' … '~', 기호('a'…'z', 'A'…'Z') 와 숫자('0'…'9')를 포함 )에 대하여 글꼴이 고정폭 글꼴일 수 있음을 지시한다. 이 설정으로 순수하게 ASCII 문자로 구성된 문자들에 대한 시나리오에 사용될 메모리와 처리 속도를 최적화할 수 있다.

글꼴이 모든 문자에 대하여 고정폭인 경우는 드물다. '😃이모지'나 'ش아랍문자' 또는 '漢한자'는 로만 문자들과 폭이 다른 경우가 많다. 글꼴이 고정폭으로 디자인되어 있을지라도, 모든 문자가 화면에 보여지는 것은 아니며 플랫폼에 따라 없는 문자는 다른 글꼴로 대체될 수 있으며 차지하는 폭이 넓을 수도 좁을 수도 있다. 그렇지만, 글꼴은 ASCII 텍스트에 대해서는 (제어 문자를 무시하면) 고정폭이 거의 확실하고 많은 문서들은 대부분 ASCII 문자를 담고 있다. 이 설정이면 순수하게 ASCII 문자열로 구성된 텍스트의 배열할 때 위치 계산이 간단하다.

글꼴을 고정폭으로 처리하기 전에 먼저 ' ' … '~' 범위를 점검하고 커닝이나 리거처 때문에 폭이 다른 문자들이 조합되어 있지는 않은지 점검해야 한다. 어플리케이션은 'check monospaced' 속성을 고정폭을 알려진 글꼴이나 아니면 모든 폰트에 그냥 적용하고 나머지는 신틸라에 맡겨서 비례폭인 글꼴을 거부하도록 하면 된다.

SCI_STYLESETINVISIBLEREPRESENTATION(int style, const char *representation)
SCI_STYLEGETINVISIBLEREPRESENTATION(int style, char *representation NUL-terminated) → int
스타일이 SCI_STYLESETVISIBLE로 안보이면, 텍스트를 편집하기가 어렵다. 커서가 비가시 텍스트 구역 양쪽에 나타날 수 있기 때문이다. 이 메시지들로 비가시 텍스트 구역을 단일 UTF8 문자로 보이도록 만들 수 있다. 그러면 사용자는 커서가 왼쪽에 있는지 오른쪽에 있는지 볼 수 있다. 문자는 현재 스타일을 사용하여 보여진다.

representation 매개변수는 비가시 텍스트 구역을 대표하는 문자 하나를 담고 있고 0으로 끝나는 문자열이다. 첫 문자만 사용되고 UTF-8로 디코그된다.

SCI_SETFONTLOCALE(<unused>, const char *localeName)
SCI_GETFONTLOCALE(<unused>, char *localeName NUL-terminated) → int
언어에-독립적인 클리프로 폰트를 선택하는데 사용되는 로케일을 설정한다. 플랫폼이나 기타 등등의 환경 대문에 텍스트를 보여주는 데 영향을 받을 수 있다. 그래서 번체 중국어에서 "zh-Hant"로 포현되는 것이. 간체 중국어로는 "zh-Hans"로 표시될 수도 있다. 현재는 Win32에 대해서만 DirectWrite를 사용하여 구현되어 있다. 값은 CreateTextFormat에다 localeName 인자로 건넨다. 기본 값은 영어 "en-us"이다.

엘리먼트 색깔

시각적 요소의 색갈은 다음 메쏘드로 바꿀 수 있다. 시각적 요소들은 시스템 또는 신틸레에서 정의된 기본값이 있을 수 있다. 일군의 색깔이 있을 수 있는데 한 요소의 색을 변경하면 이런 새깔들을 덮어 쓴다.

SCI_SETELEMENTCOLOUR(int element, colouralpha colourElement)
SCI_GETELEMENTCOLOUR(int element) → colouralpha
SCI_RESETELEMENTCOLOUR(int element)
SCI_GETELEMENTISSET(int element) → bool
SCI_GETELEMENTALLOWSTRANSLUCENT(int element) → bool
SCI_GETELEMENTBASECOLOUR(int element) → colouralpha

SCI_SETELEMENTCOLOUR(int element, colouralpha colourElement)
SCI_GETELEMENTCOLOUR(int element) → colouralpha
지정된 시각적 요소의 색을 바꾼다. 현재 색을 덮어 쓴다. 요소가 투명도를 지원하면, 알파 부분을 사용할 수 있다. 불투명의 색을 원하면 알파 값(0xff)을 주어야 하고 0으로 설정하면 완전하게 투명하다.

SCI_RESETELEMENTCOLOUR(int element)
요소의 색을 제거하고 기본 값을 돌려주거나 설정한다.

SCI_GETELEMENTISSET(int element) → bool
요소의 색이 설정되면 참을 돌려준다. 거짓을 돌려주면 기본 색깔이 표시된다는 뜻이다.

SCI_GETELEMENTALLOWSTRANSLUCENT(int element) → bool
요소가 현재 투명도 그리기를 허용하면 참을 돌려준다. 환경에 따라 달라질 수 있다 - 플랫폼마다 그래픽 테크놀로지마다 투명도를 다르게 구현하고 있기 때문인데, 지원하지 않는 기능은 새로운 버전의 신틸라에서 구현할 수도 있다.

SCI_GETELEMENTBASECOLOUR(int element) → colouralpha
요소의 기본 색을 돌려준다. 신틸라가 정의한 값일 수도 있고 운영체제나 플랫폼에서 기인한 값일 수도 있다. 어떤 값이 운영체제로부터 설정되는 지는 버전마다 다르다. 정의되어 있지 않으면 0을 돌려주는데 이 값은 완전히 투명한 검정색과 같다. 이 값들은 비슷한 스타일을 정의할 때 좋은데, 에를 들어 시스템과 같은 색을 사용하는 다크 모드 스타일을 조율할 수 있다.

Win32에서는 SC_ELEMENT_LIST와 같이 자동완성 리스트 색을 사용할 수 있다. Cocoa에서는 SC_ELEMENT_SELECTION_BACK와 같이 선택 배경색을 사용할 수 있다.

SC_ELEMENT_* 투명도 지원? 활성화 기본 설명
SC_ELEMENT_LIST 0 Opaque Win32 Win32 자동완성 리스트의 텍스트 색
SC_ELEMENT_LIST_BACK 1 불투명 Win32 Win32 자동완성 리스트의 배경색
SC_ELEMENT_LIST_SELECTED 2 불투명 Win32 Win32 자동완성 리스트에서 선택된 항목의 텍스트 색
SC_ELEMENT_LIST_SELECTED_BACK 3 불투명 Win32 Win32 자동완성 리스트에서 선택된 항목의 배경색
SC_ELEMENT_SELECTION_TEXT 10 투명 All 메인 선택의 텍스트 색
SC_ELEMENT_SELECTION_BACK 11 투명 All Cocoa 주 선택의 배경색
SC_ELEMENT_SELECTION_ADDITIONAL_TEXT 12 투명 All 추가 선택의 텍스트 색
SC_ELEMENT_SELECTION_ADDITIONAL_BACK 13 투명 All Cocoa 추가 선택의 배경색
SC_ELEMENT_SELECTION_SECONDARY_TEXT 14 투명 All 다른 창에 주 선택이 있을 때 선택 텍스트의 색
SC_ELEMENT_SELECTION_SECONDARY_BACK 15 투명 All 다른 창에 주 선택이 있을 때 선택 텍스트의 배경색
SC_ELEMENT_SELECTION_NO_FOCUS_TEXT 16 투명 All 다른 창에 초점이 있을 때 선택 텍스트의 색
SC_ELEMENT_SELECTION_INACTIVE_BACK 17 투명 All 다른 창에 초점이 있을 때 선택의 배경색
SC_ELEMENT_CARET 40 투명 All 주 선택의 캐럿 색
SC_ELEMENT_CARET_ADDITIONAL 41 투명 All 추가 선택의 캐럿 색
SC_ELEMENT_CARET_SECONDARY 42 투명 All 다른 창에 초점이 있을 때의 캐럿 색
SC_ELEMENT_CARET_LINE_BACK 50 투명 All 캐럿 줄의 배경색
SC_ELEMENT_WHITE_SPACE 60 투명 All 공백 색깔
SC_ELEMENT_WHITE_SPACE_BACK 61 불투명 All 공백의 배경색
SC_ELEMENT_HOT_SPOT_ACTIVE 70 투명 All 활성 집화점의 텍스트 색
SC_ELEMENT_HOT_SPOT_ACTIVE_BACK 71 불투명 All 활성 집화점의 배경색
SC_ELEMENT_FOLD_LINE 80 투명 All 접기줄의 색
SC_ELEMENT_HIDDEN_LINE 81 투명 All 해당 지점에 숨은 줄이 있다는 표시의 줄 색

캐럿, 선택, 그리고 집화점(hotspot) 스타일

선택하면 배경색과 전경색을 바꾸어서 보여준다. 이 중에 하나가 설정되어 있지 않으면 그 속성은 선택에 대하여 변하지 않는다. 기본값은 배경색을 바꾸고 전경색은 선택되지 않았을 때와 똑 같이 그대로 두고 선택을 보여주는 것이다. 선택이 없으면, 현재 삽입 지점이 텍스트 캐럿에 의하여 표식된다. 이것은 수직 줄로서 보통 사용자의 주의를 끌기 위해 깜박거린다.

대부분의 플랫폼에서, 선택의 배경색으로 회색이 사용되지만, macOS에서는 시스템에 정의된 배경색이 사용된다. 어플리케이션은 API를 호출해 색을 바꿀 수 있다.

SC_ELEMENT_SELECTION_TEXT : colouralpha
SCI_SETSELFORE(bool useSetting, colour fore)
SC_ELEMENT_SELECTION_BACK : colouralpha
SCI_SETSELBACK(bool useSetting, colour back)
SCI_SETSELECTIONLAYER(int layer)
SCI_GETSELECTIONLAYER → int
SCI_SETSELALPHA(alpha alpha)
SCI_GETSELALPHA → int
SCI_SETSELEOLFILLED(bool filled)
SCI_GETSELEOLFILLED → bool

SC_ELEMENT_CARET : colouralpha
SCI_SETCARETFORE(colour fore)
SCI_GETCARETFORE → colour

SC_ELEMENT_SELECTION_SECONDARY_TEXT : colouralpha
SC_ELEMENT_SELECTION_SECONDARY_BACK : colouralpha
SC_ELEMENT_CARET_SECONDARY : colouralpha

SC_ELEMENT_SELECTION_INACTIVE_TEXT : colouralpha
SC_ELEMENT_SELECTION_INACTIVE_BACK : colouralpha

SC_ELEMENT_CARET_LINE_BACK : colouralpha
SCI_SETCARETLINELAYER(int layer)
SCI_GETCARETLINELAYER → int
SCI_SETCARETLINEVISIBLE(bool show)
SCI_GETCARETLINEVISIBLE → bool
SCI_SETCARETLINEBACK(colour back)
SCI_GETCARETLINEBACK → colour
SCI_SETCARETLINEBACKALPHA(alpha alpha)
SCI_GETCARETLINEBACKALPHA → int
SCI_SETCARETLINEVISIBLEALWAYS(bool alwaysVisible)
SCI_GETCARETLINEVISIBLEALWAYS → bool
SCI_SETCARETLINEHIGHLIGHTSUBLINE(bool subLine)
SCI_GETCARETLINEHIGHLIGHTSUBLINE → bool

SCI_SETCARETPERIOD(int periodMilliseconds)
SCI_GETCARETPERIOD → int
SCI_SETCARETSTYLE(int caretStyle)
SCI_GETCARETSTYLE → int
SCI_SETCARETWIDTH(int pixelWidth)
SCI_GETCARETWIDTH → int
SCI_SETCARETSTICKY(int useCaretStickyBehaviour)
SCI_GETCARETSTICKY → int
SCI_TOGGLECARETSTICKY

SC_ELEMENT_HOT_SPOT_ACTIVE : colouralpha
SCI_SETHOTSPOTACTIVEFORE(bool useSetting, colour fore)
SCI_GETHOTSPOTACTIVEFORE → colour
SC_ELEMENT_HOT_SPOT_ACTIVE_BACK : colouralpha
SCI_SETHOTSPOTACTIVEBACK(bool useSetting, colour back)
SCI_GETHOTSPOTACTIVEBACK → colour
SCI_SETHOTSPOTACTIVEUNDERLINE(bool underline)
SCI_GETHOTSPOTACTIVEUNDERLINE → bool
SCI_SETHOTSPOTSINGLELINE(bool singleLine)
SCI_GETHOTSPOTSINGLELINE → bool

SC_ELEMENT_SELECTION_TEXT : colouralpha
SCI_SETSELFORE(bool useSetting, colour fore)
SC_ELEMENT_SELECTION_BACK : colouralpha
SCI_SETSELBACK(bool useSetting, colour back)
이 메시지들과 엘리먼트로 기본 선택을 오버라이드할지 선택할 수 있다. element API가 더 좋다. 투명도와 레이어링을 처리할 수 있으며 기본 값과 더 협력을 잘한다. 메시지로 useSettingtrue로 설정하면 제공한 색이 사용된다. false로 설정하면, 기본 스타일 색이 사용되고 foreback 인자는 아무 효과가 없다.

SCI_SETSELECTIONLAYER(int layer)
SCI_GETSELECTIONLAYER → int
선택 배경은 기본 레이어의 텍스트 위에 투명하게 또는 불투명하게 그릴 수 있다. layer 인자는 다음 중 하나가 될 수 있다:

SC_LAYER_BASE 0 기본 레이어 위에 선택 배경을 불투명하게 그린다.
SC_LAYER_UNDER_TEXT. 1 텍스트 아래에 투명하게 선택 배경을 그린다.
단일 단계 그리기 모드에서는 작동하지 않는다 (SC_PHASES_ONE). 텍스트 아래 단계가 없기 때문이다.
SC_LAYER_OVER_TEXT 2 선택 배경을 텍스트 위에 투명하게 그린다.

SCI_SETSELALPHA(alpha alpha)
SCI_GETSELALPHA → int
이 API는 이제 추천되지 않으며 SCI_SETSELECTIONLAYER로 레이어를 설정하고 SC_ELEMENT_SELECTION_BACK로 투명도를 설정하는 방식이 더 좋다.

SCI_SETSELEOLFILLED(bool filled)
SCI_GETSELEOLFILLED → bool
이 특성을 설정하면 선택을 오른쪽 경계까지 그릴 수 있다.

SC_ELEMENT_CARET : colouralpha
SCI_SETCARETFORE(colour fore)
SCI_GETCARETFORE → colour
캐럿의 색은 SCI_SETELEMENTCOLOUR(SC_ELEMENT_CARET)이나 SCI_SETCARETFORE으로 설정하고 SCI_GETELEMENTCOLOUR(SC_ELEMENT_CARET)이나 SCI_GETCARETFORE로 열람할 수 있다. 엘리먼트 API가 더 좋다. 캐럿을 투명하게 설정할 수 있기 때문이다.

SC_ELEMENT_SELECTION_SECONDARY_TEXT : colouralpha
SC_ELEMENT_SELECTION_SECONDARY_TEXT : colouralpha
SC_ELEMENT_CARET_SECONDARY : colouralpha
X 윈도우나 Wayland가 실행되는 유닉스 시스템는 '프라이머리 선택'이 있다. 이것은 어플리케이션에서 최근에 선택된 텍스트로서 가운데 버튼을 클릭하면 붙여넣을 수 있다. 선택 작업이라면, 보통 프라이머리 선택이다. 그래서 신틸라는 이전에 정의된 추가 색깔들과 메인 색으로 프라이머리 선택을 그린다. 다른 어플리케이션이 그 프라이머리 선택을 넘겨 받을 때, 이런 _SECONDARY 색이 사용된다. 일반적으로 다른 어플리케이션에서 선택이 이제 프라이머리 선택이 되었다는 것을 강조하기 위해 회색으로 정의된다.

SC_ELEMENT_SELECTION_INACTIVE_TEXT : colouralpha
SC_ELEMENT_SELECTION_INACTIVE_BACK : colouralpha
창이 키보드 초점을 소유하지 않으면, 관례적으로 회색으로 칠해 선택임을 좀 흐리게 만든다. 다음 요소들은 초점없는 선택을 표시하기 위한 색을 정의한다.

SC_ELEMENT_CARET_LINE_BACK : colouralpha
SCI_SETCARETLINELAYER(int layer)
SCI_GETCARETLINELAYER → int
캐럿 줄의 배경색을 다르게 바꿀 수 있다. SC_ELEMENT_CARET_LINE_BACK 요소를 SCI_SETELEMENTCOLOUR(SC_ELEMENT_CARET_LINE_BACK)으로 설정하면 된다. 이렇게 하면 텍스트 위에 투명하게 그릴 수 있다. 아니면 SCI_SETCARETLINELAYER로 기본 레이어 위에 불투명하게 그릴 수 있다. 배경색은 줄에 표식자가 있으면 최우선 순위를 가진다. 표식자가 없다면 배경색이 바뀔 수 있다. 투명하게 그리면 다른 배경색은 비쳐 보일 수 있다. layer 인자는 다음 중 하나가 될 수 있다:

SC_LAYER_BASE 0 캐럿 줄의 배경을 기본 레이어 위에 투명하게 그린다.
SC_LAYER_OVER_TEXT 10 캐럿 줄의 배경을 텍스트 위에 불투명하게 그린다.

SCI_SETCARETLINEVISIBLE(bool show)
SCI_GETCARETLINEVISIBLE → bool
SCI_SETCARETLINEBACK(colour back)
SCI_GETCARETLINEBACK → colour
SCI_SETCARETLINEBACKALPHA(alpha alpha)
SCI_GETCARETLINEBACKALPHA → int
이 API는 비권장한다. 이전 섹션에 언급된 SC_ELEMENT_CARET_LINE_BACK 요소를 사용하는 것이 더 좋다.
캐럿이 있는 줄의 배경색을 이 메시지로 다르게 만들 수 있다. 이렇게 하려면, 원하는 배경색을 SCI_SETCARETLINEBACK으로 설정한 다음, SCI_SETCARETLINEVISIBLE(true)를 사용하여 효과를 주면 된다. SCI_SETCARETLINEVISIBLE(false)로 그 효과를 취소할 수 있다. 두 개의SCI_GETCARET* 함수는 상태와 색을 돌려준다. 이런 형식으로 배경색을 칠하는 것이 그렇지 않았으면 배경색을 바꾸었을 표식이 줄에 있을 때 우선 순위가 제일 높다. 캐럿 줄은 투명하게 그릴 수 있다. 그러면 다른 배경색이 통과해서 보일 수 있다. 이렇게 하려면 SCI_SETCARETLINEBACKALPHA를 호출하여 알파값 (투명도)을 설정하면 된다. 알파가 SC_ALPHA_NOALPHA가 아니라면, 캐럿 줄은 다른 모든 특징들 뒤에 그려진다. 그래서 다른 모든 특징의 색에 영향을 미친다.

SCI_SETCARETLINEFRAME(int width)
SCI_GETCARETLINEFRAME → int
SCI_SETCARETLINEFRAME을 사용하면 전체 배경을 채우는 대신에 캐럿 줄을 둘러싸서 보여줄 수 있다. 너비를 설정하면 이 옵션이 활성화되고 0으로 설정하면 비활성화된다.

SCI_SETCARETLINEVISIBLEALWAYS(bool alwaysVisible)
SCI_GETCARETLINEVISIBLEALWAYS → bool
캐럿 줄이 항상 창에 초점이 없을지라도 보이도록 만든다. 기본 행위SCI_SETCARETLINEVISIBLEALWAYS(false)는 캐럿 줄이 창에 초점이 있을 경우에만 보인다.

SCI_SETCARETLINEHIGHLIGHTSUBLINE(bool subLine)
SCI_GETCARETLINEHIGHLIGHTSUBLINE → bool
전체 줄이 아니라 캐럿이 있는 줄만 강조할지 선택한다. SCI_SETCARETLINEHIGHLIGHTSUBLINE(false)의 기본행위는 전체 캐럿 줄이 강조된다. +

SCI_SETCARETPERIOD(int periodMilliseconds)
SCI_GETCARETPERIOD → int
캐럿이 깜박이는 비율은 SCI_SETCARETPERIOD로 설정하며 캐럿이 상태를 바꾸기 전에 보이거나 보이지 않는 시간을 밀리초로 결정한다. 기간을 0으로 설정하면 캐럿이 깜박이기를 멈춘다. 기본 값은 500밀리초이다. SCI_GETCARETPERIOD는 현재 설정을 돌려준다.

SCI_SETCARETSTYLE(int caretStyle)
SCI_GETCARETSTYLE → int
캐럿 스타일은 SCI_SETCARETSTYLE로 설정한다. 삽입 모드의 기본 값은 줄 캐럿 (CARETSTYLE_LINE=1) 또는 바 캐럿과(CARETSTYLE_OVERSTRIKE_BAR=0) 조합한 블록 캐럿이다 (CARETSTYLE_BLOCK=2) (하위 4-비트, CARETSTYLE_INS_MASK). 수정 모드의 기본값은 블록 캐럿 (CARETSTYLE_OVERSTRIKE_BLOCK=16) (4번 비트)이다. 그리고 커시스 모드는 5번 비트에 설정한다. . 현재 캐럿 스타일 설정은 SCI_GETCARETSTYLE을 사용하여 알 수 있다.

블록 캐럿이 한 범위의 끝에 위치하면 선택 다음이 아니라 선택 안에 그려진다. 이 행위는 옵션으로 (CARETSTYLE_BLOCK_AFTER=256) 바꿀 수 있다.

CARETSTYLE_INVISIBLE 0 캐럿을 전혀 그리지 않는다.
CARETSTYLE_LINE 1 세로 줄로 삽입 캐럿을 그린다. 기본값이다.
CARETSTYLE_BLOCK 2 블록으로 삽입 캐럿을 그린다.
CARETSTYLE_OVERSTRIKE_BAR 0 가로줄로 수정 캐럿을 그린다. 이것이 기본값이다.
CARETSTYLE_OVERSTRIKE_BLOCK 16 블록으로 수정 캐럿을 그린다. 앞의 세 스타일 중 하나와 함께 사용되어야 한다.
CARETSTYLE_CURSES 32 커시스 (터미널) 환경에서 그릴 수 없는 (추가 캐럿 같은) 캐럿을 블록 캐럿으로 그린다. 메인 캐럿은 터미널 자체가 그리도록 둔다. 이 설정은 전형적으로 단독 설정이다.
CARETSTYLE_BLOCK_AFTER 256 블록 캐럿 스타일이면서 캐럿이 범위의 끝에 위치하면 안에 그리지 않고 밖에 그린다. CARETSTYLE_BLOCK이나 CARETSTYLE_CURSES 스타일과 함께 사용될 수 있다.

블록 캐럿은 대부분의 조합 문자 그리고 다중바이트 문자 연속열을 성공적으로 그린다. 그렇지만 태국어 같이 어떤 글꼴들은 커서가 이런 문자들에 위치하면 가끔 이상하게 보일 때가 있다. 결과적으로 커서 문자의 연속중에 일부만 그려지는 경우가 있다. 이것은 윈도우즈 플랫폼에서 아주 유명하다.

SCI_SETCARETWIDTH(int pixelWidth)
SCI_GETCARETWIDTH → int
줄 캐럿의 너비는 SCI_SETCARETWIDTH로 설정한다. 값은 0과 20 픽셀 사이이다. 기본 너비는 1 픽셀이다. 현재 너비는 SCI_GETCARETWIDTH로 다시 읽을 수 있다. 너비가 0이면 캐럿은 보이지 않으며, 캐럿 스타일을 CARETSTYLE_INVISIBLE로 설정한 것과 비슷하다 (그렇지만 서로 교환해 사용할 수 없다). 이 설정은 오직 커서 스타일이 줄 캐럿 모드로 설정되어 있을 때 커서의 너비에만 영향을 미친다. 블록 캐럿 모드일 때는 너비에 영향을 미치지 않는다.

SCI_SETCARETSTICKY(int useCaretStickyBehaviour)
SCI_GETCARETSTICKY → int
SCI_TOGGLECARETSTICKY
이 메시지들은 caretSticky를 설정하고 얻으며 토글한다. 언제 그 줄의 캐럿의 최종 위치가 저장될 지를 제어한다.

SC_CARETSTICKY_OFF (0)이면, sticky 플래그는 off이다; 모든 텍스트 변경은 (그리고 모든 캐럿 위치 변경도) 다른 줄로 이동할 때 그 캐럿의 새로운 수평 위치를 기억한다. 이것이 기본값이다.

SC_CARETSTICKY_ON (1)로 설정하면, sticky 플래그는 on이다. 유일하게 편집기가 수평 캐럿 위치를 기억하도록 만드는 방법은 캐럿을 마우스나 키보드로 이동시키는 것이다 (왼쪽/오른쪽 화살표키, 홈키/엔드키, 등등).

SC_CARETSTICKY_WHITESPACE (2)로 설정하면, 캐럿은 마치 모드 0 (sticky off)처럼 행동한다. 단 특별한 경우; 스페이스나 탭 문자들이 삽입될 때를 제외한다. (스페이스/탭을 붙여넣는 일은 물론이고 -- 언두, 리두, 등등은 이런 행위를 보여주지 않는다).

SCI_TOGGLECARETSTICKYSC_CARETSTICKY_ONSC_CARETSTICKY_WHITESPACE로부터 SC_CARETSTICKY_OFF로 전환하고 SC_CARETSTICKY_OFF로부터 SC_CARETSTICKY_ON로 전환한다.

SC_ELEMENT_HOT_SPOT_ACTIVE : colouralpha
SCI_SETHOTSPOTACTIVEFORE(bool useSetting, colour fore)
SCI_GETHOTSPOTACTIVEFORE → colour
SCI_SETHOTSPOTACTIVEBACK(bool useSetting, colour back)
SC_ELEMENT_HOT_SPOT_ACTIVE_BACK : colouralpha
SCI_GETHOTSPOTACTIVEBACK → colour
SCI_SETHOTSPOTACTIVEUNDERLINE(bool underline)
SCI_GETHOTSPOTACTIVEUNDERLINE → bool
SCI_SETHOTSPOTSINGLELINE(bool singleLine)
SCI_GETHOTSPOTSINGLELINE → bool
커서가 집화점 속성이 설정된 스타일을 가진 텍스트를 배회하는 동안, 기본 색깔 입히기를 수정할 수 있다. 이 설정으로 밑줄이 그어진다. 단일 줄 모드라면 집화점은 다음 줄로 넘어가지 못한다.

SCI_SETCONTROLCHARSYMBOL(int symbol)
SCI_GETCONTROLCHARSYMBOL
기본값으로 신틸라는 제어 문자들을 (코드가 32보다 작은 문자들) 둥근 사각형에 ASCII 연상기호를 넣어서 보여준다: "NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL", "BS", "HT", "LF", "VT", "FF", "CR", "SO", "SI", "DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB", "CAN", "EM", "SUB", "ESC", "FS", "GS", "RS", "US". 이런 연상기호는 오래전 신호 처리 방식에서 왔지만, 여전히 사용되는 것이 있다 (예를 들면, LF = Line Feed, BS = Back Space, CR = Carriage Return).

지명한 심볼에 의한 이런 연상기호를 32에서 255 범위의 아스키 코드로 바꿀 수 있다. 심볼 값을 32보다 작게 설정하면, 모든 제어 문자는 연상기호로 화면에 표시된다. 설정한 심볼이 그 문자에 대한 스타일 집합의 글꼴으로 가공처리된다. SCI_GETCONTROLCHARSYMBOL 메시지로 현재 심볼을 다시 읽을 수 있다. 기본 심볼 값은 0이다.

문자 표현

제어 문자와 무효한 바이트처럼 어떤 문자들은 시각적 글리프를 가지지 않거나 구별하기 힘든 글리프를 사용한다.

제어 문자( 코드가 32보다 작거나, 어떤 인코딩에서는 128부터 159 사이의 문자)는 신틸라에서 연상기호를 사용하여 둥근 사각형 안에 역상으로 화면에 보여준다. 이런 연상기호들은 오래전의 신호처리 방식에서 유래한다. 그렇지만 여전히 사용되는 것들이 있다 (예를 들어 LF = Line Feed, BS = Back Space, CR = Carriage).

하위 'C0' 값들로는: "NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL", "BS", "HT", "LF", "VT", "FF", "CR", "SO", "SI", "DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB", "CAN", "EM", "SUB", "ESC", "FS", "GS", "RS", "US".

상위 'C1' 값들로는: "PAD", "HOP", "BPH", "NBH", "IND", "NEL", "SSA", "ESA", "HTS", "HTJ", "VTS", "PLD", "PLU", "RI", "SS2", "SS3", "DCS", "PU1", "PU2", "STS", "CCH", "MW", "SPA", "EPA", "SOS", "SGCI", "SCI", "CSI", "ST", "OSC", "PM", "APC".

무효한 바이트는"xFE"와 같이 'x' 다음에 16진 값과 비슷하게 보여준다.

SCI_SETREPRESENTATION(const char *encodedCharacter, const char *representation)
SCI_GETREPRESENTATION(const char *encodedCharacter, char *representation) → int
SCI_CLEARREPRESENTATION(const char *encodedCharacter)
SCI_CLEARALLREPRESENTATIONS
SCI_SETREPRESENTATIONAPPEARANCE(const char *encodedCharacter, int appearance)
SCI_GETREPRESENTATIONAPPEARANCE(const char *encodedCharacter) → int
SCI_SETREPRESENTATIONCOLOUR(const char *encodedCharacter, colouralpha colour)
SCI_GETREPRESENTATIONCOLOUR(const char *encodedCharacter) → colouralpha
SCI_SETCONTROLCHARSYMBOL(int symbol)

SCI_SETREPRESENTATION(const char *encodedCharacter, const char *representation)
SCI_GETREPRESENTATION(const char *encodedCharacter, char *representation NUL-terminated) → int
SCI_CLEARREPRESENTATION(const char *encodedCharacter)

정상적으로 화면에 보여지는 연상기호는 물론 어떤 문자든지 둥근 사각형 안에 역상 유니코드 문자열로 보여줄 수 있다.

예를 들어, 옴 기호 Ω U+2126는 그리스 오메가 문자 Ω U+03C9와 아주 비슷하게 보인다. 그래서 UTF-8 인코딩에서는 옴 기호를 "U+2126 Ω"처럼 확실하게 구별하기 위해, 다음과 같이 호출할 수 있다: SCI_SETREPRESENTATION("\xe2\x84\xa6", "U+2126 \xe2\x84\xa6")

encodedCharacter 매개변수는 현재 인코딩에서는 한 문자에 대하여 NUL-종료 바이트 문자열이다. 이 방식은 다중-문자 문자열을 표현하는데는 사용할 수 없다.

representation 매개변수는 최대 길이가 200 바이트인 NUL-종료 UTF-8 문자열이다.

단일 문자 제한에 대한 한 가지 예외는 2 문자 연속열 "\r\n" (Carriage Return + Line Feed)이 표현을 가질 수 있어서 줄 끝 보여주기 (SCI_SETVIEWEOL) 모드에서 보일 수 있다는 것이다. "\r\n"에 대한 표현이 없다면 '\r'와 '\n'이 따로다로 보일 것이다.

NUL (0) 문자는 특별한 사례이다. encodedCharacter 매개변수가 NUL로 종료하기 때문인데, NUL 문자는 빈 문자열로 지정한다.

UTF-8 그리고 DBCS 코드 페이지에 대하여 ≥ 128 이상의 바이트를 하나만 표현하려고 하면 예상치 못한 행위를 야기할 수 있다.

SCI_CLEARALLREPRESENTATIONS
표현을 기본값으로 재설정한다..

SCI_SETREPRESENTATIONAPPEARANCE(const char *encodedCharacter, int appearance)
SCI_GETREPRESENTATIONAPPEARANCE(const char *encodedCharacter) → int
모습이 바뀔 수 있다. SC_REPRESENTATION_COLOUR으로 색이 설정되고 모습이 설정되면 표현은 아래의 텍스트 색으로 나타날 것이다.

SC_REPRESENTATION_PLAIN 0 아무런 장식없이 표현을 그린다.
SC_REPRESENTATION_BLOB 1 모서리 둥근 사각형에 반전하여 표현 텍스트를 그린다. 이것이 기본 모습이다.
SC_REPRESENTATION_COLOUR 0x10 보여지는 텍스트 스타일의 색 대신에 SCI_SETREPRESENTATIONCOLOUR에 설정된 색으로 표현을 그린다.

SCI_SETREPRESENTATIONCOLOUR(const char *encodedCharacter, colouralpha colour)
SCI_GETREPRESENTATIONCOLOUR(const char *encodedCharacter) → colouralpha
표현의 색과 투명도를 설정한다.

SCI_SETCONTROLCHARSYMBOL(int symbol)
SCI_GETCONTROLCHARSYMBOL → int

연상기호는 32에서 255 사이의 아스키 코드에 지명된 심볼로 교체할 수도 있다. 심볼 값을 32 이하로 살정하면, 모든 제어 문자들이 연상기호로 화면에 보여진다. 설정한 심볼은 해당 문자의 스타일 세트에 지정된 폰트로 가공되어 화면에 보여진다. 현재 심볼은 SCI_GETCONTROLCHARSYMBOL 메시지로 역으로 다시 읽을 수 있다. 기본 심볼 값은 0이다.

여백(Margins)

텍스트 화면의 왼쪽으로 다섯개의 여백이 있을 수 있으며, 텍스트의 양쪽에 틈이 있을 수 있다. 각 여백은SCI_SETMARGINTYPEN으로 심볼이나 줄 번호등을 보여주도록 설정할 수 있다. 텍스트 여백도 심볼을 보여줄 수 있다. 각 여백에 보여줄 수 있는 표식은 SCI_SETMARGINMASKN로 설정한다. 가시 여백에 관련되지 않는 표식들은 텍스트에서 배경색이 변하면 보여진다. 각 여백에 픽셀 단위로 여백을 설정할 수 있다. 너비가 0인 여백은 완전히 무시된다. 여백에 마우스크를 클릭하면 컨테이너에게 SCN_MARGINCLICK 고지나 SCN_MARGINRIGHTCLICK 고지를 전송할지 아니면 텍스트 한 줄을 선택할지 고를 수 있다.

텍스트 화면의 왼쪽으로 여러 여백이 있을 수 있으면 좌우로 틈새가 더 있을 수 있다. 다섯 개의 여백은 0부터 SC_MAX_MARGIN (4)까지 번호가 매겨지지만 이 번호는 SCI_SETMARGINS을 호출하여 바꿀 수 있다. 각 여백은 SCI_SETMARGINTYPEN을 사용하여 오직 심볼, 줄 번호 또는 텍스트만 설정할 수 있다.

범위를 벗어난 번호를 사용하면 효과가 없다. 기본값으로 여백 0은 줄 번호를 보여주는데 사용되지만, 너비가 0이고, 그래서 보이지 않는다. 여백 1은 비-폴딩 심볼을 보여주도록 설정되며 너비가 16픽셀이다. 그래서 보인다. 여백 2는 폴딩 심볼을 보여주도록 설정되지만, 너비가 0이므로, 보이지 않는다. 물론, 얼마든지 여백을 설정할 수 있다.

개정 정보와 책임 정보를 보여주는데 사용된 스타일 텍스트 여백:

Styled text margins used to show revision and blame information

SCI_SETMARGINS(int margins)
SCI_GETMARGINS → int
SCI_SETMARGINTYPEN(int margin, int marginType)
SCI_GETMARGINTYPEN(int margin) → int
SCI_SETMARGINWIDTHN(int margin, int pixelWidth)
SCI_GETMARGINWIDTHN(int margin) → int
SCI_SETMARGINMASKN(int margin, int mask)
SCI_GETMARGINMASKN(int margin) → int
SCI_SETMARGINSENSITIVEN(int margin, bool sensitive)
SCI_GETMARGINSENSITIVEN(int margin) → bool
SCI_SETMARGINCURSORN(int margin, int cursor)
SCI_GETMARGINCURSORN(int margin) → int
SCI_SETMARGINBACKN(int margin, colour back)
SCI_GETMARGINBACKN(int margin) → colour
SCI_SETMARGINLEFT(<unused>, int pixelWidth)
SCI_GETMARGINLEFT → int
SCI_SETMARGINRIGHT(<unused>, int pixelWidth)
SCI_GETMARGINRIGHT → int
SCI_SETFOLDMARGINCOLOUR(bool useSetting, colour back)
SCI_SETFOLDMARGINHICOLOUR(bool useSetting, colour fore)
SCI_MARGINSETTEXT(int line, const char *text)
SCI_MARGINGETTEXT(int line, char *text) → int
SCI_MARGINSETSTYLE(int line, int style)
SCI_MARGINGETSTYLE(int line) → int
SCI_MARGINSETSTYLES(int line, const char *styles)
SCI_MARGINGETSTYLES(int line, char *styles) → int
SCI_MARGINTEXTCLEARALL
SCI_MARGINSETSTYLEOFFSET(int style)
SCI_MARGINGETSTYLEOFFSET → int
SCI_SETMARGINOPTIONS(int marginOptions)
SCI_GETMARGINOPTIONS → int

SCI_SETMARGINS(int margins)
SCI_GETMARGINS → int
여백 번호를 할당하거나 현재 할당된 여백 번호를 찾는다.

SCI_SETMARGINTYPEN(int margin, int marginType)
SCI_GETMARGINTYPEN(int margin) → int
이 두 함수는 여백의 유형을 얻거나 설정한다. 여백 인자는 0, 1, 2, 3 또는 4이다. 미리 정의된 상수를 사용할 수 있다. SC_MARGIN_SYMBOL (0) 그리고 SC_MARGIN_NUMBER (1)로 여백을 줄 번호 여백이나 심볼 여백으로 설정할 수 있다. 어플리케이션에서 정의한 텍스트가 있는 여백이라면 SC_MARGIN_TEXT (4)를 사용할 수 있다. 또는 SC_MARGIN_RTEXT (5)로 그 텍스트를 오른쪽으로 정렬할 수 있다. 관례적으로 여백 0은 줄 번호에 사용되고 다음의 여백 두 개는 심볼에 사용된다. 심볼 여백에 SC_MARGIN_BACK (2) 그리고 SC_MARGIN_FORE (3) 상수를 사용할 수도 있다. 이 상수들은 STYLE_DEFAULT 배경색 그리고 전경색이나 지정된 색상에 어울리도록 배경색을 설정한다.

SCI_SETMARGINWIDTHN(int margin, int pixelWidth)
SCI_GETMARGINWIDTHN(int margin) → int
이 두 함수는 여백의 너비를 픽셀 단위로 얻고 설정한다. 너비가 0인 여백은 보이지 않는다. 기본값으로 신틸라는 심볼용으로 여백 1에 너비 16 픽셀을 설정한다. 그래서 적절한 값이 무엇인지 모를 경우 이것이 합리적인 추측 값이다. 줄 번호 여백의 너비는 문서의 줄의 개수와 줄 번호 스타일을 고려해야 한다. 다음과 같이 SCI_TEXTWIDTH(STYLE_LINENUMBER, "_99999")를 사용하여 적절한 너비를 얻을 수 있다.

SCI_SETMARGINMASKN(int margin, int mask)
SCI_GETMARGINMASKN(int margin) → int
mask는 32-비트 값이다. 각 비트는 32개의 논리적 심볼중 하나에 상응한다. 이 심볼들은 심볼을 위해 활성화된 여백에 보여줄 수 있다. 유용한 상수로서, SC_MASK_FOLDERS (0xFE000000 or -33554432)가 있는데, 이 상수는 접기를 나타내는데 사용되는 7개의 논리적 심볼을 위한 mask이다. 32개의 논리 심볼 각각에 광범위한 심볼과 색상을 할당할 수 있다. 더 자세한 정보는 표식자(Markers)를 참조하라. (mask & SC_MASK_FOLDERS)==0이면, 여백의 배경색은 스타일 33 (STYLE_LINENUMBER)으로 제어된다.

SCI_MARKERADD로 줄에 논리 표식을 추가할 수 있다. 너비가 있는 여백의 마스크에 나타나는 표식과 줄이 관련되어 있다면, 그 표식은 줄의 배경색을 바꾼다. 예를 들어, 논리 표식 10을 사용하여 구문 에러가 있는 줄을 표식한다고 해 보자. 그리고 그런 줄을 배경색을 바꾸어서 보여주고 싶다고 해 보자. 이 표식에 대한 마스크는 1을 왼쪽으로 10번 옮긴 것이고 (1<<10) 그 값은 0x400이다. 어떤 심볼 여백도 자신의 마스크 안에 0x400을 포함하지 않는다고 확신한다면, 그 표식이 붙은 줄은 모두 배경색이 바뀐다.

비-접기 여백을 1로 설정하려면 SCI_SETMARGINMASKN(1, ~SC_MASK_FOLDERS)를 사용하자. 이것이 신틸라가 기본으로 설정하는 값이다. 접기 여백을 2로 설정하려면 SCI_SETMARGINMASKN(2, SC_MASK_FOLDERS)을 사용하자. ~SC_MASK_FOLDERS는 16진수도 0x1FFFFFF이거나 십진수로 33554431이다. 물론, 32개의 심볼을 모두 여백에 보여줄 필요가 있다. 그런 경우라면 SCI_SETMARGINMASKN(margin, -1)을 사용하자.

SCI_SETMARGINSENSITIVEN(int margin, bool sensitive)
SCI_GETMARGINSENSITIVEN(int margin) → bool
다섯개의 여백은 각각 마우스 클릭을 감지하거나 감지하지 않도록 설정할 수 있다. 감지 여백에 클릭하면 SCN_MARGINCLICK이나 SCN_MARGINRIGHTCLICK 고지를 컨테이너에게 전송한다. 민감하지 않은 여백은 선택 여백처럼 행위하므로 여러 줄을 쉽게 선택할 수 있다. 기본값으로 모든 여백은 둔감하다.

SCI_SETMARGINCURSORN(int margin, int cursor)
SCI_GETMARGINCURSORN(int margin) → int
보통 여백에서는 화살표 커서가 반대로 보인다. SCI_SETMARGINCURSORN(margin, SC_CURSORARROW)를 이용하면 정상적 화살표 커서로 바꿀 수 있다. 아니면 SCI_SETMARGINCURSORN(margin, SC_CURSORREVERSEARROW)로 역화살표로 복구하면 된다.

SCI_SETMARGINBACKN(int margin, colour back)
SCI_GETMARGINBACKN(int margin) → colour
유형이 SC_MARGIN_COLOUR인 여백은 SCI_SETMARGINBACKN으로 색깔을 설정할 수 있다.

SCI_SETMARGINLEFT(<unused>, int pixelWidth)
SCI_GETMARGINLEFT → int
SCI_SETMARGINRIGHT(<unused>, int pixelWidth)
SCI_GETMARGINRIGHT → int
이 메시지들은 텍스트 양쪽에 픽셀 단위로 빈 여백의 너비를 설정하고 얻는다. 기본값은 양쪽에 1 픽셀이다.

SCI_SETFOLDMARGINCOLOUR(bool useSetting, colour back)
SCI_SETFOLDMARGINHICOLOUR(bool useSetting, colour fore)
이 메시지들은 접기 여백의 색깔과 접기 여백의 강조 색깔을 바꿀 수 있도록 해준다. 윈도우즈에서 접기 여백의 색깔은 ::GetSysColor(COLOR_3DFACE)이 기본값이고 접기 여백의 강조 색깔은 ::GetSysColor(COLOR_3DHIGHLIGHT)이 기본값이다.

SCI_MARGINSETTEXT(int line, const char *text)
SCI_MARGINGETTEXT(int line, char *text) → int
SCI_MARGINSETSTYLE(int line, int style)
SCI_MARGINGETSTYLE(int line) → int
SCI_MARGINSETSTYLES(int line, const char *styles)
SCI_MARGINGETSTYLES(int line, char *styles) → int
SCI_MARGINTEXTCLEARALL
텍스트 여백은 SC_MARGIN_TEXT 또는 SC_MARGIN_RTEXT 유형으로 만든다. 각 줄에 SCI_MARGINSETTEXT로 다양한 문자열을 설정할 수 있다. 한 줄에서 텍스트 여백은 모두 SCI_MARGINSETSTYLE로 특별한 스타일로 표시된다. 또는 각 문자는 개별적으로 SCI_MARGINSETSTYLES로 스타일 처리할 수 있다. 바이트 배열을 사용하고 각 바이트는 상응하는 텍스트의 스타일을 SCI_SETSTYLINGEX와 비슷하게 설정한다. 텍스트 여백을 설정하면 SC_MOD_CHANGEMARGIN 고지가 전송된다.

텍스트 여백에서는 다음의 스타일 속성만 활성화된다: font, size/sizeFractional, bold/weight, italics, fore, back, 그리고 characterSet.

SCI_MARGINSETSTYLEOFFSET(int style)
SCI_MARGINGETSTYLEOFFSET → int
여백 스타일은 스타일 거리(style offset)를 설정하면 표준 텍스트 스타일과 완전히 분리된다. 예를 들어, SCI_MARGINSETSTYLEOFFSET(256)는 여백 스타일을 256번부터 511번까지 번호를 매길수 있으므로 어휘분석기가 설정한 스타일과 중첩되지 않는다. SCI_MARGINSETSTYLE이나 SCI_MARGINSETSTYLES로 설정된 각 스타일 번호는 거리(offset)를 더한 다음 그 스타일을 찾는다.

언제나 SCI_MARGINSETSTYLEOFFSET 보다 먼저 SCI_ALLOCATEEXTENDEDSTYLES를 호출하자. 그 결과를 SCI_MARGINSETSTYLEOFFSET에 인자로 사용하라.

SCI_SETMARGINOPTIONS(int marginOptions)
SCI_GETMARGINOPTIONS → int
적절한 비트 플래그를 활성화하여 여백 옵션을 설정한다. 현재로는, 오직 하나의 플래그만 사용 가능한데, SC_MARGINOPTION_SUBLINESELECT=1, 앞쪽의 여백을 클릭할 때 어떻게 줄을 넘길지 제어한다. SC_MARGINOPTION_SUBLINESELECT이 켜저 있으면 오직 아래의 줄만 선택되고, 그렇지 않으면 접힌 줄 전체가 선택된다. 여백 옵션은 기본 값으로 SC_MARGINOPTION_NONE=0 으로 설정되어 있다.

주해(Annotations)

주해는 편집가능한 텍스트의 각 줄 아래에 있는 읽기-전용 텍스트 줄이다. 주해는 여러 줄로 구성될 수 있고 각 줄은 '\n'으로 구분된다. 주해는 디버깅에 어셈블러 버전의 코드를 보여주거나 진단 메시지를 줄 사이에 보여주거나 아니면 병합 도구로 다양한 버전의 텍스트를 정렬한다.

주해는 SCI_VISIBLEFROMDOCLINE 메쏘드와 SCI_DOCLINEFROMVISIBLE 메쏘드로 화면에 보여지는 줄들의 개수로 계산된다.

줄사이 진단에 사용된 주해:

Annotations used for inline diagnostics

SCI_ANNOTATIONSETTEXT(int line, const char *text)
SCI_ANNOTATIONGETTEXT(int line, char *text) → int
SCI_ANNOTATIONSETSTYLE(int line, int style)
SCI_ANNOTATIONGETSTYLE(int line) → int
SCI_ANNOTATIONSETSTYLES(int line, const char *styles)
SCI_ANNOTATIONGETSTYLES(int line, char *styles) → int
SCI_ANNOTATIONGETLINES(int line) → int
SCI_ANNOTATIONCLEARALL
SCI_ANNOTATIONSETVISIBLE(int visible)
SCI_ANNOTATIONGETVISIBLE → int
SCI_ANNOTATIONSETSTYLEOFFSET(int style)
SCI_ANNOTATIONGETSTYLEOFFSET → int

SCI_ANNOTATIONSETTEXT(int line, const char *text)
SCI_ANNOTATIONGETTEXT(int line, char *text) → int
SCI_ANNOTATIONSETSTYLE(int line, int style)
SCI_ANNOTATIONGETSTYLE(int line) → int
SCI_ANNOTATIONSETSTYLES(int line, const char *styles)
SCI_ANNOTATIONGETSTYLES(int line, char *styles) → int
SCI_ANNOTATIONGETLINES(int line) → int
SCI_ANNOTATIONCLEARALL
SCI_ANNOTATIONSETTEXT로 각 줄에 다른 문자열을 설정할 수 있다. 주해를 지우려면 널 포인터로 SCI_ANNOTATIONSETTEXT를 호출하면 된다. 한 줄에서 주해의 전체 텍스트는 SCI_ANNOTATIONSETSTYLE로 특별한 스타일로 보여줄 수 있다. 또는 각 문자는 개별적으로 SCI_ANNOTATIONSETSTYLES로 스타일 처리할 수 있다. 이 스타일은 배열 바이트를 사용하는데 각 바이트는 상응하는 텍스트의 스타일을 SCI_SETSTYLINGEX와 비슷하게 설정한다. 텍스트는 먼저 주해가 얼마나 긴지 그래서 스타일 처리할 바이트를 얼마나 읽어 들여하는지 지정한 대로 설정되어야 한다. 주해를 설정하면 SC_MOD_CHANGEANNOTATION 고지가 전송된다.

주해가 붙은 줄 개수는 SCI_ANNOTATIONGETLINES로 열람할 수 있다. 모든 줄은 SCI_ANNOTATIONCLEARALL로 주해가 제거되며 각 줄을 지우고 (0으로 설정하고) 다음으로 이 특징에 사용된 기타 메모리를 지우는 것과 동일하다.

SCI_ANNOTATIONSETVISIBLE(int visible)
SCI_ANNOTATIONGETVISIBLE → int
주해는 뷰에 보이며 보일 때 어떻게 보여줄지 선택할 수 있다. 두 개의 메시지가 주해 표시 모드를 설정하고 얻는다. visible 인자는 다음 중 하나이다:

ANNOTATION_HIDDEN 0 주해가 보이지 않는다.
ANNOTATION_STANDARD 1 주해는 아무런 장식없이 왼쪽에 그려진다.
ANNOTATION_BOXED 2 주해는 박스에 둘러싸인 텍스트에 맞게 들여쓰기 된다.
ANNOTATION_INDENTED 3 주해는 텍스트에 맞게 들여쓰기 된다.

SCI_ANNOTATIONSETSTYLEOFFSET(int style)
SCI_ANNOTATIONGETSTYLEOFFSET → int
주해 스타일은 스타일 거리(style offset)를 설정하면 표준 텍스트 스타일과 완전히 분리된다. 예를 들어, SCI_ANNOTATIONSETSTYLEOFFSET(512)는 주해 스타일을 512번부터 767번까지 번호를 매기므로 어휘분석기가 설정한 스타일과 중첩되지 않는다 (또는 여백 거리가 256이면 여백 스타일도 마찬가지다). SCI_ANNOTATIONSETSTYLE 또는 SCI_ANNOTATIONSETSTYLES로 설정된 각 스타일 번호는 거리(offset)를 더해서 그 스타일을 찾는다.

언제나 SCI_ANNOTATIONSETSTYLEOFFSET 전에 SCI_ALLOCATEEXTENDEDSTYLES를 호출한 다음 그 결과를 SCI_ANNOTATIONSETSTYLEOFFSET에 건넬 인자로 사용하자.

줄끝 주석

줄끝 주석은 줄 끝에 붙는 읽기 전용 줄이다. 디버깅할 때 코드의 어셈블러 버전을 보여주거나 또는 인라인으로 진단 메시지를 보여주거나 또는 합병 도구에서 버전이 다른 텍스트를 정렬하는 데 사용할 수 있다.

디버깅할 때 코드의 어셈블러 버전을 보여주는 줄끝 주석

End of Line Annotations used to display an assembler version of code for debugging

SCI_EOLANNOTATIONSETTEXT(line line, const char *text)
SCI_EOLANNOTATIONGETTEXT(line line, char *text) → int
SCI_EOLANNOTATIONSETSTYLE(line line, int style)
SCI_EOLANNOTATIONGETSTYLE(line line) → int
SCI_EOLANNOTATIONCLEARALL
SCI_EOLANNOTATIONSETVISIBLE(int visible)
SCI_EOLANNOTATIONGETVISIBLE → int
SCI_EOLANNOTATIONSETSTYLEOFFSET(int style)
SCI_EOLANNOTATIONGETSTYLEOFFSET → int

SCI_EOLANNOTATIONSETTEXT(line line, const char *text)
SCI_EOLANNOTATIONGETTEXT(line line, char *text) → int
SCI_EOLANNOTATIONSETSTYLE(line line, int style)
SCI_EOLANNOTATIONGETSTYLE(line line) → int
SCI_EOLANNOTATIONCLEARALL
SCI_EOLANNOTATIONSETTEXT로 줄 마다 문자열을 다르게 설정할 수 있다. text 인자는 문자 인코딩이 아니라 언제나 utf-8로 넘겨야 한다. 줄끝 주석을 소거하려면 NULL 포인터로 SCI_EOLANNOTATIONSETTEXT를 호출하면 된다. 전체 SCI_EOLANNOTATIONSETSTYLE로 한 줄에 있는 줄끝 주석을 모두 특정한 스타일로 바꿀 수 있다. 줄끝 주석을 설정하면 SC_MOD_CHANGEEOLANNOTATION 고지가 전송된다.

줄끝 주석은 SCI_EOLANNOTATIONCLEARALL로 모조리 소거할 수 있다. 이것은 (0으로 설정해) 각 줄을 지운다음 해당하는 메모리를 풀어주는 것과 똑 같다.

줄끝 주석에는 특정한 스타일 속성만 활성화된다: font, size/sizeFractional, bold/weight, italics, fore, back, 그리고 characterSet.

SCI_EOLANNOTATIONSETVISIBLE(int visible)
SCI_EOLANNOTATIONGETVISIBLE → int
줄끝 주석을 뷰에 보여줄 수 있고 스타일 처리를 할 수 있다. 두 개의 메시지로 주석과 보여주기 모드를 설정하고 얻어온다. visible 인자는 다음 중 하나의 값으로 구성된다:

EOLANNOTATION_HIDDEN 0 줄끝 주석을 보여주지 않는다.
EOLANNOTATION_STANDARD 0x1 줄 끝 주석을 아무 장식없이 왼쪽에 정렬해 그린다.
EOLANNOTATION_BOXED 0x2 텍스트에 합당하게 줄끝 주석을 들여 쓰고 박스로 둘러싼다.
EOLANNOTATION_STADIUM 0x100 모서리가 둥근 네모로 둘러싼다 ◖stadium◗.
EOLANNOTATION_FLAT_CIRCLE 0x101 왼쪽은 세로줄 오른쪽은 원호 |shape◗ .
EOLANNOTATION_ANGLE_CIRCLE 0x102 왼쪽은 삼각형 오른쪽은 원호 ◄shape◗
EOLANNOTATION_CIRCLE_FLAT 0x110 왼쪽은 원호 오른쪽은 세로줄 ◖shape| .
EOLANNOTATION_FLATS 0x111 양쪽 모두 세로 줄 |shape|.
EOLANNOTATION_ANGLE_FLAT 0x112 왼쪽은 세모 오른쪽은 세로줄 ◄.
EOLANNOTATION_CIRCLE_ANGLE 0x120 왼쪽은 원호 오른쪽은 세모 ◖shape▶ .
EOLANNOTATION_FLAT_ANGLE 0x121 왼쪽은 세로줄 오른쪽은 세모 |shape▶ .
EOLANNOTATION_ANGLES 0x122 양쪽 모두 세모 ◄shape▶ .

EOL 주석은 다양한 형태가 있다. 현재는 전체 문서에 오직 하나의 유형만 적용할 수 있다 - 다음 그림은 한 예이다.

Different shapes available for EOL annotations

SCI_EOLANNOTATIONSETSTYLEOFFSET(int style)
SCI_EOLANNOTATIONGETSTYLEOFFSET → int
줄끝 주석의 스타일은 스타일 오프셋을 설정함으로써 표준 텍스트 스타일과 완전히 분리되어 있다. 예를 들어, SCI_EOLANNOTATIONSETSTYLEOFFSET(512)은 줄끝 주석 스타일을 512번부터 767번까지 설정할 수 있으므로 어휘분석기의 스타일 집합과 중첩되지 않는다. (여백 오프셋이 256일지라도 여백과 중첩되지 않는다). SCI_EOLANNOTATIONSETSTYLE이나 SCI_EOLANNOTATIONSETSTYLES으로 설정된 각 스타일 번호는 스타일 찾기 보다 앞선 오프셋을 가진다.

언제나 먼저 SCI_ALLOCATEEXTENDEDSTYLES를 호출한 다음에 그 결과를 인자로 하여 SCI_EOLANNOTATIONSETSTYLEOFFSET를 호출하라.

기타 설정

SCI_SETUSEPALETTE(bool allowPaletteUse)
SCI_GETUSEPALETTE
SCI_SETBUFFEREDDRAW(bool buffered)
SCI_GETBUFFEREDDRAW → bool
SCI_SETPHASESDRAW(int phases)
SCI_GETPHASESDRAW → int
SCI_SETTWOPHASEDRAW(bool twoPhase)
SCI_GETTWOPHASEDRAW → bool
SCI_SETTECHNOLOGY(int technology)
SCI_GETTECHNOLOGY → int
SCI_SETFONTQUALITY(int fontQuality)
SCI_GETFONTQUALITY → int
SCI_SETCODEPAGE(int codePage)
SCI_GETCODEPAGE → int
SCI_SETIMEINTERACTION(int imeInteraction)
SCI_GETIMEINTERACTION → int
SCI_SETBIDIRECTIONAL(int bidirectional)
SCI_GETBIDIRECTIONAL → int
SCI_SETKEYSUNICODE(bool keysUnicode)
SCI_GETKEYSUNICODE 3.5.4에서 제거
SCI_GRABFOCUS
SCI_SETFOCUS(bool focus)
SCI_GETFOCUS → bool
SCI_SUPPORTSFEATURE(int feature) → bool

메시지 (WM_XXXX, WPARAM, LPARAM)를 Scintilla에 전송하려면, SendMessage(hScintilla, WM_XXXX, WPARAM, LPARAM)를 사용하면 된다. 여기에서 hScintilla는 여러분이 편집기로 생성한 신틸라 창을 가리키는 핸들이다.

윈도우즈에서 메시지 전송이라는 말이 나온 김에 말한다면, 최 상위 창은 어떤 WM_SETTINGCHANGE 메시지도 Scintilla에 전송해야 한다. (이 방법은 현재 마우스 설정을 위해 변화를 수집하는데 사용되고 있지만, 앞으로 다른 사용자 인터페이스 항목에 사용할 수도 있을 것이다).

SCI_SETUSEPALETTE(bool allowPaletteUse)
SCI_GETUSEPALETTE
(2.29 버전 이후로 제거됨) 8 비트 화면에서, 최대 256 색상을 보여줄 수 있는데, 그래픽 환경은 어플리케이션이 필요로 하는 색깔 사이를 팰리트를 사용하여 중재한다. GTK에서, 신틸라는 언제나 팰리트를 사용한다.

윈도우즈에서, 팰리트로 어플리케이션 사이를 전환할 때 화면이 번쩍이는 문제가 좀 있다. 또 그의 팰리트 코드가 작동하려면 신틸라 콘트롤을 포함한 어플리케이션이 메시지를 신틸라에게 전해야 할 필요가 있다. 이 때문에, 기본으로 팰리트를 사용하지 않는다. 그리고 어플리케이션은 반드시 신틸라에게 팰리트를 사용하라고 알려야 한다. 신틸라가 팰리트를 사용하고 있지 않으면, 이미 사용가능한 색깔로만 화면을 보여주며, 보통 시스템에서 20개의 색깔이 사용된다.

신틸라에 팰리트 지원을 가능하게 하는 법에 관하여 예제를 보려면, SciTE 텍스트에서 WM_PALETTECHANGED, WM_QUERYNEWPALETTE 그리고 SCI_SETUSEPALETTE를 참조하자. 전할 윈도우즈 메시지는 다음과 같다:
WM_SYSCOLORCHANGE, WM_PALETTECHANGED, WM_QUERYNEWPALETTE (TRUE를 돌려주어야 함).

신틸라에게 메시지(WM_XXXX, WPARAM, LPARAM)를 전하려면, SendMessage(hScintilla, WM_XXXX, WPARAM, LPARAM)를 사용하면 된다. hScintilla는 편집기로서 만든 신틸라 창에 대한 핸들이다.

윈도우즈에서 메시지를 전송하는 동안, 최상위 창은 WM_SETTINGCHANGE 메시지들을 빠짐없이 신틸라에게 전송해야 한다 (이것은 현재 마우스 설정의 변화를 수집하는데 사용되지만, 앞으로 다른 사용자 인터페이스 구성요소에 사용될 수 있다).

신틸라는 더 이상 팰리트 모드를 지원하지 않는다. 이를 지원하는 최종 버전은 2.29였다. 이 메쏘드를 호출하지 말아야 한다.

SCI_SETBUFFEREDDRAW(bool buffered)
SCI_GETBUFFEREDDRAW → bool
이 메시지들은 버퍼 그리기를 활성하거나 비활성화하고 버퍼 그리기 상태를 보고한다. 버퍼 그리기는 각 줄을 직접 화면이 아니라 비트맵에 그린 다음 그 비트맵을 화면에 복사한다. 이렇게 하면 시간이 좀 걸리지만 화면이 번쩍거리는 것을 막을 수 있다. 기본으로 Win32와 GTK에서는 버퍼 그리기이고 Cocoa와 Qt에서는 직접 그린다. Cocoa는 버퍼 그리기를 지원하지 않는다.

현재의 플랫폼은 창 버퍼링을 수행하기 때문에 거의 언제아 이 옵션을 꺼 놓는 편이 더 좋다. Win32와 GTK에서 클라이언트 코드는 초기화시 버퍼링을 꺼 두어야 한다. 몇몇 구형 플랫폼과 특이 모드에서는 여전히 버퍼 그리기가 쓸모가 있다.

SCI_SETPHASESDRAW(int phases)
SCI_GETPHASESDRAW → int
텍스트 영역을 그리는데 여러 단계가 있다. 속도 사이에 교환 관계가 있으며 텍스트의 모든 픽셀이 다른 요소들과 겹쳐질 경우에도 보여줄 수 있다.

단일 단계 그리기 (SC_PHASES_ONE)에서 한 스타일을 가진 일련의 문자들은 배경과 함께 그려진다.

2 단계의 그리기가 텍스트 그리기에 더 좋지만 좀 느린 방법이다. 단일 단계로 일련의 문자들을 한 가지 스타일로 그리기는 배경과 함께 그려진다. 문자가 그 끝에 걸리면, 예를 들어 "V_"에서 "V"는 "_"와 스타일이 다른데, 그러면 이 때문에 "V"의 오른쪽이 "_"으로 배경으로 덮여지므로 글자가 잘려 버린다.

단일 단계 그리기는 비추천이다. 어플리케이션에서 사용하면 안 된다.

2 단계 그리기는 이를 해결했다. 모든 배경을 먼저 그린 다음 텍스트를 투명 모드로 그린다. 2 단계 그리기는 버퍼 그리기가 켜 있지 않으면 단일 단계 그리기에 비해서 화면이 더 깜박거린다. 기본 값은 2 단계 그리기이다.

두 단계 그리기(SC_PHASES_TWO)는 먼저 한 줄의 배경을 모두 그린다음 텍스트를 투명 모드로 그려서 이를 해결했다. 줄들은 따로 따로 그려지고 어떤 줄도 서로 중첩되지 않으므로 문자에 대하여 상단부와 하단부 같이 다른 줄에 중첩되는 픽셀들은 잘려 나간다. 두 단계 그리기는 단일 단계 그리기보다 더 깜빡 거릴 수 있다. 버퍼 그리기가 설정되어 있지 않거나 플랫폼에서 자연스럽게 버퍼 그리기를 지원하지 않으면 말이다. 기본 값은 두 단계 그리기이다.

여러 단계 그리기(SC_PHASES_MULTIPLE)는 전체 영역을 각각의 특징에 대하여 한 번씩 여러 번 그린다. 한겹 한겹 모습을 완성한다. 모든 줄에 대하여 색상이 있는 배경은 텍스트보다 먼저 그려지고 다음에 이렇게 조합된 배경 위에 모든 텍스트가 투명 모드로 그려진다. 텍스트를 줄 경계에서 자르지 않는다. 이렇게 해서 상단부와 하단부는 인접 줄로 넘쳐 흐를 수 있다. 이 모드는 버퍼 그리기와 호환되지 않는다. 버퍼 그리기가 켜저 있으면 SC_PHASES_TWO처럼 행위한다. 여러 단계 그리기는 두 단계 그리기보다 느리다. 레이아웃 캐시를 SCI_SETLAYOUTCACHE(SC_CACHE_PAGE) 이상으로 설정하면 여러 단계 그리기가 심각하게 느려지는 것을 막을 수 있다.

SCI_SETTWOPHASEDRAW(bool twoPhase)
SCI_GETTWOPHASEDRAW → bool
이 특성은 이전의 PHASESDRAW 특성으로 교체되었다. 이 특성이 더 일반적이어서, 두 단계의 그리기는 물론이고 여러 단계의 그리기가 가능하기 때문이다.

SCI_SETTECHNOLOGY(int technology)
SCI_GETTECHNOLOGY → int
이 속성은 서로 다른 API를 선택할 수 있게 해준다. 대부분의 플랫폼에서, 유일한 선택은 SC_TECHNOLOGY_DEFAULT (0)이다. 윈도우즈 비스타 이상이라면SC_TECHNOLOGY_DIRECTWRITE (1)를 선택하면 Direct2D와 DirectWrite API를 사용할 수 있으므로 더 높은 품질의 계단방지 그리기를 할 수 있다. 신틸라는 Direct2D 버퍼 그리기를 사용하는데 SCI_SETBUFFEREDDRAW(0)로 끌 수 있다.

윈도우즈 비스타 이상에서, SC_TECHNOLOGY_DIRECTWRITE (1), SC_TECHNOLOGY_DIRECTWRITERETAIN (2), 또는 SC_TECHNOLOGY_DIRECTWRITEDC (3)을 선택할 수 있다. Direct2D와 DirectWrite API들을 사용해 고 품질의 계단 현상 방지 그리기에 사용할 수 있다. SC_TECHNOLOGY_DIRECTWRITERETAINSC_TECHNOLOGY_DIRECTWRITE와 다르다. 프레임이 화면에 표시된 후에도 유지되도록 요구하므로 몇몇 카드와 드라이버에서의 그리기 실패를 막아주기 때문이다. SC_TECHNOLOGY_DIRECTWRITEDCSC_TECHNOLOGY_DIRECTWRITE와 다르다. DirectWrite를 사용해 GDI DC에 그려 넣기 때문이다.

Win32에서 버퍼 그리기는 적절한 값으로 설정되어 GDI라면 켜지고 Direct2D라면 거진다. Direct2D는 따로 버퍼링을 하기 때문이다. 이 행위는 SCI_SETBUFFEREDDRAW로 바꿀 수 있다.

SCI_STYLESETCHECKMONOSPACED(int style, bool checkMonospaced)
SCI_STYLEGETCHECKMONOSPACED(int style) → bool
이 속성은 ASCII 문자에 대하여 모노 폰트를 사용할 수 있다는 뜻이다. (' ' … '~', 다음 문자 ('a'…'z', 'A'…'Z') 숫자 ('0'…'9') 포함). 문서가 대부분 ASCII 문자로 이루어져 있다는 가정하에 최적화 속도와 메모리 사용도를 높여준다.

폰트는 + Fonts are rarely monospaced over all possible characters. + Emoji '😃', Arabic characters 'ش' and Chinese ideographs '漢' are often different widths to Roman letters. 폰트가 모노폭으로 설계되어 있더라도, 모든 문자가 있는 것도 아니고 플랫폼에 따라 다른 폰트로 대체될 수도 있으므로 없는 ㅁ문자들은 가변폭으로 문자가 대체될 수 있다. 그렇지만, 폰트는 보통 ASCII 텍스트에 대하여 고정폭이다 (제어 문자는 제외) 문서는 대부분 ASCII 문자로 이루어진다. 이렇게 설정하면 순수하게 ASCII로만 구성될 경우. 위치 계산이 간단해진다.

폰트를 고정폭으로 취급하기 전에 먼저 ' ' … '~' 범위를 점검해야 하고 커닝이나 리거쳐 대문에 폭이 다를 수 있는 문자조합들을 고려해야 한다. 어플리케이션은 'check monospaced' 속성을 점검하여 고정폭으로 알려진 폰트들에 적용하거나 모든 폰트에 적용하면 되는데, 그냥 신틸라에게 맡기거나 가변폭의 폰트를 모두 거부하면 된다.

DirectWrite에서 SCI_SETFONTLOCALE을 사용하면 적절한 폰트 로케일을 설정하여 언어-독립적인 글리프로 텍스트를 그릴 수 있다.

SCI_SETFONTQUALITY(int fontQuality)
SCI_GETFONTQUALITY → int
글꼴의 품질을 관리한다 (계단현상 방지 방법(antialiasing method)). 현재, 다음 값들을 윈도우즈에서 사용할 수 있다: SC_EFF_QUALITY_DEFAULT (하위 호환), SC_EFF_QUALITY_NON_ANTIALIASED, SC_EFF_QUALITY_ANTIALIASED, SC_EFF_QUALITY_LCD_OPTIMIZED.

이 특성에 더 많은 특성을 짜 넣을 필요가 있다면, SC_EFF_QUALITY_MASK (0xf)에 정의된 오직 한정된 개수의 비트가 품질에 사용된다.

SCI_SETCODEPAGE(int codePage)
SCI_GETCODEPAGE → int
신틸라는 UTF-8(SC_CP_UTF8)을 기본값으로 지원한다. 한국어와 중국어 그리고 일본어 DBCS는 물론이고 Latin-1같은 단일 바이트 인코딩도 지원한다. 이 메시지를 codePage에 사용하여 신틸라에게 코드 페이지 정보를 이용하라고 알린다. 두 개의 바이트 문자를 두 개가 아니라 하나의 문자로 취급하라고 설정한다. 다른 단일 바이트 집합 중 하나를 고르려면 이 메시지를 사용하지 말고 SCI_STYLESETCHARACTERSET 메시지를 사용하라. codePage에 0을 설정하면 DBCS가 지원되지 않는다. 단일 바이트 그대로 처리한다.

코드 페이지 SC_CP_UTF8 (65001)은 신틸라를 유니코드 모드로 설정한다. 문서는 UTF-8로 표현된 일련의 문자로 취급된다. 텍스트는 플랫폼의 정상 유니코드 인코딩으로 변환된 다음 OS에 의해 그려지므로 Hebrew, Arabic, Cyrillic, 그리고 Han 문자들을 화면에 보여줄 수 있다. 태국어(Thai)처럼 한 수평 공간에 두 문자를 수직으로 쌓아 사용하는 언어는 대부분 작동하겠지만 약간 문제가 있다. 문자들이 시각적 결함(glitches)에 앞서서 따로 그려지기 때문이다. 양-방향 텍스트는 지원하지 않는다.

코드 페이지는 65001 (UTF-8), 949 (한국 통합형 한글 코드), 936 (간자체 GBK), 950 (전통 중국어 Big5), 932 (일본어 Shift-JIS), 또는 1361 (한국 조합형)로 할당할 수 있다. 물론 언어 종속적인 지원이 필요할 수 있다.

SCI_SETIMEINTERACTION(int imeInteraction)
SCI_GETIMEINTERACTION → int
한국어와 중국어 일본어에서 텍스트를 입력할 때 입력 방법 편집기 (IME)를 보여줄 수 있다. IME는 창을 추가해서 신틸라 위에 보여주거나 신틸라 자체에서 텍스트로 보여줄 수 있다. 플랫폼에 따라 두 가지 테크닉 중에서 선택할 수 있다. 창 IME SC_IME_WINDOWED (0)는 다른 어플리케이션에서 보던 모습과 행위를 더 닮았다. IME SC_IME_INLINE (1)는 사각 선택과 다중 선택 같은 신틸라의 특징, 그리고 재변환이나 예측 제안과 같은 IME의 상호작용과 더 잘 작동한다.

IME 입력 방식 지원 (O=지원, X=미지원)
IME input method Windows Gtk Qt macOS
SC_IME_WINDOWED O O X X
SC_IME_INLINE O O O O

IME 상호작용 지원
IME interaction Windows Gtk Qt macOS
Retrieve Surrounding O O O O
Reconversion O O O O
Delete Surrounding O O X O

창 행위는 SCI_SETIMEINTERACTION(SC_IME_WINDOWED)으로 선택하고 인라인 행위는 SCI_SETIMEINTERACTION(SC_IME_INLINE)으로 선택할 수 있다. 신틸라는 어떤 경우 이 호출을 무시한다. 예를 들어, Qt 플랫폼과 한국어는 오직 인라인 행위만 지원한다.

인라인 IME 모드에서는 문자가 임시로 추가되다가 완결된다. 이 때 문자가 임시로 추가될 때마다 SCN_CHARADDED 메시지로 고지된다(characterSourceSC_CHARACTERSOURCE_TENTATIVE_INPUT이 설정된다).

양방향 텍스트 지원은 아직 구현되지 않았다. 잠정적으로 API를 제공한다

SCI_SETBIDIRECTIONAL(int bidirectional)
SCI_GETBIDIRECTIONAL → int
왼쪽에서 오른쪽으로 씌여지는 영어와 다르게 아랍어나 히브리어 같은 언어들은 오른쪽에서 왼쪽으로 씌여진다. 여러 언어를 사용하는 문서는 두 방향이 모두 사용될 가능성이 있으며 이를 "양방향(bidirectional)" 텍스트라고 부른다. 기본 텍스트 방향은 오른쪽에서 왼쪽으로 아니면 왼쪽에서 오른쪽으로 정해진다. 신틸라는 특정 플랫폼에서만 양방향 텍스트를 올바르게 보여준다. 다른 플랫폼도 지원하려면 더 많은 수고와 메모리 비용이 소요될 수 있다. 양방향 텍스트는 현재 DirectWrite를 사용하는 Win32와 코코아를 사용하는 macOS에서만 작동한다. UTF-8 문서와 SC_BIDIRECTIONAL_L2R 모드에서만 양방향 행위를 올바르게 보여준다. 특정한 환경에서는 가상 공간 같은 어떤 특징들은 작동하지 않을 수 있다.

비용을 지불하고 싶어하지 않는 어플리케이션도 있으므로 양방향 지원은 명시적으로 활성화해야 한다.

Win32에서 위의 설정이 작동하려면 반드시 먼저 SC_TECHNOLOGY_DIRECTWRITE이나 SC_TECHNOLOGY_DIRECTWRITERETAIN 또는 SC_TECHNOLOGY_DIRECTWRITEDC를 활성화해야 한다.

호출에 성공하면 SCI_GETBIDIRECTIONAL는 설정된 값을 돌려주고 그렇지 않으면 SC_BIDIRECTIONAL_DISABLED (0)을 반환한다.

양방향 모드에서는 불투명 선택 그리기 (SC_LAYER_BASE)를 지원하지 않는다. 대신에 SC_LAYER_UNDER_TEXT or SC_LAYER_OVER_TEXT를 사용하자

SCI_SETKEYSUNICODE(bool keysUnicode)
SCI_GETKEYSUNICODE
3.5.4에서 제거 윈도우즈에서, 문자 키는 보통 다르게 처리된다.신틸라가 광폭 문자 창인지 아니면 좁은 폭 문자 창인지에 따라 문자 메시지를 유니코드로 처리하는지 아니면 8비트로 처리하는지에 따라 다르다. 이 특성을 설정하면 언제나 유니코드로 취급한다. 이 옵션은 델파이에 필요하다.

윈도우즈에서, 신틸라는 더 이상 좁은 폭 문자 창을 지원하지 않는다. 그래서 모든 입력은 언제나 유니코드로 간주된다.

이 특징은 호출해서는 안되는 코드이지만 기존 호출자와의 호환성을 깨트리지 않기 위하여 여전히 정의되어 있다.

SCI_GRABFOCUS
SCI_SETFOCUS(bool focus)
SCI_GETFOCUS → bool
SCI_GRABFOCUS 메시지로 신틸라에게 초점을 잡으라고 명령할 수 있다. GTK에 더욱 필요한데 초점 처리가 윈도우즈보다 더 복잡하기 때문이다.

내부 초점 플래그는 SCI_SETFOCUS로 설정할 수 있다. 복잡한 초점 요구가 있는 클라이언트들이 사용한다. 예를 들어 클라이언트에 실제 초점을 가진 자신만의 창이 있지만 신틸라가 논리적 초첨을 가지고 있다는 사실을 지시할 필요가 있는 경우에 사용한다.

SCI_GETLARGEPOSITIONSUPPORT
2GB를 넘는 문서를 지원하는지 알려준다.

SCI_SUPPORTSFEATURE(int feature) → bool
플랫폼마다 각기 다른 특징을 지원한다. SCI_SUPPORTSFEATURE를 사용하면 현재 어떤 특징을 이용할 수 있는지 알아볼 수 있다. 예를 들어 Win32라면, Direct2D는 투명 줄을 지원하지만 GDI는 그렇지 않다. 그래서SCI_SUPPORTSFEATURE(SC_SUPPORTS_TRANSLUCENT_STROKE)는 Direct2D라면 1을 돌려주고 GDI라면 0을 돌려준다. 앞으로 GDI 플랫폼 레이어 수준에서 또는 특별한 윈도우 버전에서 투명 줄 그리기가 지원될 가능성이 있다. 이렇게 되면 어플리케이션에서 맞춤 설정할 수가 있다: Direct2D에서는 색깔로 채워진 투명박스를 그리지만 GDI에서는 빈 박스를 그릴 수 있다.

질의해 볼 수 있는 특징들:

SC_SUPPORTS_LINE_DRAWS_FINAL 0 이전 위치부터 줄 그리기를 지원하는가. Win32 GDI에서만 적용되지 않는다.
SC_SUPPORTS_PIXEL_DIVISIONS 1 논리 픽셀이 물리 픽셀보다 더 큰가? 현재는 macOS Cocoa 운영체제의 '레티나' 디스플레이에만 적용된다. 그렇다면, 두 배정도로 픽스맵을 선명하게 출력한다.
SC_SUPPORTS_FRACTIONAL_STROKE_WIDTH 2 1.5나 0.5 픽셀 같이 분수 너비로 줄을 그릴 수 있는가?
SC_SUPPORTS_TRANSLUCENT_STROKE 3 줄, 다각형 그리고 원호 등을 투명하게 그릴 수 있는가?
SC_SUPPORTS_PIXEL_MODIFICATION 4 픽셀별로 수정할 수 있는가? 커시스 같은 플랫폼의 문자 셀에는 적용되지 않는다.
SC_SUPPORTS_THREAD_SAFE_MEASURE_WIDTHS 5 다중 쓰레드 하에서 병행적으로 텍스트 측정이 안전하게 수행될 수 있는가?
현재는 macOS Cocoa, Win32의 DirectWrite, 그리고 GTK 또는 Wayland에서만 사용 가능하다.

괄호 강조

SCI_BRACEHIGHLIGHT(int posA, int posB)
SCI_BRACEBADLIGHT(int pos)
SCI_BRACEHIGHLIGHTINDICATOR(bool useSetting, int indicator)
SCI_BRACEBADLIGHTINDICATOR(bool useSetting, int indicator)
SCI_BRACEMATCH(int pos, int maxReStyle) → position
SCI_BRACEMATCHNEXT(position pos, position startPos) → position

SCI_BRACEHIGHLIGHT(int posA, int posB)
'괄호 강조 스타일'로 두 문자까지 강조할 수 있다. 이 스타일은 스타일 번호 STYLE_BRACELIGHT (34)로 설정된다. 들여쓰기 가이드를 활성화 해 두었다면, 그 괄호에 상응하는 들여쓰기도 강조하고 싶을 것이다. SCI_GETCOLUMN로 컬럼의 위치를 찾고 SCI_SETHIGHLIGHTGUIDE로 들여쓰기를 강조할 수 있다.

SCI_BRACEBADLIGHT(int pos)
부합하는 괄호가 없다면 나쁜 괄호 강조 스타일인 스타일 STYLE_BRACEBAD (35)를 사용하여 부합하지 않는 그 괄호를 보여줄 수 있다. INVALID_POSITION (-1) 위치를 선택하면 강조가 제거된다.

SCI_BRACEHIGHLIGHTINDICATOR(bool useSetting, int indicator)
괄호 짝을 강조하는데 스타일을 바꾸는 대신 지정한 표시자를 사용한다.

SCI_BRACEBADLIGHTINDICATOR(bool useSetting, int indicator)
짝이 안 맞는 괄호를 강조하는데 스타일을 바꾸는 대신 지정한 표시자를 사용한다.

SCI_BRACEMATCH(int pos, int maxReStyle) → position

SCI_BRACEMATCH 메시지는 주어진 한쪽 괄호의 pos 위치에서 상응하는 괄호 짝을 찾는다. 처리되는 괄호 문자들은 다음과 같다: '(', ')', '[', ']', '{', '}', '<', 그리고 '>'. 검색은 여는 괄호로부터 앞쪽으로 진행되고 닫는 괄호로부터 거꾸로 진행된다. 해당 위치의 문자가 괄호가 아니면, 또는 일치하는 괄호가 발견되지 않으면, 반환 값은 -1이다. 그렇지 않으면, 반환 값은 일치한 괄호의 위치이다.

부합은 오직 부합하는 괄호의 스타일이 시작 괄호와 같을 경우에만 일어난다. 또는 부합하는 괄호가 스타일링 처리의 대상이 아닐 경우에만 일어난다 (역주 : 부합해야 할 괄호가 화면에 안보이는 곳에 있을 경우). 내포된 괄호는 올바르게 처리된다. maxReStyle 매개변수는 현재 0으로 설정되어 있다 - 앞으로 괄호 검색의 길이를 제한하기 위해 사용될 가능성이 있다.

SCI_BRACEMATCHNEXT(position pos, position startPos) → position
SCI_BRACEMATCH와 비슷하지만, 묵시적으로 다음 위치 pos ± 1에 부합하는 대신에 명시적으로 시작 위치 startPos에 부합한다.

탭과 들여쓰기 가이드

들여쓰기 (줄의 시작에 있는 공백 문자)는 종종 프로그래머가 프로그램 구조를 명확하게 하기 위해 사용한다. 예를 들어, 파이썬 같은 어떤 언어에서는 들여쓰기가 언어 구문의 일부이기도 있다. 탭은 보통 편집기가 탭 문자를 삽입하거나 다음 탭까지 공간 문자로 텍스트를 채우는데 사용된다.

신틸라가 텍스트 일부를 배치할 때, 탭 문자 다음의 텍스트는 보통 왼쪽으로 부터 TABWIDTH 만큼 다음의 열에 보여진다. 그렇지만, 명시적으로 각 줄에 대하여 탭멈춤을 픽셀 단위로 설정할 수 있다.

신틸라는 줄의 처음에서 특별한 방식으로 탭과 백스페이스를 공백 문자로 취급하도록 설정할 수 있다: 탭을 삽입하면 현재 문자 위치에 그냥 탭을 삽입하는 것이 아니라 그 줄을 다음 들여쓰기 위치까지 들여쓴다. 그리고 백스페이스는 문자를 삭제하는 것이 아니라 그 줄을 내어쓴다. 신틸라는 또 들여쓰기 가이드 (수직 줄)를 보여주므로 코드를 만드는데 도움을 줄 수 있다.

SCI_SETTABWIDTH(int tabWidth)
SCI_GETTABWIDTH → int
SCI_SETTABMINIMUMWIDTH(int pixels)
SCI_GETTABMINIMUMWIDTH → int
SCI_CLEARTABSTOPS(int line)
SCI_ADDTABSTOP(int line, int x)
SCI_GETNEXTTABSTOP(int line, int x) → int
SCI_SETUSETABS(bool useTabs)
SCI_GETUSETABS → bool
SCI_SETINDENT(int indentSize)
SCI_GETINDENT → int
SCI_SETTABINDENTS(bool tabIndents)
SCI_GETTABINDENTS → bool
SCI_SETBACKSPACEUNINDENTS(bool bsUnIndents)
SCI_GETBACKSPACEUNINDENTS → bool
SCI_SETLINEINDENTATION(int line, int indentation)
SCI_GETLINEINDENTATION(int line) → int
SCI_GETLINEINDENTPOSITION(int line) → position
SCI_SETINDENTATIONGUIDES(int indentView)
SCI_GETINDENTATIONGUIDES → int
SCI_SETHIGHLIGHTGUIDE(int column)
SCI_GETHIGHLIGHTGUIDE → int

SCI_SETTABWIDTH(int tabWidth)
SCI_GETTABWIDTH → int
SCI_SETTABWIDTHSTYLE_DEFAULT 공간 문자 크기의 두배로 탭의 크기를 설정한다. 기본 탭의 너비는 8 문자이다. 탭 크기에는 제한이 없지만, 1 보다 작은 값이나 커다란 값은 바람직하지 않은 영향을 미칠 수 있다.

SCI_CLEARTABSTOPS(int line)
SCI_ADDTABSTOP(int line, int x)
SCI_GETNEXTTABSTOP(int line, int x) → int
SCI_CLEARTABSTOPS은 한 줄에 있는 명시적인 탭멈춤을 소거한다. SCI_ADDTABSTOP은 왼쪽으로부터 (픽셀 단위로) 지정한 거리에 명시적인 탭멈춤을 추가한다. 그리고 SCI_GETNEXTTABSTOP은 x 위치 다음에 설정된 명시적인 다음 탭멈춤 위치를 얻는다. 아무것도 없으면 0을 얻는다. 탭 멈춤을 바꾸면 SC_MOD_CHANGETABSTOPS이 고지된다.

SCI_SETTABMINIMUMWIDTH(int pixels)
SCI_GETTABMINIMUMWIDTH → int
SCI_SETTABMINIMUMWIDTH는 확실하게 보이도록 탭의 최소 너비를 픽셀 단위로 설정한다. 기본 값은 2이다. 특히 유용한 곳은 소수점 너비의 가변폭 글꼴이다. 탭 앞의 문자가 탭 스탑 바로 앞의 한 픽셀에서 끝나기 있기 때문인데, 이 설정이 없다면 탭은 한 픽셀 너비만큼만 차지하게 되어 버린다. 문서 개요를 보여줄 때, 이를 0으로 설정하면 문서 개요가 좀 더 정상적으로 보이게 된다.

SCI_SETUSETABS(bool useTabs)
SCI_GETUSETABS → bool
SCI_SETUSETABS는 들여쓰기가 탭과 공간문자의 혼합으로부터 취급되어야 하는지 아니면 순수하게 공간문자로만 구성되어야 할지 결정한다. useTabsfalse (0)로 설정하면 모든 탭과 들여쓰기가 공간문자로 만들어진다. 기본값은 true이다. SCI_GETCOLUMN을 사용하면 탭의 너비를 고려한 위치에 있는 컬럼을 얻을 수 있다.

SCI_SETINDENT(int indentSize)
SCI_GETINDENT → int
SCI_SETINDENTSTYLE_DEFAULT 공간 문자의 너비를 고려하여 들여쓰기의 크기를 설정한다. 너비를 0으로 설정하면, 들여 쓰기는 탭의 크기와 같다. 들여쓰기 크기에는 제한이 없지만, 0보다 작거나 커다란 값은 바람직하지 않은 영향을 미칠 수 있다.

SCI_SETTABINDENTS(bool tabIndents)
SCI_GETTABINDENTS → bool
SCI_SETBACKSPACEUNINDENTS(bool bsUnIndents)
SCI_GETBACKSPACEUNINDENTS → bool

들여쓰기 공간 안에서, SCI_SETTABINDENTS 함수로 탭 문자를 삽입하거나 SCI_SETBACKSPACEUNINDENTS 함수로 삭제하는 대신에 탭과 백스페이스 키로 들여쓰고 내어쓸 수 있다.

SCI_SETLINEINDENTATION(int line, int indentation)
SCI_GETLINEINDENTATION(int line) → int
한 줄에서의 들여쓰기 양은 SCI_GETLINEINDENTATIONSCI_SETLINEINDENTATION로 설정하고 알 수 있다. 들여쓰기는 문자 컬럼으로 측정된다. 공간문자의 너비에 상응한다.

SCI_GETLINEINDENTPOSITION(int line) → position
줄에서 들여쓰기의 끝 위치를 돌려준다.

SCI_SETINDENTATIONGUIDES(int indentView)
SCI_GETINDENTATIONGUIDES → int
들여쓰기 가이드는 수직 점선이다. 들여쓰기 크기 만큼의 컬럼마다 들여쓰기 공백안에 나타난다. 어떻게 줄들이 구성되어 있는지 쉽게 볼 수 있다. 특히 여러 페이지에 걸쳐서 늘어날 경우에 좋다. 스타일 STYLE_INDENTGUIDE (37)은 들여쓰기 가이드의 배경색과 전경색을 지정하는데 사용된다.

들여쓰기 가이드 모양은 네가지가 있다. SC_IV_NONE는 특징을 끄지만 다른 세가지 상태는 빈 줄에 얼마나 멀리 가이드가 나타날지 결정한다.

SC_IV_NONE 들여쓰기 가이드가 없다.
SC_IV_REAL 들여쓰기 가이드는 실제 들여쓰기 공백 안에 보여진다.
SC_IV_LOOKFORWARD 들여쓰기 가이드는 실제 들여쓰기를 넘어서 다음 비어-있지 않은 줄의 레벨까지 보여진다. 앞의 비어 있지 않은 줄이 접기 헤더였다면 들여쓰기 가이드는 그 줄보다 한 단계 높은 수준의 들여쓰기로 보여진다. 이 설정은 파이썬에 좋다.
SC_IV_LOOKBOTH 들여쓰기 가이드는 어느쪽이 더 크든 상관없이 실제 들여쓰기를 넘어서 다음 비어-있지 않은 줄이나 앞의 비어-있지 않은 줄의 레벨까지 보여준다. 이 설정은 대부분의 언어에 알맞다.

SCI_SETHIGHLIGHTGUIDE(int column)
SCI_GETHIGHLIGHTGUIDE → int
괄호 강조가 일어날 때, 그 괄호에 상응하는 들여쓰기 가이드는 괄호 강조 스타일 STYLE_BRACELIGHT (34)로 강조된다. column에 0을 설정하면 이 강조를 취소할 수 있다.

표식(Markers)

32 개의 표식이 있다. 번호는 0부터 MARKER_MAX (31)까지 매겨지며, 문서의 줄마다 이들을 얼마든지 조합해 할당할 수 있다. 표식은 텍스트의 왼쪽에 있는 선택 여백에 나타난다. 선택 여백이 너비가 0으로 설정되어 있으면, 대신에 전체 줄의 배경색이 바뀐다. 25번부터 31번까지의 표식은 신틸라가 여백을 접는데 사용하고, 예를 들어, SC_MARKNUM_FOLDEROPEN와 같이 심볼 이름으로 SC_MARKNUM_*와 같은 형태를 가진다.

0번에서 24번까지의 표식 번호는 미리-정의된 기능이 없다; 이를 사용하여 구문 에러를 표식하거나 현재 실행 위치, 정지점, 또는 필요한 대로 얼마든지 표식을 붙일 수 있다. 접기가 필요하지 않으면, 32개 모두 원하는 목적으로 사용해도 된다.

각각의 표식 번호는 그에 연관된 심볼이 있다. 각 표식 번호에 배경색과 전경색도 설정할 수 있다. 그래서 같은 심볼을 다른 색으로 다른 용도에 한 번 이상 사용할 수 있다. 신틸라는 할당할 수 있는 심볼 집합이 있다 (SC_MARK_*). 아니면 문자를 사용할 수 있다. 기본값으로, 32개의 표식 모두 SC_MARK_CIRCLE로 전경색은 검정색이고 배경색은 흰색으로 설정되어 있다.

표식은 (SC_MARK_BAR를 제외하고)번호 순서대로 그려진다. 그래서 번호가 높을 수록 낮은 번호의 표식보다 먼저 나타난다. SC_MARK_BAR 표식이 제일 먼저 그려지므로 가장 낮은 곳에 위치한다. 그래서 종종 변경 이력 때문에 여러 줄을 덮어 버리곤 한다. 그리고 다른 표식들은 개별적으로 줄에 표식을 한다. 표식은 어디로 줄의 시작이 이동하는지 추적함으로써 텍스트와 함께 이동하려고 한다. 줄이 삭제되면, 그의 표식은 OR 연산으로, 다음 줄의 표식과 결합한다.

SCI_MARKERDEFINE(int markerNumber, int markerSymbol)
SCI_MARKERDEFINEPIXMAP(int markerNumber, const char *pixmap)
SCI_RGBAIMAGESETWIDTH(int width)
SCI_RGBAIMAGESETHEIGHT(int height)
SCI_RGBAIMAGESETSCALE(int scalePercent)
SCI_MARKERDEFINERGBAIMAGE(int markerNumber, const char *pixels)
SCI_MARKERSYMBOLDEFINED(int markerNumber) → int
SCI_MARKERSETFORE(int markerNumber, colour fore)
SCI_MARKERSETBACK(int markerNumber, colour back)
SCI_MARKERSETFORETRANSLUCENT(int markerNumber, colouralpha fore)
SCI_MARKERSETBACK(int markerNumber, colour back)
SCI_MARKERSETBACKTRANSLUCENT(int markerNumber, colouralpha back)
SCI_MARKERSETBACKSELECTED(int markerNumber, colour back)
SCI_MARKERSETBACKSELECTEDTRANSLUCENT(int markerNumber, colouralpha back)
SCI_MARKERSETSTROKEWIDTH(int markerNumber, int hundredths)
SCI_MARKERENABLEHIGHLIGHT(bool enabled)
SCI_MARKERSETLAYER(int markerNumber, int layer)
SCI_MARKERGETLAYER(int markerNumber) → int
SCI_MARKERSETALPHA(int markerNumber, alpha alpha)
SCI_MARKERADD(int line, int markerNumber) → int
SCI_MARKERADDSET(int line, int markerSet)
SCI_MARKERDELETE(int line, int markerNumber)
SCI_MARKERDELETEALL(int markerNumber)
SCI_MARKERGET(int line) → int
SCI_MARKERNEXT(int lineStart, int markerMask) → int
SCI_MARKERPREVIOUS(int lineStart, int markerMask) → int
SCI_MARKERLINEFROMHANDLE(int markerHandle) → int
SCI_MARKERDELETEHANDLE(int markerHandle)
SCI_MARKERHANDLEFROMLINE(line line, int which) → int
SCI_MARKERNUMBERFROMLINE(line line, int which) → int

SCI_MARKERDEFINE(int markerNumber, int markerSymbol)
이 메시지들은 0부터 31 범위의 표식 번호를 표식 심볼이나 아스키 문자에 연관짓는다. 일반 목적으로 표식 심볼은 현재 다음과 같다:
SC_MARK_CIRCLE, SC_MARK_ROUNDRECT, SC_MARK_ARROW, SC_MARK_SMALLRECT, SC_MARK_SHORTARROW, SC_MARK_EMPTY, SC_MARK_ARROWDOWN, SC_MARK_MINUS, SC_MARK_PLUS, SC_MARK_ARROWS, SC_MARK_DOTDOTDOT, SC_MARK_BACKGROUND, SC_MARK_LEFTRECT, SC_MARK_FULLRECT, SC_MARK_BOOKMARK, SC_MARK_VERTICALBOOKMARK, 그리고 SC_MARK_UNDERLINESC_MARK_BAR.

SC_MARK_BACKGROUND 표식은 그 줄만 배경색을 바꾼다. SC_MARK_FULLRECT 심볼은 이것을 따라서, 오직 여백의 배경색만 바꾼다. SC_MARK_UNDERLINE는 텍스트를 가로질러 밑줄을 그린다. SC_MARK_EMPTY 심볼은 보이지 않으며, 클라이언트 코드가 줄들의 이동을 추적할 수 있다. 접기 스타일을 바꾸고 하나 이상의 SC_FOLDERNUM_* 표식이 아무 관련 심볼을 가지지 못하도록 하고 싶을 경우에도 사용하면 좋다.

어플리케이션은 표식 SC_MARK_AVAILABLE 심볼을 사용하여 플러그인이 그 표식 번호를 할당할 수 있다는 사실을 가리킬 수 있다.

납작 트리 스타일로 여백을 접는데 사용하도록 디자인된 표식 심볼도 있다.
SC_MARK_BOXMINUS, SC_MARK_BOXMINUSCONNECTED, SC_MARK_BOXPLUS, SC_MARK_BOXPLUSCONNECTED, SC_MARK_CIRCLEMINUS, SC_MARK_CIRCLEMINUSCONNECTED, SC_MARK_CIRCLEPLUS, SC_MARK_CIRCLEPLUSCONNECTED, SC_MARK_LCORNER, SC_MARK_LCORNERCURVE, SC_MARK_TCORNER, SC_MARK_TCORNERCURVE, 그리고 SC_MARK_VLINE.

문자를 표식으로 사용하려면 유니코드 포인트에 SC_MARK_CHARACTER (10000)을 더하면 된다. 예를 들어, '▥' SQUARE WITH VERTICAL FILL (유니코드 포인트 9637)를 표식 번호 1번으로 사용하려면:
SCI_MARKERDEFINE(1, SC_MARK_CHARACTER+9637).

표식 번호 SC_MARKNUM_FOLDERSC_MARKNUM_FOLDEROPEN는 접기가 존재하고 열려 있는지 닫혀 있는지 보여주는데 사용된다. 어떤 심볼이든 이 목적으로 할당할 수 있다. 물론 (SC_MARK_PLUS, SC_MARK_MINUS) 쌍이나 (SC_MARK_ARROW, SC_MARK_ARROWDOWN) 쌍이 좋은 선택이다. 이 두 개 말고도, 납작 트리 스타일에 더 많은 할당이 필요하다: SC_MARKNUM_FOLDEREND, SC_MARKNUM_FOLDERMIDTAIL, SC_MARKNUM_FOLDEROPENMID, SC_MARKNUM_FOLDERSUB, 그리고 SC_MARKNUM_FOLDERTAIL. 접기에 사용되는 비트들은 SC_MASK_FOLDERS으로 지정된다. 일반적으로 여백을 접기에 사용되도록 정의할 때 SCI_SETMARGINMASKN에 건네는 인자로 사용된다.

다음 테이블은 어느 SC_MARK_* 심볼이 어느 SC_MARKNUM_* 표식에 할당되어야 네가지 접기 스타일을 얻는지 보여준다:
화살표 (매킨토시 흉내), 줄이 접히면 '+'로 접기가 열리면 '-'로 보여주는 플러스/마이너스, 동그라미 트리, 상자 트리.

SC_MARKNUM_* 화살표 +/- 동그라미 트리 네모 트리
FOLDEROPEN ARROWDOWN MINUS CIRCLEMINUS BOXMINUS
FOLDER ARROW PLUS CIRCLEPLUS BOXPLUS
FOLDERSUB EMPTY EMPTY VLINE VLINE
FOLDERTAIL EMPTY EMPTY LCORNERCURVE LCORNER
FOLDEREND EMPTY EMPTY CIRCLEPLUSCONNECTED BOXPLUSCONNECTED
FOLDEROPENMID EMPTY EMPTY CIRCLEMINUSCONNECTED BOXMINUSCONNECTED
FOLDERMIDTAIL EMPTY EMPTY TCORNERCURVE TCORNER

Marker samples

SCI_MARKERDEFINEPIXMAP(int markerNumber, const char *pixmap)
표식은 이 메시지로 픽스맵을 설정할 수 있다. XPM 포맷이 픽스맵에 사용된다. 아무 색깔 이름 없이 픽셀당 문자 하나를 사용하는 픽스맵으로 제한된다. 투명 색은 이름을 'None'으로 지어도 된다. 데이터는 반드시 널로 종료되어야 한다. 픽스맵은 SC_MARK_PIXMAP 표식 심볼을 사용한다. XPM 포맷에 관한 완전한 설명은 여기에서 찾을 수 있다.

SCI_RGBAIMAGESETWIDTH(int width)
SCI_RGBAIMAGESETHEIGHT(int height)
SCI_RGBAIMAGESETSCALE(int scalePercent)
SCI_MARKERDEFINERGBAIMAGE(int markerNumber, const char *pixels)
이 메시지로 표식을 투명한 픽스랩으로 설정할 수 있다. RGBA 포맷은 픽스맵에 사용된다. 너비와 높이는 SCI_RGBAIMAGESETWIDTH 메시지와 SCI_RGBAIMAGESETHEIGHT 메시지로 먼저 설정해야 한다.

SCI_RGBAIMAGESETSCALE로 백분율로 비율을 설정해도 된다. 이것은 레티나 디스플레이를 가진 macOS에서 유용하다. 이 디스플레이는 각 화면 표시 단위가 2 픽셀이다: 200%를 사용하면 각 이미지 픽셀마다 화면 픽셀 하나를 사용하여 화면에 표시된다. 레티나 디스플레이에서는 기본 확대 비율 100은 각 이미지 픽셀이 늘어나서 화면에서 4 픽셀을 차지한다.

픽스맵은 SC_MARK_RGBAIMAGE 표식 심볼을 사용한다.

SCI_MARKERSYMBOLDEFINED(int markerNumber) → int
SCI_MARKERDEFINEPIXMAP으로 정의되어 있다면 SCI_MARKERDEFINE이나 SC_MARK_PIXMAP으로 markerNumber에 정의된 심볼을 돌려준다.

SCI_MARKERSETFORE(int markerNumber, colour fore)
SCI_MARKERSETBACK(int markerNumber, colour back)
이 두 메시지는 표식 번호의 전경색과 배경색을 설정한다.

SCI_MARKERSETBACKSELECTED(int markerNumber, colour back)
이 메시지는 접기 블록이 선택될 때 표식 번호의 강조 배경 색을 설정한다. 기본 색상은 #FF0000이다.

SCI_MARKERSETFORE(int markerNumber, colour fore)
SCI_MARKERSETFORETRANSLUCENT(int markerNumber, colouralpha fore)
SCI_MARKERSETBACK(int markerNumber, colour back)
SCI_MARKERSETBACKTRANSLUCENT(int markerNumber, colouralpha back)
이 메시지들은 마커 번호의 전경색과 배경색을 설정한다. TRANSLUCENT 메시지들로 투명도를 정의할 수 있다.
SCI_MARKERSETBACKSELECTED(int markerNumber, colour back)
SCI_MARKERSETBACKSELECTEDTRANSLUCENT(int markerNumber, colouralpha back)
이 메시지들은 접혀진 블록이 선택되어 있을 때 마커 번호의 배경색을 강조할 수 있다. 기본 색깔은 #FF0000이다.

SCI_MARKERSETSTROKEWIDTH(int markerNumber, int hundredths)
이 메시지는 마커를 그리는데 사용되는 스트로크 너비를 한 픽셀을 백분단위로 설정한다. 기본값은 100으로서 한 픽셀의 너비를 가리킨다.

SCI_MARKERENABLEHIGHLIGHT(bool enabled)
이 메시지로 선택되면 강조 접기 블록을 활성화/비활성화 시킨다. (즉, 캐럿을 담고 있는 블록)

SCI_MARKERSETLAYER(int markerNumber, int layer)
SCI_MARKERGETLAYER(int markerNumber) → int
SCI_MARKERSETALPHA(int markerNumber, alpha alpha)
표식이 내용 지역에 그려질 경우, 여백이 없거나 유형이 SC_MARK_BACKGROUND이나 SC_MARK_UNDERLINE이면, 알파 값을 설정하여 투명하게 그릴 수도 있다. 그려질 레이어는 SCI_MARKERSETLAYER로 정의한다. 투명도는 알파 값을 설정하여 결정한다. 이것은 내용 영역에만 적용된다 - 여백이라면 투명도는 SCI_MARKERSET…TRANSLUCENT 메쏘드를 사용하여 얻는다. layer 인자는 다음 중 하나가 될 수 있다:

SC_LAYER_BASE 0 기본 레이어 위에 불투명하게 선택 배경을 그린다.
SC_LAYER_UNDER_TEXT. 1 선택 배경을 투명하게 텍스트 아래에 그린다.
단일 단계 모드에서 작동하지 않는다(SC_PHASES_ONE). 텍스트 아래 단계가 없기 때문이다.
SC_LAYER_OVER_TEXT 2 텍스트 위에 투명하게 선택 배경을 그린다.

SCI_MARKERADD(int line, int markerNumber) → int
이 메시지는 표식 번호 markerNumber를 줄에 설정한다. 실패하면 -1을 돌려준다 (메모리를 벗어난, 불법 줄 번호) 또는 추가된 표식을 식별하는 표식 핸들 번호를 돌려준다. SCI_MARKERLINEFROMHANDLE로 이렇게 반환된 핸들을 사용하면 SCI_MARKERDELETEHANDLE로 줄들을 이동하거나 결합해 그의 핸들에 기반한 표식을 삭제한 후에 그 표식이 어디에 있는지 찾을 수 있다. 메시지는 markerNumber의 값을 점검하지도 않고, 줄에 이미 표식이 들어있는지도 점검하지 않는다.

SCI_MARKERADDSET(int line, int markerSet)
이 메시지는 단 한번의 호출로 하나 이상의 표식을 줄에 추가할 수 있다. SCI_MARKERGET이 돌려주는 32-비트 정수 포맷과 같은 "비트-하나-당-표식-하나"로 지정된다. (그리고 마스크-기반의 검색 함수 SCI_MARKERNEXT 그리고 SCI_MARKERPREVIOUS에도 사용된다). SCI_MARKERADD처럼, 목표 줄에 표식이 이미 있는지 점검하지 않는다.

SCI_MARKERGET(int line) → int
주어진 줄번호에서 주어진 표식 번호를 찾아서 존재하면 삭제한다. 같은 표식을 그 줄에 한 번 이상 추가했다면, 사용될 때마다 하나씩 제거한다. 표식 번호를 -1로 건네면, 그 줄에서 모든 표식이 지워진다.

SCI_MARKERDELETEALL(int markerNumber)
주어진 번호의 표식을 모든 줄에서 제거한다. markerNumber가 -1이면, 모든 줄에서 모든 표식을 지운다.

SCI_MARKERGET(int line) → int
지정 줄에 어느 표식이 있는지 알려주는 32-비트 정수를 돌려준다. 표식 0이 존재하면 비트 0이 설정된다. 표식 1이 존재하면 비트 1이 설정된다. 등등.

SCI_MARKERNEXT(int lineStart, int markerMask) → int
SCI_MARKERPREVIOUS(int lineStart, int markerMask) → int
이 메시지들은 주어진 표식 집합을 포함한 효율적으로 줄들을 탐색한다. 줄 번호 lineStart에서 검색이 시작되서 파일 끝까지 계속된다 (SCI_MARKERNEXT) 아니면 거꾸로 파일의 처음까지 계속된다 (SCI_MARKERPREVIOUS). markerMask 인자는 찾고 싶은 각 표식에 대하여 1 비트를 설정해야 한다. 비트 0을 설정하면 표식 0을 찾고, 비트 1을 설정하면 표식 1을 찾는다. 등등. 메시지는 markerMask에 있는 표식중의 하나를 포함한 첫 줄의 줄 번호를 돌려준다. 표식이 발견되지 않으면 -1을 돌려준다.

SCI_MARKERLINEFROMHANDLE(int markerHandle) → int
markerHandle 인자는 SCI_MARKERADD이 돌려주는 표식에 대한 식별자이다. 이 함수는 문서를 검색해 이 핸들을 가진 표식을 찾아서 그 줄 번호를 돌려준다. 발견되지 않으면 -1을 돌려준다.

SCI_MARKERDELETEHANDLE(int markerHandle)
markerHandle 인자는 SCI_MARKERADD가 돌려주는 표식에 대한 식별자이다. 이 함수는 문서를 검색해 이 핸들을 가진 표식을 찾아 발견되면 그 표식을 삭제한다.

SCI_MARKERHANDLEFROMLINE(line line, int which) → int
SCI_MARKERNUMBERFROMLINE(line line, int which) → int
이 메시지는 line 매개변수에 N번째 표식 번호를 돌려준다. 핸들은 SCI_MARKERADD가 돌려준다. 한 줄 안에 which가 표식 갯수 이상이라면 -1을 돌려준다;

표시자(Indicators)

표시자는 스타일처리 외에 추가 정보를 화면에 보여주는데 사용된다. 예를 들어, 텍스트에 밑줄을 그리거나 텍스트 주위에 상자를 둘러서 구문 에러, 비추천 이름 그리고 나쁜 들여쓰기를 보여주는데 사용할 수 있다.

표시자는 마우스가 위에 올라오거나 캐럿이 그 안으로 들어가면 다양한 "hover" 색과 스타일을 가질 수 있다. 예를 들어 클릭이 가능한 URL을 표시하는데 사용할 수 있다.

원래, 신틸라는 표시자 정보를 스타일 바이트에 저장했지만 이 방법은 제한이 있었다. 그래서 이제는 따로 저장된 32개의 표시자가 사용된다. 스타일 바이트 표시자도 현재 작동하지만, 조만간 제거될 것이다. 그래서 각 스타일 바이트에 있는 모든 비트는 어휘분석 상태에도 사용할 수 있다.

표시자는 간단한 밑줄, 구불구불한 밑줄, 작은 'T' 모양으로 구성된 줄, 빗금 쳐진 줄, 취소선 또는 텍스트를 두른 사각형을 화면에 보여줄 수 있다.

INDIC_HIDDEN으로 어플리케이션의 내용을 추적하는데 사용되면 안 보일 수도 있다.

SCI_INDIC* 메시지로 표시자의 시각적 모습을 설정하고 얻을 수 있다. 모두 0부터 INDICATOR_MAX(35)까지의 indicator 인자를 사용하여 표시자가 스타일 처리하도록 설정한다. 간섭을 방지하기 위하여 표시자 집합을 나누어서 어휘분석기가 사용할 범위는 0..7까지 그리고 컨테이너가 사용할 범위로 8=INDICATOR_CONTAINER .. 31=INDICATOR_IME-1를 지정했고 IME 표시자의 범위는 32=INDICATOR_IME .. 35=INDICATOR_IME_MAX로 구분했다.

.

INDICATOR_* 값은 이전에는 INDIC_CONTAINER, INDIC_IME, INDIC_IME_MAX 그리고 INDIC_MAX로 구별했으나 이 때문에 표시자 스타일과 혼동이 되므로 새로운 이름을 사용해야 한다.

표시자는 실행 길이 인코딩(RLL)과 비슷한 형식으로 저장된다. 이는 성긴 정보에 대하여 속도와 저장이라는 면에서 효율적이다.

표시자는 각 범위에 대하여 서로 다른 값을 저장할 수도 있지만 현재 모든 값은 똑 같이 그려진다. SCI_INDICSETFLAGS API를 사용하면 값마다 다른 색으로 그릴 수 있을 것이다.

처음에 신틸라는 표시자에 다른 테크닉을 사용했지만 이 방식은 제거되었고 해당 API들은 아무 일도 하지 않는다. 두 테크닉을 모두 지원하던 시기에, 새 구현에는 "현대적인 지시자" 라는 용어를 사용했었다.

SCI_INDICSETSTYLE(int indicator, int indicatorStyle)
SCI_INDICGETSTYLE(int indicator) → int
SCI_INDICSETFORE(int indicator, colour fore)
SCI_INDICGETFORE(int indicator) → colour
SCI_INDICSETSTROKEWIDTH(int indicator, int hundredths)
SCI_INDICGETSTROKEWIDTH(int indicator) → int
SCI_INDICSETALPHA(int indicator, alpha alpha)
SCI_INDICGETALPHA(int indicator) → int
SCI_INDICSETOUTLINEALPHA(int indicator, alpha alpha)
SCI_INDICGETOUTLINEALPHA(int indicator) → int
SCI_INDICSETUNDER(int indicator, bool under)
SCI_INDICGETUNDER(int indicator) → bool
SCI_INDICSETHOVERSTYLE(int indicator, int indicatorStyle)
SCI_INDICGETHOVERSTYLE(int indicator) → int
SCI_INDICSETHOVERFORE(int indicator, colour fore)
SCI_INDICGETHOVERFORE(int indicator) → colour
SCI_INDICSETFLAGS(int indicator, int flags)
SCI_INDICGETFLAGS(int indicator) → int

SCI_SETINDICATORCURRENT(int indicator)
SCI_GETINDICATORCURRENT → int
SCI_SETINDICATORVALUE(int value)
SCI_GETINDICATORVALUE → int
SCI_INDICATORFILLRANGE(int start, int lengthFill)
SCI_INDICATORCLEARRANGE(int start, int lengthClear)
SCI_INDICATORALLONFOR(int pos) → int
SCI_INDICATORVALUEAT(int indicator, int pos) → int
SCI_INDICATORSTART(int indicator, int pos) → int
SCI_INDICATOREND(int indicator, int pos) → int
SCI_FINDINDICATORSHOW(int start, int end)
SCI_FINDINDICATORFLASH(int start, int end)
SCI_FINDINDICATORHIDE

SCI_INDICSETSTYLE(int indicator, int indicatorStyle)
SCI_INDICGETSTYLE(int indicator) → int
이 두 메시지는 특별한 표시자를 위한 스타일을 설정하고 얻는다. 표시자 스타일은 현재 다음과 같다:

Indicator samples

심볼 시각적 효과
INDIC_PLAIN 0 한개짜리 직선의 밑줄.
INDIC_SQUIGGLE 1 구불구불한 밑줄.
INDIC_TT 2 작은 T 형태로 구성된 줄.
INDIC_DIAGONAL 3 빗금.
INDIC_STRIKE 4 취소선.
INDIC_HIDDEN 5 시각적 효과 없음.
INDIC_ROUNDBOX 7 텍스트를 둘러싼 모서리가 둥근 사각형. 둘레보다 더 투명하게 내부를 그린다. SCI_INDICSETALPHASCI_INDICSETOUTLINEALPHA를 사용하여 알파 투명도 값을 제어한다. 기본 알파 값은 채움 색상에 30이고 외곽선 색상에 50이 설정되어 있다. 이 표시자는 줄의 최상단 픽셀을 칠하지 않으므로 표시자가 인접한 줄에 있더라도 시각적으로 구별되며 떨어져 보인다.
INDIC_BOX 6 텍스트를 두른 사각 박스.
INDIC_FULLBOX 16 텍스트를 둘러싼 반투명 사각형. INDIC_STRAIGHTBOX와 비슷하게 그려지지만 전체 문자 영역을 덮는다.
INDIC_STRAIGHTBOX 8 투명 그리기를 사용하여 텍스트를 둘러싼 사각형. 보통 테두리보다 내부가 더 투명하다. SCI_INDICSETALPHASCI_INDICSETOUTLINEALPHA를 사용하여 알파 투명 값을 제어할 수 있다. 기본 알파 값은 채움 색상에 30이고 외곽선 색상에 50이 설정되어 있다.
INDIC_DASH 9 파선 밑줄.
INDIC_DOTS 10 점선 밑줄.
INDIC_SQUIGGLELOW 11 INDIC_SQUIGGLE와 비슷하지만 오직 수직으로 2 픽셀만 사용한다. 그래서 작은 폰트 아래에 맞는다.
INDIC_DOTBOX 12 투명 그리기를 사용하여 텍스트를 두른 점선 상자. 투명도는 알파 설정을 사용한다. 좌-상단 픽셀에 설정된 외곽선 알파값과 기본 알파값 사이에서 변한다. SCI_INDICSETALPHASCI_INDICSETOUTLINEALPHA는 알파 투명도를 제어한다. 기본 값은 알파에 30이고 아웃라인 알파에 50이다. 과도한 메모리 할당을 피하기 위해 점선 상자의 최대 크기는 4000 픽셀이다. macOS 카본에서는 사용이 불가능하다.
INDIC_GRADIENT 20 상발 그라디언트. 맨 위는 지정된 색과 알파 값으로 칠하고 아래쪽으로 갈수록 점점 투명하게 칠한다.
INDIC_GRADIENTCENTRE 21 중발 그라디언트. 가운데는 지정된 색과 알파 값으로 칠하고 맨 위와 아래쪽으로 갈수록 점점 투명하게 칠한다.
INDIC_SQUIGGLEPIXMAP 13 INDIC_SQUIGGLE의 일종. 성능을 위해 일련의 줄보다 픽스맵을 사용하여 그린다. GTK에서 INDIC_SQUIGGLE보다 3배에서 6배 빠르다. macOS HiDPI 모드에서 모습은 INDIC_SQUIGGLE에 미치지 못한다.
INDIC_COMPOSITIONTHICK 14 2-픽셀 두께의 밑줄. 문자 바닥 기준선을 건들지 않도록 줄의 아래에 그어진다. 양 옆에 1 픽셀이 들어가 있으므로 이 스타일로 한 범위를 표시하더라도 서로 떨어져 보인다. 아시아 언어의 타겟 입력 상태에 사용되는 모습과 비슷하다.
INDIC_COMPOSITIONTHIN 15 1-픽셀 두께의 밑줄. 줄 바로 아래에 위치한다. 양 옆에 1픽셀이 들어가 있어서 이 스타일로 한 범위를 포괄하는 표시자들은 서로 떨어져 보인다. 이것은 아시아 언어의 조립 입력 상태에 사용되는 모습과 비슷하다.
INDIC_TEXTFORE 17 표시자의 전경색에 맞게 텍스트의 색을 바꾼다.
INDIC_POINT 18 표시자 범위의 시작 부분 바로 아래에 작은 삼각형을 그린다.
INDIC_POINTCHARACTER 19 표시자 범위의 첫 문자 가운데 바로 아래에 작은 삼각형을 그린다.

기본 표시자 스타일은 다음과 같다:
SCI_INDICSETSTYLE(0, INDIC_SQUIGGLE);
SCI_INDICSETSTYLE(1, INDIC_TT);
SCI_INDICSETSTYLE(2, INDIC_PLAIN);

SCI_INDICSETFORE(int indicator, colour fore)
SCI_INDICGETFORE(int indicator) → colour
이 두 메시지는 표시자를 그리는데 사용된 색을 얻고 설정한다. 기본 표시자 색은 다음과 같다:
SCI_INDICSETFORE(0, 0x007f00); (진한 초록색)
SCI_INDICSETFORE(1, 0xff0000); (밝은 빨강색)
SCI_INDICSETFORE(2, 0x0000ff); (밝은 파랑색)

SCI_INDICSETSTROKEWIDTH(int indicator, int hundredths)
SCI_INDICGETSTROKEWIDTH(int indicator) → int

SCI_INDICSETSTROKEWIDTH(int indicator, int hundredths)
SCI_INDICGETSTROKEWIDTH(int indicator) → int
이 두 메시지는 설정하고 표시자를 그리는 데 사용되는 스트로크 너비를 한 픽셀의 100분 단위로 얻거나 설정한다. 기본값은 100으로서 한 픽셀의 너비이다. 어떤 표시자 스타일은 스트로크 너비를 지원하지 않는다. 일반적으로 의미가 없거나 (INDIC_POINT) 복잡해서이다 (INDIC_SQUIGGLEPIXMAP). 스트로크 너비를 지원하는 표시자는 다음과 같다: INDIC_PLAIN, INDIC_SQUIGGLE, INDIC_TT, INDIC_DIAGONAL, INDIC_STRIKE, INDIC_BOX, INDIC_ROUNDBOX, INDIC_STRAIGHTBOX, INDIC_FULLBOX, INDIC_DASH, INDIC_DOTS, INDIC_SQUIGGLELOW.

분수형 픽셀 너비도 가능하다. 예를 들어 50은 한 픽셀의 너비의 반이다. 많은 시스템에서 반 픽셀의 값은 매우 희미한 줄로 보인다. 그러나 논리 픽셀 하나 당 물리 픽셀이 여러개 일 경우는 아주 가는 줄을 그릴 수 있다. macOS의 '레티나' 디스플레이에서는 (논리적인) 반 픽셀도 가능하다. 다음 참조 SC_SUPPORTS_PIXEL_DIVISIONS.

+

SCI_INDICSETALPHA(int indicator, alpha alpha)
SCI_INDICGETALPHA(int indicator) → int
이 두 메시지는 INDIC_ROUNDBOX와 INDIC_STRAIGHTBOX 사각형의 내부를 채우는데 사용된 색의 알파 투명도를 얻고 설정한다. 알파 값은 범위가 0 (완전 투명)에서 255 (불투명)까지이다.

SCI_INDICSETOUTLINEALPHA(int indicator, alpha alpha)
SCI_INDICGETOUTLINEALPHA(int indicator) → int
이 두 메시지는 INDIC_ROUNDBOX 사각형과 INDIC_STRAIGHTBOX 사각형의 외곽선 색을 그리는데 사용되는 알파 투명도를 설정하고 얻는다. 알파 값은 범위가 0 (완전 투명)에서 (완전 불투명)까지 이다.

SCI_INDICSETUNDER(int indicator, bool under)
SCI_INDICGETUNDER(int indicator) → bool
이 두 메시지는 텍스트 아래 또는 위 (기본값)에 표시자를 그릴지 얻고 설정한다. 2 단계 그리기가 활성화 되어 있을 경우에만 텍스트 아래에 표시자를 그릴 수 있다. 비추천된 단일 단계 그리기모드에서 아래에 그리는 것은 작동하지 않는다.

표시자는 RLE 포맷으로 저장된다. 이 인코딩은 정보가 조밀하지 않은 경우 속도와 저장공간에 모두 효율적이다.

각 범위에 대하여 표시자는 다양한 값을 저장할 수 있다. 그러나 현재 모든 값들은 같은 것을 그린다. 앞으로, 다양한 값을 다양한 스타일로 그리는 것이 가능할 것이다.

SCI_INDICSETHOVERSTYLE(int indicator, int indicatorStyle)
SCI_INDICGETHOVERSTYLE(int indicator) → int
SCI_INDICSETHOVERFORE(int indicator, colour fore)
SCI_INDICGETHOVERFORE(int indicator) → colour
이 메시지들은 표시자 위에 마우스가 올라오거나 캐럿이 그 안으로 들어갈 때 표시자를 그리는데 사용되는 색깔과 스타일을 얻고 설정한다. 표시자가 후버 스타일로 그려지면 마우스 커서도 바뀐다. 기본값으로 후버 모습은 정상적인 모습과 똑같다. SCI_INDICSETFORE이나 SCI_INDICSETSTYLE를 호출하면 후버 속성을 리셋한다.

SCI_INDICSETFLAGS(int indicator, int flags)
SCI_INDICGETFLAGS(int indicator) → int
이 메시지들은 표시자와 연관된 플래그들을 설정하고 얻는다. 현재 SC_INDICFLAG_VALUEFORE 한개의 플래그만 정의되어 있다: 이 플래그가 설정되면, 표시자가 사용하는 색깔은 표시자의 전경색 설정으로부터 오지 않고, 대신에 파일에서 지정한 위치에 있는 표시자의 값으로부터 온다. 이렇게 하면 하나의 표시자에 대하여 많은 색을 보여줄 수 있다. 그 값은 RGB 정수 색깔로서 SCI_SETINDICATORVALUE를 호출할 때 SC_INDICVALUEBIT(0x1000000)으로 만들어진다. 값으로부터 색을 찾으려면, SC_INDICVALUEMASK(0xFFFFFF)으로 값을 찾는다.

SCI_SETINDICATORCURRENT(int indicator)
SCI_GETINDICATORCURRENT → int
이 두 메시지는 SCI_INDICATORFILLRANGE(int start, int lengthFill)SCI_INDICATORCLEARRANGE(int start, int lengthClear)를 호출하면 영향을 받는 표시자를 얻고 설정한다.

SCI_SETINDICATORVALUE(int value)
SCI_GETINDICATORVALUE → int
이 두 메시지는 SCI_INDICATORFILLRANGE를 호출하면 설정될 값을 설정하고 얻는다.

SCI_INDICATORFILLRANGE(int start, int lengthFill)
SCI_INDICATORCLEARRANGE(int start, int lengthClear)
이 두 메시지는 현재 표시자에 대하여 범위를 채우거나 지운다. SCI_INDICATORFILLRANGE는 현재 값으로 채운다.

SCI_INDICATORALLONFOR(int pos) → int
일정 위치에서 어느 표시자가 0이 아닌지를 나타내는 비트맵 값을 열람한다. 결과에 오직 앞쪽 32개의 표시자만 표현된다. 그래서 IME 표시자들은 포함되지 않는다.

SCI_INDICATORVALUEAT(int indicator, int pos) → int
한 위치에서 특별한 표시자의 값을 열람한다.

SCI_INDICATORSTART(int indicator, int pos) → int
SCI_INDICATOREND(int indicator, int pos) → int
일정 범위 안의 한 위치에서 값을 하나 취해 그 값으로 범위의 시작과 끝을 찾는다. 문서를 순회하여 표시자의 위치를 모두 발견하는데 사용할 수 있다.

macOS 찾기 표시자

macOS에서 검색에 부합한 것들은 움직이는 모서리가 둥근 사각형으로 강조된다. 표시자가 나타난 다음, 잠시 25% 커졌다가 원래 크기로 돌아와서 사용자의 주의를 끈다. 이 특징은 현재 macOS에서만 구현되어 있지만, 앞으로 다른 플랫폼에서도 구현될 가능성이 있다.

SCI_FINDINDICATORSHOW(int start, int end)
SCI_FINDINDICATORFLASH(int start, int end)
이 두 메시지는 찾기 표시자를 보여주고 활성화한다. 표시자는 SCI_FINDINDICATORSHOW로 여전히 보인다. SCI_FINDINDICATORFLASH로 0.5초 동안 보여준 후 서서히 사라진다. SCI_FINDINDICATORSHOW는 macOS TextEdit과 Safari 어플리케이션과 비슷하게 행동한다. 찾는 목표가 단어인 문서 편집에 잘 맞는다. SCI_FINDINDICATORFLASH는 Xcode와 비슷하고 소스 코드를 편집하는데 알맞다. 소스 편집에서는 보통 일치가 연산자 다음에 위치하는데 표시자의 패딩 아래에 가려서 보이지 않는다.

SCI_FINDINDICATORHIDE
이 메시지는 찾기 표시자를 감춘다.

스타일 바이트 표시자 (비추천)

기본값으로, 신틸라는 각 텍스트 바이트에 연관된 스타일 바이트를 5 비트의 스타일(32개의 스타일) 정보와 3 비트의 표시자(3개의 독립 표시자) 정보로 조직한다. 그래서 구문 에러 비추천 이름 그리고 나쁜 들여쓰기를 모두 한 번에 화면에 보여줄 수 있다.

표시자는 SCI_STARTSTYLING을 사용하여 INDICS_MASK 마스크로 그리고 SCI_SETSTYLING를 사용하여 값 INDIC0_MASK, INDIC1_MASK 그리고 INDIC2_MASK로 설정한다.

어휘분석기가 활성상태인 버퍼에 표시자를 사용한다면 (SCI_SETLEXER 참조), 표시자를 설정하기 전에 어휘분석 상태 정보를 저장하고 앞으로 그것을 복구해야 한다. SCI_GETENDSTYLED를 사용하면 현재 "스타일 처리중인" 위치를 열람할 수 있고 SCI_STARTSTYLING를 사용하면 일을 마친 후 스타일 처리 위치와 마스크를 재설정할 수 있다 (5개의 스타일 비트와 3개의 표시자 비트로 구성된 기본 레이아웃에서 0x1f).

스타일에 사용된 비트의 개수는 SCI_SETSTYLEBITS로 0비트에서 8 비트까지 바꿀 수 있다. 나머지 비트는 표시자에 사용할 수 있다. 그래서 표시자도 1에서 8까지 가능하다. 그렇지만, Scintilla.h에 정의된 INDIC*_MASK 상수는 모두 스타일 정보에 5 비트 그리고 표시자에 3비트를 소비한다. 다르게 정렬하려면, 직접 따로 상수를 정의해야 한다.

이전 버전에서는 스타일 번호와 표시자 사이에 스타일 바이트 분할을 허용했고 이를 설정하고 질의하는 API를 제공했었다.

자동완성

자동완성은 사용자가 타자하는 내용에 기반하여 가능성이 높은 식별자를 리스트 박스에 보여준다. 사용자는 탭 문자를 눌러서 현재 선택된 항목을 고른다. 또는 SCI_AUTOCSETFILLUPS으로 정의된 채움 문자 집합의 구성원인 또다른 문자를 눌러서 현재 선택된 항목을 고른다. 자동완성은 어플리케이션이 촉발시킨다. 예를 들어, C에서 사용자가 방금 fred.를 타자한 것을 탐지했다면 fred를 찾고, 그리고 거기에 가능성 있는 멤버들이 있다면, 자동완성 리스트에 제공할 수 있다. 대안적으로, 타자가 될수록 합리적인 리스트로 선택이 좁아지면 사용자의 타자를 모니터하고 가능성있는 항목 리스트를 제공할 수 있다. 또다른 가능성으로 키 코드를 정의하여 리스트를 활성화할 수도 있다.

사용자가 리스트로부터 선택을 하면 컨테이너에 SCN_AUTOCSELECTION 고지 메시지가 전송된다. 고지를 보내고 다시 돌아오면 신틸라는 선택된 텍스트를 삽입하고 컨테이너에 SCN_AUTOCCOMPLETED 고지 메시지를 전송한다. 예를 들어, 컨테이너가 SCI_AUTOCCANCEL를 전송해서, 자동완성 리스트가 취소되지 않는 한 말이다.

자동완성을 사용하려면 문서에 추가되는 각 문자를 모니터해야 한다. 자동완성의 예는 SciTEBase.cxx에서 SciTEBase::CharAdded()를 참조하자.

SCI_AUTOCSHOW(int lengthEntered, const char *itemList)
SCI_AUTOCCANCEL
SCI_AUTOCACTIVE → bool
SCI_AUTOCPOSSTART → position
SCI_AUTOCCOMPLETE
SCI_AUTOCSTOPS(<unused>, const char *characterSet)
SCI_AUTOCSETSEPARATOR(int separatorCharacter)
SCI_AUTOCGETSEPARATOR → int
SCI_AUTOCSELECT(<unused>, const char *select)
SCI_AUTOCGETCURRENT → int
SCI_AUTOCGETCURRENTTEXT(<unused>, char *text) → int
SCI_AUTOCSETCANCELATSTART(bool cancel)
SCI_AUTOCGETCANCELATSTART → bool
SCI_AUTOCSETFILLUPS(<unused>, const char *characterSet)
SCI_AUTOCSETCHOOSESINGLE(bool chooseSingle)
SCI_AUTOCGETCHOOSESINGLE → bool
SCI_AUTOCSETIGNORECASE(bool ignoreCase)
SCI_AUTOCGETIGNORECASE → bool
SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR(int behaviour)
SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR → int
SCI_AUTOCSETMULTI(int multi)
SCI_AUTOCGETMULTI → int
SCI_AUTOCSETORDER(int order)
SCI_AUTOCGETORDER → int
SCI_AUTOCSETAUTOHIDE(bool autoHide)
SCI_AUTOCGETAUTOHIDE → bool
SCI_AUTOCSETDROPRESTOFWORD(bool dropRestOfWord)
SCI_AUTOCGETDROPRESTOFWORD → bool
SCI_AUTOCSETOPTIONS(int options)
SCI_AUTOCGETOPTIONS → int
SCI_REGISTERIMAGE(int type, const char *xpmData)
SCI_REGISTERRGBAIMAGE(int type, const char *pixels)
SCI_CLEARREGISTEREDIMAGES
SCI_AUTOCSETTYPESEPARATOR(int separatorCharacter)
SCI_AUTOCGETTYPESEPARATOR → int
SCI_AUTOCSETMAXHEIGHT(int rowCount)
SCI_AUTOCGETMAXHEIGHT → int
SCI_AUTOCSETMAXWIDTH(int characterCount)
SCI_AUTOCGETMAXWIDTH → int
SC_ELEMENT_LIST : colouralpha
SC_ELEMENT_LIST_BACK : colouralpha
SC_ELEMENT_LIST_SELECTED : colouralpha
SC_ELEMENT_LIST_SELECTED_BACK : colouralpha

SCI_AUTOCSHOW(int lengthEntered, const char *itemList)
이 메시지는 리스트를 화면에 보여준다. lengthEntered는 이미 입력된 단어의 문자의 개수이다. itemList는 구분 문자로 가른 단어 목록이다. 최초의 구분 문자는 공간문자이지만 이것은 SCI_AUTOCSETSEPARATORSCI_AUTOCGETSEPARATOR로 설정하고 얻을 수 있다.

단어 리스트는 정렬되어 있어야 한다. SCI_AUTOCSETIGNORECASE로 대소문자를 구별하지 않도록 설정되어 있다면, 문자는 먼저 대문자로 변환된 다음 부합된다. 결과적으로 리스트는 글자 다음에 구두점 문자 '[', '\', ']', '^', '_'가 정렬되어야 한다. 리스트 순서를 처리하는 또다른 방식은 SCI_AUTOCSETORDER로 지정해도 된다.

SCI_AUTOCCANCEL
이 메시지는 보여준 자동완성 리스트를 취소한다. 자동완성 모드에서, 식별자를 타자할 때 예를 들어 '.', '(' 또는 '['와 같이 사용자가 자동완성의 대상이 될 수 없는 문자를 타자할 때 리스트는 사라진다. 자동완성을 취소하는 문자 집합은 SCI_AUTOCSTOPS로 지정할 수 있다.

SCI_AUTOCACTIVE → bool
이 메시지는 활성 자동완성 리스트가 있으면 0-아닌 값을 돌려준다. 없으면 0을 돌려준다.

SCI_AUTOCPOSSTART → position
SCI_AUTOCSHOW가 리스트를 화면에 보여주기 시작할 때 현재 위치의 값을 돌려준다.

SCI_AUTOCCOMPLETE
이 메시지는 자동완성을 촉발시킨다. 탭키와 효과가 똑 같다.

SCI_AUTOCSTOPS(<unused>, const char *characterSet)
characterSet 인자는 자동완성 리스트를 자동으로 취소하는 문자들이 담긴 문자열이다. 편집기를 시작하면, 이 리스트는 비어 있다.

SCI_AUTOCSETSEPARATOR(int separatorCharacter)
SCI_AUTOCGETSEPARATOR → int
이 두 메시지는 SCI_AUTOCSHOW 리스트에서 단어들을 가르는데 사용되는 구분 문자를 설정하고 얻는다.

SCI_AUTOCSELECT(<unused>, const char *select)
SCI_AUTOCGETCURRENT → int
이 메시지는 자동완성 리스트에서 항목을 선택한다. 단어 리스트를 검색해 select에 처음으로 부합하는 단어를 찾는다. 기본값으로, 비교는 대소문자를 구분하지만, SCI_AUTOCSETIGNORECASE로 바꿀 수 있다. 문자열의 select의 길이만큼 문자대 문자로 부합한다. 다시 말해, "Fred"가 선택되었다면 "Frederick"이 일치한다. 리스트에서 "Fred"로 시작하는 첫 항목이기 때문이다. 항목이 발견되면, 그것이 선택된다. 항목이 발견되지 않으면, 자동-숨김이 참일 경우 자동완성 리스트는 닫힌다 (SCI_AUTOCSETAUTOHIDE 참조).
현재 선택 지표는 SCI_AUTOCGETCURRENT로 열람할 수 있다.

SCI_AUTOCGETCURRENTTEXT(<unused>, char *text NUL-terminated) → int
이 메시지는 자동완성 리스트에서 현재 선택된 텍스트를 열람한다. 보통 SCN_AUTOCSELECTION 고지가 대신 사용된다.

값은 text 버퍼에 복사되고, 그 길이를 돌려준다 (0종료 문자는 포함하지 않음). 발견되지 않으면, 빈 문자열이 버퍼에 복사되고 0을 돌려준다.

값 인자가 0이면 그 값을 저장하기 위해 할당해야 할 길이가 반환된다; 역시, 0 종료 문자는 포함하지 않는다.

SCI_AUTOCSETCANCELATSTART(bool cancel)
SCI_AUTOCGETCANCELATSTART → bool
기본 행위는 리스트가 화면에 표시될 때 있었던 그 위치로 캐럿이 이동하면 리스트를 취소하는 것이다. 이 메시지를 false 인자로 호출하면, 완성중인 단어의 첫 문자 앞에 캐럿이 이동할 때까지 리스트는 취소되지 않는다.

SCI_AUTOCSETFILLUPS(<unused>, const char *characterSet)
자동완성 리스트가 활성화되어 있을 때 채움 문자가 타자되면, 리스트에서 현재 선택된 항목이 문서에 추가되고, 다음 채움 문자가 추가된다. 일반적인 채움 문자는 '(', '[' 그리고 '.'이지만, 다른 것도 언어에 따라 가능하다. 기본으로, 채움 문자는 설정되어 있지 않다.

SCI_AUTOCSETCHOOSESINGLE(bool chooseSingle)
SCI_AUTOCGETCHOOSESINGLE → bool
SCI_AUTOCSETCHOOSESINGLE(1)을 사용하고 리스트에 항목이 하나 밖에 없다면, 자동으로 그것이 추가되고 리스트는 화면에 나타나지 않는다. 기본값은 항목이 하나 밖에 없더라도 리스트를 보여주는 것이다.

SCI_AUTOCSETIGNORECASE(bool ignoreCase)
SCI_AUTOCGETIGNORECASE → bool
기본으로, 대소문자를 구별하여 문자를 리스트 멤버에 일치시킨다. 이 메시지들로 대소문자 설정을 할 수 있다.

SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR(int behaviour)
SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR → int
자동완성이 대소문자를 구별하지 않도록 설정되어 있더라도 (SCI_AUTOCSETIGNORECASE), 기본값으로 첫 리스트 항목은 입력된 문자들에 대하여 대소문자를 구별하여 선택한다. 이는 SC_CASEINSENSITIVEBEHAVIOUR_RESPECTCASE (0)의 행위 특성에 상응한다. 절대로 대소문자를 구별하지 않도록 자동완성을 하고 싶다면, 다음 SC_CASEINSENSITIVEBEHAVIOUR_IGNORECASE (1)를 설정하자.

SCI_AUTOCSETMULTI(int multi)
SCI_AUTOCGETMULTI → int
여러 선택이 있을 때 자동 완성이 되면, 자동 완성된 텍스트는 SC_MULTIAUTOC_ONCE (0)이면 주 선택 안으로 들어가거나 SC_MULTIAUTOC_EACH (1)으로 각 선택 안으로 들어갈 수 있다. 기본 값은 SC_MULTIAUTOC_ONCE이다.

SCI_AUTOCSETORDER(int order)
SCI_AUTOCGETORDER → int
기본 설정인 SC_ORDER_PRESORTED (0)는 알파벳 숫서로 정렬하여 목록을 제공하기를 요구한다.

SC_ORDER_PERFORMSORT(1)로 어플리케이션 대신에 신틸라에서 리스트를 정렬할 수 있다. 이렇게 하면 시간이 더 걸린다.

알파벳 순서 대신에 어떤 값들을 우선 순위로 보여주고 싶은 어플리케이션은 SC_ORDER_CUSTOM (2)을 사용하면 된다. 이렇게 하면 정렬된 인덱스를 만들기 위해 SCI_AUTOCSHOW에서 추가 처리가 필요하다

반드시 순서를 설정한 다음 SCI_AUTOCSHOW를 호출해야 한다.

SCI_AUTOCSETAUTOHIDE(bool autoHide)
SCI_AUTOCGETAUTOHIDE → bool
기본으로, 리스트는 일치하는 것이 없으면 (리스트 원소에 더 이상 일치하지 않는 문자를 사용자가 타자하고 있다면) 취소된다. 원래의 리스트를 계속해서 화면에 보여주고 싶다면, autoHidefalse로 설정하면 된다. 이것은 또한 SCI_AUTOCSELECT에도 영향을 미친다.

SCI_AUTOCSETDROPRESTOFWORD(bool dropRestOfWord)
SCI_AUTOCGETDROPRESTOFWORD → bool
항목이 선택되면, dropRestOfWordtrue로 설정되어 있을 경우 캐럿 뒤의 단어 들이 먼저 삭제된다. 기본값은 false이다.

SCI_AUTOCSETOPTIONS(int options)
SCI_AUTOCGETOPTIONS → int
다음 목록으로부터 자동완성 옵션을 설정한다.

심볼 목적
SC_AUTOCOMPLETE_NORMAL 0 기본 설정으로 자동완성을 보여준다.
SC_AUTOCOMPLETE_FIXED_SIZE 1 Win32 전용이다. 한 개짜리 목록 대신에 고정 크기의 목록을 사용하며 이 목록은 사용자가 줄일 수 있다. 이렇게 하면 목록 위에 헤더도 피할 수 있다.

SCI_REGISTERIMAGE(int type, const char *xpmData)
SCI_REGISTERRGBAIMAGE(int type, const char *pixels)
SCI_CLEARREGISTEREDIMAGES
SCI_AUTOCSETTYPESEPARATOR(int separatorCharacter)
SCI_AUTOCGETTYPESEPARATOR → int
자동완성 리스트 항목은 텍스트와 더불어 이미지를 보여줄 수 있다. 각 이미지는 먼저 정수 유형으로 등록된다. 그 다음 이 정수는 '?'로 텍스트와 구분된 리스트의 텍스트에 삽입된다. 예를 들어, "fclose?2 fopen"은 문자열 "fclose" 앞에 이미지 2를 보여주고 "fopen" 앞에는 이미지를 보여주지 않는다. 이미지는 XPM 포맷 (SCI_REGISTERIMAGE) 또는 RGBA 포맷 (SCI_REGISTERRGBAIMAGE)이다. SCI_REGISTERRGBAIMAGE에 대하여 높이와 너비는 반드시 먼저 SCI_RGBAIMAGESETWIDTH 메시지와 SCI_RGBAIMAGESETHEIGHT 메시지로 설정해야 한다. (제거 - 이미지는 포맷이 XPM이고 SCI_MARKERDEFINEPIXMAP에 기술한 바와 같다.) 등록된 이미지 집합은 SCI_CLEARREGISTEREDIMAGES로 제거할 수 있고 '?' 가름자는 SCI_AUTOCSETTYPESEPARATOR로 바꿀 수 있다.

SCI_AUTOCSETMAXHEIGHT(int rowCount)
SCI_AUTOCGETMAXHEIGHT → int
자동완성 리스트에서 보여줄 최대 행의 개수를 얻거나 설정한다. 리스트에 행이 넘치면, 수직 스크롤바를 보여준다. 기본값은 5이다.

SCI_AUTOCSETMAXWIDTH(int characterCount)
SCI_AUTOCGETMAXWIDTH → int
자동완성 리스트의 최대 너비를 얻거나 설정한다. 너비는 화면에 완전히 보여줄 가장 긴 항목의 문자 개수로 표현된다. 0(기본)이면 리스트의 너비는 가장 문자의 개수가 많은 항목에 맞추어 계산된다. 허용 너비 안에서 완전히 화면에 보여줄 수 없는 항목은 생략기호로 표시된다.

SC_ELEMENT_LIST : colouralpha
SC_ELEMENT_LIST_BACK : colouralpha
SC_ELEMENT_LIST_SELECTED : colouralpha
SC_ELEMENT_LIST_SELECTED_BACK : colouralpha
Win32에서 자동완성 리스트에 사용되는 색은 SCI_SETELEMENTCOLOUR를 사용하여 바꿀 수 있다.

사용자 리스트

사용자 리스트는 자동완성 리스트와 같은 내부 메커니즘을 사용한다. 그리고 자동완성에 나열된 모든 호출들도 같은 메커니즘 위에 작동한다; 그러므로 자동완성 리스트가 활성화 되어 있는 동안 동시에 사용자 리스트를 화면에 보여줄 수는 없다. 다음과 같은 점에서 다르다:

SCI_USERLISTSHOW(int listType, const char *itemList)

o SCI_AUTOCSETCHOOSESINGLE 메시지는 아무 영향이 없다.
o 사용자가 선택을 하면 SCN_AUTOCSELECTION가 아니라 SCN_USERLISTSELECTION 고지 메시지가 전송된다.

주의: 채움 문자나 중지 문자를 설정했다면, 이 문자들이 여전히 사용자 리스트에 작용하고, 따라서 사용자가 편집기 안으로 타자해 넣으면 항목이 선택되거나 사용자 리스트가 취소되는 수가 있다.

SCI_USERLISTSHOW(int listType, const char *itemList)
listType 매개변수가 SCNotification 구조체의 wParam 필드로 컨테이너에 반환된다. 그것은 0보다 커야 한다. 이것이 바로 신틸라가 자동완성 리스트와 사용자 리스트 사이의 차이를 알려주는 방법이다. 다른 종류의 리스트가 있다면, 예를 들어 버퍼 리스트와 마크로 리스트가 있다면, listType를 사용하면 어느 리스트가 선택을 반환했는지 알려줄 수 있다.

호출정보(Call tips)

콜팁은 함수에 건네는 인자들을 보여주는 작은 창이다. 사용자가 함수의 이름을 타자하고 나면 화면에 보인다. 보통 STYLE_DEFAULT에 정의된 글꼴 대표이름(facename)과 크기 그리고 문자 집합을 사용하여 문자들을 화면에 보여준다. STYLE_CALLTIP을 사용하면 SCI_CALLTIPUSESTYLE으로 대표이름(facename), 크기, 전경색과 배경색 그리고 문자집합을 정의할 수 있다 . 탭 문자도 지원한다. 콜팁을 보여주면 활성 자동완성리스트를 취소하고 그 반대도 마찬가지라는 점에서 콜팁과 자동완성 리스트에 상호작용이 있다.

콜팁은 자신 안의 텍스트 일부를 강조할 수 있다. 이를 사용하면 쉼표의 개수를 세어서 (또는 언어에서 어떤 가름자를 사용할지라도) 함수에 건네는 현재 인자를 강조할 수 있다. 콜팁 사용의 예는 SciTEBase.cxx에서 SciTEBase::CharAdded()를 참조하자.

마우스가 콜팁에 클릭될 수도 있고 그러면 SCN_CALLTIPCLICK 고지가 컨테이너에게 전송된다. 콜팁 안에 작은 위 아래 화살표를 각각 문자 '\001'이나 '\002'를 포함함으로써 보여줄 수 있다. 한 함수의 이름이 다양하게 변화하여 너무 많을 경우에 유용하다. 사용자가 그 화살표를 클릭하면 과적재된 그 이름들을 순환할 수 있다.

대안적으로, 잠시동안 단어 위에 마우스 포인터를 두면 SCN_DWELLSTART 고지에 대한 응답으로 콜팁이 화면에 보일 수 있다. 그리고 SCN_DWELLEND에 대한 응답으로 취소된다. 이 메쏘드를 디버거에 사용하면 변수의 값을 주거나 편집 중에 포인터 아래의 단어에 관한 정보를 줄 수 있다.

SCI_CALLTIPSHOW(int pos, const char *definition)
SCI_CALLTIPCANCEL
SCI_CALLTIPACTIVE → bool
SCI_CALLTIPPOSSTART → position
SCI_CALLTIPSETPOSSTART(int posStart)
SCI_CALLTIPSETHLT(int highlightStart, int highlightEnd)
SCI_CALLTIPSETBACK(colour back)
SCI_CALLTIPSETFORE(colour fore)
SCI_CALLTIPSETFOREHLT(colour fore)
SCI_CALLTIPUSESTYLE(int tabSize)
SCI_CALLTIPSETPOSITION(bool above)

SCI_CALLTIPSHOW(int pos, const char *definition)
이 메시지는 콜팁 창을 화면에 보여줌으로써 프로세스를 시작한다. 콜팁이 이미 활성 상태이면, 아무 효과가 없다.
pos는 문서에서 콜팁을 정렬할 위치이다. 위/아래 화살표를 콜팁 텍스트에 포함하지 않는 한, 콜팁 텍스트는 이 문자 아래의 1번 줄에서 시작하도록 정렬된다. 이 경우 콜팁은 가장 오른쪽 화살표의 오른쪽 끝에 정렬된다. 다음 "\001 1 of 3 \002"과 같은 어떤 것으로 텍스트를 시작할 것이라고 가정한다.
definition은 콜팁 텍스트이다. 여기에는 여러 줄을 '\n' (줄넘김 문자, 아스키 코드 10) 문자로 갈라서 담을 수 있다. '\r' (나르개 복귀문자, 아스키 코드 13)은 절대 포함시키면 안된다. 이렇게 하면 빈 상자를 인쇄할 가능성이 높다. 탭크기를 SCI_CALLTIPUSESTYLE로 설정했다면 '\t' (탭문자, 아스키 코드 9)를 지원한다.

SCI_CALLTIPCANCEL
이 메시지는 보여준 콜팁을 모두 취소한다. 함수의 인자 리스트를 편집하는데 호환되지 않는 키보드 명령어를 사용하면 콜팁을 신틸라가 여러분 대신 취소해 준다.

SCI_CALLTIPACTIVE → bool
콜팁이 활성 상태이면 1을 돌려주고 비활성 상태이면 0을 돌려준다.

SCI_CALLTIPPOSSTART → position
이 메시지는 SCI_CALLTIPSHOW가 콜팁을 화면에 표시하기 시작할 때 현재 위치의 값을 돌려준다.

SCI_CALLTIPSETHLT(int highlightStart, int highlightEnd)
강조 스타일로 화면에 보여줄 콜팁 텍스트의 영역을 설정한다. highlightStart는 문자열에서 강조할 첫 문자의 (0-기반) 지표이다. 그리고 highlightSEnd는 그 강조 뒤의 첫 문자의 지표이다. highlightEnd는 반드시 highlightStart보다 커야 한다; highlightEnd-highlightStart는 강조할 문자의 개수이다. 요구하면 강조는 줄끝을 넘어서 확장할 수 있다.

강조되지 않은 텍스트는 중간 회색으로 그려진다. 선택된 텍스트는 진한 파란색으로 그려진다. 배경은 흰색이다. 이 값들은 SCI_CALLTIPSETBACK, SCI_CALLTIPSETFORE, 그리고 SCI_CALLTIPSETFOREHLT로 바꿀 수있다.

SCI_CALLTIPSETBACK(colour back)
콜팁의 배경색은 이 메시지로 설정할 수 있다; 기본 색은 흰색이다. 진한 색을 배경색으로 설정하는 것은 좋은 생각이 아니다. 왜냐하면 보통 콜팁 텍스트의 기본색은 중간 회색이고 강조 텍스트의 배경색은 진한 파랑색이기 때문이다. 이 메시지는 STYLE_CALLTIP의 배경색도 설정한다.

SCI_CALLTIPSETFORE(colour fore)
콜팁 텍스트의 색깔은 이 메시지로 설정한다; 기본 색은 중간 회색이다. 이는 또 STYLE_CALLTIP의 전경색도 설정한다.

SCI_CALLTIPSETFOREHLT(colour fore)
강조 콜팁 텍스트의 색깔은 이 메시지로 설정한다; 기본 색은 진한 파랑이다.

SCI_CALLTIPUSESTYLE(int tabSize)
이 메시지는 STYLE_DEFAULT의 콜팁에 사용된 스타일을 STYLE_CALLTIP으로 바꾸고 탭 크기를 화면 픽셀 단위로 설정한다. tabsize가 1보다 작으면, 탭 문자는 특별하게 취급되지 않는다. 이 호출을 한 번 사용하고 나면, 콜팁 배경색과 전경색도 그 스타일로부터 얻는다.

SCI_CALLTIPSETPOSITION(bool above)
기본으로 콜팁은 텍스트 아래에 표시된다. above를 true(1)로 설정하면 텍스트 위에 표시된다.

키보드 명령어

컨테이너 어플리케이션이 사용자의 키보드 입력에 대하여 조치를 수행할 수 있도록 하기 위해, 모든 키보드 조치는 메시지이다. 매개변수를 전혀 받지 않는다. 이 명령어들은 또한 SCI_ASSIGNCMDKEY 메시지로 키 묶기를 다시 정의할 때에도 사용된다.

SCI_LINEDOWN SCI_LINEDOWNEXTEND SCI_LINEDOWNRECTEXTEND SCI_LINESCROLLDOWN
SCI_LINEUP SCI_LINEUPEXTEND SCI_LINEUPRECTEXTEND SCI_LINESCROLLUP
SCI_PARADOWN SCI_PARADOWNEXTEND SCI_PARAUP SCI_PARAUPEXTEND
SCI_CHARLEFT SCI_CHARLEFTEXTEND SCI_CHARLEFTRECTEXTEND
SCI_CHARRIGHT SCI_CHARRIGHTEXTEND SCI_CHARRIGHTRECTEXTEND
SCI_WORDLEFT SCI_WORDLEFTEXTEND SCI_WORDRIGHT SCI_WORDRIGHTEXTEND
SCI_WORDLEFTEND SCI_WORDLEFTENDEXTEND SCI_WORDRIGHTEND SCI_WORDRIGHTENDEXTEND
SCI_WORDPARTLEFT SCI_WORDPARTLEFTEXTEND SCI_WORDPARTRIGHT SCI_WORDPARTRIGHTEXTEND
SCI_HOME SCI_HOMEEXTEND SCI_HOMERECTEXTEND
SCI_HOMEDISPLAY SCI_HOMEDISPLAYEXTEND SCI_HOMEWRAP SCI_HOMEWRAPEXTEND
SCI_VCHOME SCI_VCHOMEEXTEND SCI_VCHOMERECTEXTEND
SCI_VCHOMEWRAP SCI_VCHOMEWRAPEXTEND SCI_VCHOMEDISPLAY SCI_VCHOMEDISPLAYEXTEND
SCI_LINEEND SCI_LINEENDEXTEND SCI_LINEENDRECTEXTEND
SCI_LINEENDDISPLAY SCI_LINEENDDISPLAYEXTEND SCI_LINEENDWRAP SCI_LINEENDWRAPEXTEND
SCI_DOCUMENTSTART SCI_DOCUMENTSTARTEXTEND SCI_DOCUMENTEND SCI_DOCUMENTENDEXTEND
SCI_PAGEUP SCI_PAGEUPEXTEND SCI_PAGEUPRECTEXTEND
SCI_PAGEDOWN SCI_PAGEDOWNEXTEND SCI_PAGEDOWNRECTEXTEND
SCI_STUTTEREDPAGEUP SCI_STUTTEREDPAGEUPEXTEND
SCI_STUTTEREDPAGEDOWN SCI_STUTTEREDPAGEDOWNEXTEND
SCI_DELETEBACK SCI_DELETEBACKNOTLINE
SCI_DELWORDLEFT SCI_DELWORDRIGHT SCI_DELWORDRIGHTEND
SCI_DELLINELEFT SCI_DELLINERIGHT SCI_LINEDELETE SCI_LINECUT
SCI_LINECOPY SCI_LINETRANSPOSE SCI_LINEREVERSE SCI_LINEDUPLICATE
SCI_LOWERCASE SCI_UPPERCASE SCI_CANCEL SCI_EDITTOGGLEOVERTYPE
SCI_NEWLINE SCI_FORMFEED SCI_TAB SCI_BACKTAB
SCI_SELECTIONDUPLICATE SCI_VERTICALCENTRECARET
SCI_MOVESELECTEDLINESUP SCI_MOVESELECTEDLINESDOWN
SCI_SCROLLTOSTART SCI_SCROLLTOEND

SCI_*EXTEND 메시지는 선택을 확장한다.

SCI_*RECTEXTEND 메시지는 사각 구역을 확장한다 (그리고 정규 선택을 사각 구역으로 변환한다).

SCI_WORDPART* 명령어는 단어 구획 사이를 이동하는데 사용된다. 구획은 대문자나 (aCamelCaseIdentifier) 또는 밑줄문자 (an_under_bar_ident)로 표식이 붙어 있다.

SCI_WORD[LEFT|RIGHT]END* 명령어는 SCI_WORD[LEFT|RIGHT]*와 비슷하지만 단어 시작이 아니라 단어 끝 사이를 이동한다.

SCI_HOME* 명령어들은 캐럿을 줄의 처음으로 이동시키며, 반면 SCI_VCHOME* 명령어는 이미 거기에 있지 않는 한 캐럿을 비어있지 않은 첫 줄로 (즉, 들여쓰기 바로 뒤로) 이동시킨다; 이경우는 마치 SCI_HOME*처럼 행위한다.

SCI_[HOME|LINEEND]DISPLAY* 명령어는 줄 넘기기 모드에서 화면 줄의 시작이나 끝으로 이동을 허락할 때 사용된다. 대조적으로 보통 SCI_[HOME|LINEEND] 명령어들은 문서의 줄의 시작이나 끝으로 이동한다.

SCI_[[VC]HOME|LINEEND]WRAP* 명령어는 이름대로 SCI_[[VC]HOME|LINEEND]*을 닮았다. 단, 단어-넘기기가 활성화되어 있으면 다르게 행위한다: 먼저 SCI_[HOME|LINEEND]DISPLAY* 처럼 화면 줄의 처음/끝으로 간다. 그러나 커서가 이미 그 점에 있으면, SCI_[[VC]HOME|LINEEND]* 처럼 문서 줄의 처음이나 끝으로 간다.

SCI_SCROLLTO[START|END] 명령어는 문서를 처음이나 끝으로 스크롤한다. 선택에 영향을 주지 않는다. 이 명령어는 macOS 플랫폼에서 home키와 end 키의 관행에 부합한다. 신틸라를 macOS 어플리케이션에 조화시키려면 home키와 end 키를 이 명령어들에 묶으면 된다.

SCI_CANCEL 명령어는 자동완성과 콜팁 표시를 취소하고 추가 선택도 모두 버린다.

키 묶기

키와 명령어의 기본 묶기가 있다. 신틸라 소스 파일 KeyMap.cxx에 상수 KeyMap::MapDefault[]로 정의되어 있다. 다음 테이블은 키 정의를 매개변수 없이 SCI_* 메시지에 짝지어 놓은 것이다 (대부분의 키보드 명령어는 위에서 언급했지만, 인자가 없는 신틸라 명령어는 얼마든지 찍지을 수 있다). 맵핑을 원하는대로 바꿀 수 있다.

SCI_ASSIGNCMDKEY(int keyDefinition, int sciCommand)
SCI_CLEARCMDKEY(int keyDefinition)
SCI_CLEARALLCMDKEYS
SCI_NULL

keyDefinition
키 정의에는 하위 16-비트 키 코드와 상위 16-비트 키 수식자가 포함되어 있다. keyCodekeyMod를 결합하려면 다음과 같이 설정한다:

keyDefinition = keyCode + (keyMod << 16)

키 코드는 보이는 문자나 제어 문자이다. 또는 SCK_* 열거형에서 가져온 키이다. 여기에 포함된 키는 다음과 같다:
SCK_ADD, SCK_BACK, SCK_DELETE, SCK_DIVIDE, SCK_DOWN, SCK_END, SCK_ESCAPE, SCK_HOME, SCK_INSERT, SCK_LEFT, SCK_MENU, SCK_NEXT (Page Down), SCK_PRIOR (Page Up), SCK_RETURN, SCK_RIGHT, SCK_RWIN, SCK_SUBTRACT, SCK_TAB, SCK_UP, 그리고 SCK_WIN.

수식자는 0개 이상의 SCMOD_ALT, SCMOD_CTRL, SCMOD_SHIFT, SCMOD_META 그리고 SCMOD_SUPER를 조합한 것이다. macOS에서 명령어 키는 SCMOD_CTRL에 콘트롤 키는 SCMOD_NORM에 짝지어져 있다. SCMOD_SUPER 는 GTK에서만 사용할 수 있다. 보통 윈도우즈에서는 Windows 키이고 맥에서는 Command키이기 때문이다. 테이블을 구축하려면, SCMOD_NORM을 사용하면 좋다. 이것은 값이 0이고, 아무 수식자도 없다는 뜻이기 때문이다.

Win32에서 Alt를 누른채로 숫자 키패드를 누르면 숫자로 문자를 입력할 수 있다. 이 때문에 우발적으로 숫자 잠기 모드가 풀려버릴 수 있는데 함수 키가 할당되기 때문이다. 그래서 잠재적으로 문제가 있는 키를 무시하도록 했다. 예를 들어, SCMOD_ALT를 설정하면 숫자 키패드가 아니라 메인 커서 키에서 Up 키가 활성화될 때만 SCK_UP이 활성화된다.

SCI_ASSIGNCMDKEY(int keyDefinition, int sciCommand)
주어진 키 정의를 sciCommand로 식별되는 신틸라 명령어에 할당한다. sciCommand는 인자가 없는 SCI_* 명령어면 무엇이든 가능하다.

SCI_CLEARCMDKEY(int keyDefinition)
SCI_NULL를 할당해서 주어진 키 정의가 아무것도 하지 못하도록 만든다.

SCI_CLEARALLCMDKEYS
이 명령어는 빈 맵핑 테이블을 설정하여 모든 키모드 명령어 맵핑을 제거한다.

SCI_NULL
SCI_NULL는 아무것도 하지 않으며 아무 조치도 하지 않는 키에 할당된 값이다. SCI_NULL은 키가 부모 창에 전파되지 못하도록 확인한다. 잘못하면 초점이 이동할 수 있기 때문이다. 표준 플랫폼 행위를 원한다면 대신 상수 0을 사용하면 된다.

편집 메뉴 띄우기

SCI_USEPOPUP(int displayPopUpMode)

SCI_USEPOPUP(int popUpMode)
마우스에서 버튼을 잘못 누르면 짧은 기본 편집 메뉴가 팝업된다. SCI_USEPOPUP(SC_POPUP_NEVER)로 끌 수 있다. 끄면, 문맥 메뉴 명령어를 (윈도우즈에서는 WM_CONTEXTMENU) 신틸라에서 처리하지 못한다. 그래서 신틸라 창의 부모가 그 메시지를 처리할 기회가 있다.

심볼 의미
SC_POPUP_NEVER FALSE 기본 편집 메뉴를 보여주지 않는다.
SC_POPUP_ALL 1 신틸라에 클릭하면 기본 편집 메뉴를 보여준다.
SC_POPUP_TEXT 2 텍스트 구역을 클릭하는 경우에만 기본 편집 메뉴를 보여준다.

매크로 기록

매크로 모드를 시작하고 중지한다. 매크로 기록 모드에서, 조치는 SCN_MACRORECORD 고지를 통하여 컨테이너에게 보고된다. 그러면 앞으로 재생하기 위해 기록하는 일은 컨테이너가 결정할 몫이다.

SCI_STARTRECORD
SCI_STOPRECORD

SCI_STARTRECORD
SCI_STOPRECORD
이 두 메시지는 매크로 기록을 끄고 켠다.

인쇄

윈도우즈에서 SCI_FORMATRANGE는 화면에 텍스트를 그리는데 사용할 수 있다. 여기에는 인쇄 화면이 포함된다. 인쇄 출력은 텍스트 스타일을 화면처럼 보여준다. 그러나 줄 번호 여백을 빼고 모든 여백을 감춘다. 표식은 여백에 보이지 않지만 줄의 배경색이 바뀐다. 선택과 캐럿은 보이지 않는다.

플랫폼마다 다른 디스플레이 ID 유형을 사용하여 인쇄한다. 윈도우즈라면 HDC, GTK 3.x이라면 cairo_t *, 그리고 Cocoa라면 CGContextRef가 사용된다.

SCI_FORMATRANGE(bool draw, Sci_RangeToFormat *fr) → position
SCI_FORMATRANGEFULL(bool draw, Sci_RangeToFormatFull *fr) → position
SCI_SETPRINTMAGNIFICATION(int magnification)
SCI_GETPRINTMAGNIFICATION → int
SCI_SETPRINTCOLOURMODE(int mode)
SCI_GETPRINTCOLOURMODE → int
SCI_SETPRINTWRAPMODE(int wrapMode)
SCI_GETPRINTWRAPMODE → int

SCI_FORMATRANGE(bool draw, Sci_RangeToFormat *fr) → position
SCI_FORMATRANGEFULL(bool draw, Sci_RangeToFormatFull *fr) → position
이 호출로 윈도우즈 사용자는 일정 범위의 텍스트를 장치 문맥 안으로 가공해 넣을 수 있다. 이것을 인쇄에 사용하면, 아마도 페이지 헤더와 푸터를 정렬하고 싶을 것이다; 신틸라는 여러분 대신 이 일을 해주지 않는다. 예제는 SciTEWinDlg.cxx에서 SciTEWin::Print()를 참조하자. 이 메시지를 사용할 때마다 일정 범위의 텍스트를 사각 구역 안으로 가공해 넣고 문서에서 다음으로 인쇄할 문자의 위치를 돌려준다.

draw는 출력이 완료되었는지 제어한다. 페이지를 구성하고 있다면 이를 false로 설정하자 (예를 들어, 이를 MFC에 사용하면 각 페이지를 출력하기 전에 먼저 OnBeginPrinting()에서 페이지를 구성할 필요가 있다.)

64-비트 Win32에서, SCI_FORMATRANGE는 텍스트의 앞부분 2G까지로 제한된다. SCI_FORMATRANGEFULL는 이 제한이 없다.

struct Sci_Rectangle { int left; int top; int right; int bottom; };

struct Sci_RangeToFormat {
    Sci_SurfaceID hdc;        // 인쇄를 보낼 HDC (장치 문맥)
    Sci_SurfaceID hdcTarget;  // 측정에 사용할 HDC (hdc와 같을 수 있음)
    Sci_Rectangle rc;         // 인쇄할 사각구역,
    Sci_Rectangle rcPage;     // 물리적으로 인쇄가능한 페이지 크기,
    Sci_CharacterRange chrg;  // 인쇄할 문자들의 범위
};
struct Sci_RangeToFormatFull { Sci_SurfaceID hdc; // 인새할 Surface ID Sci_SurfaceID hdcTarget; // 측정에 사용될 Surface ID (hdc와 같은 용도) Sci_Rectangle rc; // 인쇄할 사각 구역 Sci_Rectangle rcPage; // 물리적으로 인쇄할 수 있는 페이지 크기 Sci_CharacterRangeFull chrg; // 인쇄할 문자 범위 };

hdchdcTarget은 모두 출력 장치의 (보통 프린터) 장치 문맥 핸들에 설정되어야 한다. 메타파일에 인쇄하면 이것들은 윈도우즈 메타파일과 같지 않다. 윈도우즈 메타파일은 (확장 메타파일과 다르게) 정보를 돌려주기 위한 API를 완전하게 구현하지 않는다. 이 경우, hdcTarget를 화면 DC에 설정하자.
rcPage는 사각 구역 {0, 0, maxX, maxY}으로서 maxX+1maxY+1는 물리적으로 인쇄가능한 x와 y의 픽셀의 개수이다.
rc는 텍스트를 가공해 넣을 사각구역이다 (물론, rcPage가 정의한 사각구역 안에 딱 맞는다).
chrg.cpMinchrg.cpMax는 출력될 문자의 시작 위치와 최대 위치를 정의한다. 이 문자 범위 안에 있는 모든 줄이 그려진다.

코코아에서 뷰의 drawRect 메쏘드가 호출될 때 인쇄를 위한 surface ID는 (draw=1) 현재 문맥의 그래픽 포트가 되어야 한다 ((CGContextRef) [[NSGraphicsContext currentContext] graphicsPort]). Surface ID는 실제로 측정에 사용되지 않지만 (draw=0) 비트맵 문맥을 설정하면 (CGBitmapContextCreate으로 생성) 실행시간 경고를 피할 수 있다.

GTK에서 gtk_print_context_get_cairo_context(context)를 사용하면 인쇄 문맥에서 사용할 수 있는 표면 ID를 알 수 있다.

인쇄할 때, 가장 지겨운 일은 언제나 종이의 인쇄-불능 구역에 어느 정도의 여백을 허용해야 하는지 알아내고 헤더와 푸터를 인쇄한다는 것이다. SciTE의 인쇄 코드를 보면, 대부분의 작업이 이런 일을 하는 것으로 채워진 것을 볼 수 있다. 신틸라가 텍스트를 가공처리하도록 야기하는 회돌이는 아주 단순하다. 모든 여백과 인쇄 불가능 지역, 헤더와 푸터 코드를 모조리 걷어내버리면 된다.

SCI_SETPRINTMAGNIFICATION(int magnification)
SCI_GETPRINTMAGNIFICATION → int
SCI_GETPRINTMAGNIFICATION로 화면 글꼴의 크기와 다르게 인쇄할 수 있다. magnification은 각 화면 글꼴의 크기에 더할 포인터 개수이다. 값이 -3 또는 -4이면 합리적으로 작게 인쇄된다. 이 값은 SCI_GETPRINTMAGNIFICATION으로 얻을 수 있다.

SCI_SETPRINTCOLOURMODE(int mode)
SCI_GETPRINTCOLOURMODE → int
이 두 메시지는 색상 입힌 텍스트를 하얀 색 종이를 사용하는 프린터에 가공해 넣는데 사용할 메쏘드를 얻고 설정한다. 화면이 검정색 배경일 경우 색깔 처리에 주의하는 것이 특히 중요하다. 검은색 배경에 하얀색을 찍으면 토너와 잉크가 그 반대의 경우에 비해 몇 배나 아주 빠르게 고갈된다. 그 모드를 다음 중 하나에 설정할 수 있다:

심볼 목적
SC_PRINT_NORMAL 0 현재 화면 색을 이용하여 인쇄한다. 배경이 하얀색인 줄 번호 여백은 제외한다. 이것이 기본값이다.
SC_PRINT_INVERTLIGHT 1 화면 배경이 검은 색이면 이렇게 해서 잉크를 절약한다. 모든 색깔의 명도를 뒤집어서 하얀 배경에 인쇄한다.
SC_PRINT_BLACKONWHITE 2 모든 텍스트를 하얀 배경에 검은색으로 인쇄한다.
SC_PRINT_COLOURONWHITE 3 하얀 배경에 색깔 그대로 인쇄한다.
SC_PRINT_COLOURONWHITEDEFAULTBG 4 각자의 배경색으로 모든 것을 인쇄한다. 단, STYLE_LINENUMBER 이상의 스타일은 모두 배경을 하얀색으로 칠한다.
SC_PRINT_SCREENCOLOURS 5 배경과 전경을 모두 현재 화면 색을 사용하여 인쇄한다. 이 모드만 줄 번호 여백의 배경을 하얀색으로 설정하지 않는다.

SCI_SETPRINTWRAPMODE(int wrapMode)
SCI_GETPRINTWRAPMODE → int
이 두 함수는 프린터 넘기기 모드를 설정하고 얻는다. wrapModeSC_WRAP_NONE (0), SC_WRAP_WORD (1) 또는 SC_WRAP_CHAR (2)중 하나에 설정할 수 있다. 기본값은 SC_WRAP_WORD이며, 모든 문자들이 인쇄 사각 영역에 맞도록 인쇄된 출력을 넘기낟. SC_WRAP_NONE을 설정하면, 텍스트 각 줄마다 한 줄의 출력을 생성하고 그 줄이 인쇄 영역에 맞지 않게 너무 길면 잘라버린다.
SC_WRAP_WORD는 공백문자 또는 스타일 변화가 지시한 대로 단어들 사이만 접는다. 그렇지만 단어가 줄보다 더 길면, 그 줄이 끝나기 전에 넘기기 된다. 단어 사이에 공백문자가 없는 아시아 언어에서는 SC_WRAP_WORD보다 SC_WRAP_CHAR가 선호된다.

직접 접근

SCI_GETDIRECTFUNCTION → pointer
SCI_GETDIRECTSTATUSFUNCTION → pointer
SCI_GETDIRECTPOINTER → int
SCI_GETCHARACTERPOINTER → int
SCI_GETRANGEPOINTER(int start, int lengthRange) → int
SCI_GETGAPPOSITION → position

윈도우즈에서, 컨테이너와 신틸라 사이에 통신하는데 사용되는 메시지-건네기 체계는 운영 체제 SendMessage 함수로 중재가 되고 격렬하게 호출하면 심각하게 수행성능이 저하될 가능성이 있다. 이런 부담을 피하기 위해, 신틸라에서는 신틸라 메시지 함수를 직접 호출할 수 있다. C/C++로 이렇게 하는 코드는 형태가 다음과 같다:

#include "Scintilla.h"
SciFnDirect pSciMsg = (SciFnDirect)SendMessage(hSciWnd, SCI_GETDIRECTFUNCTION, 0, 0);
sptr_t pSciWndData = (sptr_t)SendMessage(hSciWnd, SCI_GETDIRECTPOINTER, 0, 0);

// 신틸라를 직접 호출할 래퍼
sptr_t CallScintilla(unsigned int iMessage, uptr_t wParam, sptr_t lParam){
    return pSciMsg(pSciWndData, iMessage, wParam, lParam);
}

SciFnDirect와 , SciFnDirectStatus 그리고 sptr_tuptr_tScintilla.h에 선언된다. hSciWnd는 신틸라 창을 만들 때 반환되는 창 핸들이다.

더 빠르지만, 이렇게 직접 호출하면 신틸라 창의 고유한 쓰레드와 다른 쓰레드로부터 수행될 경우에 문제가 야기된다. 이 경우 SendMessage(hSciWnd, SCI_*, wParam, lParam)를 사용하여 그 창의 쓰레드와 동기화해야 한다.

이 특징은 다른 플랫폼에서도 작동하며 속도에 별로 충격을 주지 않는다.

윈도우즈에서 신틸라는 Scintilla_DirectFunction이라고 부르는 함수를 반출한다. 이 함수는 SCI_GETDIRECTFUNCTION가 돌려주는 함수와 똑같이 사용할 수 있다. 이렇게 하면 SCI_GETDIRECTFUNCTION를 호출하지 않아도 되고 함수 포인터를 통하여 신틸라를 호출하지 않아도 된다.

SCI_GETDIRECTFUNCTION → int
이 메시지는 윈도우즈 메시지 시스템을 통과하는 부담없이 신틸라 메시지를 처리하기 위해 호출할 함수의 주소를 돌려준다. 여러분이 만든 신틸라 창의 개수에 상관없이 한 번만 호출하면 된다.

SCI_GETDIRECTSTATUSFUNCTION → pointer
SCI_GETDIRECTFUNCTION와 비슷하지만 반환된 함수는유형이 SciFnDirectStatus이라서 호출자에게 그 상태를 정수 포인터로 돌려준다. 많은 상황에서 상태를 열람하기 위해 따로 또 호출하는 부담을 덜어준다. 그래서 더 빠르다.

SCI_GETDIRECTPOINTER → int
어느 신틸라 창이 사용중인지 식별하는 데이터를 가리키는 포인터를 돌려준다. 신틸라 창이 생성될 때마다 이를 한 번씩 호출해야 한다. direct 함수를 호출하면, 목표 창에 연관된 직접 포인터를 건네야 한다.

SCI_GETCHARACTERPOINTER → int
SCI_GETRANGEPOINTER(int start, int lengthRange) → int
SCI_GETGAPPOSITION → position
신틸라가 문서를 저장하는데 사용하는 읽기 전용 메모리에 임시로 직접 접근할 수 있다.

SCI_GETCHARACTERPOINTER는 문서의 텍스트가 연속적으로 저장되도록 신틸라 안의 빈틈을 이동시킨다. 그리고 그 텍스트 뒤에 NUL 문자가 있는지 확인한다. 다음으로 첫 문자를 가리키는 포인터를 돌려준다. 그러면 어플리케이션은 정규 표현식 검색이나 해석기 같이 문자 포인터를 받는 함수에 이 포인터를 건네면 된다. 그 포인터에 쓰면 안된다. 신틸라 내부의 동기 상태를 깰 수 있기 때문이다.

신틸라에서 어떤 조치도 내부 상태를 바꿀 가능성이 있기 때문에 사용자 인터페이스 행위를 허용하거나 호출한 후에 이 포인터는 효력이 없다. 신틸라를 호출한 후 또는 진도 표시자를 수정하는 것과 같은 사용자-인터페이스 호출을 수행한 후라면 어플리케이션은 포인터를 다시 요구해야 한다.

이 호출은 문서의 끝에 문자를 삽입하는 것과 시간이 비슷하게 걸린다. 그리고 문서의 내용을 이동시킬 수 있다. 특히, 문서 빈틈 뒤의 모든 문자들은 빈틈 앞으로 이동된다. 이렇게 압축된 상태가 유지된다. 문서 내용을 바꾸지 않는 호출과 사용자 인터페이스 조치에 상관없다. 그래서 앞으로 그 포인터를 요구하면 아주 빠르게 응답한다. 전역 교체 연산을 구현하는데 이 호출이 사용된다면, 교체할 때마다 빈틈을 이동시킨다. 그래서 교체마다 SCI_GETCHARACTERPOINTER가 호출되면 그 연산은 성능이 O(n)이 아니라 O(n^2)이 된다. 대신에, 모든 일치가 발견되고 기억된 다음, 모든 교체가 수행되어야 한다.

SCI_GETRANGEPOINTER는 요청된 범위에 직접 접근한다. 틈새는 요청 범위 안에 있는 한 이동하지 않는다. 그래서 이 호출이 SCI_GETCHARACTERPOINTER보다 더 빠르다. 어플리케이션 코드에서 이를 이용하여 텍스트 블록이나 여러 줄을 처리할 수 있다.

SCI_GETGAPPOSITION는 현재 틈새 위치를 돌려준다. 이 힌트를 사용하여 어플리케이션은 틈새가 포함된 범위를 가지고 SCI_GETRANGEPOINTER를 호출하지 않아도 된다. 그리하여 끊임없이 그 틈새를 옮기는 부담을 덜 수 있다.

다중 뷰(Multiple views)

신틸라 창과 그것이 보여주는 문서는 별도의 개체이다. 새로 창을 만들면, 역시 새로 빈 문서를 만든다. 각 문서는 최초에 1로 설정된 참조 카운트가 있다. 문서는 또 자신과 연결된 신틸라 창 리스트가 있다. 그래서 어떤 창이든지 그 문서를 변경하면, 그 문서가 보이는 다른 모든 창에도 갱신하도록 고지가 된다. 시스템은 이런식으로 정렬된다. 하나의 문서를 여러 창에 보여줄 수 있다 (분할된 창에 사용할 수 있다).

이 메시지들은 document *pDoc을 사용하지만, 미래의 신틸라와 호환성을 유지하려면 doc을 불투명 void*로 취급해야 한다. 다시 말해, 이 섹션에서 설명한 대로 포인터를 저장하고 사용할 수 있다. 그러나 참조를 제거하면 안된다.

SCI_GETDOCPOINTER → document *
SCI_SETDOCPOINTER(<unused>, document *doc)
SCI_CREATEDOCUMENT(int bytes, int documentOptions) → document *
SCI_ADDREFDOCUMENT(<unused>, document *doc)
SCI_RELEASEDOCUMENT(<unused>, document *doc)
SCI_GETDOCUMENTOPTIONS → int

SCI_GETDOCPOINTER → document *
현재 창에서 사용중인 문서를 가리키는 포인터를 돌려준다. 다른 영향은 미치지 않는다.

SCI_SETDOCPOINTER(<unused>, document *doc)
이 메시지는 다음과 같은 일을 한다:
1. 현재 문서가 보유한 리스트에서 현재 창을 제거한다.
2. 현재 문서의 참조 카운트를 1만큼 줄인다.
3. 참조 카운트가 0에 이르면, 문서는 삭제된다.
4. doc을 그 창의 새로운 문서로 설정된다.
5. doc이 0이라면, 새로운 빈 문서가 생성되고 창에 부가된다.
6. doc이 0이 아니라면, 참조 카운트가 1만큼 증가한다.

SCI_CREATEDOCUMENT(int bytes, int documentOptions) → document *
이 메시지는 새로운 빈 문서를 만들고 그에 대한 포인터를 돌려준다. 이 문서는 편집기 안으로 선택되어 들어가지 않으며 참조 카운트 1을 가지고 시작한다. 이는 곧 그 문서를 소유하고 있다는 뜻이며 SCI_SETDOCPOINTER을 사용한 후에 그 참조 카운트를 1 만큼 줄여서 신틸라 창이 소유하도록 하거나 아니면 메모리 누수를 피하기 위해 어플리케이션을 닫기 전에 SCI_RELEASEDOCUMENT로 참조 카운트를 반드시 1만큼 줄여야 한다. bytes 인자로 문서에 초기 메모리를 할당한다. 데이터가 추가됨에 따라 버퍼를 늘리기 보다 한 번 할당하는 편이 더 효율적이기 때문이다. SCI_CREATEDOCUMENT가 실패하면 0을 돌려준다.

documentOptions 인자는 메모리 할당과 성능에 영향을 미치는 문서 능력을 선택한다. 다음 옵션 SC_DOCUMENTOPTION_DEFAULT (0)는 표준 옵션이다. SC_DOCUMENTOPTION_STYLES_NONE (0x1)은 문자를 스타일 처리하기 위한 메모리 할당을 멈춘다. 덕분에 메모리가 상당히 절약된다. 전체 문서를 0으로 스타일 처리하면 대략 40%까지 메모리가 절약된다. 어휘분석기는 여전히 표시자를 사용하여 시각적으로 스타일 처리를 할 수 있다.

SC_DOCUMENTOPTION_TEXT_LARGE (0x100) 64 비트 환경에서 2기가 바이트가 넘는 문서를 처리한다.

SC_DOCUMENTOPTION_STYLES_NONE 옵션이면 어휘분석기는 여전히 표시자를 화면에 보여줄 것이다. 어떤 어휘분석기는 접기 정보를 화면에 보여줄 수도 있다. 그렇지만 대부분은 어휘 스타일을 알아야 어떻게 접을지 올바르게 결정할 수 있다. 어떤 경우는 널 어휘분석기 NULL로 설정하는 편이 더 효율적이다. 그러면 어휘분석기가 실행되지 않는다.

SC_DOCUMENTOPTION_TEXT_LARGE 이 옵션을 이용하는 어플리케이션은 자신의 환경에서 이 옵션이 제대로 작동하는지 꼭 확인해야 한다. 구비된 각각의 어휘분석기도 역시 4GB가 넘는 문서에 맞는지 검증해야 한다. 4GB가 넘는 문서를 분석하면 어플리케이션이 많이 느려질 것이다. 그렇다면 SC_DOCUMENTOPTION_STYLES_NONE과 널 어휘분석기 NULL를 사용하거나 아니면 SCI_SETIDLESTYLING 옵션으로 쉬는 시간을 활용한 스타일링을 시도해 볼 수 있다.

+ + + +
심볼 효과
SC_DOCUMENTOPTION_DEFAULT 0 표준 행위
SC_DOCUMENTOPTION_STYLES_NONE 0x1 스타일 처리를 위한 메모리 할당을 중지하고 스타일을 0으로 처리한다.
SC_DOCUMENTOPTION_TEXT_LARGE0x1002 GB 이상의 문서를 허용한다.

SCI_ADDREFDOCUMENT(<unused>, document *doc)
문서의 참조 카운트를 1만큼 증가시킨다. 신틸라 창에 있는 현재 문서를 교체하고 현재 문서의 소유권을 확보하고 싶다면, 예를 들어, 많은 문서를 하나의 창에서 편집하고 있는 중이라면, 다음과 같이 하자:
1. SCI_GETDOCPOINTER를 사용하여 그 문서에 대한 포인터, doc을 얻는다.
2. SCI_ADDREFDOCUMENT(0, doc)를 사용하여 참조 카운트를 늘린다.
3. SCI_SETDOCPOINTER(0, docNew)를 사용하여 다른 문서를 설정하거나 SCI_SETDOCPOINTER(0, 0)로 새로 빈 문서를 설정한다.

SCI_RELEASEDOCUMENT(<unused>, document *doc)
이 메시지는 doc으로 식별된 문서의 참조 카운트를 줄인다. pDoc은 SCI_GETDOCPOINTERSCI_CREATEDOCUMENT의 결과여야 하며 반드시 여전히 존재하는 문서를 가리켜야 한다. 신틸라 창에 여전히 부착된 문서에 참조 카운트 1로 이를 호출하면, 나쁜 일이 생긴다. 모든 것이 제자리에서 돌도록 하려면 SCI_CREATEDOCUMENT이나 SCI_ADDREFDOCUMENT를 호출하는 것과 SCI_RELEASEDOCUMENT를 호출하는 것 사이에 균형을 맞추어야 한다.

SCI_GETDOCUMENTOPTIONS → int
문서를 생성하는 데 사용된 옵션들을 돌려준다.

배경에서 적재하고 저장하기

SCI_CREATELOADER(int bytes, int documentOptions) → int

사용자 인터페이스가 응답하도록 하기 위해, 어플리케이션은 사용자 인터페이스와 별개로 쓰레드를 사용하여 문서를 적재하고 저장하기로 결정할 수 있다.

배경에서 적재하기

어플리케이션은 배경 쓰레드에 할당된 버퍼에 파일을 모두 읽어 들인 다음 사용자 인터페이스 쓰레드에서 그 버퍼 데이터를 신틸라 문서 안으로 추가해 넣을 수 있다. 테크닉은 파일의 완전한 사본을 저장하는데 메모리가 더 필요하며 또한 신틸라가 최초에 줄끝을 발견해 처리하는 데 드는 시간 때문에 사용자 인터페이스가 방해 받는다는 뜻이다.

이 문제를 피하기 위해, 적재 객체를 만들어 파일을 적재하는데 사용할 수 있다. 적재 객체는 ILoader 인터페이스를 지원한다.

SCI_CREATELOADER(int bytes, int documentOptions) → int
ILoader 인터페이스를 지원하는 객체를 만든다. 데이터를 적재하는데 사용하며 신틸라 문서 객체로 변환해 뷰 객체에 붙일 수 있다. bytes 인자는 문서에 최초 메모리 할당을 결정한다. 데이터가 덧붙을 때마다 늘어나는 버퍼에 의존하는 것보다 한 번 할당하는 편이 더 효율적이다. SCI_CREATELOADER가 실패하면 0이 반환된다.

The documentOptions 인자는 메모리 할당과 성능에 영향을 주는 문서의 능력을 선택하기 위해서 미래를 예약되어 있다. 현재 유일한 값은 SC_DOCUMENTOPTION_DEFAULT (0)이다.

ILoader

class ILoader {
public:
        virtual int SCI_METHOD Release() = 0;
        // Returns a status code from SC_STATUS_*
        virtual int SCI_METHOD AddData(char *data, int length) = 0;
        virtual void * SCI_METHOD ConvertToDocument() = 0;
};

어플리케이션은 파일로 읽어 들인 각 데이터 블록을 가지고 AddData 메쏘드를 호출해야 한다. AddData는 메모리 고갈이 일어 나든가 하는 실패가 없는 한 SC_STATUS_OK를 돌려준다. AddData이나 파일 읽기 호출에서 실패가 일어나면 적재는 취소되고 Release 호출로 적재기는 해제된다. 파일을 모두 읽었으면, ConvertToDocument 메쏘드를 호출해 신틸라 문서 포인터를 만들어야 한다. 새로 생성된 문서는 SCI_CREATEDOCUMENT가 돌려주는 문서 포인터처럼 참조 계수가 1이다. ConvertToDocument 다음에 Release를 호출할 필요가 없다.

배경에서 저장하기

어플케이션에서 배경 저장을 하고 싶다면 문서를 SCI_SETREADONLY(1)로 잠궈서 변경을 방지해야 하고 SCI_GETCHARACTERPOINTER로 일관된 문서 내용에 대한 포인터를 확보해야 한다. 잠긴 문서의 버퍼는 이동하지 않는다. 그래서 포인터는 어플리케이션에서 SCI_SETREADONLY(0)를 호출할 때까지 유효하다.

문서가 잠겨 있는 동안 사용자가 변경을 시도하면 SCN_MODIFYATTEMPTRO 고지가 어플리케이션에 전송된다. 그러면 어플리케이션은 고지를 무시할지 아니면 배경 적재 쓰레드를 끝내고 반환되기 전에 먼저 수정을 가능하게 할지 결정할 수 있다.

접기(Folding)

접기의 근본 연산은 줄들을 보이거나 보이지 않게 하는 것이다. 줄의 가시성은 문서의 특성이라기 보다 뷰의 특성이다. 그래서 각 뷰는 다른 줄 집합을 보여준다. 사용자의 관점에서 줄은 접기 점을 사용하여 보여지거나 숨긴다. 일반적으로, 문서의 접기점은 문서 내용의 계통도에 기반한다. 파이썬에서 계통도는 들여쓰기로 결정되고 C++에서는 괄호 문자로 결정된다. 이 계통도는 숫치형 "접기 레벨"을 각 줄에 부착함으로써 신틸라 문서 객체 내에서 표현할 수 있다. 접기 레벨은 대부분 어휘분석기로 쉽게 설정된다. 그러나 메시지로 설정할 수도 있다.

사용자 조치와 접기와 펼치기 사이의 연결을 설정하는 것은 여러분 코드에 달려 있다. 이것이 어떻게 보일지 알 수 있는 가장 좋은 방법은 SciTE 소스 코드를 검색해 이 섹션에 사용된 메시지들을 찾아서 어떻게 사용되는지 보는 것이다. 접기 구현을 완성하려면 표식과 접기 여백을 사용할 필요도 있다. 접기를 활성화하려면 SCI_SETPROPERTY("fold", "1")"fold" 특성을 "1"로 설정하여야 한다.

SCI_VISIBLEFROMDOCLINE(int docLine) → int
SCI_DOCLINEFROMVISIBLE(int displayLine) → int
SCI_SHOWLINES(int lineStart, int lineEnd)
SCI_HIDELINES(int lineStart, int lineEnd)
SC_ELEMENT_HIDDEN_LINE : colouralpha
SCI_GETLINEVISIBLE(int line) → bool
SCI_GETALLLINESVISIBLE → bool
SCI_SETFOLDLEVEL(int line, int level)
SCI_GETFOLDLEVEL(int line) → int
SCI_SETAUTOMATICFOLD(int automaticFold)
SCI_GETAUTOMATICFOLD → int
SCI_SETFOLDFLAGS(int flags)
SC_ELEMENT_FOLD_LINE : colouralpha
SCI_GETLASTCHILD(int line, int level) → int
SCI_GETFOLDPARENT(int line) → int
SCI_SETFOLDEXPANDED(int line, bool expanded)
SCI_GETFOLDEXPANDED(int line) → bool
SCI_CONTRACTEDFOLDNEXT(int lineStart) → int
SCI_TOGGLEFOLD(int line)
SCI_TOGGLEFOLDSHOWTEXT(int line, const char *text)
SCI_FOLDDISPLAYTEXTSETSTYLE(int style)
SCI_FOLDDISPLAYTEXTGETSTYLE → int
SCI_SETDEFAULTFOLDDISPLAYTEXT(<unused>, const char *text)
SCI_GETDEFAULTFOLDDISPLAYTEXT(<unused>, char *text)
SCI_FOLDLINE(int line, int action)
SCI_FOLDCHILDREN(int line, int action)
SCI_FOLDALL(int action)
SCI_EXPANDCHILDREN(int line, int level)
SCI_ENSUREVISIBLE(int line)
SCI_ENSUREVISIBLEENFORCEPOLICY(int line)

SCI_VISIBLEFROMDOCLINE(int docLine) → int
줄들이 접힐 때, 문서에서 특정 줄은 그의 문서 위치와 다른 위치에 보여질 수 있다. 아무 줄도 접히지 않으면, 이 메시지는 docLine을 돌려준다. 그렇지 않으면, 그 화면 줄을 돌려준다 (제일 먼저 보이는 줄을 0으로 간주한다). 보이지 않는 줄의 화면 줄은 바로 앞의 보이는 줄과 같다. 문서의 첫 줄의 화면 줄 번호는 0이다. 접기가 있고 docLine이 문서의 줄 범위를 벗어나면, 반환 값은 -1이다. 줄은 넘기기 되어 있다면 화면 한 줄 이상을 점유할 수 있다.

SCI_DOCLINEFROMVISIBLE(int displayLine) → int
줄들이 감추어지면, 문서에서 특정 줄은 그의 문서 위치와 다른 위치에 보여질 수 있다. 이 메시지는 화면 줄에 상응하는 문서 줄 번호를 돌려준다 (문서의 첫 줄의 화면 줄을 0으로 간주한다). displayLine이 0이하이면, 결과는 0이다. displayLine이 화면에 보이는 줄의 개수보다 더 크면, 그 결과는 문서에 있는 줄의 개수이다.

SCI_SHOWLINES(int lineStart, int lineEnd)
SCI_HIDELINES(int lineStart, int lineEnd)
SC_ELEMENT_HIDDEN_LINE : colouralpha
SCI_GETLINEVISIBLE(int line) → bool
SCI_GETALLLINESVISIBLE → bool
앞의 두 메시지는 일정 범위의 줄을 보이도록 또는 안 보이도록 표식을 설정한 다음 화면을 다시 그린다. SC_ELEMENT_HIDDEN_LINE 이 설정되어 있으면 해당 색으로 수평줄을 그려서 숨은 줄이 있다는 표식을 알려준다. 그 위치에 접힌 줄은 숨은 줄 표식자를 덮어쓴다. SCI_GETLINEVISIBLE는 줄의 가시 상태에 관하여 보고하고 보이면 1을 돌려주고 보이지 않으면 0을 돌려준다. SCI_GETALLLINESVISIBLE은 모든 줄이 보이면 1을 돌려주고 그렇지 않으면 0을 돌려준다. 이 메시지들은 접기 레벨이나 접기 플래그에 아무 영향을 미치지 않는다.

SCI_SETFOLDLEVEL(int line, int level)
SCI_GETFOLDLEVEL(int line) → int
이 두 메시지는 32-비트 값을 얻고 설정한다. 이 값에 한 줄의 접기 레벨 그리고 접기와 연관된 몇가지 플래그가 들어 있다. 접기 레벨은 0부터 SC_FOLDLEVELNUMBERMASK (0x0FFF)까지의 사이에 있는 숫자이다. 그렇지만, 최초의 접기 레벨은 SC_FOLDLEVELBASE (0x400)로 설정되어 접기 레벨에 부호없는 산술 연산을 할 수 있다. 두 가지 플래그 비트가 더 있다. SC_FOLDLEVELWHITEFLAG는 줄이 비어 있고 그의 레벨이 가리키는 것과 약간 다르게 취급할 수 있다고 지시한다. 예를 들어, 빈 줄은 일반적으로 접기 점이 될 수 없으며 비록 접기 레벨이 더 낮다고 할지라도 앞 섹션에 포함된다고 간주한다. SC_FOLDLEVELHEADERFLAG는 그 줄이 헤더라고 알려준다 (접기 점).

SCI_GETFOLDLEVEL(line) & SC_FOLDLEVELNUMBERMASK를 사용하면 줄의 접기 레벨을 얻을 수 있다. 마찬가지로, SCI_GETFOLDLEVEL(line) & SC_FOLDLEVEL*FLAG를 사용하면 플래그의 상태를 얻을 수 있다. 접기 레벨을 설정하려면 관련 플래그들과 OR 연산처리해야 한다. 예를 들면, 레벨을 thisLevel로 설정하고 줄을 접기 점으로 표식하려면 다음을 사용하자: SCI_SETFOLDLEVEL(line, thisLevel | SC_FOLDLEVELHEADERFLAG).

어휘 분석기를 사용하면, SCI_SETFOLDLEVEL를 사용하지 않는 편이 좋다. 왜냐하면 어휘 분석기가 이를 더 잘 처리하기 때문이다. 사용자 접기 요청을 처리하는 법을 결정하려면 SCI_GETFOLDLEVEL를 사용할 필요가 있다. 접기 레벨을 바꾸면, 접기 여백이 여러분의 변경에 부합하도록 갱신된다.

SCI_SETFOLDFLAGS(int flags)
SC_ELEMENT_FOLD_LINE : colouralpha
접기 여백에 표식을 보여주는 것과 더불어, 텍스트 구역에 줄을 그림으로써 접기를 사용자에게 알릴 수 있다. 줄은 SC_ELEMENT_FOLD_LINE 색이 설정되어 있으면 그려진다. 설정되어 있지 않으면 STYLE_DEFAULT에 설정된 전경색이 사용된다. flags에 설정된 비트로 어디에 접기줄이 그려질지 결정된다:

심볼 효과
1 실험적인 특징. 제거됨.
SC_FOLDFLAG_LINEBEFORE_EXPANDED 2 확대되면 위에 그린다
SC_FOLDFLAG_LINEBEFORE_CONTRACTED 4 축소되면 위에 그린다
SC_FOLDFLAG_LINEAFTER_EXPANDED 8 확대되면 아래에 그린다
SC_FOLDFLAG_LINEAFTER_CONTRACTED 16 축소되면 아래에 그린다
SC_FOLDFLAG_LEVELNUMBERS 64 줄 여백에 접기 레벨을 16진수로 보여준다. 접기를 디버깅할 때 유용하다. 이 특징의 모습은 앞으로 바뀔 가능성이 있다.
SC_FOLDFLAG_LINESTATE 128 십육진수로 줄 상태를 여백에 보여주어서 어휘분석과 접기를 디버깅하는데 도움을 준다. SC_FOLDFLAG_LEVELNUMBERS와 동시에 사용하지 않아도 된다.

이 메시지는 화면을 다시 그리게 만든다.

SCI_GETLASTCHILD(int line, int level) → int
이 메시지는 line 다음 줄을 검색한다. 이 줄들은 접기 레벨이 level 이하이다. 그리고 이전의 줄 번호를 돌려준다. level을 -1로 설정하면, levelline 줄의 접기 레벨이 설정된다. from이 접기 점이면, SCI_GETLASTCHILD(from, -1)는 마지막 줄을 돌려준다. 접기 상태를 토글해서 이 줄을 보이게 만들거나 보이지 않게 만든다.

SCI_GETFOLDPARENT(int line) → int
이 메시지는 line 앞 첫 줄의 줄 번호를 돌려준다. 이 줄은 SC_FOLDLEVELHEADERFLAG로 접기 점으로 표식되어 있고 접기 레벨이 line보다 작다. 줄이 발견되지 않거나, 헤더 플래그와 접기 레벨이 일관성이 없으면, 반환 값은 -1이다.

SCI_TOGGLEFOLD(int line)
SCI_TOGGLEFOLDSHOWTEXT(int line, const char *text)
각 접기 점은 확대되어, 자신의 모든 자손 줄들을 화면에 보여주든가, 아니면 수축되어, 모든 자손 줄을 감춘다. 이 메시지는 SC_FOLDLEVELHEADERFLAG이 설정되어 있는 한 주어진 줄의 접기 상태를 토글한다. 이 메시지는 그 줄에 딸린 모든 줄들을 접거나 확대하는 일을 관리한다. 이 메시지 다음에는 화면에 갱신된다.

접힌 텍스트 오른쪽에 선택적인 텍스트 태그를 보여줄 수 있다. SCI_TOGGLEFOLDSHOWTEXT에 건네는 text 인자에 설정하면 된다 . 헤더 줄의 기본 텍스트는 SCI_SETDEFAULTFOLDDISPLAYTEXT로 설정할 수 있다. 텍스트는 STYLE_FOLDDISPLAYTEXT 스타일로 그려진다.

SCI_FOLDDISPLAYTEXTSETSTYLE(int style)
SCI_FOLDDISPLAYTEXTGETSTYLE → int
이 메시지는 접기 텍스트 태그의 모습을 바꾼다.

심볼 효과
SC_FOLDDISPLAYTEXT_HIDDEN 0 텍스트 태그를 보여주지 않는다. 기본값이다.
SC_FOLDDISPLAYTEXT_STANDARD 1 텍스트 태그를 보여준다.
SC_FOLDDISPLAYTEXT_BOXED 2 텍스트 태그 둘레에 상자를 둘려 보여준다.

SCI_SETDEFAULTFOLDDISPLAYTEXT(<unused>, const char *text)
SCI_GETDEFAULTFOLDDISPLAYTEXT(<unused>, char *text) → int
이 메시지는 접힌 텍스트의 오른쪽에 기본 테스트를 보여주거나 설정할 수 있다.

SCI_SETFOLDEXPANDED(int line, bool expanded)
SCI_GETFOLDEXPANDED(int line) → bool
이 메시지는 한 줄의 확대 상태를 설정하고 얻는다. 설정 메시지는 줄의 가시 상태 또는 그에 딸린 모든 줄의 가시 상태에 아무 영향이 없다. 접기 여백의 표식을 바꾼다. 문서 바깥에 있는 줄의 확대 상태를 요구하면, 그 결과는 false (0)이다.

한 줄의 접기 상태를 토글하고 싶을 뿐이라면 그리고 그에 딸린 모든 줄을 처리하고 싶을 뿐이라면, SCI_TOGGLEFOLD를 사용하는 것이 훨씬 더 쉽다. SCI_SETFOLDEXPANDED 메시지를 사용하여 완료할 때까지 화면을 갱신할 필요없이 많은 접기를 처리할 수 있다. 이 메시지의 사용법의 예를 보려면 SciTEBase::FoldAll()SciTEBase::Expand()를 참고하자.

SCI_FOLDLINE(int line, int action)
SCI_FOLDCHILDREN(int line, int action)
SCI_FOLDALL(int action)
확장 플래그들을 설정해서 개별 줄들을 보여주거나 감추는 대신에 이 메시지들은 높은 수준으로 접기에 접근한다. 말이다.

개별적인 접기는 SCI_FOLDLINE로 접거나/펴거나/토글할 수 있다. 모든 자손 폴드에도 영향을 미치려면 SCI_FOLDCHILDREN를 호출한다.

전체 문서에 영향을 주려면 SCI_FOLDALL를 호출한다. SC_FOLDACTION_TOGGLE으로는 문서에서 첫 접기 헤더를 조사하여 펼지 접을지 결정한다.

심볼 효과
SC_FOLDACTION_CONTRACT 0 접기.
SC_FOLDACTION_EXPAND 1 펴기.
SC_FOLDACTION_TOGGLE 2 접기와 펴기 토글.
SC_FOLDACTION_CONTRACT_EVERY_LEVEL 4 SCI_FOLDALL에만 사용되며, SC_FOLDACTION_CONTRACT 또는 SC_FOLDACTION_TOGGLE와 조합하면 최상위 수준 뿐만 아니라 모든 수준을 축소한다.

SCI_EXPANDCHILDREN(int line, int level)
접기 수준이 바뀐 줄 변화에 응답하기 위해 사용된다. 또는 보통 '{'를 추가하거나 제거할 때 헤더가 바뀔 때 사용된다.

컨테이너가 그 줄이 변했다고 고지받기까지, 접기 수준이 이미 설정되어 있으므로, 컨테이너는 이를 호출할 때 이전 수준을 사용해야 한다. 이 줄 아래로 숨겨진 어떠한 범위도 보여져야 하기 때문이다.

SCI_SETAUTOMATICFOLD(int automaticFold)
SCI_GETAUTOMATICFOLD → int
컨테이너에서 접기를 처리하는 로직을 모두 구현하는 대신에, 신틸라는 많은 어플리케이션에 적당한 행위를 제공할 수 있다. automaticFold 인자는 세 가지 접기 구현 중 어느 것이 활성화될지 정의한다. 대부분의 어플리케이션은 독자적으로 접기 구조를 정의하듯이 상당히 다른 행위를 구현하고자 하지 않는 한 SC_AUTOMATICFOLD_SHOWSC_AUTOMATICFOLD_CHANGE 플래그를 사용할 수 있어야 한다. SC_AUTOMATICFOLD_CLICK은 어플리케이션이 클릭 행위를 추가하거나 바꾸고 싶을 때, 예를 들어 Shift+Alt가 클릭해서 합치는데 사용될 때만 메쏘드 헤더를 보여주고 싶을 때 이 설정이 꺼질 가능성이 대단히 높다.

심볼 효과
SC_AUTOMATICFOLD_SHOW 1 필요한 줄들을 자동으로 보여준다. 이렇게 하면 SCN_NEEDSHOWN 고지를 전송하지 않아도 된다.
SC_AUTOMATICFOLD_CLICK 2 접기 여백에서의 클릭을 자동으로 처리한다. 이렇게 하면 접기 여백에 대한 SCN_MARGINCLICK 고지를 전송하지 않아도 된다.
SC_AUTOMATICFOLD_CHANGE 4 접기 구조가 바뀔 때 필요한 줄들을 보여준다. 컨테이너에서 막지 않는 한 SCN_MODIFIED 고지는 여전히 전송된다.

SCI_CONTRACTEDFOLDNEXT(int lineStart) → int
수축된 접기 헤더인 줄들을 효율적으로 검색한다. 문서를 전환할 때 사용자의 접기를 저장하거나 파일로 접기를 저장할 때 유용하다. 검색은 줄 번호 lineStart에서 시작하여 앞으로 줄 끝까지 계속된다. 수축된 접기 헤더이면 lineStart가 반환된다. 그렇지 않으면 다음 수축된 접기 헤더가 반환된다. 더 이상 수축된 접기 헤더가 없다면 -1이 반환된다.

SCI_ENSUREVISIBLE(int line)
SCI_ENSUREVISIBLEENFORCEPOLICY(int line)
줄은 그의 부모 줄중 하나가 수축되기 때문에 보이지 않을 수 있다. 이 메시지들은 둘 다 접기 계통도를 따라 올라가서, 수축된 접기를 최상위 수준에 이를 때까지 확대한다. 그러면 이 줄이 보이게 된다. SCI_ENSUREVISIBLEENFORCEPOLICY를 사용하면, SCI_SETVISIBLEPOLICY에 설정된 수직 캐럿 정책이 적용된다.

줄 넘기기(Line wrapping)

SCI_SETWRAPMODE(int wrapMode)
SCI_GETWRAPMODE → int
SCI_SETWRAPVISUALFLAGS(int wrapVisualFlags)
SCI_GETWRAPVISUALFLAGS → int
SCI_SETWRAPVISUALFLAGSLOCATION(int wrapVisualFlagsLocation)
SCI_GETWRAPVISUALFLAGSLOCATION → int
SCI_SETWRAPINDENTMODE(int wrapIndentMode)
SCI_GETWRAPINDENTMODE → int
SCI_SETWRAPSTARTINDENT(int indent)
SCI_GETWRAPSTARTINDENT → int
SCI_SETLAYOUTCACHE(int cacheMode)
SCI_GETLAYOUTCACHE → int
SCI_SETPOSITIONCACHE(int size)
SCI_GETPOSITIONCACHE → int
SCI_SETLAYOUTTHREADS(int threads)
SCI_GETLAYOUTTHREADS → int
SCI_LINESSPLIT(int pixelWidth)
SCI_LINESJOIN
SCI_WRAPCOUNT(int docLine) → int

기본값으로 신틸라는 텍스트 줄을 넘기지 않는다. 줄 넘기기를 허용하면, 줄이 창너비보다 더 넓을 경우 다음 하위 줄에 계속된다. 줄은 공간문자나 탭문자 뒤에서 또는 다른 스타일이 이어질 때 그 사이에서 분할된다. 한 스타일의 단어가 창보다 더 커서 이것이 불가능하다면 그 줄을 완전히 채우고 난 마지막 문자 뒤에서 줄이 분할된다. 넘기기 모드가 활성화 있으면 수평 스크롤바는 보이지 않는다.

넘긴 줄에 대해서 신틸라는 시각적 플래그를 (작은 화살표) 넘긴 하위 줄 끝에 그리고 다음 하위 줄의 시작에 그릴 수 있다. 개별적으로 활성화할 수 있지만, 신틸라가 시각적 플래그를 다음 하위줄의 시작에 그린다면, 이 하위줄은 한 문자 들여쓰기 된다. 시작에 시각적 플래그를 그리는 것과 별도로 하위줄은 들여쓰기를 가질 수 있다.

신틸라가 사용하는 시간은 대부분 텍스트를 조감하고 그리는데 소비된다. 같은 텍스트 조감 계산이 여러 번 수행될 수 있다. 이 계산에서 사용된 데이터가 변하지 않더라도 말이다. 어떤 상황에서 이런 불필요한 계산을 피하기 위하여, 줄 조감 캐쉬는 계산의 결과를 저장할 수 있다. 캐쉬는 문서의 내용이나 스타일 처리 같이 그 아래의 데이터가 바뀔 때마다 무효가 된다. 전체 문서의 레이아웃을 캐쉬하는 것이 가장 효과적이다. 동적인 줄 넘기기가 거의 20배나 빠르다. 그러나 이렇게 하면 문서 내용이 요구하는 메모리의 7배를 요구하며 줄마다 대략 80바이트를 더 요구한다.

줄 넘기기는 변화가 있다고 해서 바로 수행되지는 않는다. 오히려 화면이 다시 그려질 때까지 지연된다. 이렇게 지연시키면 수행성능이 향상된다. 변화를 모아서 수행하고 한 번에 넘겨서 화면에 보여줄 수 있기 때문이다. 이 때문에, 어떤 연산은 예상대로 일어나지 않는다. 파일이 읽히고 스크롤 위치가 텍스트의 특정 줄로 이동하면, 예를 들어 컨테이너가 이전의 편집 세션을 복구하려고 할 때 그런 일이 일어나면, 스크롤 위치는 넘기기 전에 먼저 결정된다. 그래서 예상치 못한 범위의 텍스트가 화면에 보인다. 그 위치를 올바르게 스크롤하려면, 최초의 SCN_PAINTED 고지를 기다려서 줄넘기기가 수행될 때까지 스크롤을 지연시키면 된다.

SCI_SETWRAPMODE(int wrapMode)
SCI_GETWRAPMODE → int
wrapMode를 다음과 같이 설정한다:

SC_WRAP_WORD (1) 단어 경계 또는 스타일 경계에서 넘긴다.
SC_WRAP_CHAR (2) 문자 사이에서 넘긴다.
SC_WRAP_WHITESPACE (3) 공백 문자에서 넘긴다.
SC_WRAP_NONE (0) 줄 넘기기를 불능으로 만든다.
단어 사이에 공백문자가 없는 아시아 언어에는 SC_WRAP_WORD 보다 SC_WRAP_CHAR가 선호된다.

SCI_SETWRAPVISUALFLAGS(int wrapVisualFlags)
SCI_GETWRAPVISUALFLAGS → int
시각적 플래그 그리기를 활성화하여 줄이 넘겨졌음을 알려준다. wrapVisualFlags로 설정된 비트는 어느 시각적 플래그가 그려질지 결정한다.

심볼 Value 효과
SC_WRAPVISUALFLAG_NONE 0 시각적 플래그 없음
SC_WRAPVISUALFLAG_END 1 넘긴 줄의 하위 줄 끝에 시각적 플래그를 그린다.
SC_WRAPVISUALFLAG_START 2 넘긴 줄의 하위 줄 시작에 시각적 플래그를 그린다.
하위줄 들은 플래그에 여유를 주기 위해 적어도 1 만큼 들여쓰기 된다.
SC_WRAPVISUALFLAG_MARGIN 4 줄번호 여백의 시각적 플래그.

SCI_SETWRAPVISUALFLAGSLOCATION(int wrapVisualFlagsLocation)
SCI_GETWRAPVISUALFLAGSLOCATION → int
줄이 넘겨진 것을 가리키는 시각적 플래그가 텍스트의 가깝게 그려질지 아니면 경계에 가깝게 그려질지 설정할 수 있다. wrapVisualFlagsLocation에 설정된 비트는 상응하는 시각적 플래그에 대하여 그 위치를 텍스트에 가깝게 설정한다.

심볼 효과
SC_WRAPVISUALFLAGLOC_DEFAULT 0 경계 가까이 시각적 플래그를 그린다
SC_WRAPVISUALFLAGLOC_END_BY_TEXT 1 하위 줄 끝의 시각적 플래그는 텍스트에 가깝게 그려진다
SC_WRAPVISUALFLAGLOC_START_BY_TEXT 2 하위 줄의 시작의 시각적 플래그는 텍스트 가까이 그려진다

SCI_SETWRAPINDENTMODE(int wrapIndentMode)
SCI_GETWRAPINDENTMODE → int
넘긴 하위줄들은 첫 하위 줄의 위치까지 또는 한 단계 더 들여쓰기 될 수 있다. 기본값은 SC_WRAPINDENT_FIXED이다. 모드는 다음과 같다:

심볼 효과
SC_WRAPINDENT_FIXED 0 넘긴 하위줄들이 창의 왼쪽 SCI_SETWRAPSTARTINDENT에 정의된 양만큼 더한 위치에 정렬된다.
SC_WRAPINDENT_SAME 1 넘긴 하위줄들이 첫 하위줄 들여쓰기에 정렬된다
SC_WRAPINDENT_INDENT 2 넘긴 하위줄들이 첫 하위줄 들여쓰기에 한 레벨 이상의 들여쓰기를 더한 위치에 정렬된다.
SC_WRAPINDENT_DEEPINDENT 3 넘긴 하위 줄들이 첫 하위줄 들여쓰기에다 두 레벨 이상의 들여쓰기를 더한 위치에 정렬된다

SCI_SETWRAPSTARTINDENT(int indent)
SCI_GETWRAPSTARTINDENT → int
SCI_SETWRAPSTARTINDENTSTYLE_DEFAULT 스타일로 문자의 평균 너비의 관점에서 넘긴 줄들에 대하여 하위줄들의 들여쓰기 크기를 설정한다. 들여쓰기 크기에는 제한이 없지만, 0보다 작은 값이나 방대한 값은 바람직하지 않은 결과를 초래할 수 있다.
하위 줄들의 들여쓰기는 시각적 플래그와 무관하지만, SC_WRAPVISUALFLAG_START이 설정되어 있으면 적어도 1 만큼의 들여쓰기가 사용된다.

SCI_SETLAYOUTCACHE(int cacheMode)
SCI_GETLAYOUTCACHE → int
테이블에 있는 심볼중의 하나를 cacheMode에 설정할 수 있다:

심볼 다음 줄들에 대한 레이아웃 캐쉬
SC_CACHE_NONE 0 아무 줄도 캐쉬되지 않는다.
SC_CACHE_CARET 1 텍스트 캐럿이 있는 줄(기본값)
SC_CACHE_PAGE 2 캐럿이 있는 줄 그리고 보이는 줄
SC_CACHE_DOCUMENT 3 문서 안의 모든 줄

SCI_SETPOSITIONCACHE(int size)
SCI_GETPOSITIONCACHE → int
위치 캐쉬는 짤막한 텍스트들의 위치 정보를 저장한다. 그래서 그 짤막한 텍스트가 다시 나타나면 레이아웃을 더 빠르게 결정할 수 있다. 이 캐쉬의 엔트리 크기는 SCI_SETPOSITIONCACHE로 설정할 수 있다.

SCI_SETLAYOUTTHREADS(int threads)
SCI_GETLAYOUTTHREADS → int
줄이 길 때 길이를 측정하거나 래핑하는데 걸리는 시간을 SC_SUPPORTS_THREAD_SAFE_MEASURE_WIDTHS을 사용해 다중 스레드에서 작업을 한다면 개선할 수 있다. 극적으로 속도가 개선된다. - 4개의 코어 정도면 텍스트 레이아웃 시간을 싱글쓰레드에 비해 4배 이상 줄일 수 있다.

기본 값은 메인 쓰레드만 사용하지만 어플리케이션에서는 SCI_SETLAYOUTTHREADS를 호출하여 사용할 최대 쓰레드 개수를 지정할 수 있다. 쓰레드의 갯수는 시스템 하드웨어의 병행성에 제한된다. - 하이퍼 쓰레드 4코어이면 8이 적당하다. 어플리케이션에서 최대로 병행성을 이용하고 있다면 큰 값을 가지고 SCI_SETLAYOUTTHREADS(1000) 호출하면 된다. 적당한 값으로 알아서 줄여줄 것이다.

SCI_LINESSPLIT(int pixelWidth)
목표가 가리키는 범위의 줄들을 최대 pixelWidth 너비의 줄들로 분리한다. 가능하면 줄 넘기기와 비슷한 방식으로 나누기는 단어 경계에서 일어난다. pixelWidth가 0이면 창의 너비가 사용된다.

SCI_LINESJOIN
목표가 가리키는 범위의 줄들을 줄끝 문자를 제거해서 한 줄로 결합한다. 이렇게 해서 단어 사이에 공간이 없으면, 공간문자가 추가로 삽입된다.

SCI_WRAPCOUNT(int docLine) → int
문서 줄들은 넘기기 되어 있으면 하나 이상의 화면 줄을 점유할 수 있다. 문서 한 줄을 넘기는데 필요한 화면 줄의 개수를 돌려준다.

확대

신틸라는 "확대 비율"을 갖추고 있다. 문서의 모든 텍스트를 1 포인트씩 더 크게 또는 더 작게 만들 수 있다. 화면 글꼴 크기는 어떤 확대 배율을 설정하더라도 2 보다 작을 수 없다. 확대 배율은 -10에서 +20 포인트 범위에서 설정할 수 있다.

SCI_ZOOMIN
SCI_ZOOMOUT
SCI_SETZOOM(int zoomInPoints)
SCI_GETZOOM → int

SCI_ZOOMIN
SCI_ZOOMOUT
SCI_ZOOMIN는 현재 확대 배율이 20 포인트 보다 작다면 확대 배율을 1 포인트 증가시킨다. SCI_ZOOMOUT는 현재 확대 배율이 -10 포인트 보다 크다면 확대 배율을 1 포인트 감소시킨다.

SCI_SETZOOM(int zoomInPoints)
SCI_GETZOOM → int
이 메시지들로 확대 배율을 직접 설정하고 얻을 수 있다. 설정할 수 있는 확대 배율에는 제한이 없다. 그래서 점진적인 확대 기능에 부합하기 위하여 -10에서 +20 사이로 제한을 두는 것이 좋은 생각이다.

긴 줄

주어진 길이를 초과하는 줄에 표식을 할 수 있다. 수직 줄을 그리거나 지정 길이를 초과하는 문자들의 배경색을 바꾸면 된다.

SCI_SETEDGEMODE(int edgeMode)
SCI_GETEDGEMODE → int
SCI_SETEDGECOLUMN(int column)
SCI_GETEDGECOLUMN → int
SCI_SETEDGECOLOUR(colour edgeColour)
SCI_GETEDGECOLOUR → colour

SCI_MULTIEDGEADDLINE(int column, colour edgeColour)
SCI_MULTIEDGECLEARALL
SCI_GETMULTIEDGECOLUMN(int which) → position

SCI_SETEDGEMODE(int edgeMode)
SCI_GETEDGEMODE → int
이 두 메시지는 긴 줄을 보여주는데 사용된 모드를 얻거나 설정한다. 테이블에 있는 값들 중 하나를 설정할 수 있다:

심볼 긴 줄 보여주기 모드
EDGE_NONE 0 긴 줄에 표식이 붙지 않는다. 이것이 기본 상태이다.
EDGE_LINE 1 SCI_SETEDGECOLUMN에 설정된 컬럼 번호에 수직 줄이 그려진다. 이것은 고정폭 글꼴에 잘 작동한다. 줄은 STYLE_DEFAULT의 공간 문자의 너비에 기반하여 위치에 그려진다. 그래서 스타일에서 가변폭 글꼴을 사용하고 있거나 스타일이 폰크 크기를 바꾸거나 아니면 볼드체와 이탤릭 그리고 정상 텍스트를 섞어서 사용하면 잘 작동하지 않을 수 있다.
EDGE_BACKGROUND 2 지정 컬럼 한계 다음의 문자의 배경색은 SCI_SETEDGECOLOUR이 설정한 색으로 바뀐다. 이것은 가변폭 글꼴에 권장한다.
EDGE_MULTILINE 3 EDGE_LINE과 비슷하지만 한 줄만 보여주는 것과 대조적으로, 구성이 가능한 수직 줄들을 동시에 보여줄 수 있다. edgeMode 는 완전히 독립적인 데이터 집합을 사용한다. 구성하려면 SCI_MULTIEDGE* 메시지들을 사용해야 한다.

SCI_SETEDGECOLUMN(int column)
SCI_GETEDGECOLUMN → int
이 메시지들은 긴 줄 표식을 보여줄 컬럼 번호를 얻고 설정한다. 줄을 그릴 때, 컬럼은 STYLE_DEFAULT의 공간 문자의 너비를 단위로 하여 위치를 설정한다. 배경색을 설정할 때, 컬럼은 문자 그 줄에 포함된 문자 개수이다 (탭문자 허용).

SCI_SETEDGECOLOUR(colour edgeColour)
SCI_GETEDGECOLOUR → colour
이 메시지들은 SCI_SETEDGECOLUMN에 설정된 길이를 초과한 줄을 보여주는데 사용된 표식을 색을 얻고 설정한다.

SCI_MULTIEDGEADDLINE(int column, colour edgeColour)
SCI_MULTIEDGECLEARALL
SCI_GETMULTIEDGECOLUMN(int which) → position
SCI_MULTIEDGEADDLINE는 뷰에 세로 경계선을 새로 추가한다. 경계선은 주어진 열 번호에 표시된다. 결과로 나온 경계선 위치는 STYLE_DEFAULT에 정의된 공백 문자의 척도에 달려 있다. 모든 경계선은 SCI_MULTIEDGECLEARALL으로 소거할 수 있다. SCI_GETMULTIEDGECOLUMN 메시지는 N번째 수직 가장자리를 가리키는 열을 돌려준다 (0부터 시작). which 매개변수가 수직선의 갯수보다 크거나 같으면 -1을 돌려준다.

어휘분석기

여러 언어로 파일을 스타일처리하려면, 다양한 '어휘분석기'가 사용된다. 어휘분석기는 한 범위의 텍스트와 문맥 정보와 함께 신틸라가 호출한다. 그러면 스타일을 설정하고 그 범위에 대한 정보를 설정한다. 이제 신틸라용 어휘분석기는 Lexilla 프로젝트에서 제공된다. 5.0 버전 이전이라면, 어휘분석기는 대부분의 버전에 내장되어 있다.

SCI_GETLEXER → int
SCI_GETLEXERLANGUAGE(<unused>, char *language) → int
SCI_SETILEXER(<unused>, pointer lexer)
SCI_COLOURISE(int start, int end)
SCI_CHANGELEXERSTATE(int start, int end) → int
SCI_PROPERTYNAMES(<unused>, char *names) → int
SCI_PROPERTYTYPE(const char *name) → int
SCI_DESCRIBEPROPERTY(const char *name, char *description) → int
SCI_SETPROPERTY(const char *key, const char *value)
SCI_GETPROPERTY(const char *key, char *value) → int
SCI_GETPROPERTYEXPANDED(const char *key, char *value) → int
SCI_GETPROPERTYINT(const char *key, int defaultValue) → int
SCI_DESCRIBEKEYWORDSETS(<unused>, char *descriptions) → int
SCI_SETKEYWORDS(int keyWordSet, const char *keyWords)
SCI_GETSUBSTYLEBASES(<unused>, char *styles) → int
SCI_DISTANCETOSECONDARYSTYLES → int
SCI_ALLOCATESUBSTYLES(int styleBase, int numberStyles) → int
SCI_FREESUBSTYLES
SCI_GETSUBSTYLESSTART(int styleBase) → int
SCI_GETSUBSTYLESLENGTH(int styleBase) → int
SCI_GETSTYLEFROMSUBSTYLE(int subStyle) → int
SCI_GETPRIMARYSTYLEFROMSTYLE(int style) → int
SCI_SETIDENTIFIERS(int style, const char *identifiers)
SCI_PRIVATELEXERCALL(int operation, int pointer) → int
SCI_GETNAMEDSTYLES → int
SCI_NAMEOFSTYLE(int style, char *name) → int
SCI_TAGSOFSTYLE(int style, char *tags) → int
SCI_DESCRIPTIONOFSTYLE(int style, char *description) → int

SCI_GETLEXER → int
현재 어휘분석기의 정수 ID를 얻을 수 있다. SciLexer.hSCLEX_*에 나열되어 있다. 어떤 어휘분석기는 ID가 없고, 그냥 이름만 있어서 0을 돌려주는 경우도 있다.

SCI_GETLEXERLANGUAGE(<unused>, char *language NUL-terminated) → int
SCI_GETLEXERLANGUAGESCI_SETILEXER로 지정된 현재 어휘분석기의 이름을 돌려준다. 어휘분석기의 이름을 알아내려면, 적당한 lexilla/lexers/Lex*.cxx 파일을 찾아서 LexerModule을 검색해 보면 된다. LexerModule 생성자에 건네는 세 번째 인자가 사용될 이름이다.

SCI_SETILEXER(<unused>, pointer lexer)
SCI_SETILEXER를 사용하여 어휘분석기를 ILexer5* 설정한다. 어휘분석기는 어플리케이션이 구현하거나 아니면 Lexilla 같은 공유라이브러리로 구현한다.

어휘분석기 할당이 잘 작동하는지 테스트하려면, 새 어휘분석기 번호가 바뀌었는지 알아보기 위해 그 어휘분석기를 설정하기 전에 그리고 후에 SCI_GETLEXER를 사용한다.

SCI_GETLEXERLANGUAGE는 어휘분석기의 이름을 열람한다.

SCI_COLOURISE(int start, int end)
현재 어휘분석기나 (어휘분석기가 NULL에 설정되어 있다면) 컨테이너에게 startend 사이의 문서를 스타일 처리하라고 요구한다. end가 -1이면, 문서는 start에서 끝까지 스타일처리된다. "fold" 특성이 "1"로 설정되어 있고 어휘분석기나 컨테이너가 접기를 지원하면, 접기 레벨도 설정된다. 이 메시지는 다시 그리기를 야기한다.

SCI_CHANGELEXERSTATE(int start, int end) → int
어휘분석기의 내부 상태가 일정 범위에 대하여 바뀌었고 그러므로 다시 그릴 필요가 있다는 사실을 가리킨다.

SCI_PROPERTYNAMES(<unused>, char *names NUL-terminated) → int
SCI_PROPERTYTYPE(const char *name) → int
SCI_DESCRIBEPROPERTY(const char *name, char *description NUL-terminated) → int
현재 어휘분석기에 대하여 설정할 수 있는 특성에 관한 정보를 열람할 수 있다. 이 정보는 오직 새로운 어휘분석기에 대해서만 이용할 수 있다. SCI_PROPERTYNAMES는 모든 유효한 특성을 "\n"로 구분해 가진 문자열을 돌려준다. 어휘분석기가 이 호출을 지원하지 않으면 빈 문자열이 반환된다. 특성은 불리언 (SC_TYPE_BOOLEAN), 정수 (SC_TYPE_INTEGER), 또는 문자열 (SC_TYPE_STRING)이 될 수 있고 SCI_PROPERTYTYPE로 찾는다. 특성을 영어로 기술한 것은 SCI_DESCRIBEPROPERTY로 반환된다.

SCI_SETPROPERTY(const char *key, const char *value)
설정은 키워드로 어휘분석기와 통신할 수 있다: 값 문자열 쌍. 사용가능한 메모리 외에 키워드 쌍의 개수는 제한 없이 얼마든지 설정할 수 있다. key는 대소문자를 구분하는 키워드이다. value는 키워드와 연관된 문자열이다. 이미 키워드와 연관된 문자열 값이 있다면, 교체된다. 길이 0인 문자열을 건네면, 메시지는 아무 것도 하지 않는다. keyvalue 모두 수정없이 사용된다; key의 끝이나 시작에 있는 여분의 공간문는 의미가 있다.

value 문자열은 다른 키워드를 가리킬 수 있다. 예를 들어, SCI_SETPROPERTY("foldTimes10", "$(fold)0")는 문자열 "$(fold)0"를 저장하고 있지만, 여기에 접근하면, $(fold)"fold" 키워드의 값으로 교체된다 (이 키워드가 존재하지 않으면 아무것도 교체되지 않는다).

현재 "fold" 속성은 대부분의 어휘분석기에 정의되어 있다. "1"로 설정되어 있으면 접는다. SCLEX_PYTHON"tab.timmy.whinge.level" 를 나쁜 들여쓰기를 가리키는 법을 결정하는 설정이라고 이해한다. 대부분의 키워드는 정수로 해석되는 값들을 가지고 있다. 어휘분석기 소스를 검색해 GetPropertyInt를 찾아 어떻게 특성이 사용되는지 보자.

스크립트가 특성 집합을 발견할 수 있도록 어휘분석기에 사용되는 특성을 이름짓는 관례가 있다. 특성 이름은 한가지 어휘분석기에 적용되면 "lexer.<lexer>." 또는 "fold.<lexer>."으로 시작해야 한다. 여러 어휘분석기에 적용되면 "lexer." 또는 "fold."로 시작해야 한다.

어플리케이션은 사용되는 특성 집합을 발견할 수 있다. 어휘분석기의 소스 코드를 검색해 GetProperty가 담긴 줄을 찾아서 겹따옴표로 둘러싸인 값을 특성 이름으로 추출한다. scintilla/src/LexGen.py 스크립트는 이런 일을 하며 예제로 삼을 수 있다. 이 특성에 대한 문서는 위의 호출 위에서 다음과 같이 시작하는 여러-줄 주해로 찾을 수 있다:
// property <property-name>

SCI_GETPROPERTY(const char *key, char *value NUL-terminated) → int
지정된 키를 이용하여 키워드:값 쌍을 찾는다; 발견되면, 그 값을 사용자가 공급한 버퍼에 복사하고 그 길이를 돌려준다 (0 종료 문자는 포함하지 않음). 발견하지 못하면, 빈 문자열을 그 버퍼에 복사하고 0을 돌려준다.

"키워드 교체" SCI_SETPROPERTY에 기술된 대로 수행되지 않음을 주의하자.

값 인자가 0이면 그 값을 저장하기 위해 할당해야 할 길이가 반환된다; 역시, 0 종료 문자는 포함되지 않는다.

SCI_GETPROPERTYEXPANDED(const char *key, char *value) → int
지정된 키를 사용하여 키워드:값 쌍을 찾는다; 발견하면, 그 값을 사용자가 공급한 버퍼에 복사하고 그 길이를 돌려준다 (0 종료 문자는 포함하지 않음). 발견되지 않으면, 빈 문자열을 그 버퍼에 복사하고 0을 돌려준다.

"키워드 교체"는 SCI_SETPROPERTY에 기술된 대로 수행되지 않음을 주의하자.

값 인자가 0이면 그 값을 저장하기 위해 할당해야 할 길이가 반환된다 (지시 키워드 교체 포함); 역시, 0종료 문자는 포함되지 않는다.

SCI_GETPROPERTYINT(const char *key, int defaultValue) → int
지정된 키를 사용하여 키워드:값 쌍을 찾는다; 발견하면, 그 값을 정수로 해석하고 그것을 돌려준다. 발견하지 못하면 (또는 그 값이 빈 문자열이면) 기본값을 돌려준다. 키워드:값 쌍이 발견되었지만 숫자가 아니라면, 0을 돌려준다.

"키워드 교체"는 숫치 해석하기 전에 SCI_SETPROPERTY에 기술된 대로 수행되지 않음을 주의하자.

SCI_SETKEYWORDS(int keyWordSet, const char *keyWords)
현재 9 가지 키워드 리스트를 어휘분석기에 사용하도록 설정할 수 있다. 이 값은 버전 1.50에서 6가지로 늘었다. keyWordSet는 0에서 8까지이며 (실제로 0부터 KEYWORDSET_MAX까지) 어느 키워드 리스트를 교체할지 선택한다. keyWords는 공간문자나 탭 또는 "\n"이나 "\r" 또는 이것들의 조합으로 구분된 키워드 리스트이다. 키워드는 인쇄가능한 표준 아스키 문자로 구성될 것이라고 예상한다. 그러나 (상식에는 어긋나지만) 사용자가 1부터 255까지 비-가름 문자 코드를 사용하더라도 막지 못한다.

이 키워드들이 어떻게 사용될지는 전적으로 어휘분석기의 몫이다. HTML 같이 어떤 언어는 안에 언어를 포함한다. VBScript와 JavaScript가 HTML에 일반적이다. HTML에 대하여, 키워드가 0이면 HTML, 1이면 JavaScript 그리고 2이면 VBScript, 3이면 Python, 4이면 PHP 그리고 5이면 SGML과 DTD 키워드이다. 어휘분석기 코드를 검토하여 키워드 리스트 예제를 보자. 완전하게 규격을 준수하는 어휘분석기는 LexerModule 구성자의 네 번째 인자가 문자열 리스트가 되도록 설정한다. 이 리스트는 키워드 리스트의 사용법을 기술한다.

대안적으로, 일반 키워드에는 0을 설정하고 들여쓰기를 야기하는 키워드에는 1을 설정하며, 그리고 내어쓰기를 야기하는 키워드에는 2를 설정한다. 이 경우에도 역시, 키워드를 색칠하는 간단한 어휘분석기를 가질 수 있다. 0번 집합의 키워드를 바꾸면 언어를 바꿀 수 있다. 어휘분석기 안에 독자적인 키워드 리스트를 구축해 넣는 것을 막을 방법은 없다. 그러나 이는 키워드가 더 추가되면 어휘분석기를 재구축해야 한다는 뜻이다.

SCI_DESCRIBEKEYWORDSETS(<unused>, char *descriptions NUL-terminated) → int
"\n"로 구분된 모든 키워드 집합의 설명은 SCI_DESCRIBEKEYWORDSETS이 돌려준다.

하위 스타일

이 특징들은 잠정적이다

어휘분석기는 여러 다양한 하위 언어들을 지원할 수 있다. 그리고 각 하위 언어는 식별자 집합 몇 개를 (또는 문서 키워드 같이 비슷한 어휘요소들을) 독특하게 스타일 처리하고 싶을 수 있다. 각 목적마다 방대한 개수를 미리 할당해 두면 허용되는 스타일의 개수가 급격하게 고갈할 것이다. substyles로 이를 경감시킨다. 어플리케이션은 각 목적에 얼마 정도의 식별자 세트를 할당할지 결정할 수 있다. 어휘분석기는 이 특징을 ILexerWithSubStyles에 메쏘드를 정의하여 명시적으로 지원해야 한다.

SCI_GETSUBSTYLEBASES(<unused>, char *styles NUL-terminated) → int
각 스타일에 대하여 바이트로 styles를 채운다. 각 스타일은 여러 서브스타일로 가를 수 있다.

SCI_DISTANCETOSECONDARYSTYLES → int
기본 스타일과 그에 상응하는 보조 스타일 사이의 거리를 돌려준다.

SCI_ALLOCATESUBSTYLES(int styleBase, int numberStyles) → int
할당된 첫 서브스타일 번호를 돌려주는 특정한 기본 스타일에 대하여 일정 개수의 substyles을 할당한다. Substyles는 바투 붙어서 할당된다.

SCI_FREESUBSTYLES
할당된 모든 하위 스타일을 해제한다.

SCI_GETSUBSTYLESSTART(int styleBase) → int
SCI_GETSUBSTYLESLENGTH(int styleBase) → int
기본 스타일에 할당된 substyles의 길이와 시작지점을 돌려준다.

SCI_GETSTYLEFROMSUBSTYLE(int subStyle) → int
하위 스타일에 대하여, 기본 스타일을 돌려준다. 그렇지 않으면 건넨 인자를 돌려준다.

SCI_GETPRIMARYSTYLEFROMSTYLE(int style) → int
2차 스타일에 대하여, 1차 스타일을 돌려준다. 그렇지 않으면 건넨 인자를 돌려준다.

SCI_SETIDENTIFIERS(int style, const char *identifiers)
SCI_SETKEYWORDS와 비슷하지만 substyles용이다. SCI_SETKEYWORDS로 접두사를 붙이는 기능은 SCI_SETIDENTIFIERS에 대하여 구현되어 있지 않다.

SCI_PRIVATELEXERCALL(int operation, int pointer) → int
신틸라가 이해하지 못하는 방식으로 어휘분석기를 호출한다.

스타일 메타데이타

어휘분석기는 사용중인 스타일에 관한 정보를 제공할 수 있다. 특별한 메쏘드를 구현하여 명시적으로 이 특징을 지원한다.

SCI_GETNAMEDSTYLES → int
어휘분석기에 대하여 이름붙은 스타일의 갯수를 열람한다.

SCI_NAMEOFSTYLE(int style, char *name) → int
스타일의 이름을 열람한다. 이것은 "SCE_C_COMMENTDOC"와 같은 C 전처리기 심볼이다.

SCI_TAGSOFSTYLE(int style, char *tags) → int
스타일에 포함된 태그들을 열람한다. 이것은 "comment documentation"과 같이 공백으로 구분된 단어 집합이다.

SCI_DESCRIPTIONOFSTYLE(int style, char *description) → int
스타일의 설명을 열람한다. 사용자 인터페이스에 보여주기에 알맞다. 모습은 다음과 같다: "Doc comment: block comments beginning with /** or /*!".

어휘분석기(Lexer) 객체

어휘분석기는 객체처럼 프로그램된다. 이 객체는 ILexer5 인터페이스를 구현하며 문서와 상호작용하여 IDocument 인터페이스를 통하여 어휘를 분석한다. 예전에는 어휘분석 함수와 접기 함수를 제공함으로써 어휘분석기가 정의되었다. 그러나 문서와 어휘분석기와의 상호작용을 처리하는 객체를 만들면 어휘분석기는 어휘분석 중에 사용될 수 있는 상태 정보를 저장할 수 있다. 예를 들어 C++ 어휘분석기는 전처리기 정의 또는 변수 선언의 집합을 저장하고 그의 역할에 따라 이것들을 스타일 처리한다.

ILexer5는 Lexilla를 사용할 수 있도록 잠정적으로 인터페이스가 ILexer5로 확장된다.

도움자 클래스 집합으로 함수에 의해 정의되던 예전의 어휘분석기를 신틸라에 사용할 수 있다.

ILexer

class ILexer {
public:
    virtual int SCI_METHOD Version() const = 0;
    virtual void SCI_METHOD Release() = 0;
    virtual const char * SCI_METHOD PropertyNames() = 0;
    virtual int SCI_METHOD PropertyType(const char *name) = 0;
    virtual const char * SCI_METHOD DescribeProperty(const char *name) = 0;
    virtual Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) = 0;
    virtual const char * SCI_METHOD DescribeWordListSets() = 0;
    virtual Sci_Position SCI_METHOD WordListSet(int n, const char *wl) = 0;
    virtual void SCI_METHOD Lex(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, IDocument *pAccess) = 0;
    virtual void SCI_METHOD Fold(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, IDocument *pAccess) = 0;
    virtual void * SCI_METHOD PrivateCall(int operation, void *pointer) = 0;
};

Sci_Position 유형과 Sci_PositionU 유형은 문서의 줄 번호와 위치에 사용된다.

3.6.0 배포 이전에는 intunsigned int가 사용되었다. 3.6.0에서 Sci_Positionint로 정의되고 Sci_PositionUunsigned int로 정의된다.
앞으로 신틸라 4에서 64-비트로 빌드되면 이 유형들을 64-비트로 정의해서 2 GB 이상의 문서를 다룰 수 있도록 할 계획이다.

PropertySet과 WordListSet으로부터의 반환값은 그 변화가 문서의 어느 부분에서 어휘분석이나 접기의 수행을 요구하는지 지시하는데 사용된다. 그곳이 바로 어휘분석과 접기를 재시작해야 할 위치이다. 또는 그 변화가 문서에 따로 더 작업을 요구하지 않으면 -1이다. 간단한 접근법은 변화때문에 문서를 다시 어휘분석할 가능성이 조금이라도 있다면 0을 돌려주는 것이다. 반면에 설정이 처음으로 문서에 영향을 미치는 곳을 기억하고 그 위치를 돌려주도록 최적화할 수 있다.

Version은 어느 버전의 인터페이스가 구현되었는지 지정하는 열거 값을 돌려준다 : ILexer에는 lvOriginal 그리고 ILexerWithSubStyles에는 lvSubStyles을 돌려준다.

Release는 어휘분석기 객체를 파괴하는데 호출된다.

PrivateCall은 어플리케이션과 구문분석기 사이에 직접 통신할 수 있다. 좋은 예는 다음과 같은 곳이 될 것이다. 한 어플리케이션이 (Windows.h와 같이) 시스템 헤더에 관한 심볼 정보를 담고 있는 거대한 데이터 구조 하나를 유지관리하고 이것을 어휘분석기에 제공한다. 여기에서 각 문서에 적용할 수 있다. 이렇게 하면 각 문서에 대하여 시스템 헤더 정보를 구성하는 부담을 피할 수 있다. 이것은 SCI_PRIVATELEXERCALL API로 호출된다.

Fold는 접기에 필요한 정확한 범위를 가지고 호출된다. 이전에는 어휘분석기가 호출될때 범위는 접기에 필요한 범위보다 한 줄 일찍 시작했다. 바로 앞의 접기로부터 마지막 줄을 처리하기 위해서였다. 새로운 접근법으로 어휘분석기는 다시 뒤로 돌아갈지 아니면 더 효율적으로 처리할 지 결정할 수 있게 되었다.

ILexerWithSubStyles

어느 줄 끝을 지원하는지 어휘분석기가 보고할 수 있도록 하기 위하여, 그리고 서브스타일을 지원하기 위하여, IlexerILexerWithSubStyles로 확장되었다.

class ILexerWithSubStyles : public ILexer {
public:
        virtual int SCI_METHOD LineEndTypesSupported() = 0;
        virtual int SCI_METHOD AllocateSubStyles(int styleBase, int numberStyles) = 0;
        virtual int SCI_METHOD SubStylesStart(int styleBase) = 0;
        virtual int SCI_METHOD SubStylesLength(int styleBase) = 0;
        virtual void SCI_METHOD FreeSubStyles() = 0;
        virtual void SCI_METHOD SetIdentifiers(int style, const char *identifiers) = 0;
        virtual int SCI_METHOD DistanceToSecondaryStyles() = 0;
        virtual const char * SCI_METHOD GetSubStyleBases() = 0;
};

ILexer5

class ILexer5 {
public:
        virtual int SCI_METHOD Version() const = 0;
        virtual void SCI_METHOD Release() = 0;
        virtual const char * SCI_METHOD PropertyNames() = 0;
        virtual int SCI_METHOD PropertyType(const char *name) = 0;
        virtual const char * SCI_METHOD DescribeProperty(const char *name) = 0;
        virtual Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) = 0;
        virtual const char * SCI_METHOD DescribeWordListSets() = 0;
        virtual Sci_Position SCI_METHOD WordListSet(int n, const char *wl) = 0;
        virtual void SCI_METHOD Lex(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, IDocument *pAccess) = 0;
        virtual void SCI_METHOD Fold(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, IDocument *pAccess) = 0;
        virtual void * SCI_METHOD PrivateCall(int operation, void *pointer) = 0;
        virtual int SCI_METHOD LineEndTypesSupported() = 0;
        virtual int SCI_METHOD AllocateSubStyles(int styleBase, int numberStyles) = 0;
        virtual int SCI_METHOD SubStylesStart(int styleBase) = 0;
        virtual void SCI_METHOD SetIdentifiers(int style, const char *identifiers) = 0;
        virtual int SCI_METHOD DistanceToSecondaryStyles() = 0;
        virtual const char * SCI_METHOD GetSubStyleBases() = 0;
        virtual int SCI_METHOD NamedStyles() = 0;
        virtual const char * SCI_METHOD NameOfStyle(int style) = 0;
        virtual const char * SCI_METHOD TagsOfStyle(int style) = 0;
        virtual const char * SCI_METHOD DescriptionOfStyle(int style) = 0;
};

ILexer5

class ILexer5 : public ILexer5 {
public:
        virtual const char * SCI_METHOD GetName() = 0;
        virtual int SCI_METHOD  GetIdentifier() = 0;
        virtual const char * SCI_METHOD PropertyGet(const char *key) = 0;
};

Sci_Position 유형과 Sci_PositionU 유형은 문서 안에서의 위치와 줄 번호에 사용된다. 신틸라 4에서 64-비트 빌드는 이 유형들을 64-비트로 정의하므로 앞으로 2 GB 이상의 문서를 다룰 수 있다.

문자열을 const char *으로 돌려주는 메쏘드는 지겹게 따로 메모리를 관리하지 않아도 된다: 어휘 분석 구현은 자신만의 단일 버퍼가 있어서 호출 때마다 재사용된다. 호출자는 반환된 문자열을 사본으로 만들어 보유해야 한다.

PropertySet과 WordListSet이 돌려주는 값들은 변경으로 이해 문서에 접기와 어휘 분석을 수행할지 말지를 알려주는 데 사용된다. 어휘분석과 접기를 재시작할 위치를 돌려주거나 아니면 변경에도 불구하고 문서에 더 이상 손댈 필요가 없을 때 -1이 반환된다. 간단한 접근법은 문서에 어휘분석을 해야 할 가능성이 조금이라도 있다면 0을 돌려주는 것이다. 문서에 영향을 처음 미치는 곳을 기억하고 그 위치를 돌려주어 최적화할 수도 있다.

Version 함수는 어느 버전의 인터페이스를 구현하고 있는지 지정한 열거 값을 돌려준다: ILexer4 버전이라면 lvRelease4이 반환되는 열거 값이다. Scintilla 4.0 이전은 다른 값을 사용할 수 있다.

Release 함수는 어휘 분석기를 파괴하기 위해 호출된다.

PrivateCall 함수로 어플리케이션과 어휘 분석기 사이에 직접 통신할 수 있다. 예를 들면 어플리케이션은 거대한 단일 데이터 구조 안에 (Windows.h와 같은) 시스템 헤더에 관한 심볼 정보를 담아서 이것을 어휘분석기에게 제공한다. 그러면 각 문서마다 적용할 수 있을 것이다. 이렇게 하면 각 문서마다 시스템 헤더 정보를 구성하는 비용을 줄일 수 있다. SCI_PRIVATELEXERCALL API로 호출된다.

Fold 함수는 접기에 필요한 정확한 범위를 가지고 호출된다. 이전에는 어휘분석기가 호출되면 접을 범위의 한 줄 앞에서 접기를 시작했다. 이렇게 해서 이전의 접기에 속한 마지막 줄을 처리했다. 새로운 접근법에서 어휘분석기는 이것을 좀더 효율적으로 처리할지 되돌릴지 결정할 수 있다.

NamedStyles, NameOfStyle, TagsOfStyle, 그리고 DescriptionOfStyle는 어휘 분석기가 사용하는 스타일 집합에 관한 정보를 제공한다. NameOfStyle은 "SCE_LUA_COMMENT"와 같은 C-언어 식별자이다. TagsOfStyle은 "literal string multiline raw"처럼 표준적인 방식으로 스타일을 기술하는 태그 집합이다. 태그 집합과 그를 조합하는 방식은 여기에 기술되어 있다. DescriptionOfStyle은 "Function or method name definition"처럼 스타일을 영어로 기술한다.

IDocument

class IDocument {
public:
        virtual int SCI_METHOD Version() const = 0;
        virtual void SCI_METHOD SetErrorStatus(int status) = 0;
        virtual Sci_Position SCI_METHOD Length() const = 0;
        virtual void SCI_METHOD GetCharRange(char *buffer, Sci_Position position, Sci_Position lengthRetrieve) const = 0;
        virtual char SCI_METHOD StyleAt(Sci_Position position) const = 0;
        virtual Sci_Position SCI_METHOD LineFromPosition(Sci_Position position) const = 0;
        virtual Sci_Position SCI_METHOD LineStart(Sci_Position line) const = 0;
        virtual int SCI_METHOD GetLevel(Sci_Position line) const = 0;
        virtual int SCI_METHOD SetLevel(Sci_Position line, int level) = 0;
        virtual int SCI_METHOD GetLineState(Sci_Position line) const = 0;
        virtual int SCI_METHOD SetLineState(Sci_Position line, int state) = 0;
        virtual void SCI_METHOD StartStyling(Sci_Position position, char mask) = 0;
        virtual bool SCI_METHOD SetStyleFor(Sci_Position length, char style) = 0;
        virtual bool SCI_METHOD SetStyles(Sci_Position length, const char *styles) = 0;
        virtual void SCI_METHOD DecorationSetCurrentIndicator(int indicator) = 0;
        virtual void SCI_METHOD DecorationFillRange(Sci_Position position, int value, Sci_Position fillLength) = 0;
        virtual void SCI_METHOD ChangeLexerState(Sci_Position start, Sci_Position end) = 0;
        virtual int SCI_METHOD CodePage() const = 0;
        virtual bool SCI_METHOD IsDBCSLeadByte(char ch) const = 0;
        virtual const char * SCI_METHOD BufferPointer() = 0;
        virtual int SCI_METHOD GetLineIndentation(Sci_Position line) = 0;
        virtual Sci_Position SCI_METHOD LineEnd(Sci_Position line) const = 0;
        virtual Sci_Position SCI_METHOD GetRelativePosition(Sci_Position positionStart, Sci_Position characterOffset) const = 0;
        virtual int SCI_METHOD GetCharacterAndWidth(Sci_Position position, Sci_Position *pWidth) const = 0;
};

신틸라는 가능하면 텍스트 수정의 결과를 최소화해서 수정된 줄을 다시 그리고 분석한다. 어휘분석기 객체들은 안에 따로 나중 줄에 영향을 미칠 수 있는 자신만의 개별 상태가 있다. 예를 들어, C++ 어휘분석기가 비활성 코드 구역을 회색으로 처리할 경우 #define BEOS 0#define BEOS 1로 바꾸면 문서의 후반부를 다시 스타일하고 다시 보여줄 필요가 있다. 어휘분석기는 ChangeLexerState를 호출하여 더 분석하고 보여주어야 한다고 문서에 신호를 보낸다.

StartStyling에 대하여 mask 인자는 효과가 없다. 3.4.2 이전 버전에서만 사용된다.

SetErrorStatus는 문서 예외를 고지하는데 사용된다. 예외는 빌드 경계 위에 던지면 안된다. 왜냐하면 두 편이 서로 다른 컴파일러로 빌드되거나 호환되지 않는 예외 옵션으로 구축되어 있을 수 있기 때문이다.

IDocumentWithLineEnd

어휘분석기가 줄 끝 위치를 결정하도록 하기 위해 그리하여 더 쉽게 유니코드 줄 끝을 지원하기 위해,

IDocumentIDocumentWithLineEnd로 확장되었다.
IDocumentLineEnd를 포함한다. 특정한 줄 끝 문자를 테스트하는데 사용하면 안된다.

GetRelativePosition은 전체 문자 단위로 문서를 항해한다. 문서의 시작과 끝을 넘어서 이동하면 INVALID_POSITION을 돌려준다.

GetCharacterAndWidth는 UTF-8 바이트를 UTF-32 문자로 또는 DBCS를 16 비트 값으로 표준 변환을 제공한다. 유효하지 않은 UTF-8 바이트는 0xDC80+byteValue의 값을 가지고 따로따로 보고된다. 이 값은 유효하지 않은 코드 포인트이다. 호출자가 해당 문자의 바이트 개수를 알 필요가 없을 경우 pWidth 인자는 NULL이 될 수 있다.

class IDocumentWithLineEnd : public IDocument {
public:
        virtual Sci_Position SCI_METHOD LineEnd(Sci_Position line) const = 0;
        virtual Sci_Position SCI_METHOD GetRelativePosition(Sci_Position positionStart, Sci_Position characterOffset) const = 0;
        virtual int SCI_METHOD GetCharacterAndWidth(Sci_Position position, Sci_Position *pWidth) const = 0;
};

ILexerIDocument 인터페이스는 앞으로 확장 버전으로 확대될 수 있다 (ILexer6...). Version 메쏘드는 어느 인터페이스가 구현되었는지 그리하여 어느 메쏘드를 호출할 수 있는지 알려준다.

고지(Notifications)

고지는 컨테이너의 관심을 끄는 이벤트가 일어나면 신틸라 콘트롤로부터 자신의 컨테이너에게 전송된다. 고지는

윈도우즈에서는 WM_NOTIFY 메시지를 사용하여 전송되고

GTK에서는 sci-notify" 신호로 전송되고 신호처리자는 다음의 서명 handler(GtkWidget *, gint, SCNotification *notification, gpointer userData)을 가져야 한다.

코코아에서는 ScintillaNotificationProtocol을 구현한 위임자로 고지를 받도록 설정할 수 있다. 또는 ScintillaView 클래스를 상속받아 notification: 메쏘드를 오버라이드해도 좋다. notification:을 오버라이딩하면 그 하위클래스가 기본 처리를 수행할지 말지 제어할 수 있다.

컨테이너에게 SCNotification 구조가 건네진다. 안에 이벤트에 관한 정보가 담겨 있다.

struct Sci_NotifyHeader {   // Win32 NMHDR 구조에 일치한다.
    void *hwndFrom;     // 창 핸들/포인터에 종속된 환경;
    uptr_t idFrom;      // 고지를 보낸 창의 CtrlID;
    unsigned int code;  // SCN_* 고지 코드;
};

struct SCNotification {
	struct Sci_NotifyHeader nmhdr;
	Sci_Position position;
	/* SCN_STYLENEEDED, SCN_DOUBLECLICK, SCN_MODIFIED, SCN_MARGINCLICK, */
	/* SCN_MARGINRIGHTCLICK, SCN_NEEDSHOWN, SCN_DWELLSTART, SCN_DWELLEND, */
	/* SCN_CALLTIPCLICK, SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, */
	/* SCN_HOTSPOTRELEASECLICK, SCN_INDICATORCLICK, SCN_INDICATORRELEASE, */
	/* SCN_USERLISTSELECTION, SCN_AUTOCSELECTION, SCN_AUTOCSELECTIONCHANGE */

	int ch;
	/* SCN_CHARADDED, SCN_KEY, SCN_AUTOCCOMPLETE, SCN_AUTOCSELECTION, */
	/* SCN_USERLISTSELECTION */
	int modifiers;
	/* SCN_KEY, SCN_DOUBLECLICK, SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, */
	/* SCN_HOTSPOTRELEASECLICK, SCN_INDICATORCLICK, SCN_INDICATORRELEASE, */

	int modificationType;	/* SCN_MODIFIED */
	const char *text;
	/* SCN_MODIFIED, SCN_USERLISTSELECTION, SCN_AUTOCSELECTION, SCN_URIDROPPED, */
	/* SCN_AUTOCSELECTIONCHANGE */

	Sci_Position length;		/* SCN_MODIFIED */
	Sci_Position linesAdded;	/* SCN_MODIFIED */
	int message;	/* SCN_MACRORECORD */
	uptr_t wParam;	/* SCN_MACRORECORD */
	sptr_t lParam;	/* SCN_MACRORECORD */
	Sci_Position line;		/* SCN_MODIFIED */
	int foldLevelNow;	/* SCN_MODIFIED */
	int foldLevelPrev;	/* SCN_MODIFIED */
	int margin;		/* SCN_MARGINCLICK, SCN_MARGINRIGHTCLICK */
	int listType;	/* SCN_USERLISTSELECTION */
	int x;			/* SCN_DWELLSTART, SCN_DWELLEND */
	int y;		/* SCN_DWELLSTART, SCN_DWELLEND */
	int token;		/* SCN_MODIFIED with SC_MOD_CONTAINER */
	int annotationLinesAdded;	/* SCN_MODIFIED with SC_MOD_CHANGEANNOTATION */
	int updated;	/* SCN_UPDATEUI */
	int listCompletionMethod; 
	/* SCN_AUTOCSELECTION, SCN_AUTOCCOMPLETED, SCN_USERLISTSELECTION */

	int characterSource;	/* SCN_CHARADDED */
};

컨테이너가 처리할 수 있는 고지 메시지와 관련 메시지는 다음과 같다:

SCN_STYLENEEDED
SCN_CHARADDED
SCN_SAVEPOINTREACHED
SCN_SAVEPOINTLEFT
SCN_MODIFYATTEMPTRO
SCN_KEY
SCN_DOUBLECLICK
SCN_UPDATEUI
SCN_MODIFIED
SCN_MACRORECORD
SCN_MARGINCLICK
SCN_NEEDSHOWN
SCN_PAINTED
SCN_USERLISTSELECTION
SCN_URIDROPPED
SCN_DWELLSTART
SCN_DWELLEND
SCN_ZOOM
SCN_HOTSPOTCLICK
SCN_HOTSPOTDOUBLECLICK
SCN_HOTSPOTRELEASECLICK
SCN_INDICATORCLICK
SCN_INDICATORRELEASE
SCN_CALLTIPCLICK
SCN_AUTOCSELECTION
SCN_AUTOCCANCELLED
SCN_AUTOCCHARDELETED
SCN_FOCUSIN
SCN_FOCUSOUT
SCN_AUTOCCOMPLETED
SCN_MARGINRIGHTCLICK
SCN_AUTOCSELECTIONCHANGE

다음 SCI_* 메시지들은 다음 고지와 연관된다:

SCI_SETMODEVENTMASK(int eventMask)
SCI_GETMODEVENTMASK → int
SCI_SETCOMMANDEVENTS(bool commandEvents)
SCI_GETCOMMANDEVENTS → bool
SCI_SETMOUSEDWELLTIME(int periodMilliseconds)
SCI_GETMOUSEDWELLTIME → int
SCI_SETIDENTIFIER(int identifier)
SCI_GETIDENTIFIER → int

다음의 추가 고지는 윈도우즈에서는 WM_COMMAND 메시지를 사용하여 GTK에서는 "Command" 신호를 사용하여 전송된다. 이렇게 하여 윈도우즈 Edit 콘트롤을 흉내낸다. 이런 고지에서는 콘트롤 아이디의 하위 16비트만 전송된다.

SCEN_CHANGE
SCEN_SETFOCUS
SCEN_KILLFOCUS

SCI_SETIDENTIFIER(int identifier)
SCI_GETIDENTIFIER → int
이 두 메시지는 신틸라 실체의 식별자를 설정하고 얻는다. 이 식별자는 idFrom 필드 고지에 포함되어 있다. 어플리케이션에 여러 신틸라 창부품을 만들 경우, 이를 사용하면 각 고지의 근원을 알아낼 수 있다. 윈도우즈에서 이 값은 CreateWindow 호출로 초기화되며 그 창의 GWLP_ID 속성으로 저장된다. 이 값은 작아야 하며, 포인터보다 특히 16 비트 보다 작으면 더 좋다. 오직 16 비트 또는 32 비트를 전송하는 함수들이 있기때문이다.

SCN_STYLENEEDED
SCI_SETLEXER(NULL)를 사용하여 컨테이너를 어휘분석기처럼 행동하게 만들었다면, 스타일 처리가 요구되는 텍스트를 신틸라가 화면에 보여주거나 인쇄하려고 할 때 이런 고지를 받는다. SCI_GETENDSTYLED가 돌려준 위치가 포함된 줄부터 SCNotification.position에 건네진 위치까지 텍스트를 스타일처리해야 한다. 상징적으로, 다음 형태로 코드할 필요가 있다:

    startPos = SCI_GETENDSTYLED()
    lineNumber = SCI_LINEFROMPOSITION(startPos);
    startPos = SCI_POSITIONFROMLINE(lineNumber);
    MyStyleRoutine(startPos, SCNotification.position);

SCN_CHARADDED
사용자가 (명령어 문자와 대조하여) 정상적인 텍스트 문자를 텍스트 안에 타자할 때 전송된다. 컨테이너는 이를 이용하여 콜팁을 보여줄 지 아니면 자동 완성 리스트를 화면에 보여줄지 결정할 수있다. 문자는 SCNotification::ch에 존재한다. 단일 바이트 문자 집합에서는 해당 문자의 바이트 값이며, UTF-8이라면 유니코드 코드 포인터이고, DBCS이라면 2 바이트 문자 (첫 바이트 * 256 + 두 번째 바이트)이고 1바이트 문자는 바이트 값이다. 이 고지는 문자가 스타일 처리되기 전에 전송되므로 스타일처리에 의존하는 프로세스라면 대신에 SCN_UPDATEUI 고지로 수행되어야 한다.

SCNotification::characterSource 필드에 문자의 출처가 담긴다.

심볼 의미
SC_CHARACTERSOURCE_DIRECT_INPUT 0 직접 입력된 문자, SCI_NEWLINE과 같이 키보드 명령어 호출로 생성된 문자를 포함한다.
SC_CHARACTERSOURCE_TENTATIVE_INPUT 1 임시 입력 문자. 최종 문자열을 조합하기 위해 IME 인라인 모드에 사용된다 (참조 SCI_SETIMEINTERACTION). 조합된 문자열과 일반적으로 다르다. (최종 완성된 문자열이 문서 안에 실제로 삽입된다). 사용자가( Esc 키를 눌러서) 취소하면 버려질 수도 있다. 코코아 시스템은 비-IME 특징에 임시 입력을 사용하기도 한다. 데드 키를 사용하여 악섹트 문자를 조합한다. 이 문자들은 매크로 기록에 추가되지 않는다. 대부분의 어플리케이션은 이 고지를 그냥 무시해도 된다.
SC_CHARACTERSOURCE_IME_RESULT 2 IME (인라인이든 윈도우이든) 완성된 문자열이다. 현대의 IME는 영어 단어나 문장도 조합할 수 있다. 이 값이 설정되어 있으면, 현재 문자가 CJK 문자가 아닐 수 있다. 현재는 윈도우즈에서만 설정된다.

SCN_SAVEPOINTREACHED
SCN_SAVEPOINTLEFT
저장 점에 들어가거나 나갈 때, 컨테이너에게 전송된다. 컨테이너는 "문서를 어지럽히는" 표시자를 화면에 보여주고 그의 메뉴를 바꿀 수 있다.
다음도 참조: SCI_SETSAVEPOINT, SCI_GETMODIFY

SCN_MODIFYATTEMPTRO
읽기-전용 모드에서 사용자가 텍스트를 바꾸려고 할 때 이 고지가 컨테이너에게 전송된다. 버전 제어 시스템으로부터 문서를 점검하는데 이를 사용할 수 있다. SCI_SETREADONLY로 문서의 상태에 읽기-전용 속성을 설정할 수 있다.

SCN_KEY
눌려졌으나 신틸라가 소비하지 않는 모든 키들을 보고한다. 키보드 초점과 관련한 문제 때문에 GTK에 사용되고 윈도우즈 버전에서는 전송되지 않는다. SCNotification::ch에는 키 코드가 담겨 있고 SCNotification.modifiers에는 수식자가 담긴다. 이 고지는 수식자에 SCMOD_ALT이나 SCMOD_CTRL가 포함되어 있고 키 코드가 256보다 작으면 전송된다.

SCN_DOUBLECLICK
편집기에서 마우스 버튼이 더블 클릭되었다. position 필드는 더블 클릭된 텍스트 위치에 설정된다. line 필드는 더블 클릭된 줄로 설정된다. modifiers 필드는 SCN_KEY와 비슷한 방식으로 눌려진 키 변경자로 설정된다.

SCN_UPDATEUI
문서의 텍스트나 스타일링이 바뀌었다. 또는 선택 범위나 스크롤 위치가 바뀌었다. 이제 문서나 뷰 상태에 의존하는 컨테이너 UI 요소들을 갱신할 좋은 기회이다. updated 필드에 앞 고지 이후로 바뀐 것들이 설정된다.

심볼 의미
SC_UPDATE_CONTENT 0x01 내용이나 스타일링 또는 표식이 바뀌었다.
SC_UPDATE_SELECTION 0x02 선택범위가 바뀌었다.
SC_UPDATE_V_SCROLL 0x04 수직으로 스크롤됨.
SC_UPDATE_H_SCROLL 0x08 수평으로 스크롤됨.

SCN_MODIFIED
이 고지는 문서의 텍스트나 스타일이 변하거나 변하려고 할 때 전송된다. SCI_SETMODEVENTMASK로 컨테이너에게 전송하는 고지에 대하여 마스크를 설정할 수 있다. 고지 구조에는 무엇이 변했는지, 어떻게 그 변화가 일어났는지 그리고 이 때문에 문서에서 줄의 개수에 변동이 있었는지에 관하여 정보가 포함되어 있다. SCN_MODIFIED 이벤트 중에는 어떤 고지도 수행되지 않는다. 다음과 같이 SCNotification 필드가 사용된다:

필드 사용법
modificationType 변화를 식별하는 플래그 집합. 다음 테이블 참조.
position 텍스트나 스타일 변화의 시작 위치. 사용하지 않으면 0으로 설정한다.
length 텍스트나 스타일이 변경될 때 셀이나 문자가 변경된 길이. 사용되지 않으면 0으로 설정한다.
linesAdded 추가된 줄의 개수, 음수이면, 삭제된 줄의 개수. 사용되지 않거나 추가되거나 삭제되지도 않았다면 0으로 설정한다.
text 텍스트 변화에 유효하다. 스타일 변화에 무효하다. 언두 정보를 수집하고 있다면 여기에 언두 시스템에 건네지는 텍스트를 가리키는 포인터를 담는다. 그렇지 않으면 0이다. 사용자가 수행한 SC_MOD_BEFOREDELETE에 대하여 텍스트 필드는 0이다 사용자가 수행한 SC_MOD_BEFOREINSERT에 대하여 텍스트 필드는 바이트가 아니라 셀 배열을 가리킨다. 그리고 그 길이는 셀의 개수이다.
line 접기 레벨이나 표식 변화가 일어나는 곳의 줄 번호. 사용되지 않으면 0이고 한 줄 이상이 변했다면 -1일 수 있다.
foldLevelNow 줄에 적용된 새로운 접기 레벨. 이 필드가 사용되지 않으면 0이다.
foldLevelPrev 그 줄의 이전 접기 레벨 또는 이 필드가 사용되지 않으면 0이다.

SCNotification.modificationType 필드는 무엇이 바뀌었는지 알려주는 비트를 설정한다. SC_MOD_* 비트는 조치에 상응한다. SC_PERFORMED_* 비트는 조치를 사용자가 취했는지 알려준다. 아니면 앞 조치의 언두나 리두의 결과를 돌려준다.

심볼 의미 SCNotification 필드
SC_MOD_NONE 0x00 기본 값. 모든 필드가 무효. 테스트시에 유용함.
SC_MOD_INSERTTEXT 0x01 텍스트가 문서에 삽입되었다. position, length, text, linesAdded
SC_MOD_DELETETEXT 0x02 텍스트가 문서에서 제거되었다. position, length, text, linesAdded
SC_MOD_CHANGESTYLE 0x04 스타일 변경이 일어났다. position, length
SC_MOD_CHANGEFOLD 0x08 접기 변경이 일어났다. line, foldLevelNow, foldLevelPrev
SC_PERFORMED_USER 0x10 정보: 사용자가 연산을 마쳤다. None
SC_PERFORMED_UNDO 0x20 정보: 언두의 결과이다. None
SC_PERFORMED_REDO 0x40 정보: 리두의 결과이다. None
SC_MULTISTEPUNDOREDO 0x80 다중-단계 언두나 리두 트랜잭션의 일부이다. None
SC_LASTSTEPINUNDOREDO 0x100 언두나 리두 상호작용의 최종 단계이다. None
SC_MOD_CHANGEMARKER 0x200 한 줄에 하나 이상의 표식자가 변경되었다. line
SC_MOD_BEFOREINSERT 0x400 텍스트가 문서에 삽입될 예정이다. position, 사용자가 수행했으면 바이트 단위 텍스트, 길이는 바이트 단위
SC_MOD_BEFOREDELETE 0x800 텍스트가 문서로부터 삭제될 예정이다. position, length
SC_MOD_CHANGEINDICATOR 0x4000 표시자가 일정 범위의 텍스트에 추가되거나 삭제되었다. position, length
SC_MOD_CHANGELINESTATE 0x8000 SCI_SETLINESTATE이 취소되었기 때문에 줄 상태가 바뀌었다. line
SC_MOD_CHANGETABSTOPS 0x200000 한 줄 위에 명시적인 탭 스탑들이 변경되었다. SCI_CLEARTABSTOPS 또는 SCI_ADDTABSTOP이 호출되었기 때문이다. line
SC_MOD_LEXERSTATE 0x80000 어휘분석기의 내부 상태가 일정 범위를 수정했다. position, length
SC_MOD_CHANGEMARGIN 0x10000 텍스트 여백이 바뀌었다. line
SC_MOD_CHANGEANNOTATION 0x20000 주해가 바뀌었다. line
SC_MOD_INSERTCHECK 0x100000 텍스트가 곧 삽입될 예정이다. 처리자는 삽입 중인 텍스트를 SCI_CHANGEINSERTION를 호출하여 바꿀 필요가 있다. 다른 수정은 이 처리자에서 이루어지지 않는다. position, length, text
SC_MULTILINEUNDOREDO 0x1000 다중-줄 변경을 한 언두나 리두의 일부이다. None
SC_STARTACTION 0x2000 언두 트랜잭션에서 첫 단계 또는 유일한 단계일 때 SC_PERFORMED_USER 조치에 설정된다. 신틸라 언두 스택을 컨테이너 어플리케이션의 언두 스택과 통합하는데 사용될 수 있다. 현재 열린 컨테이너 트랜잭션에 대하여 신틸라 조치를 컨테이너의 스택에 추가하면 된다. 또는 열린 컨테이너 트랜잭션이 없다면 새로운 컨테이너 트랙잭션을 열어서 추가하면 된다. None
SC_MOD_CONTAINER 0x40000 컨테이너가 SCI_ADDUNDOACTION로 언두 스택에 저장한 조치에 설정된다. token
SC_MODEVENTMASKALL 0x7FFFF 모든 유효 플래그에 대한 마스크이다. SCI_SETMODEVENTMASK에 설정된 기본 마스크 상태이다. None

SCEN_CHANGE
SCEN_CHANGE (768)는 문서의 (스타일이 아니라) 텍스트가 변할 때 촉발된다. 이 고지는 윈도우즈에서는 WM_COMMAND 메시지를 사용하여 전송되고 GTK에서는 "Command" 신호로 전송된다. 이것은 표준 Edit 콘트롤의 행위이다 (SCEN_CHANGE는 윈도우즈 Edit 콘트롤 EN_CHANGE와 값이 같다). 다른 정보는 전송되지 않는다. 좀 더 자세한 정보가 필요하면 SCN_MODIFIED을 사용하자. 고지된 변경 메시지의 유형을 SCI_SETMODEVENTMASK 메시지와 SCI_SETCOMMANDEVENTS 메시지로 여과할 수 있다.

SCI_SETMODEVENTMASK(int eventMask)
SCI_GETMODEVENTMASK → int
이 메시지들은 SCN_MODIFIEDSCEN_CHANGE로 어느 문서 변경 이벤트를 컨테이너에게 고지할지 결정하는 이벤트 마스크를 설정하고 얻는다. 예를 들어, 컨테이너는 SCI_SETMODEVENTMASK(SC_MOD_INSERTTEXT|SC_MOD_DELETETEXT)를 호출함으로써 스타일링 변화가 아니라 텍스트에 가한 변경에 관한 고지만 보기로 결정할 수 있다.

가능한 고지 유형은 SCN_MODIFIED이 사용하는 modificationType 비트 플래그와 똑 같다:
SC_MOD_INSERTTEXT, SC_MOD_DELETETEXT, SC_MOD_CHANGESTYLE, SC_MOD_CHANGEFOLD, SC_PERFORMED_USER, SC_PERFORMED_UNDO, SC_PERFORMED_REDO, SC_MULTISTEPUNDOREDO, SC_LASTSTEPINUNDOREDO, SC_MOD_CHANGEMARKER, SC_MOD_BEFOREINSERT, SC_MOD_BEFOREDELETE, SC_MULTILINEUNDOREDO, 그리고 SC_MODEVENTMASKALL.

SCI_SETCOMMANDEVENTS(bool commandEvents)
SCI_GETCOMMANDEVENTS → bool
SCEN_* 명령어 이벤트가 컨테이너에 전송되었는지 질의하고 설정한다. SCEN_CHANGE에 대하여 SCI_SETMODEVENTMASK말고도 또다른 여과장치로 사용된다. 대부분의 어플리케이션은 이 값을 꺼 놓고 SCN_MODIFIED시에만 사용하는 것이 좋다. 성능향상에 도움이 되기 때문이다.

SCEN_SETFOCUS
SCEN_KILLFOCUS
SCEN_SETFOCUS (512)는 신틸라가 초점을 받으면 촉발된다. 초점을 잃으면 SCEN_KILLFOCUS (256)가 촉발된다. 이 고지들은 윈도우즈에서는 WM_COMMAND 메시지를 사용하여 GTK에서는 "Command" 신호를 사용하여 전송된다. 이것이 표준 Edit 콘트롤의 기본 행위이다. 불행하게도, 이 코드들은 윈도우즈의 Edit 고지 코드 EN_SETFOCUS (256) 그리고 EN_KILLFOCUS (512)와 일치하지 않는다. 신틸라 코드를 바꾸기에는 이제 너무 늦었다. 클라이언트는 현재 값에 의존하기 때문이다.

SCN_MACRORECORD
SCI_STARTRECORDSCI_STOPRECORD 메시지는 매크로 기록을 활성화하고 비활성화한다. 활성화되면, 기록 가능 변화가 일어날 때마다, SCN_MACRORECORD 고지가 컨테이너에게 전송된다. 그 조치를 기록하는 것은 컨테이너에게 달려 있다. 기록 가능한 SCI_* 메시지의 완전한 목록을 보려면, 신틸라 소스 Editor.cxx를 검색해서 Editor::NotifyMacroRecord를 찾아 보자. 이 고지에 설정된 SCNotification 필드들은 다음과 같다:

필드 사용법
message 고지를 야기한 SCI_* 메시지.
wParam SCI_* 메시지에 있는 wParam의 값.
lParam SCI_* 메시지에 있는 lParam의 값.

SCN_MARGINCLICK
SCN_MARGINRIGHTCLICK
이 고지는 민감 표식이 붙은 여백 안에 마우스가 좌클릭되거나 우클릭되었다는 것을 컨테이너에게 알려준다 (SCI_SETMARGINSENSITIVEN 참조). 이것은 접기를 수행하는데 또는 정지점을 배치하는데 사용될 수 있다. 다음 SCNotification 필드가 사용된다:

필드 사용법
modifiers SCI_SHIFT, SCI_CTRL 그리고 SCI_ALT를 적절하게 조합하여 여백을 클릭할 때 눌린 키를 나타낸다.
position 문서에서 여백 클릭에 상응하는 줄의 시작 위치.
margin 클릭된 여백 번호.

SCN_NEEDSHOWN
신틸라는 현재 보이지 않는 일정 범위의 줄을 보이게 만들어야 한다고 결정했다. 이런 일이 필요한 경우는 수축 접기 점이 있는 줄의 끝이 삭제될 경우이다. 전체 문서가 보이게 만드는 것과 같이 좀 평범하지 않은 방식으로 그 줄을 보이도록 만들고 싶을 경우, 이 메시지가 컨테이너에게 전송된다. 대부분의 컨테이너는 SCI_ENSUREVISIBLE를 호출하여 그 범위의 각 줄이 확실하게 나타나도록 확인만 할 뿐이다. SCNotificationpositionlength 필드는 문서에서 보이도록 만들 범위를 지시한다. 컨테이너 코드의 뼈대는 대략적으로 다음과 비슷하다:

firstLine = SCI_LINEFROMPOSITION(scn.position)
lastLine = SCI_LINEFROMPOSITION(scn.position+scn.length-1)
for line = lineStart to lineEnd do SCI_ENSUREVISIBLE(line) next

SCN_PAINTED
방금 색칠을 마쳤다. 신틸라의 변경에 기반한 다른 위젯들을 업데이트하고 싶지만, 더 반응이 좋게 보이도록 색칠하기가 먼저 일어나기를 바랄 때 유용하다. SCNotification에는 더 이상 정보가 없다.

SCN_USERLISTSELECTION
사용자가 사용자 리스트에서 항목을 하나 선택했다. SCNotification 필드는 다음과 같다:

필드 사용법
listType 그 리스트를 초기화한 SCI_USERLISTSHOW 메시지의 listType 매개변수에 설정된다.
text 선택된 텍스트.
position 리스트가 표시될 화면의 위치.
ch 채움 문자가 선택에 사용됬다면 그 문자가 그렇지 않으면 0이다.
listCompletionMethod 자동완성이 일어난 방식을 알려주는 값, 아래의 표 참조.

SCN_AUTOCCOMPLETED 고지를 보고 listCompletionMethod에 가능한 값들을 찾아보자.

SCN_URIDROPPED
GTK 버전 전용. 사용자가 파일 이름이나 웹 주소 같은 URI를 신틸라 위에 끌어 놓았다는 사실을 알려준다. 컨테이너는 이를 그 파일을 열라는 요청으로 이해한다. SCNotificationtext 필드는 URI 텍스트를 가리킨다.

SCN_DWELLSTART
SCN_DWELLEND
SCN_DWELLSTART는 사용자가 마우스를 한 위치에 머뭄 기간동안 유지했을 때 생성된다 (SCI_SETMOUSEDWELLTIME 참조). SCN_DWELLENDSCN_DWELLSTART 뒤에 생성된다. 마우스가 이동하거나 키 눌림과 같은 기타 활동은 머뭄이 끝났음을 알린다. 두 고지 모두 SCNotification에서 같은 필드를 설정한다:

필드 사용법
position 이것이 문서에서 마우스 포인터가 머문 위치에 가장 가까운 위치이다.
x, y 포인터가 머무는 곳. position 필드는 SCI_POSITIONFROMPOINTCLOSE(x, y)에 설정된다.

SCI_SETMOUSEDWELLTIME(int periodMilliseconds)
SCI_GETMOUSEDWELLTIME → int
이 메시지들은 SCN_DWELLSTART를 생성하기위해 마우스가 머문 시간을 밀리초로 설정하고 얻는다. SC_TIME_FOREVER를 설정하면, 기본 값인데, 머뭄 이벤트가 생성되지 않는다.

SCN_ZOOM
이 고지는 사용자가 키보드를 사용하여 화면을 확대하거나 SCI_SETZOOM 메쏘드가 호출될 때 생성된다. 이 고지는 위치를 재계산하는데 사용될 수 있다. 예를 들어, 픽셀이 아니라 문자의 관점에서 크기를 관리하기 위해 줄 번호 여백의 너비를 계산하는데 사용할 수 있다. SCNotification은 추가 정보가 없다.

SCN_HOTSPOTCLICK
SCN_HOTSPOTDOUBLECLICK
SCN_HOTSPOTRELEASECLICK
이 고지들은 사용자가 hotspot 속성이 설정된 스타일의 텍스트에 클릭하거나 더블 클릭할 때 생성된다. 이 고지는 변수 정의나 웹 페이지에 연결하는데 사용될 수 있다. position 필드는 클릭이나 더블클릭된 텍스트 위치가 설정되고 modifiers 필드는 SCN_KEY와 비슷한 방식으로 눌려진 키 수식자가 설정된다. SCN_HOTSPOTRELEASECLICK에 대하여 Ctrl 키의 상태만 보고된다.

SCN_INDICATORCLICK
SCN_INDICATORRELEASE
이 고지들은 사용자가 표시자를 가진 텍스트에 마우스를 클릭하거나 놓을 때 생성된다. position 필드는 클릭 또는 더블 클릭된 텍스트 위치가 설정되고 modifiers 필드는 SCN_KEY와 비슷하게 눌려진 키 수식자가 설정된다.

SCN_CALLTIPCLICK
이 고지는 사용자가 콜팁을 클릭할 때 생성된다. 이 고지는 함수 이름이 다양한 인자와 함께 적재될 때 다음 함수 원형을 화면에 보여주는데 사용될 수 있다. position 필드는 위 화살표와 함께 클릭되었다면 1로 설정되고, 아래 화살표와 함께면 2로 설정되며, 다른 경우는 0이 설정된다.

SCN_AUTOCSELECTION
사용자가 자동완성 리스트에서 항목을 골랐다. 고지는 선택이 삽입되기 전에 전송된다. 고지로부터 반환되기 전에 자동 삽입은 SCI_AUTOCCANCEL 메시지를 보내 취소할 수 있다. SCNotification 필드는 다음과 같다:

필드 사용법
position 완성 중인 단어의 시작 위치.
text 선택된 텍스트.
ch 채움 문자가 선택에 사용되었다면 그 문자이고 그렇지 않으면 0이다.
listCompletionMethod 자동완성이 일어난 방식을 알려주는 값, 아래의 표 참조.

심볼 의미
SC_AC_FILLUP 1 채움 문자가 자동완성을 촉발시켰다. 사용된 문자는 ch에 있다.
SC_AC_DOUBLECLICK 2 더블 클릭이 자동완성을 촉발시켰다. ch는 0이다.
SC_AC_TAB 3 탭키 또는 SCI_TAB이 자동완성을 촉발시켰다. ch는 0이다.
SC_AC_NEWLINE 4 새줄 문자 또는 SCI_NEWLINE이 자동완성을 촉발시켰다. ch는 0이다.
SC_AC_COMMAND 5 SCI_AUTOCSELECT 메시지가 자동완성을 촉발시켰다. ch는 0이다.
SC_AC_SINGLE_CHOICE 6 목록에 하나의 선택만 있다. 'choose single' 모드가 활성화 되었다. SCI_AUTOCSETCHOOSESINGLE으로 설정되었다. ch는 0이다.

SCN_AUTOCCANCELLED
사용자가 자동완성 리스트를 취소했다. SCNotification에 다른 정보는 없다.

SCN_AUTOCCHARDELETED
자동완성 리스트가 활성화되어 있는 동안 사용자가 문자를 삭제했다. SCNotification에 다른 정보는 없다.

SCN_FOCUSIN
SCN_FOCUSOUT
SCN_FOCUSIN (2028)는 신틸라가 초점을 얻으면 촉발되고 SCN_FOCUSOUT (2029)는 초점을 잃으면 촉발된다.

SCN_AUTOCCOMPLETED
이 고지는 자동완성이 텍스트를 삽입하고 난 후에 발생한다. 필드는 SCN_AUTOCSELECTION 고지와 동일하다.

SCN_AUTOCSELECTIONCHANGE
자동 완성 리스트 또는 사용자 리스트에서 항목이 선택되면 이 고지가 전송된다. 사용되는 SCNotification 필드는 다음과 같다:

필드 사용법
listType SCI_USERLISTSHOW 메시지가 listType 매개변수에 설정된다. 또는 자동완성일 경우 0이 설정된다.
text 선택된 텍스트
position 리스트가 표시된 위치

이미지

여백 표식과 자동완성 목록에 사용되는 이미지로는 RGBA와 XPM을 지원한다.

RGBA

RGBA 포맷은 각 픽셀에 대하여 알파 값으로 투명도를 설정할 수 있다. XPM보다 단순하며 더 좋다.

데이터는 일련의 4 바이트 픽셀 값으로 구성되는데 최상단 줄에 대한 픽셀, 제일 좌측 픽셀을 우선으로 하여, 다음 줄에 계속된다. 정렬의 이유로 줄 사이에 틈새는 없다.

각 픽셀은 순서대로 빨강 바이트 녹색 바이트 파랑 바이트 그리고 알파 바이트로 구성된다. 색상 바이트는 알파 값을 미리 곱해 얻지 않는다. 다시 말해, 투명도가 25%인 완전히 빨간 픽셀은 [FF, 00, 00, 3F]이다.

RGBA 픽셀 데이터는 크기 정보를 가지고 있지 않기 때문에, 먼저 SCI_RGBAIMAGESETWIDTHSCI_RGBAIMAGESETHEIGHT 메시지로 너비와 높이를 설정해야 한다.

GUI 플랫폼은 보통 RGBA 비슷한 형식으로 이미지 파일 포맷을 메모리 안으로 읽기 위한 기능을 갖추고 있다. 적절한 플랫폼이 지원되지 않으면, LodePNG와 picoPNG 라이브러리가 PNG 파일을 적재하고 읽을 만한 소형 라이브러리이다. BSD-스타일 라이센스 아래에서 사용할 수 있다.

RGBA 포맷은 Windows, GTK 그리고 macOS Cocoa에서 지원된다. macOS Carbon에서는 지원되지 않는다.

XPM

XPM 형식은 여기에 기술되어 있다. 신틸라는 오직 XPM 픽스맵만 다룰 수 있다. 픽스맵은 색상없이 픽셀당 문자 하나를 사용한다. 이름이 "None"이라는 완전히 투명한 색깔이 있을 수 있다.

XPM 이미지에는 두 가지 형식의 데이터 구조가 사용된다. 먼저 "lines form" 형식은 C 소스 코드에 이미지를 임베딩하는데 적당하다. "text form"은 파일로부터 읽어 들일때 적당하다. 라인 폼은 제일 앞의 문자열 배열에 색상의 갯수와 부피를 알려준다. 이 다음에 각 색상에 대한 문자열이 따른다. 그리고 그 섹션 다음에 각 줄에 문자열 하나씩으로 구성된 이미지가 따른다. 텍스트 폼에는 C 소스 코드에서 널 바이트로 끝나는 블록과 똑 같은 데이터가 담긴다. "/* XPM */" 주석으로 해당 표식을 단다.

어느 형식이든 신틸라 API와 사용이 가능하다. 어느 형식인지 결정하기 위해 지정 위치의 바이트들을 검사한다: 바이트가 "/* XPM */"으로 시작하면 텍스트 형식으로 간주되고, 그렇지 않으면 라인 형식으로 취급한다.

XPM 형식은 모든 플랫폼에서 지원된다.

GTK

GTK에서, 다음 함수들은 신틸라 위젯을 만들고, 그와 함께 통신하며 그리고 모든 신틸라 위젯이 파괴된 후에 자원이 해제되도록 한다.

GtkWidget *scintilla_new()
void scintilla_set_id(ScintillaObject *sci, uptr_t id)
sptr_t scintilla_send_message(ScintillaObject *sci,unsigned int iMessage, uptr_t wParam, sptr_t lParam)
void scintilla_release_resources()

GtkWidget *scintilla_new()
새로운 신틸라 위젯을 만든다. 반환된 포인터는 컨테이너에 추가되고 다른 위젯과 똑같이 화면에 표시된다.

void scintilla_set_id(ScintillaObject *sci, uptr_t id)
콘트롤 ID를 설정한다. 이 실체에 고지되는 모든 Sci_NotifyHeader 구조체의 idFrom 필드에 사용된다. 어플리케이션이 여러 신틸라 위젯을 만들었다면, 이를 이용하여 각 고지의 소스를 발견할 수 있다. 값은 작아야 한다. 포인터라기 보다, 16비트 보다 작으면 좋다. 함수 중에는 오직 16비트나 32비트만 전송하는 것이 있기 때문이다.

sptr_t scintilla_send_message(ScintillaObject *sci,unsigned int iMessage, uptr_t wParam, sptr_t lParam)
메인 엔트리 포인트로 이 문서에서 설명한 메시지는 모두 전송할 수 있다.

void scintilla_release_resources()
모든 신틸라 위젯이 제거된 뒤에 이 함수를 호출하여 남아 있는 자원을 해제한다.

잠정적 메시지

복잡한 새로운 특징들이 '잠정적으로' 추가될 수 있다. API에 변화가 있을 수 있다. 잠정적 특징들은 사용하다 실수임을 보여주면 심지어 제거될 수도 있다.

잠정적 특징들은 이 문서에서 눈에 띄는 배경색으로 화면에 표시된다.

개발자 중에는 안정적인 특징들만을 사용하고 싶을 수 있다. 잠정적 상태를 벗어나고 싶을 수 있다. 잠정적인 메시지를 피하려면 SCI_DISABLE_PROVISIONAL 심볼로 컴파일하면 된다.

현재 잠정적 메시지나 값은 없다.

비추천 메시지와 고지

다음 메시지들은 현재 기존의 윈도우즈 콘트롤들을 흉내내기 위해 지원된다. 그러나 앞으로 신틸라에서 제거될 것이다. 이런 메시지들을 사용하고 있다면, 대등한 신틸라 함수로 교체하기 바란다.

WM_GETTEXT(int length, char *text)
WM_SETTEXT(<unused>, const char *text)
EM_GETLINE(int line, char *text)
EM_REPLACESEL(<unused>, const char *text)
EM_SETREADONLY
EM_GETTEXTRANGE(<unused>, TEXTRANGE *tr)
WM_CUT
WM_COPY
WM_PASTE
WM_CLEAR
WM_UNDO
EM_CANUNDO
EM_EMPTYUNDOBUFFER
WM_GETTEXTLENGTH
EM_GETFIRSTVISIBLELINE
EM_GETLINECOUNT
EM_GETMODIFY
EM_SETMODIFY(bool isModified)
EM_GETRECT(RECT *rect)
EM_GETSEL(int *start, int *end)
EM_EXGETSEL(<unused>, CHARRANGE *cr)
EM_SETSEL(int start, int end)
EM_EXSETSEL(<unused>, CHARRANGE *cr)
EM_GETSELTEXT(<unused>, char *text)
EM_LINEFROMCHAR(int position)
EM_EXLINEFROMCHAR(int position)
EM_LINEINDEX(int line)
EM_LINELENGTH(int position)
EM_SCROLL(int line)
EM_LINESCROLL(int column, int line)
EM_SCROLLCARET()
EM_CANPASTE
EM_CHARFROMPOS(<unused>, POINT *location)
EM_POSFROMCHAR(int position, POINT *location)
EM_SELECTIONTYPE
EM_HIDESELECTION(bool hide)
EM_FINDTEXT(int flags, FINDTEXTEX *ft)
EM_FINDTEXTEX(int flags, FINDTEXTEX *ft)
EM_GETMARGINS
EM_SETMARGINS(EC_LEFTMARGIN or EC_RIGHTMARGIN or EC_USEFONTINFO, int val)
EM_FORMATRANGE

다음은 Scintilla.hINCLUDE_DEPRECATED_FEATURES를 정의했을 경우에만 포함되는 특징들이다. 앞으로의 호환성을 담보하기 위해 지시한 대로 바꾸시기를 바란다.

SCI_SETKEYSUNICODE(bool keysUnicode)
SCI_GETKEYSUNICODE → bool
SCI_SETSTYLEBITS(int bits)
SCI_GETSTYLEBITS → int
SCI_GETSTYLEBITSNEEDED → int

SC_CP_DBCS 비추천
GTK에서 DBCS (이중 바이트 문자 세트) 모드를 설정하는데 사용되었다. SCI_SETCODEPAGE를 호출할 때 명시적인 DBCS 코드 페이지를 사용해야 한다.

SCI_SETUSEPALETTE(bool usePalette) Deprecated
SCI_GETUSEPALETTE → bool Deprecated
신틸라는 펠리트 모드를 더 이상 지원하지 않는데, 팰리트를 지원하는 최종 버전은 2.29였다. 이 메쏘드를 호출하지 말아야 한다.

SCI_SETKEYSUNICODE(bool keysUnicode) Deprecated
SCI_GETKEYSUNICODE → bool Deprecated
윈도우즈에서 더 이상 좁은 문자 창을 지원하지 않는다. 그래서 입력은 언제나 유니코드로 취급된다.

SCN_POSCHANGED() 비추천
사용자가 커서를 텍스트에서 다른 위치로 이동할 때 촉발된다. 대신 SCN_UPDATEUI를 사용하자.

SCN_CHECKBRACE 비추천
문서의 텍스트나 스타일이 변했을 때 또는 선택 범위가 바뀔 때 촉발된다. 이 메시지는 SCN_UPDATEUI로 바꾸어야 한다. 또 더 자세한 정보를 위해 텍스트와 스타일 변화에 관한 SCN_MODIFIED를 사용할 수도 있다.

다음 특징들은 코드에서 호출되지 않도록 제거되어야 하지만 호출자와의 호환을 위해 여전히 정의되어 있다.

SCI_SETSTYLEBITS(int bits) Deprecated
SCI_GETSTYLEBITS → int Deprecated
SCI_GETSTYLEBITSNEEDED → int Deprecated
INDIC0_MASK, INDIC1_MASK, INDIC2_MASK, INDICS_MASK 비추천
신틸라는 더 이상 스타일 바이트 표시자를 지원하지 않는다. 지원하는 마지막 버전은 3.4.2이다. 이 심볼들을 사용하면 안 되고 표준 표시자로 교체되어야 한다. SCI_GETSTYLEBITSSCI_GETSTYLEBITSNEEDED는 언제나 8을 돌려주는데, 스타일링에 8비트가 사용되었고 256개의 스타일이 있다는 뜻이다.

비권장 API는 비추천 이전 단계이다. 새롭고 더 좋은 API가 구현되었기 때문에 새 코드를 사용해야 하지만 이전 API는 제거하지 않아도 된다. 비권장 API는 오렌지색 삭제선으로 표식이 붙고 문서에 해당하는 더 좋은 API를 표기하여 둔다.

절대로 지원하지 않는 편집 메시지

EM_GETWORDBREAKPROC EM_GETWORDBREAKPROCEX
EM_SETWORDBREAKPROC EM_SETWORDBREAKPROCEX
EM_GETWORDWRAPMODE EM_SETWORDWRAPMODE
EM_LIMITTEXT EM_EXLIMITTEXT
EM_SETRECT EM_SETRECTNP
EM_FMTLINES
EM_GETHANDLE EM_SETHANDLE
EM_GETPASSWORDCHAR EM_SETPASSWORDCHAR
EM_SETTABSTOPS
EM_FINDWORDBREAK
EM_GETCHARFORMAT EM_SETCHARFORMAT
EM_GETOLEINTERFACE EM_SETOLEINTERFACE
EM_SETOLECALLBACK
EM_GETPARAFORMAT EM_SETPARAFORMAT
EM_PASTESPECIAL
EM_REQUESTRESIZE
EM_GETBKGNDCOLOR EM_SETBKGNDCOLOR
EM_STREAMIN EM_STREAMOUT
EM_GETIMECOLOR EM_SETIMECOLOR
EM_GETIMEOPTIONS EM_SETIMEOPTIONS
EM_GETOPTIONS EM_SETOPTIONS
EM_GETPUNCTUATION EM_SETPUNCTUATION
EM_GETTHUMB
EM_GETEVENTMASK
EM_SETEVENTMASK
EM_DISPLAYBAND
EM_SETTARGETDEVICE

신틸라는 의미가 있는 곳마다 가능하면 표준 windows Edit 그리고 RichEdit 콘트롤의 상위 집합이 되려고 한다. 워드 프로세서에 사용할 목적은 아니기 때문에, 어떤 편집 메시지는 합리적으로 처리할 수 없다. 지원되지 않는 메시지는 아무 효과가 없다.

제거된 특징들

다음 특징들은 이제 완전히 제거되었다.

이전 버전의 신틸라는 표시자가 각 스타일 바이트에 저장하는 것을 허용했었다. 이 기능은 2007년에 비추천 되어 2014년 3.4.3 버전에서 제거되었다. 스타일 바이트 표시자를 사용한다면 표준 표시자로 교체해야 한다.

SC_CP_DBCS 제거됨
이 변수는 GTK에서 DBCS (Double Byte Character Set) 모드를 설정하는 데 사용되었다. SCI_SETCODEPAGE를 호출할 때 명시적인 DBCS 코드 페이지를 사용해야 한다.

SCI_SETUSEPALETTE(bool usePalette) 제거됨
SCI_GETUSEPALETTE → bool 제거됨
신틸라는 팰릿트 모드를 더 이상 지원하지 않는다. 팰릿트 모드를 지원하는 최종 버전은 2.29이었다. 이 메쏘드들은 더 이상 호출하지 말아야 한다.

신틸라 빌드하기

신틸라나 SciTE를 빌드하려면, 신틸라와 SciTE 디렉토리에 있는 README 파일을 참고하자. 컴파일러는 C++17을 지원해야 한다. 윈도우즈용은 GCC 7.1 또는 Microsoft Visual C++ 2017.5를 사용하여 빌드할 수 있다. GTK에서는 GCC 7.1 이상 버전을 사용해야 한다. GTK 2.24+ 그리고 3.x은 glib 2.22+으로 지원한다. 설치된 GTK 버전은 자동으로 탐지한다. GTK 2 그리고 GTK 3이 모두 존재할 경우, GTK 3.x를 빌드하려면 GTK3을 명령어 줄에 정의할 필요가 있다.

시틸라로부터 소스 파일을 제거하거나 추가하려면 빌드 파일을 수정할 필요가 있을 수 있다. 수정은 AddSource.txt 파일에서 하면 된다.

정적 링킹(Static linking)

윈도우즈에서 신틸라는 보통 동적 라이브러리 .DLL 파일로 사용된다. 신틸라를 직접 어플리케이션 .EXE 또는 .DLL 파일에 연결하고 싶다면, 정적 라이브러리 bin/libscintilla.lib (GCC를 사용한다면 .a)를 링크하고 Scintilla_RegisterClasses를 호출하면 된다. Scintilla_RegisterClasses는 어플리케이션의 HINSTANCE을 받아 "Scintilla" 창 클래스가 등록되었는지 확인한다.

독립 Scintilla DLL을 만들려면 ScintillaDLL.cxx 파일을 컴파일해서 링크해 넣어야 한다. DllMainScintilla_RegisterClasses를 제공해야 하기 때문이다.

여백에 사용된 오른쪽 화살표 커서를 신틸라가 확실하게 화면에 보여주도록 하려면, scintilla/win32/Margin.cur 파일을 ID IDC_MARGIN로 어플리케이션의 자원에 추가하자. 이 아이디는 scintilla/win32/platfromRes.h에 400으로 정의되어 있다.

확실하게 어휘분석기를 신틸라에 링크하기

사용된 컴파일러와 링커에 따라, 어휘분석기를 생략할 수도 있다. 정적 라이브러리를 빌드할 때 이런 일이 상당히 자주 일어난다. 어휘분석기가 링크되었는지 확인하려면, Scintilla_LinkLexers() 함수를 호출해 보면 된다.

어휘분석기 집합 변경하기

신틸라에서 어휘분석기 집합을 변경하려면, scintilla/src directory에서 어휘분석기 소스 파일을 추가하고 제거하자 (Lex*.cxx) 그리고 src 디렉토리에서 src/LexGen.py 스크립트를 실행하여 make 파일과 KeyWords.cxx를 업데이트하자. LexGen.py는 파이썬 3.6 이상이 필요하다. 파이썬에 접근할 수 없으면, 손으로 KeyWords.cxx를 편집할 수 있다. 단순하게 다른 어휘분석기의 패턴을 따르면 된다. 어휘분석기 소스 코드의 LexerModule lmMyLexer(...);과 통신하기 위해 LINK_LEXER(lmMyLexer);를 포함하는 것이 중요하다.

대안적으로 정규 표현식 구현을 빌드하기

간단한 인터페이스로 정규 표현식 엔진을 컴파일 시간에 바꿀 수 있다. 선택한 엔진에 대하여 RegexSearchBase를 구현하면 된다. 내장 구현된 BuiltinRegex를 보고 어떻게 하는지 살펴보자. 다음 공장 메쏘드 CreateRegexSearch를 구현하여 클래스의 실체를 만든다. SCI_OWNREGEX를 정의하여 내장 구현을 비활성화시켜야 한다.

전처리기

전처리기 설정값 설명
NO_CXX11_REGEX C++11 std::regex 없이 빌드.
REGEX_MULTILINE C++11의 여러줄 정규표현식 지원 빌드.
SCI_OWNREGEX 독자적인 정규표현식 엔진 적용 빌드.
SCI_DISABLE_AUTOGENERATED 상수나 마크로 자동 생성 불필요.
SCI_DISABLE_PROVISIONAL 잠정적 특징없이 빌드.
INCLUDE_DEPRECATED_FEATURES 신틸라 헤더로부터 비추천된 특징들 포함 빌드.
DISABLE_D2D (Win32에서) Direct2D/DirectWrite 없이 빌드.