diff options
author | Markus Keller | 2011-04-08 14:44:56 +0000 |
---|---|---|
committer | Markus Keller | 2011-04-08 14:44:56 +0000 |
commit | f153ecc63fd98ac0de4c2109c38bb108fa63d900 (patch) | |
tree | 9ebd93030a0da59c3576198876ac38fc272400ed | |
parent | 9d09c3fbac71e02660d12373e75d5fd1bc5b56b2 (diff) | |
download | eclipse.platform.text-f153ecc63fd98ac0de4c2109c38bb108fa63d900.tar.gz eclipse.platform.text-f153ecc63fd98ac0de4c2109c38bb108fa63d900.tar.xz eclipse.platform.text-f153ecc63fd98ac0de4c2109c38bb108fa63d900.zip |
Bug 342295: [templates] Template variable names can only contain ASCII characters
-rw-r--r-- | org.eclipse.text.tests/src/org/eclipse/text/tests/templates/TemplateTranslatorTest.java | 30 | ||||
-rw-r--r-- | org.eclipse.text/src/org/eclipse/jface/text/templates/TemplateTranslator.java | 12 |
2 files changed, 38 insertions, 4 deletions
diff --git a/org.eclipse.text.tests/src/org/eclipse/text/tests/templates/TemplateTranslatorTest.java b/org.eclipse.text.tests/src/org/eclipse/text/tests/templates/TemplateTranslatorTest.java index 4dec4576055..87ad15307b1 100644 --- a/org.eclipse.text.tests/src/org/eclipse/text/tests/templates/TemplateTranslatorTest.java +++ b/org.eclipse.text.tests/src/org/eclipse/text/tests/templates/TemplateTranslatorTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2008 IBM Corporation and others. + * Copyright (c) 2006, 2011 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -101,6 +101,34 @@ public class TemplateTranslatorTest extends TestCase { assertEquals("var", vars[0].getType()); } + public void testNonAsciiVarTemplate() throws Exception { + TemplateBuffer buffer= fTranslator.translate("System.out.println(${bl\u00F6d:var} + \" with element type \" + ${h\u00E4:elemType(bl\u00F6d)});"); + assertNull(fTranslator.getErrorMessage()); + assertEquals("System.out.println(bl\u00F6d + \" with element type \" + h\u00E4);", buffer.getString()); + TemplateVariable[] vars= buffer.getVariables(); + assertEquals(2, vars.length); + + assertEquals("bl\u00F6d", vars[0].getName()); + assertEquals(1, vars[0].getOffsets().length); + assertEquals(19, vars[0].getOffsets()[0]); + assertEquals(4, vars[0].getLength()); + assertEquals(false, vars[0].isUnambiguous()); + assertEquals("bl\u00F6d", vars[0].getDefaultValue()); + assertEquals(1, vars[0].getValues().length); + assertEquals(vars[0].getDefaultValue(), vars[0].getValues()[0]); + assertEquals("var", vars[0].getType()); + + assertEquals("h\u00E4", vars[1].getName()); + assertEquals(1, vars[1].getOffsets().length); + assertEquals(50, vars[1].getOffsets()[0]); + assertEquals(2, vars[1].getLength()); + assertEquals(false, vars[1].isUnambiguous()); + assertEquals("h\u00E4", vars[1].getDefaultValue()); + assertEquals(1, vars[1].getValues().length); + assertEquals(vars[1].getDefaultValue(), vars[1].getValues()[0]); + assertEquals("elemType", vars[1].getType()); + } + public void testIllegalSyntax1() throws Exception { ensureFailure("foo ${var"); } diff --git a/org.eclipse.text/src/org/eclipse/jface/text/templates/TemplateTranslator.java b/org.eclipse.text/src/org/eclipse/jface/text/templates/TemplateTranslator.java index f1c6fe05dfd..8cfba7a3c52 100644 --- a/org.eclipse.text/src/org/eclipse/jface/text/templates/TemplateTranslator.java +++ b/org.eclipse.text/src/org/eclipse/jface/text/templates/TemplateTranslator.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2008 IBM Corporation and others. + * Copyright (c) 2000, 2011 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -42,10 +42,16 @@ import java.util.regex.Pattern; */ public class TemplateTranslator { /** + * Regex pattern for identifier + * @since 3.7 + */ + private static final String IDENTIFIER= "(?:[\\p{javaJavaIdentifierStart}&&[^\\$]][\\p{javaJavaIdentifierPart}&&[^\\$]]*+)"; //$NON-NLS-1$ + + /** * Regex pattern for qualifiedname * @since 3.4 */ - private static final String QUALIFIED_NAME= "(?:\\w++\\.)*+\\w++"; //$NON-NLS-1$ + private static final String QUALIFIED_NAME= "(?:" + IDENTIFIER + "\\.)*+" + IDENTIFIER; //$NON-NLS-1$ //$NON-NLS-2$ /** * Regex pattern for argumenttext @@ -78,7 +84,7 @@ public class TemplateTranslator { private static final Pattern ESCAPE_PATTERN= Pattern.compile( "\\$\\$|\\$\\{" + // $$|${ //$NON-NLS-1$ SPACES + - "(\\w*+)" + // variable id group (1) //$NON-NLS-1$ + "(" + IDENTIFIER + "?+)" + // variable id group (1) //$NON-NLS-1$ //$NON-NLS-2$ SPACES + "(?:" + //$NON-NLS-1$ ":" + //$NON-NLS-1$ |