58 case "binOp" => calcDefaultBinOp( emptyBox, f) |
58 case "binOp" => calcDefaultBinOp( emptyBox, f) |
59 case "Pow" => calcPow( emptyBox, f) |
59 case "Pow" => calcPow( emptyBox, f) |
60 case "Frac" => calcFrac( emptyBox, f) |
60 case "Frac" => calcFrac( emptyBox, f) |
61 case _ => calcDefault( operatorString, List(emptyBox.paramr, emptyBox.paraml), emptyBox.x0, emptyBox.y0, emptyBox.level, emptyBox.ast, f) |
61 case _ => calcDefault( operatorString, List(emptyBox.paramr, emptyBox.paraml), emptyBox.x0, emptyBox.y0, emptyBox.level, emptyBox.ast, f) |
62 } |
62 } |
|
63 // TODOWN rename f |
63 def calcVariable( emptybox: EmptyLeafOpBox, f:(DrawBox) => Unit) = { |
64 def calcVariable( emptybox: EmptyLeafOpBox, f:(DrawBox) => Unit) = { |
64 val level = emptybox.level |
65 val level = emptybox.level |
65 val x0 = emptybox.x0 |
66 val x0 = emptybox.x0 |
66 val y0 = emptybox.y0 |
67 val y0 = emptybox.y0 |
67 val ast = emptybox.ast |
68 val ast = emptybox.ast |
69 val box : Rectangle = Settings.getStringBoundOf(str, level, x0, y0) // getStringBounds(g.asInstanceOf[Graphics2D], str, x0, y0) // TODO: Why does this work without x0,y0? |
70 val box : Rectangle = Settings.getStringBoundOf(str, level, x0, y0) // getStringBounds(g.asInstanceOf[Graphics2D], str, x0, y0) // TODO: Why does this work without x0,y0? |
70 val b = DrawBox(str, level, box.x, box.y + box.height, box.width, box.height, x0, y0, ast) |
71 val b = DrawBox(str, level, box.x, box.y + box.height, box.width, box.height, x0, y0, ast) |
71 f(b) // see mmahringer $4.3.1 p.53/54 and $4.3.2 p.56 |
72 f(b) // see mmahringer $4.3.1 p.53/54 and $4.3.2 p.56 |
72 b |
73 b |
73 } |
74 } |
|
75 // TODOWN rename f |
74 def calcConstant( emptyBox: EmptyLeafOpBox, f:(DrawBox) => Unit) = { |
76 def calcConstant( emptyBox: EmptyLeafOpBox, f:(DrawBox) => Unit) = { |
75 val level = emptyBox.level |
77 val level = emptyBox.level |
76 val x0 = emptyBox.x0 |
78 val x0 = emptyBox.x0 |
77 val y0 = emptyBox.y0 |
79 val y0 = emptyBox.y0 |
78 val ast = emptyBox.ast |
80 val ast = emptyBox.ast |
82 val newY = ((box.y - y0) * -1) - box.height /2 + midline |
84 val newY = ((box.y - y0) * -1) - box.height /2 + midline |
83 val b = DrawBox(op, level, box.x, y0, box.width, fontWidthOf(fontsizeOf(level)),x0, newY, ast) |
85 val b = DrawBox(op, level, box.x, y0, box.width, fontWidthOf(fontsizeOf(level)),x0, newY, ast) |
84 f(b) // see mmahringer $4.3.1 p.53/54 and $4.3.2 p.56 |
86 f(b) // see mmahringer $4.3.1 p.53/54 and $4.3.2 p.56 |
85 b |
87 b |
86 } |
88 } |
|
89 // TODOWN rename f |
87 def calcGAP( emptyBox: EmptyLeafOpBox, f:(DrawBox) => Unit) = { |
90 def calcGAP( emptyBox: EmptyLeafOpBox, f:(DrawBox) => Unit) = { |
88 val level = emptyBox.level |
91 val level = emptyBox.level |
89 val x0 = emptyBox.x0 |
92 val x0 = emptyBox.x0 |
90 val y0 = emptyBox.y0 |
93 val y0 = emptyBox.y0 |
91 val ast = emptyBox.ast |
94 val ast = emptyBox.ast |
92 val box : Rectangle = Settings.getStringBoundOf("xx", level, x0, y0) //getStringBounds(g.asInstanceOf[Graphics2D], "xx", x0, y0) |
95 val box : Rectangle = Settings.getStringBoundOf("xx", level, x0, y0) //getStringBounds(g.asInstanceOf[Graphics2D], "xx", x0, y0) |
93 val b = new DrawBox("GAP", level, box.x, y0, box.width, fontWidthOf(fontsizeOf(level)),x0, y0, ast) |
96 val b = new DrawBox("GAP", level, box.x, y0, box.width, fontWidthOf(fontsizeOf(level)),x0, y0, ast) |
94 f(b) // see mmahringer $4.3.1 p.53/54 and $4.3.2 p.56 |
97 f(b) // see mmahringer $4.3.1 p.53/54 and $4.3.2 p.56 |
95 b |
98 b |
96 } |
99 } |
|
100 // TODOWN why no f ? |
97 def CalcBox( str: String, emptyBox: EmptyUniOpBox, f:(DrawBox) => Unit) = { |
101 def CalcBox( str: String, emptyBox: EmptyUniOpBox, f:(DrawBox) => Unit) = { |
98 val box = assembleBoxesRec( new EmptyBox(emptyBox.level, emptyBox.x0, emptyBox.y0, emptyBox.param), f) |
102 val box = assembleBoxesRec( new EmptyBox(emptyBox.level, emptyBox.x0, emptyBox.y0, emptyBox.param), f) |
99 box.isBoxed = true |
103 box.isBoxed = true |
100 if (str.split('.').head == "MAIN") { |
104 if (str.split('.').head == "MAIN") { |
101 box.boxedElement = str.split('.').tail.head.toInt |
105 box.boxedElement = str.split('.').tail.head.toInt |
119 b |
124 b |
120 } |
125 } |
121 /* |
126 /* |
122 * layout of horizontal type +, (binary)-, *, = |
127 * layout of horizontal type +, (binary)-, *, = |
123 */ |
128 */ |
|
129 // TODOWN rename f |
124 def calcDefaultBinOp( emptyBox: EmptyBinOpBox, f:(DrawBox) => Unit) = { |
130 def calcDefaultBinOp( emptyBox: EmptyBinOpBox, f:(DrawBox) => Unit) = { |
125 val operator = emptyBox.operator |
131 val operator = emptyBox.operator |
126 val paraml = emptyBox.paraml |
132 val paraml = emptyBox.paraml |
127 val paramr = emptyBox.paramr |
133 val paramr = emptyBox.paramr |
128 val x0 = emptyBox.x0 |
134 val x0 = emptyBox.x0 |
260 x0, y0, ast) |
268 x0, y0, ast) |
261 b.children = line_box :: u_res_box :: l_res_box :: List.empty[DrawBox] |
269 b.children = line_box :: u_res_box :: l_res_box :: List.empty[DrawBox] |
262 f(b) // see mmahringer $4.3.1 p.53/54 and $4.3.2 p.56 |
270 f(b) // see mmahringer $4.3.1 p.53/54 and $4.3.2 p.56 |
263 b |
271 b |
264 } |
272 } |
|
273 // TODOWN rename f |
265 def calcDefault( str: String, param: List[Ast], x0: Int, y0: Int, level: Int, ast : Ast, f:(DrawBox) => Unit) = { |
274 def calcDefault( str: String, param: List[Ast], x0: Int, y0: Int, level: Int, ast : Ast, f:(DrawBox) => Unit) = { |
266 val boxes = param.map(x => assembleBoxesRec( new EmptyBox(level, x0, y0, x),emptyFunc)) |
275 val boxes = param.map(x => assembleBoxesRec( new EmptyBox(level, x0, y0, x),emptyFunc)) |
267 |
276 |
268 val horizontalSpace = Settings.getStringBoundOf(",x", level, x0, y0) |
277 val horizontalSpace = Settings.getStringBoundOf(",x", level, x0, y0) |
269 val horizontalCloseBracketSpace = Settings.getStringBoundOf("i)", level, x0, y0) |
278 val horizontalCloseBracketSpace = Settings.getStringBoundOf("i)", level, x0, y0) |
293 |
302 |
294 /* TODOWN: generalise together with calcPlus to calcHorizontal |
303 /* TODOWN: generalise together with calcPlus to calcHorizontal |
295 * calculate Boxes with the form Appl(Constant("HOL.eq"), Variable(str), Variable(str)) --> str = str |
304 * calculate Boxes with the form Appl(Constant("HOL.eq"), Variable(str), Variable(str)) --> str = str |
296 * nearly similar to calcPlus() but with more Space between Variable and Constant (LARGESPACE instance of MEDIUMSPACE) |
305 * nearly similar to calcPlus() but with more Space between Variable and Constant (LARGESPACE instance of MEDIUMSPACE) |
297 */ |
306 */ |
|
307 // TODOWN unify with calcDefaultBinOp , rename f |
298 def calcEqualation( emptyBox: EmptyBinOpBox, f:(DrawBox) => Unit) = { |
308 def calcEqualation( emptyBox: EmptyBinOpBox, f:(DrawBox) => Unit) = { |
299 val operator = emptyBox.operator |
309 val operator = emptyBox.operator |
300 val paraml = emptyBox.paraml |
310 val paraml = emptyBox.paraml |
301 val paramr = emptyBox.paramr |
311 val paramr = emptyBox.paramr |
302 val x0 = emptyBox.x0 |
312 val x0 = emptyBox.x0 |