\ProvidesFile{pgf-go-remember.sty}[2026/10/23 v0.2026.10.23 pgf-go: remember]
%REMEMBER
\ExplSyntaxOn

%LA MEMORIA EN SI LA GUARDA EL KERNEL (\pgfgo_kernel_remember_...): UNA POR NOMBRE. UN goban CON name
%GUARDA TODO LO QUE DIBUJA; resume Y \pgfgoview LO VUELVEN A DIBUJAR.

%QUE NO SE OLVIDA: forget EN UN ELEMENTO (\stone[forget], \marks[forget], label = forget, ...) LO DEJA EN
%LA MEMORIA, PERO resume NO LO TRAE Y \pgfgoview SOLO LO DIBUJA CON forgotten.
\bool_new:N\l_pgfgo_goban_remember_stone_bool
\bool_new:N\l_pgfgo_goban_remember_move_bool
\bool_new:N\l_pgfgo_goban_remember_move_label_bool
\bool_new:N\l_pgfgo_goban_remember_mark_bool
\bool_new:N\l_pgfgo_goban_remember_territory_bool
\bool_set_true:N\l_pgfgo_goban_remember_stone_bool
\bool_set_true:N\l_pgfgo_goban_remember_move_bool
\bool_set_true:N\l_pgfgo_goban_remember_move_label_bool
\bool_set_true:N\l_pgfgo_goban_remember_mark_bool
\bool_set_true:N\l_pgfgo_goban_remember_territory_bool

%EL NOMBRE DEL goban QUE SE ESTA DIBUJANDO (name): TODO LO QUE DIBUJA VA A LA MEMORIA DE ESE NOMBRE.
\tl_new:N \l_pgfgo_goban_name_tl

%GUARDA EL CODIGO #3 EN LA MEMORIA DEL goban CON NOMBRE. #1 FALSO: OLVIDADO. #2 DICE QUE ES (stone, mark,
%arrow, line O territory): resume Y \pgfgoview PUEDEN NO DIBUJAR LAS MARCAS, LAS FLECHAS, LAS LINEAS NI EL
%TERRITORIO.
\cs_new_protected:Npn \pgfgo_remember:Nnn #1#2#3 {
	\tl_if_empty:NF \l_pgfgo_goban_name_tl {
		\exp_args:NV \pgfgo_kernel_remember_push:nn \l_pgfgo_goban_name_tl {
			\bool_if:NTF #1
				{\__pgfgo_remember_kind:nn {#2} {#3}}
				{\exp_not:N \pgfgo_remember_if:nn {forgotten} {\__pgfgo_remember_kind:nn {#2} {#3}}}
		}
	}
}
\cs_new:Npn \__pgfgo_remember_kind:nn #1#2 {
	\str_if_eq:nnTF {#1} {stone} {#2} {\exp_not:N \pgfgo_remember_if:nn {#1} {#2}}
}

%AL VOLVER A DIBUJAR SE ESCONDEN LAS MARCAS, LAS FLECHAS, LAS LINEAS, EL TERRITORIO, LOS NUMEROS DE LAS JUGADAS (VER
%\pgfgo_move_parsed:nnn) Y LO OLVIDADO, SEGUN LO QUE PIDAN resume O \pgfgoview.
\bool_new:N \l_pgfgo_remember_hide_mark_bool
\bool_new:N \l_pgfgo_remember_hide_arrow_bool
\bool_new:N \l_pgfgo_remember_hide_line_bool
\bool_new:N \l_pgfgo_remember_hide_territory_bool
\bool_new:N \l_pgfgo_remember_hide_numbers_bool
\bool_new:N \l_pgfgo_remember_hide_forgotten_bool
\cs_new_protected:Npn \pgfgo_remember_if:nn #1#2 {\bool_if:cF {l_pgfgo_remember_hide_ #1 _bool} {#2}}

%UNA JUGADA CON label = forget: SU NUMERO SE ESCONDE COMO LO OLVIDADO.
\cs_new_protected:Npn \pgfgo_remember_numbers:n #1 {
	\group_begin:
		\bool_if:NT \l_pgfgo_remember_hide_forgotten_bool {\bool_set_true:N \l_pgfgo_remember_hide_numbers_bool}
		#1
	\group_end:
}

%resume: VUELVE A DIBUJAR LA MEMORIA #4 SIN LO OLVIDADO, CON LAS MARCAS, FLECHAS Y LINEAS (#1), EL TERRITORIO (#2) Y LOS
%NUMEROS (#3) SOLO SI SE PIDEN (\c_true_bool O \c_false_bool). LO QUE YA SE ESCONDIA SIGUE ESCONDIDO: UN
%goban CON name Y resume GUARDA ESTE MISMO CODIGO, Y UNA VISTA SIN MARCAS NO LAS MUESTRA.
\seq_new:N \l__pgfgo_remember_hide_seq
\tl_new:N \l__pgfgo_remember_hide_tl
\cs_new_protected:Npn \pgfgo_remember_resume:NNNn #1#2#3#4 {
	\__pgfgo_remember_resume:NNNn #1 #2 #3 {\pgfgo_kernel_remember_replay:n {#4}}
}
%LO MISMO CON EL CODIGO #4 DE LA MEMORIA EN LUGAR DE SU NOMBRE: ASI QUEDA UN goban CON resume EN EL .aux
%O EN UN ARCHIVO DE export (VER pgf-go-store.sty).
\cs_new_protected:Npn \pgfgo_remember_resume_code:NNNn #1#2#3#4 {\__pgfgo_remember_resume:NNNn #1 #2 #3 {#4}}
\cs_new_protected:Npn \__pgfgo_remember_resume:NNNn #1#2#3#4 {
	\seq_push:Ne \l__pgfgo_remember_hide_seq {
		\__pgfgo_remember_hide_restore:N \l_pgfgo_remember_hide_mark_bool
		\__pgfgo_remember_hide_restore:N \l_pgfgo_remember_hide_arrow_bool
		\__pgfgo_remember_hide_restore:N \l_pgfgo_remember_hide_line_bool
		\__pgfgo_remember_hide_restore:N \l_pgfgo_remember_hide_territory_bool
		\__pgfgo_remember_hide_restore:N \l_pgfgo_remember_hide_numbers_bool
		\__pgfgo_remember_hide_restore:N \l_pgfgo_remember_hide_forgotten_bool
	}
	\bool_if:NF #1 {
		\bool_set_true:N \l_pgfgo_remember_hide_mark_bool
		\bool_set_true:N \l_pgfgo_remember_hide_arrow_bool
		\bool_set_true:N \l_pgfgo_remember_hide_line_bool
	}
	\bool_if:NF #2 {\bool_set_true:N \l_pgfgo_remember_hide_territory_bool}
	\bool_if:NF #3 {\bool_set_true:N \l_pgfgo_remember_hide_numbers_bool}
	\bool_set_true:N \l_pgfgo_remember_hide_forgotten_bool
	#4
	\seq_pop:NN \l__pgfgo_remember_hide_seq \l__pgfgo_remember_hide_tl
	\tl_use:N \l__pgfgo_remember_hide_tl
}
\cs_new:Npn \__pgfgo_remember_hide_restore:N #1 {
	\bool_if:NTF #1 {\exp_not:N \bool_set_true:N} {\exp_not:N \bool_set_false:N} \exp_not:N #1
}

\ExplSyntaxOff
