aboutsummaryrefslogtreecommitdiffstats
path: root/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/highlight/SolverSemanticHighlightCalculator.xtend
diff options
context:
space:
mode:
authorLibravatar Oszkar Semerath <semerath@mit.bme.hu>2020-04-28 20:43:04 +0200
committerLibravatar Oszkar Semerath <semerath@mit.bme.hu>2020-04-28 20:43:04 +0200
commit8a7b9b436b31e6d2f5a0521a077c960ebdeb4cbe (patch)
treed525bef75519f364d637e0779f8e63d4199dee31 /Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/highlight/SolverSemanticHighlightCalculator.xtend
parentcheck expressions are mapped to WF constraints (diff)
downloadVIATRA-Generator-8a7b9b436b31e6d2f5a0521a077c960ebdeb4cbe.tar.gz
VIATRA-Generator-8a7b9b436b31e6d2f5a0521a077c960ebdeb4cbe.tar.zst
VIATRA-Generator-8a7b9b436b31e6d2f5a0521a077c960ebdeb4cbe.zip
initial commit
Diffstat (limited to 'Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/highlight/SolverSemanticHighlightCalculator.xtend')
-rw-r--r--Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/highlight/SolverSemanticHighlightCalculator.xtend58
1 files changed, 58 insertions, 0 deletions
diff --git a/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/highlight/SolverSemanticHighlightCalculator.xtend b/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/highlight/SolverSemanticHighlightCalculator.xtend
new file mode 100644
index 00000000..c9ceb36a
--- /dev/null
+++ b/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/highlight/SolverSemanticHighlightCalculator.xtend
@@ -0,0 +1,58 @@
1package org.eclipse.viatra.solver.language.ui.highlight
2
3import java.util.Random
4import java.util.WeakHashMap
5import org.eclipse.viatra.solver.language.solverLanguage.ModelSymbol
6import org.eclipse.xtext.ide.editor.syntaxcoloring.DefaultSemanticHighlightingCalculator
7import org.eclipse.xtext.ide.editor.syntaxcoloring.IHighlightedPositionAcceptor
8import org.eclipse.xtext.nodemodel.util.NodeModelUtils
9import org.eclipse.xtext.resource.XtextResource
10import org.eclipse.xtext.util.CancelIndicator
11
12class SolverSemanticHighlightCalculator extends DefaultSemanticHighlightingCalculator {
13 public static val SmybolCode = "SymbolCode"
14
15 val symbolName2ID = new WeakHashMap<String,String>
16
17 override provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor, CancelIndicator cancelIndicator) {
18 if (resource === null || resource.getParseResult() === null) {
19 return
20 } else {
21 val modelSymbols = resource.allContents.filter(ModelSymbol)
22 while(modelSymbols.hasNext) {
23 val symbolElement = modelSymbols.next
24 val node = NodeModelUtils::getNode(symbolElement)
25 acceptor.addPosition(
26 node.getOffset(),
27 node.getLength(),
28 getSymbolCode(symbolElement.name)
29 )
30 }
31 }
32 }
33
34 def getSymbolCode(String name) {
35 if(symbolName2ID.containsKey(name)) {
36 return symbolName2ID.get(name)
37 } else {
38 val id = calculateSymbolCode(name)
39 symbolName2ID.put(name,id)
40 return id
41 }
42 }
43
44 def String calculateSymbolCode(String name) {
45 val Random random = new Random(name.hashCode)
46 val hue = huePick(random.nextFloat)
47 val saturation = 0.1+random.nextFloat*0.2
48 val brightness = random.nextFloat/4+0.7f
49 return '''«SmybolCode» «hue» «saturation» «brightness»'''
50 }
51 private def huePick(float random) {
52 val pink = 300
53 val tolerance = 10
54 val degree = random*(360-2*tolerance)
55 if(degree<pink-tolerance) return degree
56 else return degree+2*tolerance
57 }
58} \ No newline at end of file