From f229d8b30d8bd919e4f818ccd47c64cdc1d5cd0c Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Fri, 5 May 2017 22:47:42 +0000
Subject: gotoh (5may17)

git-svn-id: svn://tug.org/texlive/trunk@44211 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/latex/gotoh/gotoh.sty | 367 ++++++++++++++++++++++++++++
 1 file changed, 367 insertions(+)
 create mode 100644 Master/texmf-dist/tex/latex/gotoh/gotoh.sty

(limited to 'Master/texmf-dist/tex/latex/gotoh/gotoh.sty')

diff --git a/Master/texmf-dist/tex/latex/gotoh/gotoh.sty b/Master/texmf-dist/tex/latex/gotoh/gotoh.sty
new file mode 100644
index 00000000000..b0a3d0905ea
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/gotoh/gotoh.sty
@@ -0,0 +1,367 @@
+%%
+%% This is file `gotoh.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% gotoh.dtx  (with options: `package')
+%% 
+%% Copyright (c) 2017 Takuto ASAKURA (wtsnjp)
+%%   GitHub:   https://github.com/wtsnjp
+%%   Twitter:  @wtsnjp
+%% 
+%% This package is distributed under the MIT License.
+%% 
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gotoh}[2017/05/05 v1.0 Sequence alignment algorithm]
+\RequirePackage{xkeyval}
+\def\gth@pkgname{gotoh}
+\def\gth@warn{\PackageWarningNoLine\gth@pkgname}
+\def\gth@error{\PackageError\gth@pkgname}
+\newif\if@gth@first@
+\newif\if@gth@remain@
+\newif\if@gth@gap@
+\newif\if@gth@gapx@
+\newif\if@gth@gapy@
+\newcount\gth@tempcnta
+\newcount\gth@tempcntb
+\newcount\gth@tempcntc
+\newcount\gth@tempcntd
+\newcount\gth@calc
+\edef\gth@sn{\number\z@}
+\mathchardef\gth@M="7FFF
+\edef\gth@min{-\number\gth@M}
+\newdimen\gth@tempdima
+\define@cmdkeys[gth]{config}[gth@]{match, mismatch, d, e}
+\setkeys[gth]{config}{match=1, mismatch=-1, d=7, e=1}
+\define@key[gth]{config}{score}{\def\gth@score{#1}}
+\define@key[gth]{config}{result A}{\def\gth@resulta{#1}}
+\define@key[gth]{config}{result B}{\def\gth@resultb{#1}}
+\setkeys[gth]{config}{
+  score=\GotohScore, result A=\GotohResultA, result B=\GotohResultB}
+\define@boolkeys[gth]{config}[@gth@]{memoization, uppercase}[true]
+\define@key[gth]{config}{gap char}{\def\gth@gap@char{#1}}
+\setkeys[gth]{config}{memoization=false, uppercase=false, gap char={.}}
+\def\gth@nameuse#1{\csname gth@#1\endcsname}
+\def\gth@name@edef#1{\expandafter\edef\csname gth@#1\endcsname}
+\def\gth@name@xdef#1{\expandafter\xdef\csname gth@#1\endcsname}
+\def\gth@glet{\global\let}
+\def\gth@advance#1#2{%
+  \gth@calc#1\advance\gth@calc#2\edef#1{\the\gth@calc}}
+\def\gth@increment#1{\gth@advance#1\@ne}
+\def\gth@decrement#1{\gth@advance#1\m@ne}
+\def\gth@max#1{%
+  \@gth@first@true
+  \@for\gth@member:=#1\do{%
+    \if@gth@first@
+      \gth@calc\gth@member
+      \@gth@first@false
+    \else
+      \ifnum\gth@member>\gth@calc
+        \gth@calc\gth@member
+      \fi
+    \fi}}
+\def\gth@gap@penalty#1{%
+  \gth@calc#1\relax
+  \advance\gth@calc\m@ne
+  \multiply\gth@calc-\gth@e
+  \advance\gth@calc-\gth@d}
+\def\gth@tab#1{%
+  \bgroup
+    \sbox\z@ 0%
+    \expandafter\gth@tempdima\ht\z@
+    \multiply\gth@tempdima 8%
+    \mbox{\hbox to\gth@tempdima{\hss #1}}%
+  \egroup}
+\def\gth@print@matrix#1{%
+  \bgroup\texttt
+    #1:\\
+    \gth@tempcnta\z@
+    \@whilenum\gth@tempcnta<\gth@m\do{%
+      \gth@tempcntb\z@
+      \@whilenum\gth@tempcntb<\gth@n\do{%
+        \gth@tab{%
+          \gth@nameuse{\gth@sn @#1@\the\gth@tempcnta
+                    @\the\gth@tempcntb}}%
+      \advance\gth@tempcntb\@ne}\\
+    \advance\gth@tempcnta\@ne}%
+  \egroup}
+\newcommand{\Gotoh}[2]{%
+  \if@gth@uppercase
+    \uppercase{\gth@gotoh{#1}{#2}}%
+  \else
+    \gth@gotoh{#1}{#2}%
+  \fi}
+\def\gth@gotoh#1#2{%
+  \gth@increment\gth@sn
+  \bgroup
+    \gth@tempcnta\z@
+    \@tfor\gth@member:=#1\do{%
+      \gth@name@edef{seqa@\the\gth@tempcnta}{\gth@member}%
+      \advance\gth@tempcnta\@ne}%
+    \advance\gth@tempcnta\@ne
+    \edef\gth@m{\the\gth@tempcnta}%
+    \gth@tempcntb\z@
+    \@tfor\gth@member:=#2\do{%
+      \gth@name@edef{seqb@\the\gth@tempcntb}{\gth@member}%
+      \advance\gth@tempcntb\@ne}%
+    \advance\gth@tempcntb\@ne
+    \edef\gth@n{\the\gth@tempcntb}%
+    \gth@tempcnta\z@
+    \@whilenum\gth@tempcnta<\gth@m\do{%
+      \gth@gap@penalty{\gth@tempcnta}%
+      \gth@name@xdef{\gth@sn @m@\the\gth@tempcnta @0}{\gth@min}%
+      \gth@name@xdef{\gth@sn @ix@\the\gth@tempcnta @0}{\the\gth@calc}%
+      \gth@name@xdef{\gth@sn @iy@\the\gth@tempcnta @0}{\gth@min}%
+      \advance\gth@tempcnta\@ne}%
+    \gth@tempcntb\z@
+    \@whilenum\gth@tempcntb<\gth@n\do{%
+      \gth@gap@penalty{\gth@tempcntb}%
+      \gth@name@xdef{\gth@sn @m@0@\the\gth@tempcntb}{\gth@min}%
+      \gth@name@xdef{\gth@sn @ix@0@\the\gth@tempcntb}{\gth@min}%
+      \gth@name@xdef{\gth@sn @iy@0@\the\gth@tempcntb}{\the\gth@calc}%
+      \advance\gth@tempcntb\@ne}%
+    \gth@name@xdef{\gth@sn @m@0@0}{\number\z@}%
+    \if@gth@memoization
+      \gth@decrement\gth@m \gth@decrement\gth@n
+        \gth@memo@ix{\gth@m}{\gth@n}%
+        \gth@memo@iy{\gth@m}{\gth@n}%
+        \gth@memo@m{\gth@m}{\gth@n}%
+      \gth@increment\gth@m \gth@increment\gth@n
+    \else
+      \gth@tempcnta\@ne
+      \@whilenum\gth@tempcnta<\gth@m\do{%
+        \gth@tempcntb\@ne
+        \@whilenum\gth@tempcntb<\gth@n\do{%
+          \advance\gth@tempcnta\m@ne
+            \gth@max{%
+              \gth@nameuse{\gth@sn @m@\the\gth@tempcnta
+                        @\the\gth@tempcntb},%
+              \gth@nameuse{\gth@sn @iy@\the\gth@tempcnta
+                        @\the\gth@tempcntb}}%
+            \gth@tempcntc\gth@calc
+            \gth@tempcntd
+              \gth@nameuse{\gth@sn @ix@\the\gth@tempcnta
+                        @\the\gth@tempcntb}%
+            \advance\gth@tempcntc-\gth@d\advance\gth@tempcntd-\gth@e
+          \advance\gth@tempcnta\@ne
+          \gth@max{\gth@tempcntc,\gth@tempcntd}%
+          \gth@name@xdef{\gth@sn @ix@\the\gth@tempcnta
+                         @\the\gth@tempcntb}{%
+            \the\gth@calc}%
+          \advance\gth@tempcntb\m@ne
+            \gth@tempcntc
+              \gth@nameuse{\gth@sn @m@\the\gth@tempcnta
+                        @\the\gth@tempcntb}%
+            \gth@tempcntd
+              \gth@nameuse{\gth@sn @iy@\the\gth@tempcnta
+                        @\the\gth@tempcntb}%
+            \advance\gth@tempcntc-\gth@d\advance\gth@tempcntd-\gth@e
+          \advance\gth@tempcntb\@ne
+          \gth@max{\gth@tempcntc,\gth@tempcntd}%
+          \gth@name@xdef{\gth@sn @iy@\the\gth@tempcnta
+                         @\the\gth@tempcntb}{%
+            \the\gth@calc}%
+          \advance\gth@tempcnta\m@ne\advance\gth@tempcntb\m@ne
+            \gth@max{%
+              \gth@nameuse{\gth@sn @m@\the\gth@tempcnta
+                        @\the\gth@tempcntb},%
+              \gth@nameuse{\gth@sn @ix@\the\gth@tempcnta
+                        @\the\gth@tempcntb},%
+              \gth@nameuse{\gth@sn @iy@\the\gth@tempcnta
+                        @\the\gth@tempcntb}}%
+            \edef\gth@tmpa{\gth@nameuse{seqa@\the\gth@tempcnta}}%
+            \edef\gth@tmpb{\gth@nameuse{seqb@\the\gth@tempcntb}}%
+          \advance\gth@tempcnta\@ne\advance\gth@tempcntb\@ne
+          \ifx\gth@tmpa\gth@tmpb
+            \advance\gth@calc\gth@match
+          \else
+            \advance\gth@calc\gth@mismatch
+          \fi
+          \gth@name@xdef{\gth@sn @m@\the\gth@tempcnta
+                         @\the\gth@tempcntb}{%
+            \the\gth@calc}%
+          \advance\gth@tempcntb\@ne}%
+        \advance\gth@tempcnta\@ne}%
+    \fi
+    %\gth@print@matrix{m}%
+    %\gth@print@matrix{ix}%
+    %\gth@print@matrix{iy}%
+    \bgroup
+      \gth@decrement\gth@m \gth@decrement\gth@n
+      \expandafter\xdef\gth@score{%
+        \gth@nameuse{\gth@sn @m@\gth@m @\gth@n}}%
+    \egroup
+    \let\gth@rseq@x\@empty\let\gth@rseq@y\@empty\let\gth@mode@seq\@empty
+    \@gth@remain@true\@gth@gapx@false\@gth@gapy@false
+    \@whilesw\if@gth@remain@\fi{%
+      \ifnum\gth@m=\z@
+        \gth@decrement\gth@n
+        \expandafter\expandafter\expandafter
+        \ifx\gth@nameuse{seqb@\gth@n}\relax\else
+          \edef\gth@rseq@x{\gth@gap@char\gth@rseq@x}%
+          \edef\gth@rseq@y{\gth@nameuse{seqb@\gth@n}%
+                           \gth@rseq@y}%
+        \fi
+      \else\ifnum\gth@n=\z@
+        \gth@decrement\gth@m
+        \expandafter\expandafter\expandafter
+        \ifx\gth@nameuse{seqa@\gth@m}\relax\else
+          \edef\gth@rseq@x{\gth@nameuse{seqa@\gth@m}%
+                           \gth@rseq@x}%
+          \edef\gth@rseq@y{\gth@gap@char\gth@rseq@y}%
+        \fi
+      \else
+        \if@gth@gapx@
+          % mode: gap x
+          \gth@decrement\gth@m
+          \expandafter\expandafter\expandafter
+          \ifx\gth@nameuse{seqa@\gth@m}\relax\else
+            \edef\gth@rseq@x{\gth@nameuse{seqa@\gth@m}%
+                             \gth@rseq@x}%
+            \edef\gth@rseq@y{\gth@gap@char\gth@rseq@y}%
+          \fi
+          \gth@tempcnta\gth@nameuse{\gth@sn @m@\gth@m @\gth@n}%
+          \gth@tempcntb\gth@nameuse{\gth@sn @ix@\gth@m @\gth@n}%
+          \gth@tempcntc\gth@nameuse{\gth@sn @iy@\gth@m @\gth@n}%
+          \advance\gth@tempcnta-\gth@d
+          \advance\gth@tempcntb-\gth@e
+          \advance\gth@tempcntc-\gth@d
+          \ifnum\gth@tempcnta>\gth@tempcntb
+            \@gth@gapx@false
+          \else\ifnum\gth@tempcntb<\gth@tempcntc
+            \@gth@gapx@false\@gth@gapy@true
+          \fi\fi
+        \else\if@gth@gapy@
+          % mode: gap y
+          \gth@decrement\gth@n
+          \expandafter\expandafter\expandafter
+          \ifx\gth@nameuse{seqb@\gth@n}\relax\else
+            \edef\gth@rseq@x{\gth@gap@char\gth@rseq@x}%
+            \edef\gth@rseq@y{\gth@nameuse{seqb@\gth@n}%
+                             \gth@rseq@y}%
+          \fi
+          \gth@tempcnta\gth@nameuse{\gth@sn @m@\gth@m @\gth@n}%
+          \gth@tempcntb\gth@nameuse{\gth@sn @iy@\gth@m @\gth@n}%
+          \advance\gth@tempcnta-\gth@d\advance\gth@tempcntb-\gth@e
+          \ifnum\gth@tempcnta>\gth@tempcntb
+            \@gth@gapy@false
+          \fi
+        \else
+          % mode: default
+          \gth@decrement\gth@m
+          \gth@decrement\gth@n
+          \expandafter\expandafter\expandafter
+          \ifx\gth@nameuse{seqa@\gth@m}\relax\else
+            \expandafter\expandafter\expandafter
+            \ifx\gth@nameuse{seqb@\gth@n}\relax\else
+              \edef\gth@rseq@x{\gth@nameuse{seqa@\gth@m}%
+                               \gth@rseq@x}%
+              \edef\gth@rseq@y{\gth@nameuse{seqb@\gth@n}%
+                               \gth@rseq@y}%
+            \fi
+          \fi
+          \gth@tempcnta\gth@nameuse{\gth@sn @m@\gth@m @\gth@n}%
+          \gth@tempcntb\gth@nameuse{\gth@sn @ix@\gth@m @\gth@n}%
+          \gth@tempcntc\gth@nameuse{\gth@sn @iy@\gth@m @\gth@n}%
+          \@gth@gap@false
+          \ifnum\gth@tempcnta<\gth@tempcntb\@gth@gap@true\fi
+          \ifnum\gth@tempcnta<\gth@tempcntc\@gth@gap@true\fi
+          \if@gth@gap@
+            \ifnum\gth@tempcntb>\gth@tempcntc
+              \@gth@gapx@true
+            \else
+              \@gth@gapy@true
+            \fi
+          \fi
+        \fi\fi
+      \fi\fi
+      \ifnum\gth@m<\@ne\ifnum\gth@n<\@ne
+        \@gth@remain@false
+      \fi\fi}%
+    \expandafter\gth@glet\gth@resulta\gth@rseq@x
+    \expandafter\gth@glet\gth@resultb\gth@rseq@y
+  \egroup}
+\def\gth@memo@ix#1#2{%
+  \bgroup
+    \gth@tempcnta#1\gth@tempcntb#2\relax
+    \expandafter\expandafter\expandafter
+    \ifx\gth@nameuse{\gth@sn @ix@\the\gth@tempcnta
+                  @\the\gth@tempcntb}\relax
+      \advance\gth@tempcnta\m@ne
+        \gth@memo@ix{\gth@tempcnta}{\gth@tempcntb}%
+        \edef\gth@tmp@ix@return{\gth@ix@return}%
+        \gth@memo@iy{\gth@tempcnta}{\gth@tempcntb}%
+        \edef\gth@tmp@iy@return{\gth@iy@return}%
+        \gth@memo@m{\gth@tempcnta}{\gth@tempcntb}%
+      \advance\gth@tempcnta\@ne
+      \gth@advance{\gth@m@return}{-\gth@d}%
+      \gth@advance{\gth@tmp@ix@return}{-\gth@e}%
+      \gth@advance{\gth@tmp@iy@return}{-\gth@d}%
+      \gth@max{\gth@m@return,\gth@tmp@ix@return,\gth@tmp@iy@return}%
+      \gth@name@xdef{\gth@sn @ix@\the\gth@tempcnta
+                     @\the\gth@tempcntb}{%
+        \the\gth@calc}%
+      \xdef\gth@ix@return{\the\gth@calc}
+    \else
+      \xdef\gth@ix@return{%
+        \gth@nameuse{\gth@sn @ix@\the\gth@tempcnta @\the\gth@tempcntb}}
+    \fi
+  \egroup}
+\def\gth@memo@iy#1#2{%
+  \bgroup
+    \gth@tempcnta#1\gth@tempcntb#2\relax
+    \expandafter\expandafter\expandafter
+    \ifx\gth@nameuse{\gth@sn @iy@\the\gth@tempcnta
+                  @\the\gth@tempcntb}\relax
+      \advance\gth@tempcntb\m@ne
+        \gth@memo@iy{\gth@tempcnta}{\gth@tempcntb}%
+        \edef\gth@tmp@iy@return{\gth@iy@return}%
+        \gth@memo@m{\gth@tempcnta}{\gth@tempcntb}%
+      \advance\gth@tempcntb\@ne
+      \gth@advance{\gth@m@return}{-\gth@d}%
+      \gth@advance{\gth@tmp@iy@return}{-\gth@e}%
+      \gth@max{\gth@m@return,\gth@tmp@iy@return}%
+      \gth@name@xdef{\gth@sn @iy@\the\gth@tempcnta
+                     @\the\gth@tempcntb}{%
+        \the\gth@calc}%
+      \xdef\gth@iy@return{\the\gth@calc}%
+    \else
+      \xdef\gth@iy@return{%
+        \gth@nameuse{\gth@sn @iy@\the\gth@tempcnta @\the\gth@tempcntb}}
+    \fi
+  \egroup}
+\def\gth@memo@m#1#2{%
+  \bgroup
+    \gth@tempcnta#1\gth@tempcntb#2\relax
+    \expandafter\expandafter\expandafter
+    \ifx\gth@nameuse{\gth@sn @m@\the\gth@tempcnta
+                  @\the\gth@tempcntb}\relax
+      \advance\gth@tempcnta\m@ne\advance\gth@tempcntb\m@ne
+        \gth@memo@ix{\gth@tempcnta}{\gth@tempcntb}%
+        \edef\gth@tmp@ix@return{\gth@ix@return}%
+        \gth@memo@iy{\gth@tempcnta}{\gth@tempcntb}%
+        \edef\gth@tmp@iy@return{\gth@iy@return}%
+        \gth@memo@m{\gth@tempcnta}{\gth@tempcntb}%
+        \edef\gth@tmpa{\gth@nameuse{seqa@\the\gth@tempcnta}}%
+        \edef\gth@tmpb{\gth@nameuse{seqb@\the\gth@tempcntb}}%
+      \advance\gth@tempcnta\@ne\advance\gth@tempcntb\@ne
+      \gth@max{\gth@m@return,\gth@tmp@ix@return,\gth@tmp@iy@return}%
+      \ifx\gth@tmpa\gth@tmpb
+        \advance\gth@calc\gth@match
+      \else
+        \advance\gth@calc\gth@mismatch
+      \fi
+      \gth@name@xdef{\gth@sn @m@\the\gth@tempcnta
+                     @\the\gth@tempcntb}{%
+        \the\gth@calc}%
+      \xdef\gth@m@return{\the\gth@calc}%
+    \else
+      \xdef\gth@m@return{%
+        \gth@nameuse{\gth@sn @m@\the\gth@tempcnta @\the\gth@tempcntb}}%
+    \fi
+  \egroup}
+\newcommand{\GotohConfig}[1]{\setkeys[gth]{config}{#1}}
+\endinput
+%%
+%% End of file `gotoh.sty'.
-- 
cgit v1.2.3

