SlideShare a Scribd company logo
JavaFX Codeeditors
Tom Schindl <tom.schindl@bestsolution.at>
Twitter: @tomsontom
Blog: http://tomsondev.bestsolution.at
Website: http://www.bestsolution.at
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
About Me
‣ CTO BestSolution.at Systemhaus GmbH
‣ Eclipse Committer
‣ e4
‣ Platform
‣ EMF
‣ Project lead
‣ e(fx)clipse
‣ Twitter: @tomsontom
‣ Blog: tomsondev.bestsolution.at
‣ Cooperate: http://bestsolution.at
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
JavaFX
‣ Used for business UIs and simulation software
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Demo
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
JavaFX in Toolspace
‣ Problems
‣ Misses basic controls like a StyledText-Widget to
implement code editors
‣ A pure UI-Toolkit so no support for file-explorers, …
‣ Docking framework, …
‣ Solutions
‣ e(fx)clipse & Eclipse Core to provide those
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
e(fx)clipse Compensator
‣ Mission 0: Must look slick!
‣ Mission 1: Create a simple source editor like Notepad++
who:
‣ Is process light-weight
‣ Makes it easy to add new language highlightings
‣ Mission 2: Allow the simple source editor to expand to a
(simple) IDE:
‣ where Source-Editor, VCS (git), Ticketsystem (eg.
github), CI (eg. travis) are core components fully
integrated with each other
‣ Easy to integrate: Does not depend on core.resources
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Demo
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Built your own
‣ Compensator is NOT extensible but all components can be
reused to build your own editor/IDE
‣ Syntax Highlighting with Eclipse Text
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
__state_comment
Eclipse Text Part 1
‣ Step 1 Partitioning
__dftl_partitioning
/*
* This is a multiline comment
*/
input signal INPUT_SIG
output signal OUTPUT_SIG
state START
set INPUT_SIG = true
end
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Eclipse Text Part 2
‣ Step 2 Tokenizing
/*
* This is a multiline comment
*/
input signal INPUT_SIG
output signal OUTPUT_SIG
state START
set INPUT_SIG = true
end
tk(“state_doc_default“,0,37)
tk(“state_keyword“,38,43)
tk(“state_keyword“,44,48)
tk(“state_default“,49,58)
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
.state.styled-text-area .state_default {
-styled-text-color: rgb(0,0,0);
}
.state.styled-text-area .state_keyword {
-styled-text-color: rgb(127, 0, 85);
-fx-font-weight: bold;
}
.state.styled-text-area .state_doc_default {
-styled-text-color: rgb(63, 127, 95);
}
efxclipse highlighting
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Livecode
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Partitioning & Tokenizing
‣ No Java code required but a special DSL
‣ Advantage 1: You don’t need to learn Eclipse Text API
‣ Advantage 2: You can add new languages without the need
to install a new OSGi bundle
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Partitioning & Tokenizing
dart {
partition __dftl_partition_content_type
// …
partition __dart_string
rule-damager __dftl_partition_content_type {
default token dart_default
token dart_operator
token dart_keyword
// …
keywords dart_keyword [ "break", "case", "catch", "class", "const", "continue", "default"
, "do", "else", "enum", "extends", "false", "final", "finally", "for"
, "if", "in", "is", "new", "null", "rethrow", "return", "super"
, "switch", "this", "throw", "true", "try", "var", "void", "while"
, "with" ]
character-rule dart_operator [
';', '.', '=', '/', '', '+', '-', '*', '<', '>', ':', '?', '!', ',', '|', '&', '^', '%', '~' ]
// …
}
// …
rule-damager __dart_string {
default token dart_string
token dart_string_inter
single_line dart_string_inter '${' => '}'
}
rule_partitioner {
single_line __dart_string '"' => '"'
single_line __dart_string "'" => "'"
// …
}
} for "text/dart"
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Coloring
.dart.styled-text-area .dart_default {
-styled-text-color: rgb(0, 0, 0);
}
.dart.styled-text-area .dart_operator {
-styled-text-color: rgb(0, 0, 0);
}
.dart.styled-text-area .dart_keyword {
-styled-text-color: rgb(127, 0, 85);
-fx-font-weight: bold;
}
/* … */
.dart.styled-text-area .dart_string {
-styled-text-color: rgb(42, 0, 255);
}
.dart.styled-text-area .dart_string_inter {
-styled-text-color: rgb(42, 0, 255);
-fx-font-weight: bold;
}
.dart-element-name {
}
.dart-type-info {
-fx-fill: lightgray;
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Xtext
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
FX & efx & Xtext
‣ Make use of the NEW „Generic IDE support“ who generates 2
projects who don’t require OSGi nor Eclipse Framework
‣ ….$language: core parsing infrastructure
‣ ….$language.ide: ide specific infrastructure including
a special parser & lexer
‣ ….$language.fx (Handcrafted): FX-Text support like
SourceViewerConfiguration, Partitioner, …
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
FX & efx & Xtext
class StatemachineFXModule extends AbstractGenericModule {
val ExecutorService executorService
def configureExecutorService(Binder binder) {
binder.bind(ExecutorService).toInstance(executorService)
}
def configureContentAssistLexer(Binder binder) {
binder
.bind(Lexer).annotatedWith(Names.named(LexerIdeBindings.CONTENT_ASSIST))
.to(InternalStatemachineLexer)
}
def Class<? extends IContentAssistParser> bindIContentAssistParser() {
StatemachineParser
}
}
‣ Step 1: Setup Guice module for editing
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
FX & efx & Xtext
‣ Step 2: Create Guice Injector
injector = new StatemachineStandaloneSetup() {
public Injector createInjector() {
StatemachineRuntimeModule runtimeModule = new StatemachineRuntimeModule();
StatemachineFXModule fxModule = new StatemachineFXModule(
Executors.newFixedThreadPool(3));
return Guice.createInjector((Module)runtimeModule, webModule);
}
}.createInjectorAndDoEMFRegistration();
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
FX & efx & Xtext
‣ Step 3: Create a content assist provider
@Singleton
public class ContentAssistProvider {
@Inject
Provider<ContentAssistContextFactory> contextFactoryProvider;
@Inject
Provider<XtextResourceSet> resourceSetProvider;
@Inject
ExecutorService pool;
public List<ICompletionProposal> doContentAssist(String content, String uri, Integer offset) {
XtextResource resource = getResource(uri);
ContentAssistContextFactory contextFactory = contextFactoryProvider.get();
contextFactory.setPool(pool);
ContentAssistContext[] contexts = contextFactory.create(content, new TextRegion(0, 0), offset, resource);
List<ICompletionProposal> proposal = new ArrayList<>();
for (int i = 0; i < contexts.length; i++) {
for (AbstractElement abstractElement : contexts[i].getFirstSetGrammarElements()) {
createProposals(contexts[i], abstractElement, offset, proposal);
}
}
return proposal;
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ Step 4: Setup Content assist in SourceViewerConfiguration
public class StatemachineSourceConfiguration extends SourceViewerConfiguration {
public StatemachineSourceConfiguration(Document doc, File f) {
contentAssistProvider = injector.getInstance(ContentAssistProvider.class);
}
@Override
public IContentAssistant getContentAssist() {
return new ContentAssistant(this::computeProposals);
}
private List<ICompletionProposal> computeProposals(Integer offset) {
return contentAssistProvider.doContentAssist(doc.get(),
f.toURI().toString(), offset);
}
}
FX & efx & Xtext
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
FX & efx & Xtext

More Related Content

PDF
Democamp - Munich - Java9
PDF
Java fx & xtext
PPT
Intro to JavaFX & Widget FX
PPT
PHP Tutorials
PDF
Mach-O par Stéphane Sudre
PDF
The Ring programming language version 1.5.3 book - Part 16 of 184
PPTX
How to diffuse a bomb with ecf and efxclipse
KEY
Starting java fx
Democamp - Munich - Java9
Java fx & xtext
Intro to JavaFX & Widget FX
PHP Tutorials
Mach-O par Stéphane Sudre
The Ring programming language version 1.5.3 book - Part 16 of 184
How to diffuse a bomb with ecf and efxclipse
Starting java fx

Viewers also liked (13)

PPT
Data flow diagram for order system
PPT
Improving Your Interview Skills for Residency 2007
PPTX
Lecture 06 Software Configuration Management
PPTX
Data Flow Diagram (DFD)
ZIP
Software Configuration Management
PDF
software configuration management
PPTX
Interview Skills
PPT
Software Configuration Management
PPT
Data Flow Diagram
PDF
The 30-Second Guide to URL Shorteners
PPTX
Dfd examples
PPT
How to make effective presentation
Data flow diagram for order system
Improving Your Interview Skills for Residency 2007
Lecture 06 Software Configuration Management
Data Flow Diagram (DFD)
Software Configuration Management
software configuration management
Interview Skills
Software Configuration Management
Data Flow Diagram
The 30-Second Guide to URL Shorteners
Dfd examples
How to make effective presentation
Ad

Similar to Java fx tools (20)

PDF
Java fx smart code econ
PDF
JavaFX, because you're worth it
PDF
E(fx)clipse eclipse con
PDF
Eclipse plug in development
PDF
Re-engineering Eclipse MDT/OCL for Xtext
PDF
vJUG - The JavaFX Ecosystem
PDF
Project FoX: A Tool That Offers Automated Testing Using a Formal Approach
PDF
Markus Voelter Textual DSLs
PDF
The JavaFX Ecosystem
PPTX
XML-Free Programming
PPTX
Text based search engine on a fixed corpus and utilizing indexation and ranki...
PDF
Xtext project and PhDs in Gemany
PDF
The JavaFX Ecosystem
PPTX
mbeddr meets IncQuer - Combining the Best Features of Two Modeling Worlds
PDF
The best of AltJava is Xtend
PDF
The Xtext Grammar Language
PDF
Learn about Eclipse e4 from Lars Vogel at SF-JUG
PDF
Introduction to JavaFX 2
PDF
Scripting with Java FX - Cédric Tabin - December 2007
PDF
EclipseCon Europe 2011
Java fx smart code econ
JavaFX, because you're worth it
E(fx)clipse eclipse con
Eclipse plug in development
Re-engineering Eclipse MDT/OCL for Xtext
vJUG - The JavaFX Ecosystem
Project FoX: A Tool That Offers Automated Testing Using a Formal Approach
Markus Voelter Textual DSLs
The JavaFX Ecosystem
XML-Free Programming
Text based search engine on a fixed corpus and utilizing indexation and ranki...
Xtext project and PhDs in Gemany
The JavaFX Ecosystem
mbeddr meets IncQuer - Combining the Best Features of Two Modeling Worlds
The best of AltJava is Xtend
The Xtext Grammar Language
Learn about Eclipse e4 from Lars Vogel at SF-JUG
Introduction to JavaFX 2
Scripting with Java FX - Cédric Tabin - December 2007
EclipseCon Europe 2011
Ad

Recently uploaded (20)

PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PPTX
history of c programming in notes for students .pptx
PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PDF
medical staffing services at VALiNTRY
PDF
PTS Company Brochure 2025 (1).pdf.......
PPTX
Essential Infomation Tech presentation.pptx
PPTX
ai tools demonstartion for schools and inter college
PPTX
Introduction to Artificial Intelligence
PDF
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
PDF
Nekopoi APK 2025 free lastest update
PPTX
Transform Your Business with a Software ERP System
PDF
System and Network Administraation Chapter 3
PDF
Odoo Companies in India – Driving Business Transformation.pdf
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
Wondershare Filmora 15 Crack With Activation Key [2025
Internet Downloader Manager (IDM) Crack 6.42 Build 41
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
history of c programming in notes for students .pptx
VVF-Customer-Presentation2025-Ver1.9.pptx
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
How to Migrate SBCGlobal Email to Yahoo Easily
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
medical staffing services at VALiNTRY
PTS Company Brochure 2025 (1).pdf.......
Essential Infomation Tech presentation.pptx
ai tools demonstartion for schools and inter college
Introduction to Artificial Intelligence
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
Nekopoi APK 2025 free lastest update
Transform Your Business with a Software ERP System
System and Network Administraation Chapter 3
Odoo Companies in India – Driving Business Transformation.pdf
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
Upgrade and Innovation Strategies for SAP ERP Customers

Java fx tools

  • 1. JavaFX Codeeditors Tom Schindl <tom.schindl@bestsolution.at> Twitter: @tomsontom Blog: http://tomsondev.bestsolution.at Website: http://www.bestsolution.at
  • 2. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 About Me ‣ CTO BestSolution.at Systemhaus GmbH ‣ Eclipse Committer ‣ e4 ‣ Platform ‣ EMF ‣ Project lead ‣ e(fx)clipse ‣ Twitter: @tomsontom ‣ Blog: tomsondev.bestsolution.at ‣ Cooperate: http://bestsolution.at
  • 3. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 JavaFX ‣ Used for business UIs and simulation software
  • 4. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo
  • 5. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 JavaFX in Toolspace ‣ Problems ‣ Misses basic controls like a StyledText-Widget to implement code editors ‣ A pure UI-Toolkit so no support for file-explorers, … ‣ Docking framework, … ‣ Solutions ‣ e(fx)clipse & Eclipse Core to provide those
  • 6. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 e(fx)clipse Compensator ‣ Mission 0: Must look slick! ‣ Mission 1: Create a simple source editor like Notepad++ who: ‣ Is process light-weight ‣ Makes it easy to add new language highlightings ‣ Mission 2: Allow the simple source editor to expand to a (simple) IDE: ‣ where Source-Editor, VCS (git), Ticketsystem (eg. github), CI (eg. travis) are core components fully integrated with each other ‣ Easy to integrate: Does not depend on core.resources
  • 7. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo
  • 8. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Built your own ‣ Compensator is NOT extensible but all components can be reused to build your own editor/IDE ‣ Syntax Highlighting with Eclipse Text
  • 9. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 __state_comment Eclipse Text Part 1 ‣ Step 1 Partitioning __dftl_partitioning /* * This is a multiline comment */ input signal INPUT_SIG output signal OUTPUT_SIG state START set INPUT_SIG = true end
  • 10. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Eclipse Text Part 2 ‣ Step 2 Tokenizing /* * This is a multiline comment */ input signal INPUT_SIG output signal OUTPUT_SIG state START set INPUT_SIG = true end tk(“state_doc_default“,0,37) tk(“state_keyword“,38,43) tk(“state_keyword“,44,48) tk(“state_default“,49,58)
  • 11. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 .state.styled-text-area .state_default { -styled-text-color: rgb(0,0,0); } .state.styled-text-area .state_keyword { -styled-text-color: rgb(127, 0, 85); -fx-font-weight: bold; } .state.styled-text-area .state_doc_default { -styled-text-color: rgb(63, 127, 95); } efxclipse highlighting
  • 12. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Livecode
  • 13. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Partitioning & Tokenizing ‣ No Java code required but a special DSL ‣ Advantage 1: You don’t need to learn Eclipse Text API ‣ Advantage 2: You can add new languages without the need to install a new OSGi bundle
  • 14. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Partitioning & Tokenizing dart { partition __dftl_partition_content_type // … partition __dart_string rule-damager __dftl_partition_content_type { default token dart_default token dart_operator token dart_keyword // … keywords dart_keyword [ "break", "case", "catch", "class", "const", "continue", "default" , "do", "else", "enum", "extends", "false", "final", "finally", "for" , "if", "in", "is", "new", "null", "rethrow", "return", "super" , "switch", "this", "throw", "true", "try", "var", "void", "while" , "with" ] character-rule dart_operator [ ';', '.', '=', '/', '', '+', '-', '*', '<', '>', ':', '?', '!', ',', '|', '&', '^', '%', '~' ] // … } // … rule-damager __dart_string { default token dart_string token dart_string_inter single_line dart_string_inter '${' => '}' } rule_partitioner { single_line __dart_string '"' => '"' single_line __dart_string "'" => "'" // … } } for "text/dart"
  • 15. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Coloring .dart.styled-text-area .dart_default { -styled-text-color: rgb(0, 0, 0); } .dart.styled-text-area .dart_operator { -styled-text-color: rgb(0, 0, 0); } .dart.styled-text-area .dart_keyword { -styled-text-color: rgb(127, 0, 85); -fx-font-weight: bold; } /* … */ .dart.styled-text-area .dart_string { -styled-text-color: rgb(42, 0, 255); } .dart.styled-text-area .dart_string_inter { -styled-text-color: rgb(42, 0, 255); -fx-font-weight: bold; } .dart-element-name { } .dart-type-info { -fx-fill: lightgray; }
  • 16. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Xtext
  • 17. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 FX & efx & Xtext ‣ Make use of the NEW „Generic IDE support“ who generates 2 projects who don’t require OSGi nor Eclipse Framework ‣ ….$language: core parsing infrastructure ‣ ….$language.ide: ide specific infrastructure including a special parser & lexer ‣ ….$language.fx (Handcrafted): FX-Text support like SourceViewerConfiguration, Partitioner, …
  • 18. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 FX & efx & Xtext class StatemachineFXModule extends AbstractGenericModule { val ExecutorService executorService def configureExecutorService(Binder binder) { binder.bind(ExecutorService).toInstance(executorService) } def configureContentAssistLexer(Binder binder) { binder .bind(Lexer).annotatedWith(Names.named(LexerIdeBindings.CONTENT_ASSIST)) .to(InternalStatemachineLexer) } def Class<? extends IContentAssistParser> bindIContentAssistParser() { StatemachineParser } } ‣ Step 1: Setup Guice module for editing
  • 19. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 FX & efx & Xtext ‣ Step 2: Create Guice Injector injector = new StatemachineStandaloneSetup() { public Injector createInjector() { StatemachineRuntimeModule runtimeModule = new StatemachineRuntimeModule(); StatemachineFXModule fxModule = new StatemachineFXModule( Executors.newFixedThreadPool(3)); return Guice.createInjector((Module)runtimeModule, webModule); } }.createInjectorAndDoEMFRegistration();
  • 20. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 FX & efx & Xtext ‣ Step 3: Create a content assist provider @Singleton public class ContentAssistProvider { @Inject Provider<ContentAssistContextFactory> contextFactoryProvider; @Inject Provider<XtextResourceSet> resourceSetProvider; @Inject ExecutorService pool; public List<ICompletionProposal> doContentAssist(String content, String uri, Integer offset) { XtextResource resource = getResource(uri); ContentAssistContextFactory contextFactory = contextFactoryProvider.get(); contextFactory.setPool(pool); ContentAssistContext[] contexts = contextFactory.create(content, new TextRegion(0, 0), offset, resource); List<ICompletionProposal> proposal = new ArrayList<>(); for (int i = 0; i < contexts.length; i++) { for (AbstractElement abstractElement : contexts[i].getFirstSetGrammarElements()) { createProposals(contexts[i], abstractElement, offset, proposal); } } return proposal; }
  • 21. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ Step 4: Setup Content assist in SourceViewerConfiguration public class StatemachineSourceConfiguration extends SourceViewerConfiguration { public StatemachineSourceConfiguration(Document doc, File f) { contentAssistProvider = injector.getInstance(ContentAssistProvider.class); } @Override public IContentAssistant getContentAssist() { return new ContentAssistant(this::computeProposals); } private List<ICompletionProposal> computeProposals(Integer offset) { return contentAssistProvider.doContentAssist(doc.get(), f.toURI().toString(), offset); } } FX & efx & Xtext
  • 22. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 FX & efx & Xtext