\ExplSyntaxOn


% LN : A3 : Unica interseccion.
% LLN : A-C 2 : Linea horizontal.
% LNN : A 3-5 : Linea vertical.
% LLNN A-C 3-8 : Rectangulo.
% LN -| LN : Jota.
% LN |- LN : Gamma.
% LN -- LN : Linea. (ver descripcion)


\cs_generate_variant:Nn \int_set:Nn {Nf}
\cs_generate_variant:Nn \clist_put_right:Nn {Nf}
\cs_generate_variant:Nn \seq_set_from_clist:Nn {NV}


\cs_new:Nn\pgfgo_int_step_sorted_variable:nnNn{\int_step_variable:nnNn{\int_min:nn{#1}{#2}}{\int_max:nn{#1}{#2}}#3{#4}}

\clist_new:N	\l_pgfgo_coordinate_parser_inmediate_clist
\seq_new:N \l_pgfgo_coordinate_parser_inmediate_seq


%\l_pgfgo_use_i_bool
\prop_new:N \l_pgfgo_coordinate_parser_biyection_use_i_prop
\prop_new:N \l_pgfgo_coordinate_parser_biyection_no_use_i_prop
\prop_new:N \l_pgfgo_coordinate_parser_biyection_current_prop



\prop_set_from_keyval:Nn \l_pgfgo_coordinate_parser_biyection_use_i_prop {
	A=1, B=2, C=3, D=4, E=5, F=6, G=7, H=8, I=9, J=10, K=11, L=12, M=13, N=14, O=15, P=16, Q=17, R=18, S=19, T=20, U=21, V=22, W=23, X=24, Y=25, Z=26,
	1=A, 2=B, 3=C, 4=D, 5=E, 6=F, 7=G, 8=H, 9=I, 10=J, 11=K, 12=L, 13=M, 14=N, 15=O, 16=P, 17=Q, 18=R, 19=S, 20=T, 21=U, 22=V, 23=W, 24=X, 25=Y, 26=Z
}

\prop_set_from_keyval:Nn \l_pgfgo_coordinate_parser_biyection_no_use_i_prop {
	A=1, B=2, C=3, D=4, E=5, F=6, G=7, H=8, J=9, K=10, L=11, M=12, N=13, O=14, P=15, Q=16, R=17, S=18, T=19, U=20, V=21, W=22, X=23, Y=24, Z=25,
	1=A, 2=B, 3=C, 4=D, 5=E, 6=F, 7=G, 8=H, 9=J, 10=K, 11=L, 12=M, 13=N, 14=O, 15=P, 16=Q, 17=R, 18=S, 19=T, 20=U, 21=V, 22=W, 23=X, 24=Y, 25=Z, I=9%<- porsi
}

\prop_set_eq:NN \l_pgfgo_coordinate_parser_biyection_current_prop \l_pgfgo_coordinate_parser_biyection_use_i_prop





%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%* : 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cs_new:Nn\pgfgo_coordinate_parser_star:{	
	\pgfgo_int_step_sorted_variable:nnNn{\l_pgfgo_goban_from_x_int}{\l_pgfgo_goban_to_x_int}\variableA{
		\pgfgo_int_step_sorted_variable:nnNn{\l_pgfgo_goban_from_y_int}{\l_pgfgo_goban_to_y_int} \variableN {
			\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\variableA}{\variableN}}
		}
	}
}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%L : 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cs_new:Nn\pgfgo_coordinate_parser_A:n{ %A {A}
	\seq_clear:N \l_pgfgo_coordinate_parser_inmediate_seq
	\int_set:Nf\l_tmpa_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#1}}
	
	\pgfgo_int_step_sorted_variable:nnNn{\l_pgfgo_goban_from_y_int}{\l_pgfgo_goban_to_y_int}\variable
		{
			\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\int_use:N\l_tmpa_int}{\variable}}
		}
}
\cs_generate_variant:Nn \pgfgo_coordinate_parser_A:n {f}





