%% This maps consonants entered via a US keyboard into Hebrew
%% equivalents.  It also takes care of some special characters
%% (punctuation, etc) and the fine-tuning (finagling) material.

%% In this file, shins with dots are mapped to naked shin glyphs.
input:
       1;
output:
       1;
aliases:
       U       = 95 % underscore
               ;
       C       = 94 % circumflex
               ;
       COMMA   = 44
               ;
       SEMI    = 59 % semicolon
               ;
       OKALPH  = (`b'|`c'|`d'|`i'|`m'|`n'|`p'|`s'|`t')
               ; % only these needed to specify units (bp, cm, pt, etc)
       ARG     = (43|45|46|48-57|{OKALPH}
                       ) % digits, -, +, OK letters are valid
               ;
expressions:
%% In this first section, we present patterns/sequences that must be
%% exempted from further processing.  In all cases, the user is
%% responsible for ensuring that these inclusions are properly
%% formed.
%%
%% First let's do the accent fine-tuning.  Fine Tuning consists of a
%% pair of dimens, which are used as coordinates to adjust the
%% placement of an accent or cantillation mark.  Tunings can consist
%% of a PAIR of coordinates.  In case a letter has both an accent and
%% a trope, the first pair applies to the vowel+trope unit, while the
%% second applies to the displacement of the second diacrit from the
%% first.
%%
       {U} {ARG}<1,9>{COMMA}{ARG}<1,9>{SEMI}{ARG}<1,9>{COMMA}{ARG}<1,9> {U}
               => "{\clearocplists\lowertuning[" \(* + 1 - 1) "]}"
               ;
       {C} {ARG}<1,9>{COMMA}{ARG}<1,9>{SEMI}{ARG}<1,9>{COMMA}{ARG}<1,9> {C}
               => "{\clearocplists\uppertuning[" \(* + 1 - 1) "]}"
               ;
       {U} {ARG}<1,9>{COMMA}{ARG}<1,9> {U}
               => "{\clearocplists\lowertune[" \(* + 1 - 1) "]}"
               ;
       {C} {ARG}<1,9>{COMMA}{ARG}<1,9> {C}
               => "{\clearocplists\uppertune[" \(* + 1 - 1) "]}"
               ;
%% An adjustment is a single number, with or without a decimal, which
%% represents the fraction of the width of the glyph by which the
%% accent is displaced.  It is much less powerful than a tuning, but
%% is sometimes useful.
%%
       {U} {ARG}<1,9> {U}      =>
               "{\clearocplists\loweradj{" \(* + 1 - 1) "}}"
               ;
       {C} {ARG}<1,9> {C}      =>
               "{\clearocplists\upperadj{" \(* + 1 - 1) "}}"
               ;
%% ODDMENTS, PUNCTUATION, etc.:
       `-'`-'`-'       => 143 % em-dash
                       ;
       `-'`-'          => 127 % en-dash
                       ;
%% CONSONANTS: 3+ char inputs...
       `s' `h' `^'     => 121 % shin plus upperdot
                       ;
       `^' `s' `h'     => 121 % upperdot plus sin
                       ;
%% CONSONANTS: 2 char inputs
       `^' `s'         => 121 % alternative upperdot plus sin
                       ;
       `c' `h' =>      103 % chet
               ;
       `s' `h' =>      121 % shin
               ;
       `t' `s' =>      118 % tsadi
               ;
       `k' `h' =>      107 % chaf
               ;
       `t' `h' =>      122 % saf
               ;
       `.' `t' =>      104 % tet
               ;
       `.' `s' =>      113 % samekh
               ;
       `?' `!' =>      188 % interrobang
               ;
       `!' `?' =>      188 % interrobang; alt encoding
               ;
       `*'`*'  =>      139 % new shekel symbol
               ;
%% CONSONANTS: single-char inputs:
       %% (The case of alef is handled by m2aleph.otp!)
       %%
       `v'     => 97 % vet
               ;
       `b'     => 97 % bet
               ;
       `g'     =>98 % gimel
               ;
       `d'     => 99 % dalet
               ;
       `h'     => 100 % he
               ;
       `w'     => 101 % vav
               ;
       `z'     => 102 % zayin
               ;
       `y'     => 105 % yod
               ;
       `k'     => 107 % kaf
               ;
       `m'     => 110 % mem
               ;
       `n'     => 112 % nun
               ;
       96      => 114 % left single quote maps to ayin.
               ;
       `f'     => 116 % fe
               ;
       `p'     => 116 % pe
               ;
       `q'     => 119 % qof
               ;
       `r'     => 120 % resh
               ;
       `s'     => 122 % alternative coding for sav
               ;
       `t'     => 122 % tav
               ;
%%PUNCTUATION, SPECIAL SYMS, and other single-char inputs...
       32      => 32 % space
               ;
       `-'     => 78 % rafe
               ;
       `='     => 45 % hyphen
               ;
%% Some other chars map to themselves...
       209-225=>  \* % trope
               ;
       227-239=>  \* % more trope
               ;
       65-77   =>  % vowels
               ;
       182-187=>  % meteg vowels
               ;
       80      => \1 % paseq
               ;
       85      => 101 % holam
               ;
       149     => 101 % shuruk
               ;
       78      => \1 % rafe
               ;
       45      => \1 % hyphen
               ;
       (108|156|140|172)       => \1 % (bent) lamed, dagesh
               ;
       33-59   => \1
               ;
       61      => \1
               ;
       63      => \1
               ;
       91-95   => \1
               ;
       254     => \1
               ;
       (128-135)       => \1 % Yiddish consonants
               ;
       101     => \1 % the already-mapped vav
               ;
%% Everything else is invalid...
       .       => \1 208       % generic box is a sign of invalidity...
               ;