Skip to content

Instantly share code, notes, and snippets.

@dohyunkim
Last active May 3, 2017 02:27
Show Gist options
  • Save dohyunkim/ca8eb8eb989105cac96b82685acfe1fa to your computer and use it in GitHub Desktop.
Save dohyunkim/ca8eb8eb989105cac96b82685acfe1fa to your computer and use it in GitHub Desktop.
산가지 算木
\newif\ifsetminus
\def\tys#1{%
\begingroup
\dimen0=0pt \dimen2=0pt \hsize=0pt
\setbox4=\vbox\bgroup\splitbyspace#1 ~ %
\edef\x{\egroup\hbox{\kern\the\dimen0 \box4\kern\the\dimen2}}\x
\endgroup
}
\def\splitbyspace#1 {%
\ifx#1~\else
\splitbydot#1..\end
\expandafter\splitbyspace
\fi
}
\def\splitbydot#1.#2.#3\end{%
\setbox0=\hbox{\count255=0 \rods{#1}}%
\setbox2=\hbox{\count255=9 \rodsii#2\end}%
\ifdim\wd0>\dimen0 \dimen0=\wd0\fi
\ifdim\wd2>\dimen2 \dimen2=\wd2\fi
\noindent
\ifsetminus\else\ifnum#1<0 \else\special{pdf:literal direct 1 0 0 rg}\fi\fi
\hbox to\hsize{\hss\unhbox0}\hbox to\hsize{\unhbox2\hss}%
\ifsetminus\else\ifnum#1<0 \else\special{pdf:literal direct 0 g}\fi\fi
\par
}
\def\rods#1{%
\def\reverseX{}\reverse#1\end
\def\rodsX{}\expandafter\rodsi\reverseX\end \rodsX
}
\def\reverse#1{%
\ifx#1\end \else
\edef\reverseX{#1\reverseX}%
\expandafter\reverse
\fi
}
\def\rodsi#1{%
\ifx#1\end \else
\ifx-#1\ifsetminus \edef\rodsX{\rodsX\rodminus}\fi
\else\ifnum#1=0 \edef\rodsX{\rodzero\rodsX}%
\else \edef\rodsX{\rodnum{#1}\rodsX}\fi\fi
\hvtoggle \expandafter\rodsi
\fi
}
\def\rodsii#1{%
\ifx#1\end \else
\ifnum#1=0 \rodzero \else \rodnum{#1}\fi
\hvtoggle \expandafter\rodsii
\fi
}
\def\rodminus{\hbox to0pt{\hss\hbox to.5em{\hss\char"2216\hss}}}
\def\rodzero{\raise.125ex\hbox to .5em{\hss\char"FFEE\hss}}
\def\rodnum#1{\hbox to.5em{\hss\char\number\numexpr#1+"1D35F+\count255\relax\hss}}
\def\hvtoggle{\count255=\numexpr\ifnum0=\count255 9\else 0\fi\relax}
\font\tenrm="[Apple Symbols.ttf]" at 50pt \tenrm
%\setminustrue
M\tys{150 -345.255 567890.25}M.
\bye
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment