From f757e0045c4a50d0334c23792d83ae19bfb3aa6b Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Wed, 22 Jun 2005 18:19:43 +0000 Subject: [PATCH] Fixed code completion in files containing character literals like '\xFF'. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@161 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/CSharpBinding.csproj | 2 ++ .../Project/Src/Parser/ExpressionFinder.cs | 28 +++++++++++-------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj index f54f1a2d44..68796c50f9 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj @@ -73,6 +73,8 @@ ICSharpCode.Core False + + diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/ExpressionFinder.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/ExpressionFinder.cs index 823b0b3685..f7a307702e 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/ExpressionFinder.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/ExpressionFinder.cs @@ -257,18 +257,22 @@ namespace CSharpBinding.Parser bool ReadChar(StringBuilder outText, string text, ref int curOffset) { - char first = text[curOffset]; - - if (curOffset <= initialOffset) { - outText.Append(text[curOffset++]); - } - if (curOffset <= initialOffset) { - outText.Append(text[curOffset++]); - } - - // special case: '\'' - if(first == '\\' && curOffset <= initialOffset) { - outText.Append(text[curOffset++]); + char first = text[curOffset++]; + outText.Append(first); + if (curOffset > initialOffset) + return false; + char second = text[curOffset++]; + outText.Append(second); + if (first == '\\') { + // character is escape sequence, so read one char more + char next; + do { + if (curOffset > initialOffset) + return false; + next = text[curOffset++]; + outText.Append(next); + // unicode or hexadecimal character literals can have more content characters + } while((second == 'u' || second == 'x') && char.IsLetterOrDigit(next)); } return text[curOffset - 1] == '\''; }