added alt/else, loops and other group shortcuts
This commit is contained in:
		| @@ -11,6 +11,36 @@ | ||||
|   ),) | ||||
| } | ||||
|  | ||||
| #let _alt(desc, elmts, ..args) = { | ||||
|   let all-elmts = () | ||||
|   all-elmts += elmts | ||||
|   let args = args.pos() | ||||
|   for i in range(0, args.len(), step: 2) { | ||||
|     let else-desc = args.at(i) | ||||
|     let else-elmts = args.at(i + 1, default: ()) | ||||
|     all-elmts.push(( | ||||
|       type: "else", | ||||
|       desc: else-desc | ||||
|     )) | ||||
|     all-elmts += else-elmts | ||||
|   } | ||||
|  | ||||
|   return _grp("alt", desc: desc, type: "alt", all-elmts) | ||||
| } | ||||
|  | ||||
| #let _loop(desc, min: none, max: auto, elmts) = { | ||||
|   let name = "loop" | ||||
|   if min != none { | ||||
|     if max == auto { | ||||
|       max = "*" | ||||
|     } | ||||
|     name += "(" + str(min) + "," + str(max) + ")" | ||||
|   } | ||||
|   _grp(name, desc: desc, type: "loop", elmts) | ||||
| } | ||||
| #let _opt(desc, elmts) = grp("opt", desc: desc, type: "opt", elmts) | ||||
| #let _break(desc, elmts) = grp("break", desc: desc, type: "break", elmts) | ||||
|  | ||||
| #let render(x0, x1, y0, y1, group) = { | ||||
|   let shapes = () | ||||
|   let name = text(group.name, weight: "bold") | ||||
| @@ -50,5 +80,20 @@ | ||||
|     ) | ||||
|   } | ||||
|  | ||||
|   return shapes | ||||
| } | ||||
|  | ||||
| #let render-else(x0, x1, y, elmt) = { | ||||
|   let shapes = draw.line( | ||||
|     (x0, y), | ||||
|     (x1, y), | ||||
|     stroke: (dash: (2pt, 1pt), thickness: .5pt) | ||||
|   ) | ||||
|   shapes += draw.content( | ||||
|     (x0, y), | ||||
|     text([\[#elmt.desc\]], weight: "bold", size: .8em), | ||||
|     anchor: "north-west", | ||||
|     padding: 3pt | ||||
|   ) | ||||
|   return shapes | ||||
| } | ||||
		Reference in New Issue
	
	Block a user