%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%N : 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cs_new:Nn\pgfgo_coordinate_parser_N:n{ %5 {5}	
	\pgfgo_int_step_sorted_variable:nnNn{\l_pgfgo_goban_from_x_int}{\l_pgfgo_goban_to_x_int}\variable
	{
		\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\variable}{#1}}
	}
}
\cs_generate_variant:Nn \pgfgo_coordinate_parser_N:n {f}




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%LN : 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cs_new:Nn\pgfgo_coordinate_parser_AN:nn{ %A 5 {A}{5}
	\seq_clear:N \l_pgfgo_coordinate_parser_inmediate_seq
	\int_set:Nf\l_tmpa_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#1}}
	\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\int_use:N\l_tmpa_int}{#2}}
}
\cs_generate_variant:Nn \pgfgo_coordinate_parser_AN:nn {ff}





%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%L:L 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cs_new:Nn\pgfgo_coordinate_parser_AA:nn{ %A:D {A}{D}
	\seq_clear:N \l_pgfgo_coordinate_parser_inmediate_seq
	\int_set:Nf\l_tmpa_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#1}}
	\int_set:Nf\l_tmpb_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#2}}
	
	\pgfgo_int_step_sorted_variable:nnNn{\l_tmpa_int}{\l_tmpb_int}\variableA{
		\pgfgo_int_step_sorted_variable:nnNn{\l_pgfgo_goban_from_x_int}{\l_pgfgo_goban_to_y_int} \variableN {
			\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\variableA}{\variableN}}
		}
	}
}
\cs_generate_variant:Nn \pgfgo_coordinate_parser_AA:nn {ff}




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%N-N : 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cs_new:Nn\pgfgo_coordinate_parser_NN:nn{ %5:10 {5}{10}	
	\pgfgo_int_step_sorted_variable:nnNn{\l_pgfgo_goban_from_x_int}{\l_pgfgo_goban_to_x_int}\variableA{
		\pgfgo_int_step_sorted_variable:nnNn{#1}{#2} \variableN {
			\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\variableA}{\variableN}}
		}
	}
}
\cs_generate_variant:Nn \pgfgo_coordinate_parser_NN:nn {ff}





%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%L-L N : 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cs_new:Nn\pgfgo_coordinate_parser_AAN:nnn{ %A-D 5 {A}{D}{5}
	\seq_clear:N \l_pgfgo_coordinate_parser_inmediate_seq
	\int_set:Nf\l_tmpa_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#1}}
	\int_set:Nf\l_tmpb_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#2}}
	
	\pgfgo_int_step_sorted_variable:nnNn{\l_tmpa_int}{\l_tmpb_int}\variable{
		\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\variable}{#3}}
	}
}
\cs_generate_variant:Nn \pgfgo_coordinate_parser_AAN:nnn {fff}




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%L  N-N : 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cs_new:Nn\pgfgo_coordinate_parser_ANN:nnn{ %A 3:5 {A}{3}{5}
	\seq_clear:N \l_pgfgo_coordinate_parser_inmediate_seq
	\int_set:Nf\l_tmpa_int {\prop_item:Ne\l_pgfgo_coordinate_parser_biyection_current_prop {#1}}
	
	\pgfgo_int_step_sorted_variable:nnNn{#2}{#3}\variable{
		\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\int_use:N\l_tmpa_int}{\variable}}
	}
}
\cs_generate_variant:Nn \pgfgo_coordinate_parser_ANN:nnn {fff}




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%L-L N-N : 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cs_new:Nn\pgfgo_coordinate_parser_AANN:nnnn{ %A-D 5-10 {A}{D}{5}{10}
	\seq_clear:N \l_pgfgo_coordinate_parser_inmediate_seq
	\int_set:Nf\l_tmpa_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#1}}
	\int_set:Nf\l_tmpb_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#2}}
	
	\pgfgo_int_step_sorted_variable:nnNn{\l_tmpa_int}{\l_tmpb_int}\variableA{
		\pgfgo_int_step_sorted_variable:nnNn{#3}{#4} \variableN {
			\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\variableA}{\variableN}}
		}
	}
}
\cs_generate_variant:Nn \pgfgo_coordinate_parser_AANN:nnnn {ffff}




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%LN -| LN : 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cs_new:Nn\pgfgo_coordinate_parser_ANHVAN:nnnn{ %A5 D10 {A}{5}{D}{10}
	\seq_clear:N \l_pgfgo_coordinate_parser_inmediate_seq
	\int_set:Nf\l_tmpa_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#1}}
	\int_set:Nf\l_tmpb_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#3}}
	
	\pgfgo_int_step_sorted_variable:nnNn{\l_tmpa_int}{\l_tmpb_int}\variableA{
			\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\variableA}{#2}}
	}
	
	\pgfgo_int_step_sorted_variable:nnNn{#2}{#4}\variableN{
		\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\int_use:N\l_tmpb_int}{\variableN}}
	}
	
	\seq_remove_duplicates:N \l_pgfgo_coordinate_parser_inmediate_seq
}
\cs_generate_variant:Nn \pgfgo_coordinate_parser_ANHVAN:nnnn{ffff}





