Browse Source

XmlParser now handles equals sign inside quotes when checking if cursor is inside an attribute value.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4139 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts^2
Matt Ward 16 years ago
parent
commit
4e32c63398
  1. 1
      src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/XmlTests.cs
  2. 23
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlParser.cs
  3. 8
      src/AddIns/DisplayBindings/XmlEditor/Test/Parser/AttributeValueUnderCursorTests.cs

1
src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/XmlTests.cs

@ -69,7 +69,6 @@ namespace ICSharpCode.XamlBinding.Tests
} }
[Test] [Test]
[Ignore("Failing Test broke the build for 3 days - ignoring it. Reenable this test when the XmlParser bug is fixed!")]
public void InMarkupExtensionNamedParameterTest() public void InMarkupExtensionNamedParameterTest()
{ {
string xaml = "<Test val1=\"{Binding Value, Path=Control}\" />"; string xaml = "<Test val1=\"{Binding Value, Path=Control}\" />";

23
src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlParser.cs

@ -323,16 +323,12 @@ namespace ICSharpCode.XmlEditor
// Count the number of double quotes and single quotes that exist // Count the number of double quotes and single quotes that exist
// before the first equals sign encountered going backwards to // before the first equals sign encountered going backwards to
// the start of the active element. // the start of the active element.
bool foundEqualsSign = false;
int doubleQuotesCount = 0; int doubleQuotesCount = 0;
int singleQuotesCount = 0; int singleQuotesCount = 0;
char lastQuoteChar = ' '; char lastQuoteChar = ' ';
for (int i = index - 1; i > elementStartIndex; --i) { for (int i = index - 1; i > elementStartIndex; --i) {
char ch = xml[i]; char ch = xml[i];
if (ch == '=') { if (ch == '\"') {
foundEqualsSign = true;
break;
} else if (ch == '\"') {
lastQuoteChar = ch; lastQuoteChar = ch;
++doubleQuotesCount; ++doubleQuotesCount;
} else if (ch == '\'') { } else if (ch == '\'') {
@ -341,18 +337,13 @@ namespace ICSharpCode.XmlEditor
} }
} }
bool isInside = false; // Odd number of quotes?
if ((lastQuoteChar == '\"') && ((doubleQuotesCount % 2) > 0)) {
if (foundEqualsSign) { return true;
// Odd number of quotes? } else if ((lastQuoteChar == '\'') && ((singleQuotesCount %2) > 0)) {
if ((lastQuoteChar == '\"') && ((doubleQuotesCount % 2) > 0)) { return true;
isInside = true;
} else if ((lastQuoteChar == '\'') && ((singleQuotesCount %2) > 0)) {
isInside = true;
}
} }
return false;
return isInside;
} }
/// <summary> /// <summary>

8
src/AddIns/DisplayBindings/XmlEditor/Test/Parser/AttributeValueUnderCursorTests.cs

@ -79,6 +79,14 @@ namespace XmlEditor.Tests.Parser
Assert.AreEqual("{Binding Value}", XmlParser.GetAttributeValueAtIndex(xaml, offset)); Assert.AreEqual("{Binding Value}", XmlParser.GetAttributeValueAtIndex(xaml, offset));
} }
[Test]
public void InMarkupExtensionNamedParameterTest()
{
string xaml = "<Test val1=\"{Binding Value, Path=Control}\" />";
int offset = "<Test val1=\"{Binding Value, Path=".Length;
Assert.IsTrue(XmlParser.IsInsideAttributeValue(xaml, offset));
}
[Test] [Test]
public void LeftCurlyBracketIsValidAttributeValueChar() public void LeftCurlyBracketIsValidAttributeValueChar()
{ {

Loading…
Cancel
Save