diff options
author | nyamatongwe <unknown> | 2005-12-09 22:22:10 +0000 |
---|---|---|
committer | nyamatongwe <unknown> | 2005-12-09 22:22:10 +0000 |
commit | bddae2d12fd9a0856bfa2395c6a041f9603f73f1 (patch) | |
tree | e6c97c5de9d065a204e6d685c0794f8d889b5cdf /src/Document.cxx | |
parent | c40ba04c83a54fddea6b2f80aa945298316b1de1 (diff) | |
download | scintilla-mirror-bddae2d12fd9a0856bfa2395c6a041f9603f73f1.tar.gz |
Fixed bug #1373855 by taking DBCS into account when matching braces.
Moved brace matching from Editor into Document.
Diffstat (limited to 'src/Document.cxx')
-rw-r--r-- | src/Document.cxx | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/Document.cxx b/src/Document.cxx index fcd5c91d7..7b189541a 100644 --- a/src/Document.cxx +++ b/src/Document.cxx @@ -1539,3 +1539,55 @@ int Document::ExtendStyleRange(int pos, int delta, bool singleLine) { } return pos; } + +static char BraceOpposite(char ch) { + switch (ch) { + case '(': + return ')'; + case ')': + return '('; + case '[': + return ']'; + case ']': + return '['; + case '{': + return '}'; + case '}': + return '{'; + case '<': + return '>'; + case '>': + return '<'; + default: + return '\0'; + } +} + +// TODO: should be able to extend styled region to find matching brace +int Document::BraceMatch(int position, int /*maxReStyle*/) { + char chBrace = CharAt(position); + char chSeek = BraceOpposite(chBrace); + if (chSeek == '\0') + return - 1; + char styBrace = static_cast<char>(StyleAt(position) & stylingBitsMask); + int direction = -1; + if (chBrace == '(' || chBrace == '[' || chBrace == '{' || chBrace == '<') + direction = 1; + int depth = 1; + position = position + direction; + while ((position >= 0) && (position < Length())) { + position = MovePositionOutsideChar(position, direction); + char chAtPos = CharAt(position); + char styAtPos = static_cast<char>(StyleAt(position) & stylingBitsMask); + if ((position > GetEndStyled()) || (styAtPos == styBrace)) { + if (chAtPos == chBrace) + depth++; + if (chAtPos == chSeek) + depth--; + if (depth == 0) + return position; + } + position = position + direction; + } + return - 1; +} |