%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%LN |- LN : 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cs_new:Nn\pgfgo_coordinate_parser_ANVHAN:nnnn{ %A5 D10 {A}{5}{D}{10}
	\seq_clear:N \l_pgfgo_coordinate_parser_inmediate_seq
	\int_set:Nf\l_tmpa_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#1}}
	\int_set:Nf\l_tmpb_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#3}}
	
	
	\pgfgo_int_step_sorted_variable:nnNn{#2}{#4}\variableN{
		\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\int_use:N\l_tmpa_int}{\variableN}}
	}
	
	\pgfgo_int_step_sorted_variable:nnNn{\l_tmpa_int}{\l_tmpb_int}\variableA{
		\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\variableA}{#4}}
	}
	
	\seq_remove_duplicates:N \l_pgfgo_coordinate_parser_inmediate_seq
}
\cs_generate_variant:Nn \pgfgo_coordinate_parser_ANVHAN:nnnn{ffff}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%LN -- LN : Si los numeros son iguales, linea horizontal, en caso contrario, linea vertical. (pensar implementacion oblicua).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cs_new:Nn\pgfgo_coordinate_parser_ANHHAN:nnnn{ %A5 D10 {A}{5}{D}{10}
	\seq_clear:N \l_pgfgo_coordinate_parser_inmediate_seq
	\int_set:Nf\l_tmpa_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#1}}
	\int_set:Nf\l_tmpb_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#3}}
	
	\int_compare:nNnTF {#2}={#4} {
		\pgfgo_int_step_sorted_variable:nnNn{\l_tmpa_int}{\l_tmpb_int}\variableA{
			\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\variableA}{#2}}
		}
	}{
		\int_compare:nNnT{\l_tmpa_int}={\l_tmpb_int}{
			\pgfgo_int_step_sorted_variable:nnNn{#2}{#4}\variableN{
				\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\int_use:N\l_tmpa_int}{\variableN}}
			}
		}
	}
	\seq_remove_duplicates:N \l_pgfgo_coordinate_parser_inmediate_seq
}
\cs_generate_variant:Nn \pgfgo_coordinate_parser_ANHHAN:nnnn{ffff}








%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%AN R AN : 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cs_new:Nn\pgfgo_coordinate_parser_ANRAN:nnnn{ %A5 R D10 {A}{5}{D}{10}
	\seq_clear:N \l_pgfgo_coordinate_parser_inmediate_seq
	\int_set:Nf\l_tmpa_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#1}}
	\int_set:Nf\l_tmpb_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#3}}
	
	\pgfgo_int_step_sorted_variable:nnNn{\l_tmpa_int}{\l_tmpb_int}\variableA{
		\pgfgo_int_step_sorted_variable:nnNn{#2}{#4} \variableN {
			\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\variableA}{\variableN}}
		}
	}
}
\cs_generate_variant:Nn \pgfgo_coordinate_parser_ANRAN:nnnn {ffff}





%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%AN r AN : 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cs_new:Nn\pgfgo_coordinate_parser_ANrAN:nnnn{ %A5 r D10 {A}{5}{D}{10}
	\seq_clear:N \l_pgfgo_coordinate_parser_inmediate_seq
	\int_set:Nf\l_tmpa_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#1}}
	\int_set:Nf\l_tmpb_int {\prop_item:Ne \l_pgfgo_coordinate_parser_biyection_current_prop {#3}}
	
	\pgfgo_int_step_sorted_variable:nnNn{\l_tmpa_int}{\l_tmpb_int}\variableA{
		\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\variableA}{#2}}
		\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\variableA}{#4}}
	}
	\pgfgo_int_step_sorted_variable:nnNn{#2}{#4} \variableN {
		\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\int_use:N\l_tmpa_int}{\variableN}}
		\seq_put_right:Ne\l_pgfgo_coordinate_parser_inmediate_seq {{\int_use:N\l_tmpb_int}{\variableN}}
	}
	\seq_remove_duplicates:N \l_pgfgo_coordinate_parser_inmediate_seq
}
\cs_generate_variant:Nn \pgfgo_coordinate_parser_ANrAN:nnnn {ffff}








