Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Keller2011-04-08 14:44:56 +0000
committerMarkus Keller2011-04-08 14:44:56 +0000
commitf153ecc63fd98ac0de4c2109c38bb108fa63d900 (patch)
tree9ebd93030a0da59c3576198876ac38fc272400ed
parent9d09c3fbac71e02660d12373e75d5fd1bc5b56b2 (diff)
downloadeclipse.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.java30
-rw-r--r--org.eclipse.text/src/org/eclipse/jface/text/templates/TemplateTranslator.java12
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$

Back to the top