initial commit
This commit is contained in:
		
							
								
								
									
										86
									
								
								src/func.typ
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								src/func.typ
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | ||||
| #import "@preview/cetz:0.2.2": coordinate | ||||
|  | ||||
| #let val(value, alignment) = { | ||||
|   return ( | ||||
|     type: "value", | ||||
|     value: value, | ||||
|     alignment: alignment | ||||
|   ) | ||||
| } | ||||
|  | ||||
| #let disc(eod: false, ..args) = { | ||||
|   let pargs = args.pos() | ||||
|   let left = pargs.at(0, default: (none, none)) | ||||
|   let right = pargs.at(1, default: (none, none)) | ||||
|   let center = pargs.at(2, default: (none, none)) | ||||
|  | ||||
|   let kwargs = args.named() | ||||
|   if "left" in kwargs { left = kwargs.left } | ||||
|   if "right" in kwargs { right = kwargs.right } | ||||
|   if "center" in kwargs { center = kwargs.center } | ||||
|    | ||||
|   let (value-l, alignment-l) = left | ||||
|   let (value-r, alignment-r) = right | ||||
|   let (value-c, alignment-c) = center | ||||
|   return ( | ||||
|     type: "discontinuity", | ||||
|     left: ( | ||||
|       value: value-l, | ||||
|       alignment: alignment-l, | ||||
|     ), | ||||
|     right: ( | ||||
|       value: value-r, | ||||
|       alignment: alignment-r, | ||||
|     ), | ||||
|     center: ( | ||||
|       value: value-c, | ||||
|       alignment: alignment-c, | ||||
|     ), | ||||
|     eod: eod | ||||
|   ) | ||||
| } | ||||
|  | ||||
| #let inter(value, start, end, i: auto) = { | ||||
|   let i = i | ||||
|   if i == auto { | ||||
|     i = calc.floor( (start + end) / 2 ) | ||||
|   } | ||||
|   return ( | ||||
|     type: "intermediate", | ||||
|     value: value, | ||||
|     start: start, | ||||
|     end: end, | ||||
|     i: i, | ||||
|   ) | ||||
| } | ||||
|  | ||||
| #let get-anchor( | ||||
|   ctx, | ||||
|   line-i, | ||||
|   i, | ||||
|   alignment, | ||||
|   side, | ||||
|   dx: .1, | ||||
|   dy: .1 | ||||
| ) = { | ||||
|   let (_, anchor) = coordinate.resolve(ctx, "anchor-" + str(i)) | ||||
|   let (_, header-t) = coordinate.resolve(ctx, "header-" + str(line-i) + ".north") | ||||
|   let (_, header-b) = coordinate.resolve(ctx, "header-" + str(line-i) + ".south") | ||||
|  | ||||
|   let x = anchor.at(0) | ||||
|   if side == "left" { | ||||
|     x -= dx | ||||
|   } else if side == "right" { | ||||
|     x += dx | ||||
|   } | ||||
|  | ||||
|   let yt = header-t.at(1) | ||||
|   let yb = header-b.at(1) | ||||
|   let y = (yt + yb) / 2 | ||||
|   if alignment == "top" { | ||||
|     y = yt - dy | ||||
|   } else if alignment == "bottom" { | ||||
|     y = yb + dy | ||||
|   } | ||||
|   return (x, y) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user