%DIVIDIMOS LAS CADENAS DE OPERADORES EN OPERADORES QUE PUEDAN PROCESARSE.
%{A2 -| A3 -| A5 -- B2}
%{A2 -| A3, A3 -| A5, A5 -- B2}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%EXPANDIR GRUPO ADITIVO O SUSTRACTIVO A SUBCONJUNTOS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\regex_new:N \l_pgfgo_coordinate_parser_first_regex
\regex_set:Nn \l_pgfgo_coordinate_parser_first_regex{( -- | \|- | -\| | r | R) \s* (\w+\d+) \s* ( -- | \|- | -\| | r | R)}

\regex_new:N \l_pgfgo_coordinate_parser_brackets_regex
\regex_set:Nn \l_pgfgo_coordinate_parser_brackets_regex{([A-Z]{1})\s??\[(.)\]}

\tl_new:N \l_pgfgo_coordinate_parser_expanded_group_tl
\cs_new:Nn\pgfgo_coordinate_parser_expand_group:n{
	\tl_set:Nn\l_pgfgo_coordinate_parser_expanded_group_tl{#1}
	\bool_set_true:N \l_tmpa_bool %APLICAR REGEX
	\bool_do_while:Nn \l_tmpa_bool {
		\regex_replace_all:NnNF \l_pgfgo_coordinate_parser_first_regex {\1\ \2,\ \2\ \3}
						\l_pgfgo_coordinate_parser_expanded_group_tl	
						{\bool_set_false:N\l_tmpa_bool}
	}
	
	
	%REEMPLAZA LAS CORRDENADAS DE LA SITAXIS DE BRACKETS
%	\regex_replace_all:NnNF \l_pgfgo_coordinate_parser_brackets_regex
%		{
%			\c{clist_set:Nn} \c{l_tmpa_clist} {\2}
%			\c{clist_map_variable:NNn}\c{l_tmpa_clist} \c{variable} {\1\c{variable},}		
%		}
%	\l_pgfgo_coordinate_parser_expanded_group_tl
%	\tl_log:N \l_pgfgo_coordinate_parser_expanded_group_tl
}




%DIVIDIMOS LAS CADENAS DE OPERADORES EN OPERADORES QUE PUEDAN PROCESARSE.
%{A2 -| A3 -| A5 -- B2}
%{A2 -| A3, A3 -| A5, A5 -- B2}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%EXPANDIR GRUPO ADITIVO O SUSTRACTIVO A SUBCONJUNTOS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%









% *						= *						=	Todo el tablero
% LN 					= A3 					= Unica interseccion.
% L 					= A 					= Linea vertical.
% N 					= 2 				= Linea horizontal.
% LNN 				= A3:5 				= Linea vertical.
% LLNN 				= A:C 3:8 		= Rectangulo.

% LN -| LN 		= A3 -| B2		= Jota.
% LN |- LN 		= A3 |- B2		= Gamma.
% LN -- LN 		= A4 -- E4		= Linea. (ver descripcion)
% LN r LN 		= A4 r E7			= Rectangulo hueco.
% LN R LN 		= A4 R E7			= Rectangulo relleno.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% EXPANDIR SUBCONJUNTOS A ELEMENTOS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\tl_new:N \l_pgfgo_coordinate_parser_expanded_subset_tl

%NO HAY ESPACIOS AL PRINCIPIO Y AL FINAL PORQUE SE ELIMINAN EN EL SPLIT DE CLIST A SEQ
\regex_const:Nn \l_pgfgo_coordinate_parser_subset_star_regex 		{\A*\Z}
\regex_const:Nn \l_pgfgo_coordinate_parser_subset_AN_regex 			{\A([A-Z]{1})(\d{1,2})\Z}
\regex_const:Nn \l_pgfgo_coordinate_parser_subset_A_regex 			{\A([A-Z]{1})\Z}
\regex_const:Nn \l_pgfgo_coordinate_parser_subset_N_regex 			{\A(\d{1,2})\Z}
\regex_const:Nn \l_pgfgo_coordinate_parser_subset_AA_regex 			{\A([A-Z]{1}):([A-Z]{1})\Z}
\regex_const:Nn \l_pgfgo_coordinate_parser_subset_NN_regex 			{\A(\d{1,2}):(\d{1,2})\Z}
\regex_const:Nn \l_pgfgo_coordinate_parser_subset_AAN_regex 		{\A([A-Z]{1}):([A-Z]{1})			\s*(\d{1,2})\Z}
\regex_const:Nn \l_pgfgo_coordinate_parser_subset_ANN_regex 		{\A([A-Z]{1})									\s*(\d{1,2}):(\d{1,2})\Z}
\regex_const:Nn \l_pgfgo_coordinate_parser_subset_AANN_regex 		{\A([A-Z]{1}):([A-Z]{1})			\s*(\d{1,2}):(\d{1,2})\Z}
\regex_const:Nn \l_pgfgo_coordinate_parser_subset_ANHVAN_regex 	{\A([A-Z]{1})(\d{1,2})				\s*-\|			\s*([A-Z]{1})(\d{1,2})\Z}
\regex_const:Nn \l_pgfgo_coordinate_parser_subset_ANVHAN_regex 	{\A([A-Z]{1})(\d{1,2})				\s*\|-			\s*([A-Z]{1})(\d{1,2})\Z}
\regex_const:Nn \l_pgfgo_coordinate_parser_subset_ANHHAN_regex 	{\A([A-Z]{1})(\d{1,2})				\s*--				\s*([A-Z]{1})(\d{1,2})\Z}
\regex_const:Nn \l_pgfgo_coordinate_parser_subset_ANrAN_regex 	{\A([A-Z]{1})(\d{1,2})				\s*r				\s*([A-Z]{1})(\d{1,2})\Z}
\regex_const:Nn \l_pgfgo_coordinate_parser_subset_ANRAN_regex 	{\A([A-Z]{1})(\d{1,2})				\s*R				\s*([A-Z]{1})(\d{1,2})\Z}




\cs_new:Nn\pgfgo_coordinate_parser_expand_subset:n{
	\tl_set:Ne\l_pgfgo_coordinate_parser_expanded_subset_tl{#1}
	\seq_clear:N \l_tmpa_seq
	
	\regex_extract_once:NVNTF \l_pgfgo_coordinate_parser_subset_AN_regex \l_pgfgo_coordinate_parser_expanded_subset_tl \l_tmpa_seq
		{
			\pgfgo_coordinate_parser_AN:ff{\seq_item:Nn \l_tmpa_seq {2}}{\seq_item:Nn \l_tmpa_seq {3}}
		}{
			\regex_extract_once:NVNTF \l_pgfgo_coordinate_parser_subset_AAN_regex \l_pgfgo_coordinate_parser_expanded_subset_tl \l_tmpa_seq
				{
					\pgfgo_coordinate_parser_AAN:fff{\seq_item:Nn \l_tmpa_seq {2}}{\seq_item:Nn \l_tmpa_seq {3}}{\seq_item:Nn \l_tmpa_seq {4}}
				}{
					\regex_extract_once:NVNTF \l_pgfgo_coordinate_parser_subset_ANN_regex \l_pgfgo_coordinate_parser_expanded_subset_tl \l_tmpa_seq
						{
							\pgfgo_coordinate_parser_ANN:fff{\seq_item:Nn \l_tmpa_seq {2}}{\seq_item:Nn \l_tmpa_seq {3}}{\seq_item:Nn \l_tmpa_seq {4}}
						}{
							\regex_extract_once:NVNTF \l_pgfgo_coordinate_parser_subset_AANN_regex \l_pgfgo_coordinate_parser_expanded_subset_tl \l_tmpa_seq
								{
									\pgfgo_coordinate_parser_AANN:ffff{\seq_item:Nn \l_tmpa_seq {2}}{\seq_item:Nn \l_tmpa_seq {3}}{\seq_item:Nn \l_tmpa_seq {4}}{\seq_item:Nn \l_tmpa_seq {5}}
								}{
									\regex_extract_once:NVNTF \l_pgfgo_coordinate_parser_subset_ANHVAN_regex \l_pgfgo_coordinate_parser_expanded_subset_tl \l_tmpa_seq
										{	
											\pgfgo_coordinate_parser_ANHVAN:ffff{\seq_item:Nn \l_tmpa_seq {2}}{\seq_item:Nn \l_tmpa_seq {3}}{\seq_item:Nn \l_tmpa_seq {4}}{\seq_item:Nn \l_tmpa_seq {5}}
										}{
											\regex_extract_once:NVNTF \l_pgfgo_coordinate_parser_subset_ANVHAN_regex \l_pgfgo_coordinate_parser_expanded_subset_tl \l_tmpa_seq
												{	
													\pgfgo_coordinate_parser_ANVHAN:ffff{\seq_item:Nn \l_tmpa_seq {2}}{\seq_item:Nn \l_tmpa_seq {3}}{\seq_item:Nn \l_tmpa_seq {4}}{\seq_item:Nn \l_tmpa_seq {5}}
												}{
													\regex_extract_once:NVNTF \l_pgfgo_coordinate_parser_subset_ANHHAN_regex \l_pgfgo_coordinate_parser_expanded_subset_tl \l_tmpa_seq
														{	
															\pgfgo_coordinate_parser_ANHHAN:ffff{\seq_item:Nn \l_tmpa_seq {2}}{\seq_item:Nn \l_tmpa_seq {3}}{\seq_item:Nn \l_tmpa_seq {4}}{\seq_item:Nn \l_tmpa_seq {5}}
														}{
															\regex_extract_once:NVNTF \l_pgfgo_coordinate_parser_subset_ANRAN_regex \l_pgfgo_coordinate_parser_expanded_subset_tl \l_tmpa_seq
																{	
																	\pgfgo_coordinate_parser_ANRAN:ffff{\seq_item:Nn \l_tmpa_seq {2}}{\seq_item:Nn \l_tmpa_seq {3}}{\seq_item:Nn \l_tmpa_seq {4}}{\seq_item:Nn \l_tmpa_seq {5}}
																}{
																	\regex_extract_once:NVNTF \l_pgfgo_coordinate_parser_subset_ANrAN_regex \l_pgfgo_coordinate_parser_expanded_subset_tl \l_tmpa_seq
																		{	
																			\pgfgo_coordinate_parser_ANrAN:ffff{\seq_item:Nn \l_tmpa_seq {2}}{\seq_item:Nn \l_tmpa_seq {3}}{\seq_item:Nn \l_tmpa_seq {4}}{\seq_item:Nn \l_tmpa_seq {5}}
																		}{
																			\regex_extract_once:NVNTF \l_pgfgo_coordinate_parser_subset_A_regex \l_pgfgo_coordinate_parser_expanded_subset_tl \l_tmpa_seq
																			{	
																				\pgfgo_coordinate_parser_A:f{\seq_item:Nn \l_tmpa_seq {2}}
																			}{
																				\regex_extract_once:NVNTF \l_pgfgo_coordinate_parser_subset_N_regex \l_pgfgo_coordinate_parser_expanded_subset_tl \l_tmpa_seq
																				{	
																					\pgfgo_coordinate_parser_N:f{\seq_item:Nn \l_tmpa_seq {2}}
																				}{
																					\regex_extract_once:NVNTF \l_pgfgo_coordinate_parser_subset_AA_regex \l_pgfgo_coordinate_parser_expanded_subset_tl \l_tmpa_seq
																					{	
																						\pgfgo_coordinate_parser_AA:ff{\seq_item:Nn \l_tmpa_seq {2}}{\seq_item:Nn \l_tmpa_seq {3}}
																					}{
																						\regex_extract_once:NVNTF \l_pgfgo_coordinate_parser_subset_NN_regex \l_pgfgo_coordinate_parser_expanded_subset_tl \l_tmpa_seq
																						{	
																							\pgfgo_coordinate_parser_NN:ff{\seq_item:Nn \l_tmpa_seq {2}}{\seq_item:Nn \l_tmpa_seq {3}}
																						}{
																							\regex_extract_once:NVNTF \l_pgfgo_coordinate_parser_subset_star_regex \l_pgfgo_coordinate_parser_expanded_subset_tl \l_tmpa_seq %REALMENTE BASTA CON EL MATCH
																							{	
																								\pgfgo_coordinate_parser_star:
																							}{
																								
																							}
																						}
																					}
																				}
																			}
																		}
																}
														}
												}
										}		
								}
						}
				}
		}
}

\cs_generate_variant:Nn \pgfgo_coordinate_parser_expand_subset:n {V}




\seq_new:N\l_pgfgo_coordinate_parser_items_from_group_seq
\seq_new:N\l_pgfgo_coordinate_parser_expanded_group_seq

\cs_new:Nn\pgfgo_coordinate_parser_from_group_to_items:n{
	\bool_if:NTF \l_pgfgo_use_i_bool {
			\prop_set_eq:NN \l_pgfgo_coordinate_parser_biyection_current_prop \l_pgfgo_coordinate_parser_biyection_use_i_prop
		} {
			\prop_set_eq:NN \l_pgfgo_coordinate_parser_biyection_current_prop \l_pgfgo_coordinate_parser_biyection_no_use_i_prop
		}
	
	\seq_clear:N \l_pgfgo_coordinate_parser_items_from_group_seq
	\pgfgo_coordinate_parser_expand_group:n{#1}% retorna \l_pgfgo_coordinate_parser_expanded_group_tl
	\seq_set_from_clist:NV\l_pgfgo_coordinate_parser_expanded_group_seq\l_pgfgo_coordinate_parser_expanded_group_tl
	\seq_map_variable:NNn\l_pgfgo_coordinate_parser_expanded_group_seq\__pgfgo_subset{
		\pgfgo_coordinate_parser_expand_subset:V \__pgfgo_subset
		\seq_concat:NNN
		\l_pgfgo_coordinate_parser_items_from_group_seq
		\l_pgfgo_coordinate_parser_items_from_group_seq
		\l_pgfgo_coordinate_parser_inmediate_seq 
	}
	\seq_remove_duplicates:N\l_pgfgo_coordinate_parser_items_from_group_seq
}

\cs_generate_variant:Nn \pgfgo_coordinate_parser_from_group_to_items:n {V}





\seq_new:N \l_pgfgo_coordinate_parser_items_from_pgfgonce_seq
\bool_new:N \l_pgfgo_coordinate_parser_add_to_list

\cs_new:Nn\pgfgo_coordinate_parser_from_pgfgonce_to_items:n {
	\seq_clear:N \l_pgfgo_coordinate_parser_items_from_pgfgonce_seq
	\bool_set_true:N \l_pgfgo_coordinate_parser_add_to_list
	\seq_set_split:Nnn \l_tmpa_seq {;} {#1}
	\seq_map_variable:NNn \l_tmpa_seq\variable{
		\pgfgo_coordinate_parser_from_group_to_items:V\variable %Devuelve \l_pgfgo_coordinate_parser_items_from_group_seq
		\bool_if:NTF \l_pgfgo_coordinate_parser_add_to_list {
			\seq_concat:NNN
			\l_pgfgo_coordinate_parser_items_from_pgfgonce_seq
			\l_pgfgo_coordinate_parser_items_from_pgfgonce_seq
			\l_pgfgo_coordinate_parser_items_from_group_seq
			\bool_set_false:N \l_pgfgo_coordinate_parser_add_to_list
		}{
			\seq_map_variable:NNn\l_pgfgo_coordinate_parser_items_from_group_seq\elemento {
				\seq_remove_all:NV\l_pgfgo_coordinate_parser_items_from_pgfgonce_seq\elemento
			}
			\bool_set_true:N \l_pgfgo_coordinate_parser_add_to_list
		}
	}
	\seq_remove_duplicates:N \l_pgfgo_coordinate_parser_items_from_pgfgonce_seq
} %DEVUELVE \l_pgfgo_coordinate_parser_items_from_pgfgonce_seq




\ExplSyntaxOff