Skip to content
Snippets Groups Projects
Commit 43f6902e authored by Christian Wulf's avatar Christian Wulf
Browse files

init

parents
No related branches found
No related tags found
No related merge requests found
Showing
with 619 additions and 0 deletions
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="antlr-generated"/>
<classpathentry kind="src" path="test"/>
<classpathentry kind="src" path="META-INF"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="lib" path="lib/antlr-3.4-complete.jar" sourcepath="lib/antlr-3.4-complete.jar"/>
<classpathentry kind="lib" path="lib/log4j-api-2.0-beta3.jar"/>
<classpathentry kind="lib" path="lib/log4j-core-2.0-beta3.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="output" path="bin"/>
</classpath>
bin
/log.log
.project 0 → 100644
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>TemplateEngine</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.dltk.core.scriptbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.deved.antlride.core.nature</nature>
</natures>
</projectDescription>
#Mon Nov 26 15:19:23 CET 2012
antlr_core_code_generator_XdbgST=false
antlr_core_code_generator_append_java_package_to_out_folder=true
antlr_core_code_generator_debug=false
antlr_core_code_generator_max_memory=0
antlr_core_code_generator_out_folder=antlr-generated
antlr_core_code_generator_out_option=p
antlr_core_code_generator_profile=false
antlr_core_code_generator_trace=false
antlr_core_code_generator_x_max_switch_case_labels=300
antlr_core_code_generator_x_min_switch_alts=3
antlr_core_mark_generated_resources_as_derived=true
eclipse.preferences.version=1
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.7
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
<properties>
<property name="filename">log.log</property>
</properties>
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n%ex" />
</Console>
<File name="File" fileName="${filename}">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n%ex" />
</File>
</appenders>
<loggers>
<logger name="de.chw.css.script" level="debug" additivity="false">
<appender-ref ref="Console" />
<!-- <appender-ref ref="File" /> -->
</logger>
<root level="error">
<appender-ref ref="Console" />
<appender-ref ref="File" />
</root>
</loggers>
</configuration>
This diff is collapsed.
This diff is collapsed.
lexer grammar CssTemplateEngineLexer;
options {
language = Java;
}
@lexer::header {
package de.chw.css.script;
}
//B.1.2 Comments
SINGLE_LINE_COMMENT
: '//' Input_character* {$channel=HIDDEN; }
;
fragment Input_characters
: Input_character+
;
fragment Input_character
: ~NEW_LINE_CHARACTER //'<Any Unicode Character Except A NEW_LINE_CHARACTER>'
;
fragment NEW_LINE_CHARACTER
: '\u000D' //'<Carriage Return Character (U+000D)>'
| '\u000A' //'<Line Feed Character (U+000A)>'
| '\u0085' //'<Next Line Character (U+0085)>'
| '\u2028' //'<Line Separator Character (U+2028)>'
| '\u2029' //'<Paragraph Separator Character (U+2029)>'
;
//B.1.3 White Space
WHITESPACE
: Whitespace_characters {$channel = HIDDEN;}
;
fragment Whitespace_characters
: Whitespace_character+
;
fragment Whitespace_character
: UNICODE_CLASS_Zs //'<Any Character With Unicode Class Zs>'
| '\u0009' //'<Horizontal Tab Character (U+0009)>'
| '\u000B' //'<Vertical Tab Character (U+000B)>'
| '\u000C' //'<Form Feed Character (U+000C)>'
;
//B.1.5 Unicode Character Escape Sequences
fragment Unicode_escape_sequence
: '\\u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
| '\\U' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
;
fragment HEX_DIGIT
: '0'..'9'
| 'A'..'F'
| 'a'..'f'
;
COMMENT_START: '/*' NEW_LINE;
COMMENT_END: '*/' NEW_LINE;
TEMPLATE: 'TEMPLATE' NEW_LINE;
TEMPLATE_END: 'TEMPLATE END' NEW_LINE;
PRODUCTLINE: 'PRODUCTLINE';
VARIABLE: 'VARIABLE';
NEW_LINE
: ('\u000D' //'<Carriage Return Character (U+000D)>'
| '\u000A' //'<Line Feed Character (U+000A)>'
| '\u000D' '\u000A' //'<Carriage Return Character (U+000D) Followed By Line Feed Character (U+000A)>'
| '\u0085' //<Next Line Character (U+0085)>'
| '\u2028' //'<Line Separator Character (U+2028)>'
| '\u2029' //'<Paragraph Separator Character (U+2029)>'
)
;
VALUE: '/*' | '*/' | 'TEMPLATE' | 'TEMPLATE END' | .;
//'<A Unicode Character Of Classes Lu, Ll, Lt, Lm, Lo, Or Nl>'
// WARNING: ignores Unicode_escape_sequence
fragment Letter_character
: UNICODE_CLASS_Lu
| UNICODE_CLASS_Ll
| UNICODE_CLASS_Lt
| UNICODE_CLASS_Lm
| UNICODE_CLASS_Lo
| UNICODE_CLASS_Nl
// | '<A Unicode_escape_sequence Representing A Character Of Classes Lu, Ll, Lt, Lm, Lo, Or Nl>'
;
//'<A Unicode Character Of Classes Mn Or Mc>'
// WARNING: ignores Unicode_escape_sequence
fragment Combining_character
: UNICODE_CLASS_Mn
| UNICODE_CLASS_Mc
// | '<A Unicode_escape_sequence Representing A Character Of Classes Mn Or Mc>'
;
//'<A Unicode Character Of The Class Nd>'
// WARNING: ignores Unicode_escape_sequence
fragment Decimal_digit_character
: UNICODE_CLASS_Nd
// | '<A Unicode_escape_sequence Representing A Character Of The Class Nd>'
;
//'<A Unicode Character Of The Class Pc>'
// WARNING: ignores Unicode_escape_sequence
fragment Connecting_character
: UNICODE_CLASS_Pc
// | '<A Unicode_escape_sequence Representing A Character Of The Class Pc>'
;
//'<A Unicode Character Of The Class Cf>'
// WARNING: ignores Unicode_escape_sequence
fragment Formatting_character
: UNICODE_CLASS_Cf
// | '<A Unicode_escape_sequence Representing A Character Of The Class Cf>'
;
// Unicode character classes
fragment UNICODE_CLASS_Zs
: '\u0020' // SPACE
| '\u00A0' // NO_BREAK SPACE
| '\u1680' // OGHAM SPACE MARK
| '\u180E' // MONGOLIAN VOWEL SEPARATOR
| '\u2000' // EN QUAD
| '\u2001' // EM QUAD
| '\u2002' // EN SPACE
| '\u2003' // EM SPACE
| '\u2004' // THREE_PER_EM SPACE
| '\u2005' // FOUR_PER_EM SPACE
| '\u2006' // SIX_PER_EM SPACE
| '\u2008' // PUNCTUATION SPACE
| '\u2009' // THIN SPACE
| '\u200A' // HAIR SPACE
| '\u202F' // NARROW NO_BREAK SPACE
| '\u3000' // IDEOGRAPHIC SPACE
| '\u205F' // MEDIUM MATHEMATICAL SPACE
;
fragment UNICODE_CLASS_Lu
: '\u0041'..'\u005A' // LATIN CAPITAL LETTER A_Z
| '\u00C0'..'\u00DE' // ACCENTED CAPITAL LETTERS
;
fragment UNICODE_CLASS_Ll
: '\u0061'..'\u007A' // LATIN SMALL LETTER a_z
;
fragment UNICODE_CLASS_Lt
: '\u01C5' // LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
| '\u01C8' // LATIN CAPITAL LETTER L WITH SMALL LETTER J
| '\u01CB' // LATIN CAPITAL LETTER N WITH SMALL LETTER J
| '\u01F2' // LATIN CAPITAL LETTER D WITH SMALL LETTER Z
;
fragment UNICODE_CLASS_Lm
: '\u02B0'..'\u02EE' // MODIFIER LETTERS
;
fragment UNICODE_CLASS_Lo
: '\u01BB' // LATIN LETTER TWO WITH STROKE
| '\u01C0' // LATIN LETTER DENTAL CLICK
| '\u01C1' // LATIN LETTER LATERAL CLICK
| '\u01C2' // LATIN LETTER ALVEOLAR CLICK
| '\u01C3' // LATIN LETTER RETROFLEX CLICK
| '\u0294' // LATIN LETTER GLOTTAL STOP
;
fragment UNICODE_CLASS_Nl
: '\u16EE' // RUNIC ARLAUG SYMBOL
| '\u16EF' // RUNIC TVIMADUR SYMBOL
| '\u16F0' // RUNIC BELGTHOR SYMBOL
| '\u2160' // ROMAN NUMERAL ONE
| '\u2161' // ROMAN NUMERAL TWO
| '\u2162' // ROMAN NUMERAL THREE
| '\u2163' // ROMAN NUMERAL FOUR
| '\u2164' // ROMAN NUMERAL FIVE
| '\u2165' // ROMAN NUMERAL SIX
| '\u2166' // ROMAN NUMERAL SEVEN
| '\u2167' // ROMAN NUMERAL EIGHT
| '\u2168' // ROMAN NUMERAL NINE
| '\u2169' // ROMAN NUMERAL TEN
| '\u216A' // ROMAN NUMERAL ELEVEN
| '\u216B' // ROMAN NUMERAL TWELVE
| '\u216C' // ROMAN NUMERAL FIFTY
| '\u216D' // ROMAN NUMERAL ONE HUNDRED
| '\u216E' // ROMAN NUMERAL FIVE HUNDRED
| '\u216F' // ROMAN NUMERAL ONE THOUSAND
;
fragment UNICODE_CLASS_Mn
: '\u0300' // COMBINING GRAVE ACCENT
| '\u0301' // COMBINING ACUTE ACCENT
| '\u0302' // COMBINING CIRCUMFLEX ACCENT
| '\u0303' // COMBINING TILDE
| '\u0304' // COMBINING MACRON
| '\u0305' // COMBINING OVERLINE
| '\u0306' // COMBINING BREVE
| '\u0307' // COMBINING DOT ABOVE
| '\u0308' // COMBINING DIAERESIS
| '\u0309' // COMBINING HOOK ABOVE
| '\u030A' // COMBINING RING ABOVE
| '\u030B' // COMBINING DOUBLE ACUTE ACCENT
| '\u030C' // COMBINING CARON
| '\u030D' // COMBINING VERTICAL LINE ABOVE
| '\u030E' // COMBINING DOUBLE VERTICAL LINE ABOVE
| '\u030F' // COMBINING DOUBLE GRAVE ACCENT
| '\u0310' // COMBINING CANDRABINDU
;
fragment UNICODE_CLASS_Mc
: '\u0903' // DEVANAGARI SIGN VISARGA
| '\u093E' // DEVANAGARI VOWEL SIGN AA
| '\u093F' // DEVANAGARI VOWEL SIGN I
| '\u0940' // DEVANAGARI VOWEL SIGN II
| '\u0949' // DEVANAGARI VOWEL SIGN CANDRA O
| '\u094A' // DEVANAGARI VOWEL SIGN SHORT O
| '\u094B' // DEVANAGARI VOWEL SIGN O
| '\u094C' // DEVANAGARI VOWEL SIGN AU
;
fragment UNICODE_CLASS_Cf
: '\u00AD' // SOFT HYPHEN
| '\u0600' // ARABIC NUMBER SIGN
| '\u0601' // ARABIC SIGN SANAH
| '\u0602' // ARABIC FOOTNOTE MARKER
| '\u0603' // ARABIC SIGN SAFHA
| '\u06DD' // ARABIC END OF AYAH
;
fragment UNICODE_CLASS_Pc
: '\u005F' // LOW LINE
| '\u203F' // UNDERTIE
| '\u2040' // CHARACTER TIE
| '\u2054' // INVERTED UNDERTIE
| '\uFE33' // PRESENTATION FORM FOR VERTICAL LOW LINE
| '\uFE34' // PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
| '\uFE4D' // DASHED LOW LINE
| '\uFE4E' // CENTRELINE LOW LINE
| '\uFE4F' // WAVY LOW LINE
| '\uFF3F' // FULLWIDTH LOW LINE
;
fragment UNICODE_CLASS_Nd
: '\u0030' // DIGIT ZERO
| '\u0031' // DIGIT ONE
| '\u0032' // DIGIT TWO
| '\u0033' // DIGIT THREE
| '\u0034' // DIGIT FOUR
| '\u0035' // DIGIT FIVE
| '\u0036' // DIGIT SIX
| '\u0037' // DIGIT SEVEN
| '\u0038' // DIGIT EIGHT
| '\u0039' // DIGIT NINE
;
COMMENT_END=4
COMMENT_START=5
Combining_character=6
Connecting_character=7
Decimal_digit_character=8
Formatting_character=9
HEX_DIGIT=10
Input_character=11
Input_characters=12
Letter_character=13
NEW_LINE=14
NEW_LINE_CHARACTER=15
PRODUCTLINE=16
SINGLE_LINE_COMMENT=17
TEMPLATE=18
TEMPLATE_END=19
UNICODE_CLASS_Cf=20
UNICODE_CLASS_Ll=21
UNICODE_CLASS_Lm=22
UNICODE_CLASS_Lo=23
UNICODE_CLASS_Lt=24
UNICODE_CLASS_Lu=25
UNICODE_CLASS_Mc=26
UNICODE_CLASS_Mn=27
UNICODE_CLASS_Nd=28
UNICODE_CLASS_Nl=29
UNICODE_CLASS_Pc=30
UNICODE_CLASS_Zs=31
Unicode_escape_sequence=32
VALUE=33
VARIABLE=34
WHITESPACE=35
Whitespace_character=36
Whitespace_characters=37
parser grammar CssTemplateEngineParser;
options {
language = Java;
tokenVocab = CssTemplateEngineLexer;
output = AST;
}
tokens {
CSS;
}
@header {
package de.chw.css.script;
}
css
: product_line_definitions? c=content
-> ^(CSS product_line_definitions? VALUE[$c.text])
;
content: (NEW_LINE | VALUE)+;
product_line_definitions
: COMMENT_START! TEMPLATE^ product_lines TEMPLATE_END! COMMENT_END!
;
product_lines: product_line*;
product_line
: PRODUCTLINE v=values NEW_LINE variable_declarations
-> ^(PRODUCTLINE VALUE[$v.text] variable_declarations)
;
variable_declarations: variable_declaration+;
variable_declaration
: VARIABLE v1=values NEW_LINE v2=values NEW_LINE
-> ^(VARIABLE VALUE[$v1.text] VALUE[$v2.text])
;
values: VALUE+;
\ No newline at end of file
COMMENT_END=4
COMMENT_START=5
Combining_character=6
Connecting_character=7
Decimal_digit_character=8
Formatting_character=9
HEX_DIGIT=10
Input_character=11
Input_characters=12
Letter_character=13
NEW_LINE=14
NEW_LINE_CHARACTER=15
PRODUCTLINE=16
SINGLE_LINE_COMMENT=17
TEMPLATE=18
TEMPLATE_END=19
UNICODE_CLASS_Cf=20
UNICODE_CLASS_Ll=21
UNICODE_CLASS_Lm=22
UNICODE_CLASS_Lo=23
UNICODE_CLASS_Lt=24
UNICODE_CLASS_Lu=25
UNICODE_CLASS_Mc=26
UNICODE_CLASS_Mn=27
UNICODE_CLASS_Nd=28
UNICODE_CLASS_Nl=29
UNICODE_CLASS_Pc=30
UNICODE_CLASS_Zs=31
Unicode_escape_sequence=32
VALUE=33
VARIABLE=34
WHITESPACE=35
Whitespace_character=36
Whitespace_characters=37
CSS=38
File added
File added
File added
.ui-widget-header {
background: #2884C4;
border-color: #2884C4;
padding-left: 10px;
text-align: center;
}
.ui-widget-content {
background: #ffffff;
}
\ No newline at end of file
/*
TEMPLATE
PRODUCTLINE fm
VARIABLE bgcolor
#fafafa
TEMPLATE END
*/
.ui-widget-header {
background: /*bgcolor*/;
border-color: #2884C4;
padding-left: 10px;
text-align: center;
}
.ui-widget-content {
background: #ffffff;
}
\ No newline at end of file
/*
TEMPLATE
PRODUCTLINE fm
VARIABLE bgcolor
#fafafa
PRODUCTLINE bm
VARIABLE bgcolor
#ffffff
TEMPLATE END
*/
.ui-widget-header {
background: /*bgcolor*/;
border-color: #2884C4;
padding-left: 10px;
text-align: center;
}
.ui-widget-content {
background: #ffffff;
}
\ No newline at end of file
/*
TEMPLATE
PRODUCTLINE fm
VARIABLE bgcolor
#fafafa
VARIABLE bordercolor
#2884C4
PRODUCTLINE bm
VARIABLE bgcolor
#ffffff
TEMPLATE END
*/
.ui-widget-header {
background: /*bgcolor*/;
border-color: #2884C4;
padding-left: 10px;
text-align: center;
}
.ui-widget-content {
background: #ffffff;
}
\ No newline at end of file
package de.chw.css.script;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.antlr.runtime.ANTLRFileStream;
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.RecognitionException;
import org.antlr.runtime.tree.CommonTree;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class ProductLineTemplateReader {
private static final Logger LOG = LogManager.getLogger(ProductLineTemplateReader.class);
private final Map<String, String> variables = new HashMap<String, String>();
private final String chosenProduct;
private String content;
public ProductLineTemplateReader(String filename, String chosenProduct) throws IOException {
this.chosenProduct = chosenProduct;
CssTemplateEngineLexer lexer = new CssTemplateEngineLexer(new ANTLRFileStream(filename));
CssTemplateEngineParser parser = new CssTemplateEngineParser(new CommonTokenStream(lexer));
try {
CommonTree tree = (CommonTree) parser.css().getTree();
LOG.debug("tokens: "+((CommonTokenStream)parser.getTokenStream()).getTokens());
traverse(tree);
} catch (RecognitionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
private Object traverse(CommonTree tree) {
if (tree == null) return null;
LOG.debug("text: "+tree.getText());
LOG.debug("type: "+tree.getType());
LOG.debug("children: "+tree.getChildren());
switch (tree.getType()) {
case CssTemplateEngineParser.CSS:
traverse(getChildOfType(tree, CssTemplateEngineParser.TEMPLATE));
content = (String) traverse(getChildOfType(tree, CssTemplateEngineParser.VALUE));
break;
case CssTemplateEngineParser.TEMPLATE:
traverse(tree.getChildren());
break;
case CssTemplateEngineParser.PRODUCTLINE:
String product = (String) traverse(getChildOfType(tree, CssTemplateEngineParser.VALUE));
if (product.equals(chosenProduct)) {
traverse(tree.getChildren().subList(1, tree.getChildren().size()));
}
break;
case CssTemplateEngineParser.VALUE:
return tree.getText();
case CssTemplateEngineParser.VARIABLE:
String variable = (String) traverse((CommonTree) tree.getChild(0));
String value = (String) traverse((CommonTree) tree.getChild(1));
getVariables().put(variable, value);
break;
default:
break;
}
return null;
}
private CommonTree getChildOfType(CommonTree tree, int type) {
return (CommonTree) tree.getFirstChildWithType(type);
}
private void traverse(List<CommonTree> children) {
for (CommonTree child : children) {
traverse(child);
}
}
public Map<String, String> getVariables() {
return variables;
}
public String getContent() {
return content;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment