\documentclass{article}
\usepackage{conv-xkv}
\usepackage{fancyvrb}

% Use ordinary askii characters to declare a delimiter, usually
% the delimiter is some combination of special characters: !@#:%^&*()_+=
\DeclareDelimiter{arrow}{->}
% The colon delimiter is already defined, and need not be declared
%\DeclareDelimiter{colon}{:}

% formatting cmd
\def\ameta#1{\ensuremath{\langle\textit{\texttt{#1}}\rangle}}

\makeatletter
\define@key{dps}{fname}[]{\def\fname{#1}}
\define@key{dps}{mname}[]{\def\mname{#1}}
\define@key{dps}{lname}[]{\def\lname{#1}}
\define@choicekey{dps}{favorite}{AeB, AeB Pro, conv-xkv}[AeB]{\def\favoritepkg{#1}}
\define@key{kaf}{home}[]{\def\myhome{#1}}
\makeatother

% Process keys using the arrow delimiter
\def\setName#1{\cxkvsetkeys[arrow]{dps,kaf}{#1}}
% we use the default delimiter, colon (:)
\def\setOtherName#1{\cxkvsetkeys{dps}{#1}}
% we define the dps family for xkeyval
\def\setStandName#1{\setkeys{dps}{#1}}

\let\pkg\textsf
\newcommand{\cs}[1]{\texttt{\char`\\#1}}
\def\newtopic{\par\medskip}

\parindent0pt

\begin{document}

In the preamble, we declare \verb~\DeclareDelimiter{arrow}{->}~.

\newtopic
The \pkg{conv-xkv} package converts key-values with alternate key-value delimiter
to a form the \pkg{xkeyval} package expects them to be in.

\setName {
    fname-> D.,
    mname-> P.,
    lname-> Story,
    favorite-> conv-xkv,
    home-> {Niceville, FL}
}
\begin{Verbatim}[xleftmargin=\leftmargini,fontsize=\small]
\def\setName#1{\cxkvsetkeys[arrow]{dps,kaf}{#1}}
\setName {
    fname-> D.,
    mname-> P.,
    lname-> Story,
    favorite-> conv-xkv,
    home-> {Niceville, FL}
}
\end{Verbatim}
The script above converts the notation \texttt{\ameta{key}\usekvdelim{arrow}\ameta{value}} to
the notation of \pkg{xkeyval}, \texttt{\ameta{key}=\ameta{value}}. It is then passed to the
\cs{setkeys} command of \pkg{xkeyval}.

\newtopic\textbf{Results:}
My name is {\fname} {\mname} {\lname} and my favorite {\LaTeX} package is
\textsf{\favoritepkg},  my home is \myhome.

\setOtherName {
    fname: D.,
    mname: Paul,
    lname: Story,
    favorite      % use default
}

\newtopic Now we use the colon (:) delimiter:
\begin{Verbatim}[xleftmargin=\leftmargini,fontsize=\small]
\def\setOtherName#1{\cxkvsetkeys{dps}{#1}}
\setOtherName {
    fname: D.,
    mname: Paul,
    lname: Story,
    favorite     % use default
}
\end{Verbatim}
The script above converts the colon notation \texttt{\ameta{key}\usekvdelim{colon}\ameta{value}} to
the notation of \pkg{xkeyval}, \texttt{\ameta{key}=\ameta{value}}. This enables the implementation of
\pkg{xkeyval} in packages that want to use object-property notation. Other variations are
possible.

\newtopic\textbf{Results:}
My name is {\fname} {\mname} {\lname} and my favorite {\LaTeX} package is
\textsf{\favoritepkg}.

\newtopic
Now here are the same results using the \pkg{xkeyval} package with the key-value delimiter
\texttt{\ameta{key}=\ameta{value}} to verify that nothing has been disturbed.

\setStandName {
    fname= Don,
    mname= Paulo,
    lname= Story,
    favorite
}
\begin{Verbatim}[xleftmargin=\leftmargini,fontsize=\small]
\def\setStandName#1{\setkeys{dps}{#1}}
\setStandName {
    fname=Don,
    mname=Paulo,
    lname=Story,
    favorite
}
\end{Verbatim}
\textbf{Results:}
My name is {\fname} {\mname} {\lname} and my favorite {\LaTeX} package is
\textsf{\favoritepkg}.


\end{document}

