%% `file: pmhanguljamo.sty
%%
%% Poorman's Hangul Jamo Input Method.
%%
%% (C) 2020-2026 Kangsoo Kim
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%%   http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%%
%% This work has the LPPL maintenance status `maintained'.
%% 
%% The Current Maintainer of this work is Kangsoo Kim
%%
%% This work consists of the style files --- 
%%    pmhanguljamo.sty, pmhanguljamo-rrk.sty, pmhanguljamo-frkim.sty,
%%    pmhanguljamo-frkim.code.tex
%%
\RequirePackage{xparse}
\ProvidesExplPackage
	{pmhanguljamo}
	{2026/02/24}
	{v1.3}
	{Poorman's Hangul Jamo Input Method}

\RequirePackage{l3keys2e}

\bool_new:N \opt_usepmfont_bool
\bool_new:N \opt_rrkopt_bool
\bool_new:N \opt_frkim_bool

\tl_new:N \opt_pmfont_tl
\tl_new:N \opt_pmfontfeature_tl
\tl_new:N \opt_unknown_tl
\tl_clear:N \opt_unknown_tl

\keys_define:nn { pmhanguljamo }
{
	method	.code:n = {
		\str_case:nn { #1 } 
		{
			{ pm }	{ \bool_set_false:N \opt_rrkopt_bool
					  \bool_set_false:N \opt_frkim_bool }
			{ rrk } { \bool_set_true:N \opt_rrkopt_bool
					  \bool_set_false:N \opt_frkim_bool }
			{ frkim } { \bool_set_false:N \opt_rrkopt_bool
					  \bool_set_true:N \opt_frkim_bool }
		}
	},
	compat 	.tl_set:N = \opt_compat_tl,
	rrk	.bool_set:N = \opt_rrkopt_bool,
	RRK	.bool_set:N = \opt_rrkopt_bool,
	pmfont	.code:n = {
		\bool_gset_true:N \opt_usepmfont_bool
		\tl_gset:Nn \opt_pmfont_tl { #1 }
	},
	pmfontfeature	.tl_set:N = \opt_pmfontfeature_tl,
%%% version 0.6+, frkim.
	frkim	.bool_set:N = \opt_frkim_bool,
	zeroisx	.bool_set:N = \opt_zeroisx_bool,
	frcccmds .bool_set:N = \opt_frcccmds_bool,
	hangulfont .tl_set:N = \opt_pmfont_tl,
	hangulfontfeature	.tl_set:N = \opt_pmfontfeature_tl,
	unknown	.code:n = { \tl_put_right:Nn \opt_unknown_tl { #1, } }
}

\ProcessKeysOptions { pmhanguljamo }

%%%% fn for prints
\cs_new_protected:Npn \__prt_symbol_u:n #1
{
        \int_set:Nn \l_tmpa_int { \int_from_hex:n { #1 } }
        \exp_args:Nf \symbol { \int_use:N \l_tmpa_int }
}

%%%% presets

\bool_new:N \g_compat_bool 

\str_if_eq:eeTF { \opt_compat_tl } { 0.5 }
{
	\bool_gset_true:N \g_compat_bool 
}
{
	\bool_gset_false:N \g_compat_bool
}


\NewDocumentCommand \jmcc { m }
{
	\prop_item:Nn \c_compjamo_prop { #1 }
}

\bool_if:NTF \g_compat_bool 
{
	\prop_const_from_keyval:Nn \c_compjamo_prop
	{
		G	= \__prt_symbol_u:n { 3131 },
		GG	= \__prt_symbol_u:n { 3132 },
		GS	= \__prt_symbol_u:n { 3133 },
		N	= \__prt_symbol_u:n { 3134 },
		NJ	= \__prt_symbol_u:n { 3135 },
		NH	= \__prt_symbol_u:n { 3136 },
		D	= \__prt_symbol_u:n { 3137 },
		DD	= \__prt_symbol_u:n { 3138 },
		R	= \__prt_symbol_u:n { 3139 },
		RG	= \__prt_symbol_u:n { 313A },
		RM	= \__prt_symbol_u:n { 313B },
		RB	= \__prt_symbol_u:n { 313C },
		RS	= \__prt_symbol_u:n { 313D },
		RT	= \__prt_symbol_u:n { 313E },
		RP	= \__prt_symbol_u:n { 313F },
		RH	= \__prt_symbol_u:n { 3140 },
		M	= \__prt_symbol_u:n { 3141 },
		B	= \__prt_symbol_u:n { 3142 },
		BB	= \__prt_symbol_u:n { 3143 },
		BS	= \__prt_symbol_u:n { 3144 },
		S	= \__prt_symbol_u:n { 3145 },
		SS	= \__prt_symbol_u:n { 3146 },
		X	= \__prt_symbol_u:n { 3147 },
		J	= \__prt_symbol_u:n { 3148 },
		JJ	= \__prt_symbol_u:n { 3149 },
		C	= \__prt_symbol_u:n { 314A },
		K	= \__prt_symbol_u:n { 314B },
		T	= \__prt_symbol_u:n { 314C },
		P	= \__prt_symbol_u:n { 314D },
		H	= \__prt_symbol_u:n { 314E },
		A	= \__prt_symbol_u:n { 314F },
		AY	= \__prt_symbol_u:n { 3150 },
		AI	= \__prt_symbol_u:n { 3150 },
		YA	= \__prt_symbol_u:n { 3151 },
		YAY	= \__prt_symbol_u:n { 3152 },
		YAI	= \__prt_symbol_u:n { 3152 },
		E	= \__prt_symbol_u:n { 3153 },
		EY	= \__prt_symbol_u:n { 3154 },
		EI	= \__prt_symbol_u:n { 3154 },
		YE	= \__prt_symbol_u:n { 3155 },
		YEY	= \__prt_symbol_u:n { 3156 },
		YEI	= \__prt_symbol_u:n { 3156 },
		O	= \__prt_symbol_u:n { 3157 },
		OA	= \__prt_symbol_u:n { 3158 },
		OAY	= \__prt_symbol_u:n { 3159 },
		OAI	= \__prt_symbol_u:n { 3159 },
		OY	= \__prt_symbol_u:n { 315A },
		OI	= \__prt_symbol_u:n { 315A },
		YO	= \__prt_symbol_u:n { 315B },
		U	= \__prt_symbol_u:n { 315C },
		UE	= \__prt_symbol_u:n { 315E },
		UEY	= \__prt_symbol_u:n { 315E },
		UEI	= \__prt_symbol_u:n { 315E },
		UY	= \__prt_symbol_u:n { 315F },
		UI	= \__prt_symbol_u:n { 315F },
		YU	= \__prt_symbol_u:n { 3160 },
		V	= \__prt_symbol_u:n { 3161 },
		VI	= \__prt_symbol_u:n { 3162 },
		VY	= \__prt_symbol_u:n { 3162 },
		I	= \__prt_symbol_u:n { 3163 },
		NN	= \__prt_symbol_u:n { 3165 },
		ND	= \__prt_symbol_u:n { 3166 },
		NS	= \__prt_symbol_u:n { 3167 },
		NZ	= \__prt_symbol_u:n { 3168 },
		RGS	= \__prt_symbol_u:n { 3169 },
		RD	= \__prt_symbol_u:n { 316A },
		RBS	= \__prt_symbol_u:n { 316B },
		RZ	= \__prt_symbol_u:n { 316C },
		RF	= \__prt_symbol_u:n { 316D },
		MB	= \__prt_symbol_u:n { 316E },
		MS	= \__prt_symbol_u:n { 316F },
		MZ	= \__prt_symbol_u:n { 3170 },
		MX	= \__prt_symbol_u:n { 3171 },
		BG	= \__prt_symbol_u:n { 3172 },
		BD	= \__prt_symbol_u:n { 3173 },
		BSG	= \__prt_symbol_u:n { 3174 },
		BSD	= \__prt_symbol_u:n { 3175 },
		BJ	= \__prt_symbol_u:n { 3176 },
		BT	= \__prt_symbol_u:n { 3177 },
		BX	= \__prt_symbol_u:n { 3178 },
		BBX	= \__prt_symbol_u:n { 3179 },
		SG	= \__prt_symbol_u:n { 317A },
		SN	= \__prt_symbol_u:n { 317B },
		SD	= \__prt_symbol_u:n { 317C },
		SB	= \__prt_symbol_u:n { 317D },
		SJ	= \__prt_symbol_u:n { 317E },
		Z	= \__prt_symbol_u:n { 317F },
		XX	= \__prt_symbol_u:n { 3180 },
		Q	= \__prt_symbol_u:n { 3181 },
		QS	= \__prt_symbol_u:n { 3182 },
		QZ	= \__prt_symbol_u:n { 3183 },
		PX	= \__prt_symbol_u:n { 3184 },
		HH	= \__prt_symbol_u:n { 3185 },
		F	= \__prt_symbol_u:n { 3186 },
		YOYA	= \__prt_symbol_u:n { 3187 },
		YOYAY	= \__prt_symbol_u:n { 3188 },
		YOI	= \__prt_symbol_u:n { 3189 },
		YUYE	= \__prt_symbol_u:n { 318A },
		YUYEY	= \__prt_symbol_u:n { 318B },
		YUI	= \__prt_symbol_u:n { 318C },
		W	= \__prt_symbol_u:n { 318D },
		WI	= \__prt_symbol_u:n { 318E },
		@ 	= \__prt_symbol_u:n { 318D },
		@I	= \__prt_symbol_u:n { 318E },
		@@	= \double_arae_a,
		WW	= \double_arae_a
	}
}
{
	\prop_const_from_keyval:Nn \c_compjamo_prop
	{
		G	= \__prt_symbol_u:n { 3131 },
		GG	= \__prt_symbol_u:n { 3132 },
		GS	= \__prt_symbol_u:n { 3133 },
		N	= \__prt_symbol_u:n { 3134 },
		NJ	= \__prt_symbol_u:n { 3135 },
		NH	= \__prt_symbol_u:n { 3136 },
		D	= \__prt_symbol_u:n { 3137 },
		DD	= \__prt_symbol_u:n { 3138 },
		R	= \__prt_symbol_u:n { 3139 },
		RG	= \__prt_symbol_u:n { 313A },
		RM	= \__prt_symbol_u:n { 313B },
		RB	= \__prt_symbol_u:n { 313C },
		RS	= \__prt_symbol_u:n { 313D },
		RT	= \__prt_symbol_u:n { 313E },
		RP	= \__prt_symbol_u:n { 313F },
		RH	= \__prt_symbol_u:n { 3140 },
		M	= \__prt_symbol_u:n { 3141 },
		B	= \__prt_symbol_u:n { 3142 },
		BB	= \__prt_symbol_u:n { 3143 },
		BS	= \__prt_symbol_u:n { 3144 },
		S	= \__prt_symbol_u:n { 3145 },
		SS	= \__prt_symbol_u:n { 3146 },
		Q	= \__prt_symbol_u:n { 3147 },
		J	= \__prt_symbol_u:n { 3148 },
		JJ	= \__prt_symbol_u:n { 3149 },
		C	= \__prt_symbol_u:n { 314A },
		K	= \__prt_symbol_u:n { 314B },
		T	= \__prt_symbol_u:n { 314C },
		P	= \__prt_symbol_u:n { 314D },
		H	= \__prt_symbol_u:n { 314E },
		A	= \__prt_symbol_u:n { 314F },
		AY	= \__prt_symbol_u:n { 3150 },
		AI	= \__prt_symbol_u:n { 3150 },
		YA	= \__prt_symbol_u:n { 3151 },
		YAY	= \__prt_symbol_u:n { 3152 },
		YAI	= \__prt_symbol_u:n { 3152 },
		E	= \__prt_symbol_u:n { 3153 },
		EY	= \__prt_symbol_u:n { 3154 },
		EI	= \__prt_symbol_u:n { 3154 },
		YE	= \__prt_symbol_u:n { 3155 },
		YEY	= \__prt_symbol_u:n { 3156 },
		YEI	= \__prt_symbol_u:n { 3156 },
		O	= \__prt_symbol_u:n { 3157 },
		OA	= \__prt_symbol_u:n { 3158 },
		OAY	= \__prt_symbol_u:n { 3159 },
		OAI	= \__prt_symbol_u:n { 3159 },
		OY	= \__prt_symbol_u:n { 315A },
		OI	= \__prt_symbol_u:n { 315A },
		YO	= \__prt_symbol_u:n { 315B },
		U	= \__prt_symbol_u:n { 315C },
		UE	= \__prt_symbol_u:n { 315E },
		UEY	= \__prt_symbol_u:n { 315E },
		UEI	= \__prt_symbol_u:n { 315E },
		UY	= \__prt_symbol_u:n { 315F },
		UI	= \__prt_symbol_u:n { 315F },
		YU	= \__prt_symbol_u:n { 3160 },
		V	= \__prt_symbol_u:n { 3161 },
		VI	= \__prt_symbol_u:n { 3162 },
		VY	= \__prt_symbol_u:n { 3162 },
		I	= \__prt_symbol_u:n { 3163 },
		NN	= \__prt_symbol_u:n { 3165 },
		ND	= \__prt_symbol_u:n { 3166 },
		NS	= \__prt_symbol_u:n { 3167 },
		NZ	= \__prt_symbol_u:n { 3168 },
		RGS	= \__prt_symbol_u:n { 3169 },
		RD	= \__prt_symbol_u:n { 316A },
		RBS	= \__prt_symbol_u:n { 316B },
		RZ	= \__prt_symbol_u:n { 316C },
		RX	= \__prt_symbol_u:n { 316D },
		MB	= \__prt_symbol_u:n { 316E },
		MS	= \__prt_symbol_u:n { 316F },
		MZ	= \__prt_symbol_u:n { 3170 },
		MQ	= \__prt_symbol_u:n { 3171 },
		BG	= \__prt_symbol_u:n { 3172 },
		BD	= \__prt_symbol_u:n { 3173 },
		BSG	= \__prt_symbol_u:n { 3174 },
		BSD	= \__prt_symbol_u:n { 3175 },
		BJ	= \__prt_symbol_u:n { 3176 },
		BT	= \__prt_symbol_u:n { 3177 },
		BQ	= \__prt_symbol_u:n { 3178 },
		BBQ	= \__prt_symbol_u:n { 3179 },
		SG	= \__prt_symbol_u:n { 317A },
		SN	= \__prt_symbol_u:n { 317B },
		SD	= \__prt_symbol_u:n { 317C },
		SB	= \__prt_symbol_u:n { 317D },
		SJ	= \__prt_symbol_u:n { 317E },
		Z	= \__prt_symbol_u:n { 317F },
		QQ	= \__prt_symbol_u:n { 3180 },
		F	= \__prt_symbol_u:n { 3181 },
		FS	= \__prt_symbol_u:n { 3182 },
		FZ	= \__prt_symbol_u:n { 3183 },
		PQ	= \__prt_symbol_u:n { 3184 },
		HH	= \__prt_symbol_u:n { 3185 },
		X	= \__prt_symbol_u:n { 3186 },
		YOYA	= \__prt_symbol_u:n { 3187 },
		YOYAY	= \__prt_symbol_u:n { 3188 },
		YOI	= \__prt_symbol_u:n { 3189 },
		YUYE	= \__prt_symbol_u:n { 318A },
		YUYEY	= \__prt_symbol_u:n { 318B },
		YUI	= \__prt_symbol_u:n { 318C },
		W	= \__prt_symbol_u:n { 318D },
		AA  = \__prt_symbol_u:n { 318D },
		WI	= \__prt_symbol_u:n { 318E },
		AAI = \__prt_symbol_u:n { 318E },
		@ 	= \__prt_symbol_u:n { 318D },
		@I	= \__prt_symbol_u:n { 318E },
		@@	= \double_arae_a,
		WW	= \double_arae_a,
		AAA = \double_arae_a
	}	
}
\newcommand*\double_arae_a{%
	\hbox_set:Nn \l_tmpa_box { \__prt_symbol_u:n { 318D } }
	\dim_set:Nn \l_tmpa_dim { \box_wd:N \l_tmpa_box + 2pt }
	\makebox[\l_tmpa_dim][c]{ \__prt_symbol_u:n { 318D } \kern-.6em\__prt_symbol_u:n { 318D } }
}

%%%% usepmfont macro

\cs_if_exist:NTF \hangulfontspec
{
	\cs_set_eq:NN \pm_hangulfontspec \hangulfontspec
}
{
	\cs_set_eq:NN \pm_hangulfontspec \fontspec
}

\NewDocumentCommand \usepmfont { }
{
	\bool_gset_true:N \opt_usepmfont_bool
}

\NewDocumentCommand \unusepmfont { }
{
	\bool_gset_false:N \opt_usepmfont_bool
}

\NewDocumentCommand \setpmhangulfont { o m o }
{
	\tl_gset:Nn \opt_pmfont_tl { #2 }
	\IfValueTF { #3 } { \tl_gset:Nn \opt_pmfontfeature_tl { #3, Ligatures=TeX, Script=Hangul, Renderer=OpenType } }
	{
		\IfValueTF { #1 } { \tl_gset:Nn \opt_pmfontfeature_tl { #1, Ligatures=TeX, Script=Hangul, Renderer=OpenType } }
		{ \tl_gset:Nn \opt_pmfontfeature_tl { Ligatures=TeX, Script=Hangul, Renderer=OpenType } }
	}
}

\AtBeginDocument{
	\tl_if_empty:NTF \opt_pmfontfeature_tl
	{
		\tl_gset:Nn \opt_pmfontfeature_tl { Ligatures=TeX, Script=Hangul, Renderer=OpenType }
	}
	{
		\tl_gput_right:Nn \opt_pmfontfeature_tl { , Ligatures=TeX, Script=Hangul, Renderer=OpenType }
	}
}

%%% method=frkim
%%% loads frkim codes and exit
\bool_if:NT \opt_frkim_bool
{
	\bool_new:N \opt_luatexko_loaded
	\@ifpackageloaded{luatexko}{
		\bool_set_true:N \opt_luatexko_loaded
	}{
		\bool_set_false:N \opt_luatexko_loaded
	}

	\tl_set_eq:NN \frkhangulfont \opt_pmfont_tl
	\tl_if_empty:NT \frkhangulfont {
		\tl_set:Nn \frkhangulfont { NotoSerifKR-Regular.otf }
	}
	\tl_set_eq:NN \frkhangulfontfeature \opt_pmfontfeature_tl
	\tl_if_empty:NT \frkhangulfontfeature {
		\tl_set:Nn \frkhangulfontfeature { Ligatures=TeX,Renderer=OpenType,Script=Hangul } }
	
	\input{pmhanguljamo-frkim.code.tex}
	\endinput
}

%%%% if method=rrk, then input pmhanguljamo-rrk.sty
%%%% and stop.

\bool_if:NT \opt_rrkopt_bool
{
	\file_input:n { pmhanguljamo-rrk.sty }
	\endinput
}

%%%%
%%%% pm input method:
%%%%

\NewDocumentCommand \jamotextcmd { m }
{
	\tl_set:Nn \l_tmpa_tl { #1 / }
	\regex_replace_all:nnN { / } { |/ } \l_tmpa_tl
	\regex_replace_all:nnN { ; } { ;/ } \l_tmpa_tl
	\regex_replace_all:nnN { : } { :/ } \l_tmpa_tl
	
	\exp_args:Nno \regex_split:nnN { / } { \l_tmpa_tl } \l_tmpa_seq
	
	\seq_map_indexed_function:NN \l_tmpa_seq \build_syl:nn
}

\tl_new:N \l_cho_tl
\tl_new:N \l_jun_tl
\tl_new:N \l_jon_tl
\bool_new:N \l_jj_bool
\seq_new:N \l_inputword_seq
\seq_new:N \l_inputpar_seq

\NewDocumentEnvironment { jamotext } { +b }
{
	\seq_set_split:Nnn \l_inputpar_seq { \par } { #1 }
	\seq_map_indexed_function:NN \l_inputpar_seq \jamo_word:nn
%	\seq_set_split:Nnn \l_inputword_seq { ~ } { #1 }
%	\seq_map_indexed_inline:Nn \l_inputword_seq
%	{
%		\jamotextcmd { ##2 }
%		\int_compare:nT { ##1 < \seq_count:N \l_inputword_seq }
%		{ \space }
%	}
}{}

\tl_new:N \l_infile_tl 

\NewDocumentCommand \jamotextinput { m }
{
	\file_get:nnN { #1 } {} \l_infile_tl 
	\seq_set_split:NnV \l_inputpar_seq { \par } \l_infile_tl
	\seq_map_indexed_function:NN \l_inputpar_seq \jamo_word:nn
}

\cs_new:Npn \jamo_word:nn #1 #2
{
%	\jamoword { #2 }
	\seq_set_split:Nnn \l_inparpar_seq { ~ } { #2 }
	
	\seq_map_indexed_inline:Nn \l_inparpar_seq
	{
		\regex_match:nnTF { ^\!\{ } { ##2 }
		{
			\tl_set:Nn \l_tmpa_tl { ##2 }
			\regex_match:nnTF { ^\!\{(.+?)\}$ } { ##2 }
			{
				\regex_replace_once:nnN { ^\!\{(.+?)\}$ } { \1 } \l_tmpa_tl
				\l_tmpa_tl 
			}
			{
				\tl_set_eq:NN \l_tmpb_tl \l_tmpa_tl
				\regex_replace_once:nnN { ^\!\{(.+?)\}(.*)$ } { \1 } \l_tmpa_tl
				\l_tmpa_tl 
				\regex_replace_once:nnN { ^\!\{(.+?)\}(.*)$ } { \2 } \l_tmpb_tl
				\exp_args:No \jamoword { \l_tmpb_tl }
			}	
		}
		{
			\jamoword{ ##2 }
		}
		
		\int_compare:nT { ##1 < \seq_count:N \l_inparpar_seq }
		{ \c_space_token }
	}

	\int_compare:nT { #1 < \seq_count:N \l_inputpar_seq }
	{ \par }
}

\NewDocumentCommand \jamoword { m }
{
	\seq_set_split:Nnn \l_inputword_seq { ~ } { #1 }
	\seq_map_indexed_inline:Nn \l_inputword_seq
	{
		\bool_if:NTF \opt_usepmfont_bool
		{
			{
				\pm_hangulfontspec [\opt_pmfontfeature_tl] {\opt_pmfont_tl} 
				\jamotextcmd{ ##2 } 
			} 
		}
		{ \jamotextcmd { ##2 } }
		\int_compare:nT { ##1 < \seq_count:N \l_inputword_seq }
		{ \c_space_token }
	}
}

%%% if xetexko loaded,
\bool_new:N \g_xetexko_bool
\@ifpackageloaded{xetexko-space}{
	\bool_gset_true:N \g_xetexko_bool
}{
	\bool_gset_false:N \g_xetexko_bool
}

\cs_new:Npn \build_syl:nn #1 #2
{
	\bool_set_false:N \l_jj_bool
	\tl_clear:N \l_cho_tl
	\tl_clear:N \l_jun_tl
	\tl_clear:N \l_jon_tl
	\int_set:Nn \l_tmpa_int { #1 }
	\build_syl_fn:n #2 \q_recursion_tail \q_recursion_stop
}

\cs_new:Npn \build_syl_fn:n #1
{	
	\quark_if_recursion_tail_stop_do:nn { #1 }
	{
		\exp_args:Nnx \regex_match:nnTF { [A-Z] } { \l_cho_tl }
		{
			\tl_reverse:N \l_cho_tl
			\tl_set:Nx \l_tmpb_tl { \tl_tail:N \l_cho_tl }
			\tl_reverse:N \l_tmpb_tl %%% remove trailing |
			\exp_args:Nx \jmcc { \l_tmpb_tl }
		}
		{
			\tl_reverse:N \l_jon_tl
			\tl_set:Nx \l_tmpa_tl { \tl_head:N \l_jon_tl }
			\tl_set:Nx \l_tmpb_tl { \tl_tail:N \l_jon_tl }
			\tl_reverse:N \l_tmpb_tl
			
			%%% force allowbreak'ing hangul syllables when xetexko loaded
			%%% luatexko or polyglossia is of no problem.
			%%% --- suppressed version 0.6, xetexko is more smart.
%			\bool_if:NT \g_xetexko_bool {
%				\exp_args:Nnx \regex_match:nnT { [a-z] } { \l_cho_tl }
%				{ 
%					\int_compare:nF { \l_tmpa_int == 1 }
%					{ \allowbreak } 
%				}
%			}
			%%% print out the syllable composed
			\exp_args:NNx \prop_item:Nn \c_cho_prop { \l_cho_tl }
			\exp_args:NNx \prop_item:Nn \c_jung_prop { \l_jun_tl }
			\exp_args:NNx \prop_item:Nn \c_jong_prop { \l_tmpb_tl }
			\exp_args:NNx \prop_item:Nn \c_jong_prop { \l_tmpa_tl } %% tone mark
		}
	}
	
	\regex_match:nnTF { [a-z;:@|*] } { #1 }
	{
		\str_case:nnTF { #1 }
		{
			{ a } { \tl_put_right:Nn \l_jun_tl { #1 } }
			{ e } { \tl_put_right:Nn \l_jun_tl { #1 } }
			{ o } { \tl_put_right:Nn \l_jun_tl { #1 } }
			{ u } { \tl_put_right:Nn \l_jun_tl { #1 } }
			{ v } { \tl_put_right:Nn \l_jun_tl { #1 } }
			{ i } { \tl_put_right:Nn \l_jun_tl { #1 } }
			{ y } { \tl_put_right:Nn \l_jun_tl { #1 } }
			{ @ } { \tl_put_right:Nn \l_jun_tl { #1 } }
			{ * } { \tl_put_right:Nn \l_jun_tl { #1 } } %% jungseong filler
		}
		{
			\int_compare:nT { \tl_count:N \l_cho_tl == 0 }  
				{
					\bool_if:NTF \g_compat_bool 
					{ \tl_put_right:Nn \l_cho_tl { x } }
					{ \tl_put_right:Nn \l_cho_tl { q } }
				} 
			\bool_set_true:N \l_jj_bool
		}
		{
			\bool_if:NTF \l_jj_bool
			{
				\tl_put_right:Nn \l_jon_tl { #1 }
			}
			{
				\tl_put_right:Nn \l_cho_tl { #1 }
			}
		}
	}
	{
		\regex_match:nnTF { [A-Z] } { #1 }
		{
			\tl_put_right:Nn \l_cho_tl { #1 }
		}
		{
			#1
		}
	}
	
	\build_syl_fn:n
}

\NewDocumentCommand \ColonMark {} { : }
\NewDocumentCommand \SemiColonMark {} { ; }
\NewDocumentCommand \SlashMark {} { / }
\NewDocumentCommand \CntrdotMark {} { · }

%%%%%%%%% DICTIONARIES
\bool_if:NTF \g_compat_bool 
{
	\prop_const_from_keyval:Nn \c_cho_prop
	{
		g 	= \__prt_symbol_u:n { 1100 },
		gg 	= \__prt_symbol_u:n { 1101 },
		n	= \__prt_symbol_u:n { 1102 },
		d	= \__prt_symbol_u:n { 1103 },
		dd	= \__prt_symbol_u:n { 1104 },
		r	= \__prt_symbol_u:n { 1105 },
		m	= \__prt_symbol_u:n { 1106 },
		b	= \__prt_symbol_u:n { 1107 },
		bb	= \__prt_symbol_u:n { 1108 },
		s	= \__prt_symbol_u:n { 1109 },
		ss	= \__prt_symbol_u:n { 110A },
		x	= \__prt_symbol_u:n { 110B },
		j	= \__prt_symbol_u:n { 110C },
		jj	= \__prt_symbol_u:n { 110D },
		c	= \__prt_symbol_u:n { 110E },
		k	= \__prt_symbol_u:n { 110F },
		t	= \__prt_symbol_u:n { 1110 },
		p	= \__prt_symbol_u:n { 1111 },
		h	= \__prt_symbol_u:n { 1112 },
		ng	= \__prt_symbol_u:n { 1113 },
		nn	= \__prt_symbol_u:n { 1114 },
		nd 	= \__prt_symbol_u:n { 1115 },
		nb	= \__prt_symbol_u:n { 1116 },
		dg	= \__prt_symbol_u:n { 1117 },
		rn	= \__prt_symbol_u:n { 1118 },
		rr	= \__prt_symbol_u:n { 1119 },
		rh	= \__prt_symbol_u:n { 111A },
		rx	= \__prt_symbol_u:n { 111B },
		mb	= \__prt_symbol_u:n { 111C },
		mx	= \__prt_symbol_u:n { 111D },
		bg	= \__prt_symbol_u:n { 111E },
		bn	= \__prt_symbol_u:n { 111F },
		bd	= \__prt_symbol_u:n { 1120 },
		bs	= \__prt_symbol_u:n { 1121 },
		bsg	= \__prt_symbol_u:n { 1122 },
		bsd	= \__prt_symbol_u:n { 1123 },
		bsb	= \__prt_symbol_u:n { 1124 },
		bss	= \__prt_symbol_u:n { 1125 },
		bsj	= \__prt_symbol_u:n { 1126 },
		bj	= \__prt_symbol_u:n { 1127 },
		bc	= \__prt_symbol_u:n { 1128 },
		bt	= \__prt_symbol_u:n { 1129 },
		bp	= \__prt_symbol_u:n { 112A },
		bx	= \__prt_symbol_u:n { 112B },
		bbx	= \__prt_symbol_u:n { 112C },
		sg	= \__prt_symbol_u:n { 112D },
		sn	= \__prt_symbol_u:n { 112E },
		sd	= \__prt_symbol_u:n { 112F },
		sr	= \__prt_symbol_u:n { 1130 },
		sm	= \__prt_symbol_u:n { 1131 },
		sb	= \__prt_symbol_u:n { 1132 },
		sbg	= \__prt_symbol_u:n { 1133 },
		sss	= \__prt_symbol_u:n { 1134 },
		sq	= \__prt_symbol_u:n { 1135 },
		sj	= \__prt_symbol_u:n { 1136 },
		sc	= \__prt_symbol_u:n { 1137 },
		sk	= \__prt_symbol_u:n { 1138 },
		st	= \__prt_symbol_u:n { 1139 },
		sp	= \__prt_symbol_u:n { 113A },
		sh	= \__prt_symbol_u:n { 113B },
		sl	= \__prt_symbol_u:n { 113C },
		ssl	= \__prt_symbol_u:n { 113D },
		slr	= \__prt_symbol_u:n { 113E },
		sslr	= \__prt_symbol_u:n { 113F },
		z	= \__prt_symbol_u:n { 1140 },
		xg	= \__prt_symbol_u:n { 1141 },
		qg  = \__prt_symbol_u:n { 1141 },   %% for compatibility
		xd	= \__prt_symbol_u:n { 1142 },
		xm	= \__prt_symbol_u:n { 1143 },
		xb	= \__prt_symbol_u:n { 1144 },
		xs	= \__prt_symbol_u:n { 1145 },
		xz	= \__prt_symbol_u:n { 1146 },
		xx	= \__prt_symbol_u:n { 1147 },
		xj	= \__prt_symbol_u:n { 1148 },
		xc	= \__prt_symbol_u:n { 1149 },
		xt 	= \__prt_symbol_u:n { 114A },
		xp	= \__prt_symbol_u:n { 114B },
		q	= \__prt_symbol_u:n { 114C },
		jx	= \__prt_symbol_u:n { 114D },
		jl	= \__prt_symbol_u:n { 114E },
		jjl	= \__prt_symbol_u:n { 114F },
		jlr	= \__prt_symbol_u:n { 1150 },
		jjlr	= \__prt_symbol_u:n { 1151 },
		ck	= \__prt_symbol_u:n { 1152 },
		ch	= \__prt_symbol_u:n { 1153 },
		cl	= \__prt_symbol_u:n { 1154 },
		clr	= \__prt_symbol_u:n { 1155 },
		pb	= \__prt_symbol_u:n { 1156 },
		px	= \__prt_symbol_u:n { 1157 },
		hh	= \__prt_symbol_u:n { 1158 },
		f	= \__prt_symbol_u:n { 1159 },
	%%% added version 0.4
		gd	= \__prt_symbol_u:n { 115A },
		ns	= \__prt_symbol_u:n { 115B },
		nj	= \__prt_symbol_u:n { 115C },
		nh	= \__prt_symbol_u:n { 115D },
		dr	= \__prt_symbol_u:n { 115E },
	%%% Extended-A
		dm	= \__prt_symbol_u:n { A960 },
		db	= \__prt_symbol_u:n { A961 },
		ds	= \__prt_symbol_u:n { A962 },
		dj	= \__prt_symbol_u:n { A963 },
		rg	= \__prt_symbol_u:n { A964 },
		rgg	= \__prt_symbol_u:n { A965 },
		rd	= \__prt_symbol_u:n { A966 },
		rdd	= \__prt_symbol_u:n { A967 },
		rm	= \__prt_symbol_u:n { A968 },
		rb	= \__prt_symbol_u:n { A969 },
		rbb	= \__prt_symbol_u:n { A96A },
		rbx	= \__prt_symbol_u:n { A96B },
		rs	= \__prt_symbol_u:n { A96C },
		rj	= \__prt_symbol_u:n { A96D },
		rk	= \__prt_symbol_u:n { A96E },
		mg	= \__prt_symbol_u:n { A96F },
		md	= \__prt_symbol_u:n { A970 },
		ms	= \__prt_symbol_u:n { A971 },
		bst	= \__prt_symbol_u:n { A972 },
		bk	= \__prt_symbol_u:n { A973 },
		bh	= \__prt_symbol_u:n { A974 },
		ssb	= \__prt_symbol_u:n { A975 },
		xr	= \__prt_symbol_u:n { A976 },
		xh	= \__prt_symbol_u:n { A977 },
		jjh	= \__prt_symbol_u:n { A978 },
		tt	= \__prt_symbol_u:n { A979 },
		ph	= \__prt_symbol_u:n { A97A },
		hs	= \__prt_symbol_u:n { A97B },
		ff	= \__prt_symbol_u:n { A97C },
	%%% Choseong Filler
		w	= \__prt_symbol_u:n { 115F }
	}
}
{
	\prop_const_from_keyval:Nn \c_cho_prop
	{
		g 	= \__prt_symbol_u:n { 1100 },
		gg 	= \__prt_symbol_u:n { 1101 },
		n	= \__prt_symbol_u:n { 1102 },
		d	= \__prt_symbol_u:n { 1103 },
		dd	= \__prt_symbol_u:n { 1104 },
		r	= \__prt_symbol_u:n { 1105 },
		m	= \__prt_symbol_u:n { 1106 },
		b	= \__prt_symbol_u:n { 1107 },
		bb	= \__prt_symbol_u:n { 1108 },
		s	= \__prt_symbol_u:n { 1109 },
		ss	= \__prt_symbol_u:n { 110A },
		q	= \__prt_symbol_u:n { 110B },
		j	= \__prt_symbol_u:n { 110C },
		jj	= \__prt_symbol_u:n { 110D },
		c	= \__prt_symbol_u:n { 110E },
		k	= \__prt_symbol_u:n { 110F },
		t	= \__prt_symbol_u:n { 1110 },
		p	= \__prt_symbol_u:n { 1111 },
		h	= \__prt_symbol_u:n { 1112 },
		ng	= \__prt_symbol_u:n { 1113 },
		nn	= \__prt_symbol_u:n { 1114 },
		nd 	= \__prt_symbol_u:n { 1115 },
		nb	= \__prt_symbol_u:n { 1116 },
		dg	= \__prt_symbol_u:n { 1117 },
		rn	= \__prt_symbol_u:n { 1118 },
		rr	= \__prt_symbol_u:n { 1119 },
		rh	= \__prt_symbol_u:n { 111A },
		rq	= \__prt_symbol_u:n { 111B },
		mb	= \__prt_symbol_u:n { 111C },
		mq 	= \__prt_symbol_u:n { 111D },
		bg	= \__prt_symbol_u:n { 111E },
		bn	= \__prt_symbol_u:n { 111F },
		bd	= \__prt_symbol_u:n { 1120 },
		bs	= \__prt_symbol_u:n { 1121 },
		bsg	= \__prt_symbol_u:n { 1122 },
		bsd	= \__prt_symbol_u:n { 1123 },
		bsb	= \__prt_symbol_u:n { 1124 },
		bss	= \__prt_symbol_u:n { 1125 },
		bsj	= \__prt_symbol_u:n { 1126 },
		bj	= \__prt_symbol_u:n { 1127 },
		bc	= \__prt_symbol_u:n { 1128 },
		bt	= \__prt_symbol_u:n { 1129 },
		bp	= \__prt_symbol_u:n { 112A },
		bq	= \__prt_symbol_u:n { 112B },
		bbq	= \__prt_symbol_u:n { 112C },
		sg	= \__prt_symbol_u:n { 112D },
		sn	= \__prt_symbol_u:n { 112E },
		sd	= \__prt_symbol_u:n { 112F },
		sr	= \__prt_symbol_u:n { 1130 },
		sm	= \__prt_symbol_u:n { 1131 },
		sb	= \__prt_symbol_u:n { 1132 },
		sbg	= \__prt_symbol_u:n { 1133 },
		sss	= \__prt_symbol_u:n { 1134 },
		sf	= \__prt_symbol_u:n { 1135 },
		sj	= \__prt_symbol_u:n { 1136 },
		sc	= \__prt_symbol_u:n { 1137 },
		sk	= \__prt_symbol_u:n { 1138 },
		st	= \__prt_symbol_u:n { 1139 },
		sp	= \__prt_symbol_u:n { 113A },
		sh	= \__prt_symbol_u:n { 113B },
		sl	= \__prt_symbol_u:n { 113C },
		ssl	= \__prt_symbol_u:n { 113D },
		slr	= \__prt_symbol_u:n { 113E },
		sslr	= \__prt_symbol_u:n { 113F },
		z	= \__prt_symbol_u:n { 1140 },
		qg	= \__prt_symbol_u:n { 1141 },
		fg  = \__prt_symbol_u:n { 1141 },   %% for compatibility
		qd	= \__prt_symbol_u:n { 1142 },
		qm	= \__prt_symbol_u:n { 1143 },
		qb	= \__prt_symbol_u:n { 1144 },
		qs	= \__prt_symbol_u:n { 1145 },
		qz	= \__prt_symbol_u:n { 1146 },
		qq	= \__prt_symbol_u:n { 1147 },
		qj	= \__prt_symbol_u:n { 1148 },
		qc	= \__prt_symbol_u:n { 1149 },
		qt 	= \__prt_symbol_u:n { 114A },
		qp	= \__prt_symbol_u:n { 114B },
		f	= \__prt_symbol_u:n { 114C },
		jq	= \__prt_symbol_u:n { 114D },
		jl	= \__prt_symbol_u:n { 114E },
		jjl	= \__prt_symbol_u:n { 114F },
		jlr	= \__prt_symbol_u:n { 1150 },
		jjlr	= \__prt_symbol_u:n { 1151 },
		ck	= \__prt_symbol_u:n { 1152 },
		ch	= \__prt_symbol_u:n { 1153 },
		cl	= \__prt_symbol_u:n { 1154 },
		clr	= \__prt_symbol_u:n { 1155 },
		pb	= \__prt_symbol_u:n { 1156 },
		pq	= \__prt_symbol_u:n { 1157 },
		hh	= \__prt_symbol_u:n { 1158 },
		x	= \__prt_symbol_u:n { 1159 },
	%%% added version 0.4
		gd	= \__prt_symbol_u:n { 115A },
		ns	= \__prt_symbol_u:n { 115B },
		nj	= \__prt_symbol_u:n { 115C },
		nh	= \__prt_symbol_u:n { 115D },
		dr	= \__prt_symbol_u:n { 115E },
	%%% Extended-A
		dm	= \__prt_symbol_u:n { A960 },
		db	= \__prt_symbol_u:n { A961 },
		ds	= \__prt_symbol_u:n { A962 },
		dj	= \__prt_symbol_u:n { A963 },
		rg	= \__prt_symbol_u:n { A964 },
		rgg	= \__prt_symbol_u:n { A965 },
		rd	= \__prt_symbol_u:n { A966 },
		rdd	= \__prt_symbol_u:n { A967 },
		rm	= \__prt_symbol_u:n { A968 },
		rb	= \__prt_symbol_u:n { A969 },
		rbb	= \__prt_symbol_u:n { A96A },
		rbq	= \__prt_symbol_u:n { A96B },
		rs	= \__prt_symbol_u:n { A96C },
		rj	= \__prt_symbol_u:n { A96D },
		rk	= \__prt_symbol_u:n { A96E },
		mg	= \__prt_symbol_u:n { A96F },
		md	= \__prt_symbol_u:n { A970 },
		ms	= \__prt_symbol_u:n { A971 },
		bst	= \__prt_symbol_u:n { A972 },
		bk	= \__prt_symbol_u:n { A973 },
		bh	= \__prt_symbol_u:n { A974 },
		ssb	= \__prt_symbol_u:n { A975 },
		qr	= \__prt_symbol_u:n { A976 },
		qh	= \__prt_symbol_u:n { A977 },
		jjh	= \__prt_symbol_u:n { A978 },
		tt	= \__prt_symbol_u:n { A979 },
		ph	= \__prt_symbol_u:n { A97A },
		hs	= \__prt_symbol_u:n { A97B },
		xx	= \__prt_symbol_u:n { A97C },
	%%% Choseong Filler
		w	= \__prt_symbol_u:n { 115F }
	}
}

\prop_const_from_keyval:Nn \c_jung_prop
{
	a	= \__prt_symbol_u:n { 1161 },
	ay	= \__prt_symbol_u:n { 1162 },
	ai	= \__prt_symbol_u:n { 1162 },
	ya	= \__prt_symbol_u:n { 1163 },
	yay	= \__prt_symbol_u:n { 1164 },
	yai	= \__prt_symbol_u:n { 1164 },
	e	= \__prt_symbol_u:n { 1165 },
	ey	= \__prt_symbol_u:n { 1166 },
	ei	= \__prt_symbol_u:n { 1166 },
	ye	= \__prt_symbol_u:n { 1167 },
	yey	= \__prt_symbol_u:n { 1168 },
	yei	= \__prt_symbol_u:n { 1168 },
	o	= \__prt_symbol_u:n { 1169 },
	oa	= \__prt_symbol_u:n { 116A },
	oay	= \__prt_symbol_u:n { 116B },
	oai	= \__prt_symbol_u:n { 116B },
	oy	= \__prt_symbol_u:n { 116C },
	oi	= \__prt_symbol_u:n { 116C },
	yo	= \__prt_symbol_u:n { 116D },
	u	= \__prt_symbol_u:n { 116E },
	ue	= \__prt_symbol_u:n { 116F },
	uey	= \__prt_symbol_u:n { 1170 },
	uei	= \__prt_symbol_u:n { 1170 },
	uy	= \__prt_symbol_u:n { 1171 },
	ui	= \__prt_symbol_u:n { 1171 },
	yu	= \__prt_symbol_u:n { 1172 },
	v	= \__prt_symbol_u:n { 1173 },
	vy	= \__prt_symbol_u:n { 1174 },
	vi	= \__prt_symbol_u:n { 1174 },
	i	= \__prt_symbol_u:n { 1175 },
	ao	= \__prt_symbol_u:n { 1176 },
	au	= \__prt_symbol_u:n { 1177 },
	yao	= \__prt_symbol_u:n { 1178 },
	yayo	= \__prt_symbol_u:n { 1179 },
	eo	= \__prt_symbol_u:n { 117A },
	eu	= \__prt_symbol_u:n { 117B },
	ev	= \__prt_symbol_u:n { 117C },
	yeo	= \__prt_symbol_u:n { 117D },
	yeu	= \__prt_symbol_u:n { 117E },
	oe	= \__prt_symbol_u:n { 117F },
	oey	= \__prt_symbol_u:n { 1180 },
	oei	= \__prt_symbol_u:n { 1180 },
	oyey	= \__prt_symbol_u:n { 1181 },
	oyei	= \__prt_symbol_u:n { 1181 },
	oo	= \__prt_symbol_u:n { 1182 },
	ou	= \__prt_symbol_u:n { 1183 },
	yoya	= \__prt_symbol_u:n { 1184 },
	yoyay	= \__prt_symbol_u:n { 1185 },
	yoyai	= \__prt_symbol_u:n { 1185 },
	yoye	= \__prt_symbol_u:n { 1186 },
	yoo	= \__prt_symbol_u:n { 1187 },
	yoi	= \__prt_symbol_u:n { 1188 },
	yoy = \__prt_symbol_u:n { 1188 },
	ua	= \__prt_symbol_u:n { 1189 },
	uay	= \__prt_symbol_u:n { 118A },
	uai	= \__prt_symbol_u:n { 118A },
	uev	= \__prt_symbol_u:n { 118B },
	uyey	= \__prt_symbol_u:n { 118C },
	uyei	= \__prt_symbol_u:n { 118C },
	uu	= \__prt_symbol_u:n { 118D },
	yua	= \__prt_symbol_u:n { 118E },
	yue	= \__prt_symbol_u:n { 118F },
	yuey	= \__prt_symbol_u:n { 1190 },
	yuei	= \__prt_symbol_u:n { 1190 },
	yuye	= \__prt_symbol_u:n { 1191 },
	yuyey	= \__prt_symbol_u:n { 1192 },
	yuyei	= \__prt_symbol_u:n { 1192 },
	yuu	= \__prt_symbol_u:n { 1193 },
	yui	= \__prt_symbol_u:n { 1194 },
	vu	= \__prt_symbol_u:n { 1195 },
	vv	= \__prt_symbol_u:n { 1196 },
	viu	= \__prt_symbol_u:n { 1197 },
	ia	= \__prt_symbol_u:n { 1198 },
	iya	= \__prt_symbol_u:n { 1199 },
	io	= \__prt_symbol_u:n { 119A },
	iu	= \__prt_symbol_u:n { 119B },
	iv	= \__prt_symbol_u:n { 119C },
	i@	= \__prt_symbol_u:n { 119D },
	@	= \__prt_symbol_u:n { 119E },
	@e	= \__prt_symbol_u:n { 119F },
	@u	= \__prt_symbol_u:n { 11A0 },
	@i	= \__prt_symbol_u:n { 11A1 },
	@@	= \__prt_symbol_u:n { 11A2 },
%% added 0.4
	av	= \__prt_symbol_u:n { 11A3 },
	yau	= \__prt_symbol_u:n { 11A4 },
	yeya = \__prt_symbol_u:n { 11A5 },
	oya	= \__prt_symbol_u:n { 11A6 },
	oyai = \__prt_symbol_u:n { 11A7 },
	oyay = \__prt_symbol_u:n { 11A7 },
%% extended-b
	oye	= \__prt_symbol_u:n { D7B0 },
	ooi	= \__prt_symbol_u:n { D7B1 },
	yoa	= \__prt_symbol_u:n { D7B2 },
	yoay	= \__prt_symbol_u:n { D7B3 },
	yoai	= \__prt_symbol_u:n { D7B3 },
	yoe	= \__prt_symbol_u:n { D7B4 },
	uye	= \__prt_symbol_u:n { D7B5 },
	uii	= \__prt_symbol_u:n { D7B6 },
	yuay	= \__prt_symbol_u:n { D7B7 },
	yuai	= \__prt_symbol_u:n { D7B7 },
	yuo	= \__prt_symbol_u:n { D7B8 },
	va	= \__prt_symbol_u:n { D7B9 },
	ve	= \__prt_symbol_u:n { D7BA },
	vey	= \__prt_symbol_u:n { D7BB },
	vei	= \__prt_symbol_u:n { D7BB },
	vo	= \__prt_symbol_u:n { D7BC },
	iyao	= \__prt_symbol_u:n { D7BD },
	iyay	= \__prt_symbol_u:n { D7BE },
	iyai	= \__prt_symbol_u:n { D7BE },
	iye	= \__prt_symbol_u:n { D7BF },
	iyey	= \__prt_symbol_u:n { D7C0 },
	iyei	= \__prt_symbol_u:n { D7C0 },
	ioi	= \__prt_symbol_u:n { D7C1 },
	iyo	= \__prt_symbol_u:n { D7C2 },
	iyu	= \__prt_symbol_u:n { D7C3 },
	ii	= \__prt_symbol_u:n { D7C4 },
	@a	= \__prt_symbol_u:n { D7C5 },
	@ey	= \__prt_symbol_u:n { D7C6 },
	@ei	= \__prt_symbol_u:n { D7C6 },
%%% for avoiding errors,
%	ai	= \__prt_symbol_u:n { 1162 },
%	yai	= \__prt_symbol_u:n { 1164 },
%	ei 	= \__prt_symbol_u:n { 1166 },
%	yei	= \__prt_symbol_u:n { 1168 },
%	oi	= \__prt_symbol_u:n { 116C },
%	ui	= \__prt_symbol_u:n { 1171 },
%	oai	= \__prt_symbol_u:n { 116B },
%	uei	= \__prt_symbol_u:n { 1170 },
%	vy	= \__prt_symbol_u:n { 1174 },
%% Jungseong filler
	*	= \__prt_symbol_u:n { 1160 }
}

\bool_if:NTF \g_compat_bool 
{
	\prop_const_from_keyval:Nn \c_jong_prop
	{
		g	= \__prt_symbol_u:n { 11A8 },
		gg	= \__prt_symbol_u:n { 11A9 },
		gs	= \__prt_symbol_u:n { 11AA },
		n	= \__prt_symbol_u:n { 11AB },
		nj	= \__prt_symbol_u:n { 11AC },
		nh	= \__prt_symbol_u:n { 11AD },
		d	= \__prt_symbol_u:n { 11AE },
		r	= \__prt_symbol_u:n { 11AF },
		rg	= \__prt_symbol_u:n { 11B0 },
		rm	= \__prt_symbol_u:n { 11B1 },
		rb	= \__prt_symbol_u:n { 11B2 },
		rs	= \__prt_symbol_u:n { 11B3 },
		rt	= \__prt_symbol_u:n { 11B4 },
		rp	= \__prt_symbol_u:n { 11B5 },
		rh	= \__prt_symbol_u:n { 11B6 },
		m	= \__prt_symbol_u:n { 11B7 },
		b	= \__prt_symbol_u:n { 11B8 },
		bs	= \__prt_symbol_u:n { 11B9 },
		s	= \__prt_symbol_u:n { 11BA },
		ss	= \__prt_symbol_u:n { 11BB },
		x	= \__prt_symbol_u:n { 11BC },
		j	= \__prt_symbol_u:n { 11BD },
		c	= \__prt_symbol_u:n { 11BE },
		k	= \__prt_symbol_u:n { 11BF },
		t	= \__prt_symbol_u:n { 11C0 },
		p	= \__prt_symbol_u:n { 11C1 },
		h	= \__prt_symbol_u:n { 11C2 },
		gr	= \__prt_symbol_u:n { 11C3 },
		gsg	= \__prt_symbol_u:n { 11C4 },
		ng	= \__prt_symbol_u:n { 11C5 },
		nd	= \__prt_symbol_u:n { 11C6 },
		ns	= \__prt_symbol_u:n { 11C7 },
		nz	= \__prt_symbol_u:n { 11C8 },
		nt	= \__prt_symbol_u:n { 11C9 },
		dg	= \__prt_symbol_u:n { 11CA },
		dr	= \__prt_symbol_u:n { 11CB },
		rgs	= \__prt_symbol_u:n { 11CC },
		rn	= \__prt_symbol_u:n { 11CD },
		rd	= \__prt_symbol_u:n { 11CE },
		rdh	= \__prt_symbol_u:n { 11CF },
		rr	= \__prt_symbol_u:n { 11D0 },
		rmg	= \__prt_symbol_u:n { 11D1 },
		rms	= \__prt_symbol_u:n { 11D2 },
		rbs	= \__prt_symbol_u:n { 11D3 },
		rbh	= \__prt_symbol_u:n { 11D4 },
		rbx	= \__prt_symbol_u:n { 11D5 },
		rss	= \__prt_symbol_u:n { 11D6 },
		rz	= \__prt_symbol_u:n { 11D7 },
		rk	= \__prt_symbol_u:n { 11D8 },
		rf	= \__prt_symbol_u:n { 11D9 },
		mg	= \__prt_symbol_u:n { 11DA },
		mr	= \__prt_symbol_u:n { 11DB },
		mb	= \__prt_symbol_u:n { 11DC },
		ms	= \__prt_symbol_u:n { 11DD },
		mss	= \__prt_symbol_u:n { 11DE },
		mz	= \__prt_symbol_u:n { 11DF },
		mc	= \__prt_symbol_u:n { 11E0 },
		mh	= \__prt_symbol_u:n { 11E1 },
		mx	= \__prt_symbol_u:n { 11E2 },
		br	= \__prt_symbol_u:n { 11E3 },
		bp	= \__prt_symbol_u:n { 11E4 },
		bh	= \__prt_symbol_u:n { 11E5 },
		bx	= \__prt_symbol_u:n { 11E6 },
		sg	= \__prt_symbol_u:n { 11E7 },
		sd	= \__prt_symbol_u:n { 11E8 },
		sr	= \__prt_symbol_u:n { 11E9 },
		sb	= \__prt_symbol_u:n { 11EA },
		z	= \__prt_symbol_u:n { 11EB },
		qg	= \__prt_symbol_u:n { 11EC },
		qgg	= \__prt_symbol_u:n { 11ED },
		qq	= \__prt_symbol_u:n { 11EE },
		qk	= \__prt_symbol_u:n { 11EF },
		q	= \__prt_symbol_u:n { 11F0 },
		qs	= \__prt_symbol_u:n { 11F1 },
		qz	= \__prt_symbol_u:n { 11F2 },
		pb	= \__prt_symbol_u:n { 11F3 },
		px	= \__prt_symbol_u:n { 11F4 },
		hn	= \__prt_symbol_u:n { 11F5 },
		hr	= \__prt_symbol_u:n { 11F6 },
		hm	= \__prt_symbol_u:n { 11F7 },
		hb	= \__prt_symbol_u:n { 11F8 },
		f	= \__prt_symbol_u:n { 11F9 },
	%% added 0.4
		gn	= \__prt_symbol_u:n { 11FA },
		gb 	= \__prt_symbol_u:n { 11FB },
		gc	= \__prt_symbol_u:n { 11FC },
		gk	= \__prt_symbol_u:n { 11FD },
		gh	= \__prt_symbol_u:n { 11FE },
		nn	= \__prt_symbol_u:n { 11FF },
	%% extended-b
	%% added 0.4
		nr	= \__prt_symbol_u:n { D7CB },
		nc	= \__prt_symbol_u:n { D7CC },
		dd	= \__prt_symbol_u:n { D7CD },
		ddb	= \__prt_symbol_u:n { D7CE },
		db	= \__prt_symbol_u:n { D7CF },
	%%%
		ds	= \__prt_symbol_u:n { D7D0 },
		dsg	= \__prt_symbol_u:n { D7D1 },
		dj	= \__prt_symbol_u:n { D7D2 },
		dc	= \__prt_symbol_u:n { D7D3 },
		dt	= \__prt_symbol_u:n { D7D4 },
		rgg	= \__prt_symbol_u:n { D7D5 },
		rgh	= \__prt_symbol_u:n { D7D6 },
		rrz	= \__prt_symbol_u:n { D7D7 },
		rmh	= \__prt_symbol_u:n { D7D8 },
		rbd	= \__prt_symbol_u:n { D7D9 },
		rbp	= \__prt_symbol_u:n { D7DA },
		rq	= \__prt_symbol_u:n { D7DB },
		rqh	= \__prt_symbol_u:n { D7DC },
		rx	= \__prt_symbol_u:n { D7DD },
		mn	= \__prt_symbol_u:n { D7DE },
		mnn	= \__prt_symbol_u:n { D7DF },
		mm	= \__prt_symbol_u:n { D7E0 },
		mbs	= \__prt_symbol_u:n { D7E1 },
		mj	= \__prt_symbol_u:n { D7E2 },
		bd	= \__prt_symbol_u:n { D7E3 },
		brp	= \__prt_symbol_u:n { D7E4 },
		bm	= \__prt_symbol_u:n { D7E5 },
		bb	= \__prt_symbol_u:n { D7E6 },
		bsd	= \__prt_symbol_u:n { D7E7 },
		bj	= \__prt_symbol_u:n { D7E8 },
		bc	= \__prt_symbol_u:n { D7E9 },
		sm	= \__prt_symbol_u:n { D7EA },
		sbx	= \__prt_symbol_u:n { D7EB },
		ssg	= \__prt_symbol_u:n { D7EC },
		ssd	= \__prt_symbol_u:n { D7ED },
		sz	= \__prt_symbol_u:n { D7EE },
		sj	= \__prt_symbol_u:n { D7EF },
		sc	= \__prt_symbol_u:n { D7F0 },
		st	= \__prt_symbol_u:n { D7F1 },
		sh	= \__prt_symbol_u:n { D7F2 },
		zb	= \__prt_symbol_u:n { D7F3 },
		zbx	= \__prt_symbol_u:n { D7F4 },
		qm	= \__prt_symbol_u:n { D7F5 },
		qh	= \__prt_symbol_u:n { D7F6 },
		jb	= \__prt_symbol_u:n { D7F7 },
		jbb	= \__prt_symbol_u:n { D7F8 },
		jj	= \__prt_symbol_u:n { D7F9 },
		ps	= \__prt_symbol_u:n { D7FA },
		pt	= \__prt_symbol_u:n { D7FB },
	%% tone markers
		;	= \__prt_symbol_u:n { 302E },
		:	= \__prt_symbol_u:n { 302F },
		|	= {}
	}
}
{
	\prop_const_from_keyval:Nn \c_jong_prop
	{
		g	= \__prt_symbol_u:n { 11A8 },
		gg	= \__prt_symbol_u:n { 11A9 },
		gs	= \__prt_symbol_u:n { 11AA },
		n	= \__prt_symbol_u:n { 11AB },
		nj	= \__prt_symbol_u:n { 11AC },
		nh	= \__prt_symbol_u:n { 11AD },
		d	= \__prt_symbol_u:n { 11AE },
		r	= \__prt_symbol_u:n { 11AF },
		rg	= \__prt_symbol_u:n { 11B0 },
		rm	= \__prt_symbol_u:n { 11B1 },
		rb	= \__prt_symbol_u:n { 11B2 },
		rs	= \__prt_symbol_u:n { 11B3 },
		rt	= \__prt_symbol_u:n { 11B4 },
		rp	= \__prt_symbol_u:n { 11B5 },
		rh	= \__prt_symbol_u:n { 11B6 },
		m	= \__prt_symbol_u:n { 11B7 },
		b	= \__prt_symbol_u:n { 11B8 },
		bs	= \__prt_symbol_u:n { 11B9 },
		s	= \__prt_symbol_u:n { 11BA },
		ss	= \__prt_symbol_u:n { 11BB },
		q	= \__prt_symbol_u:n { 11BC },
		j	= \__prt_symbol_u:n { 11BD },
		c	= \__prt_symbol_u:n { 11BE },
		k	= \__prt_symbol_u:n { 11BF },
		t	= \__prt_symbol_u:n { 11C0 },
		p	= \__prt_symbol_u:n { 11C1 },
		h	= \__prt_symbol_u:n { 11C2 },
		gr	= \__prt_symbol_u:n { 11C3 },
		gsg	= \__prt_symbol_u:n { 11C4 },
		ng	= \__prt_symbol_u:n { 11C5 },
		nd	= \__prt_symbol_u:n { 11C6 },
		ns	= \__prt_symbol_u:n { 11C7 },
		nz	= \__prt_symbol_u:n { 11C8 },
		nt	= \__prt_symbol_u:n { 11C9 },
		dg	= \__prt_symbol_u:n { 11CA },
		dr	= \__prt_symbol_u:n { 11CB },
		rgs	= \__prt_symbol_u:n { 11CC },
		rn	= \__prt_symbol_u:n { 11CD },
		rd	= \__prt_symbol_u:n { 11CE },
		rdh	= \__prt_symbol_u:n { 11CF },
		rr	= \__prt_symbol_u:n { 11D0 },
		rmg	= \__prt_symbol_u:n { 11D1 },
		rms	= \__prt_symbol_u:n { 11D2 },
		rbs	= \__prt_symbol_u:n { 11D3 },
		rbh	= \__prt_symbol_u:n { 11D4 },
		rbq	= \__prt_symbol_u:n { 11D5 },
		rss	= \__prt_symbol_u:n { 11D6 },
		rz	= \__prt_symbol_u:n { 11D7 },
		rk	= \__prt_symbol_u:n { 11D8 },
		rx	= \__prt_symbol_u:n { 11D9 },
		mg	= \__prt_symbol_u:n { 11DA },
		mr	= \__prt_symbol_u:n { 11DB },
		mb	= \__prt_symbol_u:n { 11DC },
		ms	= \__prt_symbol_u:n { 11DD },
		mss	= \__prt_symbol_u:n { 11DE },
		mz	= \__prt_symbol_u:n { 11DF },
		mc	= \__prt_symbol_u:n { 11E0 },
		mh	= \__prt_symbol_u:n { 11E1 },
		mq	= \__prt_symbol_u:n { 11E2 },
		br	= \__prt_symbol_u:n { 11E3 },
		bp	= \__prt_symbol_u:n { 11E4 },
		bh	= \__prt_symbol_u:n { 11E5 },
		bq	= \__prt_symbol_u:n { 11E6 },
		sg	= \__prt_symbol_u:n { 11E7 },
		sd	= \__prt_symbol_u:n { 11E8 },
		sr	= \__prt_symbol_u:n { 11E9 },
		sb	= \__prt_symbol_u:n { 11EA },
		z	= \__prt_symbol_u:n { 11EB },
		fg	= \__prt_symbol_u:n { 11EC },
		fgg	= \__prt_symbol_u:n { 11ED },
		ff	= \__prt_symbol_u:n { 11EE },
		fk	= \__prt_symbol_u:n { 11EF },
		f	= \__prt_symbol_u:n { 11F0 },
		fs	= \__prt_symbol_u:n { 11F1 },
		fz	= \__prt_symbol_u:n { 11F2 },
		pb	= \__prt_symbol_u:n { 11F3 },
		pq	= \__prt_symbol_u:n { 11F4 },
		hn	= \__prt_symbol_u:n { 11F5 },
		hr	= \__prt_symbol_u:n { 11F6 },
		hm	= \__prt_symbol_u:n { 11F7 },
		hb	= \__prt_symbol_u:n { 11F8 },
		x	= \__prt_symbol_u:n { 11F9 },
	%% added 0.4
		gn	= \__prt_symbol_u:n { 11FA },
		gb 	= \__prt_symbol_u:n { 11FB },
		gc	= \__prt_symbol_u:n { 11FC },
		gk	= \__prt_symbol_u:n { 11FD },
		gh	= \__prt_symbol_u:n { 11FE },
		nn	= \__prt_symbol_u:n { 11FF },
	%% extended-b
	%% added 0.4
		nr	= \__prt_symbol_u:n { D7CB },
		nc	= \__prt_symbol_u:n { D7CC },
		dd	= \__prt_symbol_u:n { D7CD },
		ddb	= \__prt_symbol_u:n { D7CE },
		db	= \__prt_symbol_u:n { D7CF },
	%%%
		ds	= \__prt_symbol_u:n { D7D0 },
		dsg	= \__prt_symbol_u:n { D7D1 },
		dj	= \__prt_symbol_u:n { D7D2 },
		dc	= \__prt_symbol_u:n { D7D3 },
		dt	= \__prt_symbol_u:n { D7D4 },
		rgg	= \__prt_symbol_u:n { D7D5 },
		rgh	= \__prt_symbol_u:n { D7D6 },
		rrz	= \__prt_symbol_u:n { D7D7 },
		rmh	= \__prt_symbol_u:n { D7D8 },
		rbd	= \__prt_symbol_u:n { D7D9 },
		rbp	= \__prt_symbol_u:n { D7DA },
		rf	= \__prt_symbol_u:n { D7DB },
		rfh	= \__prt_symbol_u:n { D7DC },
		rq	= \__prt_symbol_u:n { D7DD },
		mn	= \__prt_symbol_u:n { D7DE },
		mnn	= \__prt_symbol_u:n { D7DF },
		mm	= \__prt_symbol_u:n { D7E0 },
		mbs	= \__prt_symbol_u:n { D7E1 },
		mj	= \__prt_symbol_u:n { D7E2 },
		bd	= \__prt_symbol_u:n { D7E3 },
		brp	= \__prt_symbol_u:n { D7E4 },
		bm	= \__prt_symbol_u:n { D7E5 },
		bb	= \__prt_symbol_u:n { D7E6 },
		bsd	= \__prt_symbol_u:n { D7E7 },
		bj	= \__prt_symbol_u:n { D7E8 },
		bc	= \__prt_symbol_u:n { D7E9 },
		sm	= \__prt_symbol_u:n { D7EA },
		sbq	= \__prt_symbol_u:n { D7EB },
		ssg	= \__prt_symbol_u:n { D7EC },
		ssd	= \__prt_symbol_u:n { D7ED },
		sz	= \__prt_symbol_u:n { D7EE },
		sj	= \__prt_symbol_u:n { D7EF },
		sc	= \__prt_symbol_u:n { D7F0 },
		st	= \__prt_symbol_u:n { D7F1 },
		sh	= \__prt_symbol_u:n { D7F2 },
		zb	= \__prt_symbol_u:n { D7F3 },
		zbq	= \__prt_symbol_u:n { D7F4 },
		fm	= \__prt_symbol_u:n { D7F5 },
		fh	= \__prt_symbol_u:n { D7F6 },
		jb	= \__prt_symbol_u:n { D7F7 },
		jbb	= \__prt_symbol_u:n { D7F8 },
		jj	= \__prt_symbol_u:n { D7F9 },
		ps	= \__prt_symbol_u:n { D7FA },
		pt	= \__prt_symbol_u:n { D7FB },
	%% tone markers
		;	= \__prt_symbol_u:n { 302E },
		:	= \__prt_symbol_u:n { 302F },
		|	= {}
	}
}

%%%% underline
\NewDocumentCommand \jamoul { m m }
{
	\tl_set:Nn \l_pmulcmdnm_tl { #1 }
	\seq_set_split:Nnn \l_pmlli_seq { ~ } { #2 }
	\seq_map_indexed_function:NN \l_pmlli_seq \_tr_ulfn:nn
}

\cs_new:Npn \_tr_ulfn:nn #1 #2
{
	\tl_set:Nn \l_tmpz_tl { #2 }
	\regex_replace_all:nnN { \: } { \:\/ } \l_tmpz_tl
	\regex_replace_all:nnN { \; } { \;\/ } \l_tmpz_tl
	\seq_set_split:NnV \l_pmnni_seq { / } \l_tmpz_tl
	\seq_map_inline:Nn \l_pmnni_seq
	{
		\regex_match:nnT { [a-zA-Z] } { ##1 } 
		{
			\allowbreak
		}
		\exp_args:No \use:c { \l_pmulcmdnm_tl } { \jamoword { ##1 } }
	}
	\int_compare:nT { #1 < \seq_count:N \l_pmlli_seq }
	{
		\exp_args:No \use:c { \l_pmulcmdnm_tl } {~}
	}
}

\endinput

