added allow-overlap parameter for notes
This commit is contained in:
		| @@ -5,13 +5,15 @@ | |||||||
| /// - color (color): The note's color | /// - color (color): The note's color | ||||||
| /// - shape (str): The note's shape (see @@SHAPES for accepted values) | /// - shape (str): The note's shape (see @@SHAPES for accepted values) | ||||||
| /// - aligned (bool): True if the note is aligned with another note, in which case `side` must be `"over"`, false otherwise | /// - aligned (bool): True if the note is aligned with another note, in which case `side` must be `"over"`, false otherwise | ||||||
|  | /// - allow-overlap (bool): If set to `false`, the note will try to reserve space in the column to avoid overlapping with neighboring participants. If set to `true`, the not will overlap other participants | ||||||
| #let _note( | #let _note( | ||||||
|   side, |   side, | ||||||
|   content, |   content, | ||||||
|   pos: none, |   pos: none, | ||||||
|   color: rgb("#FEFFDD"), |   color: rgb("#FEFFDD"), | ||||||
|   shape: "default", |   shape: "default", | ||||||
|   aligned: false |   aligned: false, | ||||||
|  |   allow-overlap: true | ||||||
| ) = {} | ) = {} | ||||||
|  |  | ||||||
| /// Accepted values for `shape` argument of @@_note() | /// Accepted values for `shape` argument of @@_note() | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								manual.pdf
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								manual.pdf
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -82,12 +82,12 @@ | |||||||
|   let (p1, p2) = (none, none) |   let (p1, p2) = (none, none) | ||||||
|   let cell = none |   let cell = none | ||||||
|   if note.side == "left" { |   if note.side == "left" { | ||||||
|     p1 = "[" |     p1 = note.pos2 | ||||||
|     p2 = note.pos |     p2 = note.pos | ||||||
|     cell = get-note-box(note) |     cell = get-note-box(note) | ||||||
|   } else if note.side == "right" { |   } else if note.side == "right" { | ||||||
|     p1 = note.pos |     p1 = note.pos | ||||||
|     p2 = "]" |     p2 = note.pos2 | ||||||
|     cell = get-note-box(note) |     cell = get-note-box(note) | ||||||
|   } else if note.side == "over" and note.aligned-with != none { |   } else if note.side == "over" and note.aligned-with != none { | ||||||
|     let box1 = get-note-box(note) |     let box1 = get-note-box(note) | ||||||
|   | |||||||
| @@ -126,8 +126,8 @@ | |||||||
|     "linked", |     "linked", | ||||||
|     note.pos == none and note.side != "across" |     note.pos == none and note.side != "across" | ||||||
|   ) |   ) | ||||||
|   if note.pos == none and note.side != "across" { |  | ||||||
|   let names = ctx.participants.map(p => p.name) |   let names = ctx.participants.map(p => p.name) | ||||||
|  |   if note.pos == none and note.side != "across" { | ||||||
|     let i1 = names.position(n => n == ctx.last-seq.p1) |     let i1 = names.position(n => n == ctx.last-seq.p1) | ||||||
|     let i2 = names.position(n => n == ctx.last-seq.p2) |     let i2 = names.position(n => n == ctx.last-seq.p2) | ||||||
|     let pars = ( |     let pars = ( | ||||||
| @@ -150,10 +150,26 @@ | |||||||
|     n.aligned-with = note |     n.aligned-with = note | ||||||
|     ctx.elmts.at(ctx.last-note.i) = n |     ctx.elmts.at(ctx.last-note.i) = n | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   if note.side in ("left", "right") { | ||||||
|  |     let i = names.position(n => n == note.pos) | ||||||
|  |     let pos2 = note.pos | ||||||
|     if note.side == "left" { |     if note.side == "left" { | ||||||
|  |       if i <= 0 or note.allow-overlap { | ||||||
|         ctx.linked.push("[") |         ctx.linked.push("[") | ||||||
|  |         pos2 = "[" | ||||||
|  |       } else { | ||||||
|  |         pos2 = names.at(i - 1) | ||||||
|  |       } | ||||||
|     } else if note.side == "right" { |     } else if note.side == "right" { | ||||||
|  |       if i >= names.len() - 1 or note.allow-overlap { | ||||||
|         ctx.linked.push("]") |         ctx.linked.push("]") | ||||||
|  |         pos2 = "]" | ||||||
|  |       } else { | ||||||
|  |         pos2 = names.at(i + 1) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     note.insert("pos2", pos2) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   let pars = none |   let pars = none | ||||||
|   | |||||||
							
								
								
									
										13
									
								
								src/note.typ
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								src/note.typ
									
									
									
									
									
								
							| @@ -14,7 +14,15 @@ | |||||||
|   "hex" |   "hex" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| #let _note(side, content, pos: none, color: COL-NOTE, shape: "default", aligned: false) = { | #let _note( | ||||||
|  |   side, | ||||||
|  |   content, | ||||||
|  |   pos: none, | ||||||
|  |   color: COL-NOTE, | ||||||
|  |   shape: "default", | ||||||
|  |   aligned: false, | ||||||
|  |   allow-overlap: true | ||||||
|  | ) = { | ||||||
|   if side == "over" { |   if side == "over" { | ||||||
|     if pos == none { |     if pos == none { | ||||||
|       panic("Pos cannot be none with side 'over'") |       panic("Pos cannot be none with side 'over'") | ||||||
| @@ -37,6 +45,7 @@ | |||||||
|     color: color, |     color: color, | ||||||
|     shape: shape, |     shape: shape, | ||||||
|     aligned: aligned, |     aligned: aligned, | ||||||
|     aligned-with: none |     aligned-with: none, | ||||||
|  |     allow-overlap: allow-overlap | ||||||
|   ),) |   ),) | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user