EOS 2  1.1.0
Einfache Objektbasierte Sprache
LanguageConfig.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.config;
2 
3 import java.util.Collection;
4 import java.util.Iterator;
5 import java.util.LinkedList;
6 import java.util.TreeMap;
7 import java.util.TreeSet;
8 
9 import de.lathanda.eos.baseparser.AutoCompleteEntry;
10 import de.lathanda.eos.baseparser.BasicParser;
11 import de.lathanda.eos.baseparser.ParserSource;
12 import de.lathanda.eos.baseparser.SystemType;
13 
14 public class LanguageConfig {
15  private static TreeMap<String, ParserSource> parserSourceMap = new TreeMap<>();
19  private final TreeMap<String, String> names = new TreeMap<>();
20  private String id;
21  private String label;
22  private String tooltip;
23  private String description;
24  private LangFlags flags;
25  private String parserSource;
26  private TreeMap<String, LangModule> modules = new TreeMap<>();
27  private TreeMap<String, LangClass> classes = new TreeMap<>();
28  private LinkedList<LangHelp> helpEntries = new LinkedList<>();
29  private TreeMap<String, LangMenuItem> menuItems = new TreeMap<>();
30  TreeSet<AutoCompleteEntry> templates = new TreeSet<>();
31  public LanguageConfig(String id, LangFlags flags) {
32  this.flags = flags;
33  this.id = id;
34  }
35 
36  public String getID() {
37  return id;
38  }
39  public void apply(Language lang) {
40  lang.apply(this);
41  generateAutoCompletion();
42  generateHelp(lang);
43  }
44 
45  private void generateHelp(Language lang) {
46  lang.registerHelp(new Help(id, label, tooltip, description, modules.values(), classes, helpEntries));
47  }
48 
49  private void generateAutoCompletion() {
50  SystemType clsType = SystemType.getClassType();
51  for(LangClass lc:classes.values()) {
52  SystemType cls = SystemType.getInstanceByID(lc.id);
53  if (lc.show) {
54  for(String scan:lc.scan) {
55  clsType.registerAutoCompleteEntry(AutoCompleteEntry.createClassEntry(cls, scan, lc.label, lc.tooltip));
56  }
57  }
58  for(LangMethod lm:lc.methods.values()) {
59  String[] parameters = new String[lm.parameters.size()];
60  int i = 0;
61  for (LangParameter lpa:lm.parameters) {
62  parameters[i++] = lpa.name;
63  }
64  cls.registerAutoCompleteEntry(AutoCompleteEntry.createMethodEntry(cls, lm.scan, lm.label, parameters, lm.tooltip));
65 
66  }
67  if (!flags.isLockProperties()) {
68  for(LangProperty lp:lc.properties.values()) {
69  cls.registerAutoCompleteEntry(AutoCompleteEntry.createPropertyEntry(cls, lp.scan, lp.label, lp.tooltip));
70  }
71  }
72  }
73  }
74 
75  public BasicParser createParser(String source) {
76  ParserSource ps = parserSourceMap.get(parserSource);
77 
78  return ps.createParser(source);
79  }
80  public String toString() {
81  return (label== null)?id:label;
82  }
83 
84  public void setParser(String parser) {
85  this.parserSource = parser;
86  }
87 
88  public String getLabel() {
89  return label;
90  }
91  public void setLabel(String label) {
92  this.label = label;
93  }
94  public void setDescription(String description) {
95  this.description = description;
96  }
97  public void setTooltip(String tooltip) {
98  this.tooltip = tooltip;
99  }
100 
101  public void addTemplate(LangTemplate lt) {
103  templates.add(ace);
104  }
105  public void registerName(String key, String name) {
106  names.put(key, name);
107  }
108 
109  public void registerHelp(LangHelp lh) {
110  helpEntries.add(lh);
111 
112  }
113  public LangModule getOrCreateLangModule(String id) {
114  if (modules.containsKey(id)) {
115  return modules.get(id);
116  } else {
117  LangModule lm = new LangModule(id);
118  modules.put(id, lm);
119  return lm;
120  }
121  }
122  public LangClass getOrCreateLangClass(String id) {
123  if (classes.containsKey(id)) {
124  return classes.get(id);
125  } else {
126  LangClass lc = new LangClass(id);
127  classes.put(id, lc);
128  return lc;
129  }
130  }
137  for(LangModule lm : modules.values()) {
138  LangModule lm2 = lco.getOrCreateLangModule(lm.id);
139  lm.cls = lm2.cls;
140  lm.javaclass = lm2.javaclass;
141  for(LangFunction lf : lm.functions.values()) {
142  LangFunction lf2 = lm2.getOrCreateFunction(lf.id);
143  lf.ret = lf2.ret;
144  lf.javamethod = lf2.javamethod;
145  Iterator<LangParameter> itp = lf2.parameters.iterator();
146  for(LangParameter lpa:lf.parameters) {
147  lpa.type = itp.next().type;
148  }
149  }
150  }
151  for(LangClass lc : classes.values()) {
152  LangClass lc2 = lco.classes.get(lc.id);
153  lc.pid = lc2.pid;
154  lc.javaclass = lc2.javaclass;
155  for(LangMethod lm:lc.methods.values()) {
156  LangMethod lm2 = lc2.getOrCreateMethod(lm.id);
157  lm.ret = lm2.ret;
158  Iterator<LangParameter> itp = lm2.parameters.iterator();
159  for(LangParameter lpa:lm.parameters) {
160  lpa.type = itp.next().type;
161  }
162 
163  }
164  for(LangProperty lp:lc.properties.values()) {
165  LangProperty lp2 = lc2.getOrCreateProperty(lp.id);
166  lp.type = lp2.type;
167  lp.getter = lp2.getter;
168  lp.setter = lp2.setter;
169  lp.view = lp2.view;
170  }
171  }
172  return this;
173  }
174 
175  public void addMenuItem(String id, String pid, String label, String action, String tooltip) {
176  LangMenuItem lmi = new LangMenuItem();
177  lmi.id = id;
178  lmi.pid = pid;
179  lmi.label = label;
180  lmi.action = action;
181  lmi.tooltip = tooltip;
182  menuItems.put(id, lmi);
183  }
184  public Collection<LangMenuItem> getMenuItems() {
185  return menuItems.values();
186  }
187  public LangMenuItem getMenuItem(String id) {
188  return menuItems.get(id);
189  }
190  public Collection<LangClass> getClasses() {
191  return classes.values();
192  }
193  public Collection<LangModule> getModules() {
194  return modules.values();
195  }
196 
197  public LangClass getLangClass(String id) {
198  return classes.get(id);
199  }
200 }
static AutoCompleteEntry createTemplateEntry(String sort, String label, String template, int start, int length)
LangProperty getOrCreateProperty(String id)
Definition: LangClass.java:24
LangMethod getOrCreateMethod(String attribute)
Definition: LangClass.java:33
LinkedList< LangParameter > parameters
LinkedList< LangParameter > parameters
Definition: LangMethod.java:13
LangFunction getOrCreateFunction(String idf)
Definition: LangModule.java:16
Collection< LangMenuItem > getMenuItems()
BasicParser createParser(String source)
Collection< LangModule > getModules()
Collection< LangClass > getClasses()
LangModule getOrCreateLangModule(String id)
LanguageConfig mergeSystem(LanguageConfig lco)
LanguageConfig(String id, LangFlags flags)
void setDescription(String description)
void addMenuItem(String id, String pid, String label, String action, String tooltip)
void registerName(String key, String name)
BasicParser createParser(String source)
Impressum