diff --git a/src/core/draw/hide.typ b/src/core/draw/hide.typ new file mode 100644 index 0000000..2942acd --- /dev/null +++ b/src/core/draw/hide.typ @@ -0,0 +1,15 @@ +#import "/src/core/utils.typ": get-ctx, set-ctx + +#let render(sync) = get-ctx(ctx => { + set-ctx(c => { + c.hidden = true + return c + }) +}) + +#let render-end(sync) = get-ctx(ctx => { + set-ctx(c => { + c.hidden = false + return c + }) +}) diff --git a/src/core/renderer.typ b/src/core/renderer.typ index 14cf8d5..6b0124e 100644 --- a/src/core/renderer.typ +++ b/src/core/renderer.typ @@ -319,7 +319,8 @@ level: 0, lines: () )), - in-sync: false + in-sync: false, + hidden: false, ) chronos-ctx.insert( "widths", @@ -379,11 +380,15 @@ (elmt,) } else if "draw" in elmt and elmt.type != "par" { get-ctx(ctx => { - if ctx.in-sync and elmt.type != "sync-end" { + let drawn = if ctx.in-sync and elmt.type != "sync-end" { in-sync-render(elmt) } else { (elmt.draw)(elmt) } + if ctx.hidden and elmt.type != "hide-end" { + drawn = draw.hide(drawn) + } + drawn }) } } diff --git a/src/core/setup.typ b/src/core/setup.typ index 776b2bb..c064e55 100644 --- a/src/core/setup.typ +++ b/src/core/setup.typ @@ -1,4 +1,5 @@ #import "draw/group.typ": render-end as grp-render-end +#import "draw/hide.typ": render-end as hide-render-end #import "draw/sync.typ": render-end as sync-render-end #import "utils.typ": get-group-span, is-elmt #import "/src/participant.typ": _exists as par-exists, _par @@ -37,6 +38,21 @@ ) } +#let flatten-hide(elmts, i) = { + let hide = elmts.at(i) + elmts.at(i) = hide + return ( + elmts.slice(0, i + 1) + + hide.elmts + + (( + type: "hide-end", + draw: hide-render-end, + start-i: i + ),) + + elmts.slice(i+1) + ) +} + #let update-group-children(elmts, i) = { let elmts = elmts let group-end = elmts.at(i) @@ -80,6 +96,9 @@ } else if elmt.type == "sync" { elmts = flatten-sync(elmts, i) + + } else if elmt.type == "hide" { + elmts = flatten-hide(elmts, i) } else if elmt.type == "seq" { if elmt.enable-dst { diff --git a/src/lib.typ b/src/lib.typ index 09d36a8..24bde07 100644 --- a/src/lib.typ +++ b/src/lib.typ @@ -4,5 +4,5 @@ #import "sequence.typ": _seq, _ret #import "group.typ": _grp, _loop, _alt, _opt, _break #import "participant.typ": _par -#import "misc.typ": _sep, _delay, _sync, _gap, _evt, _col +#import "misc.typ": _sep, _delay, _sync, _gap, _evt, _col, _hide #import "note.typ": _note \ No newline at end of file diff --git a/src/misc.typ b/src/misc.typ index 48e6986..ef69dbf 100644 --- a/src/misc.typ +++ b/src/misc.typ @@ -1,5 +1,6 @@ #import "core/draw/delay.typ" #import "core/draw/event.typ": render as evt-render +#import "core/draw/hide.typ" #import "core/draw/separator.typ" #import "core/draw/sync.typ" #import "core/utils.typ": set-ctx @@ -62,4 +63,12 @@ min-width: min-width, max-width: max-width ),) +} + +#let _hide(elmts) = { + return (( + type: "hide", + draw: hide.render, + elmts: elmts + ),) } \ No newline at end of file