# liblouis: common rules for Classical/Biblical Hebrew
#
#-license: lgpl-2.1

# This file is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this file; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
# liblouis  comes with ABSOLUTELY NO WARRANTY.

# This table contains rules that are shared by all three Classical/
# Biblical Hebrew systems: the International Hebrew Braille Code
# (hbo-ihbc.uti and hbo.utb), the fully cantillated IHBC-McAllister
# system (hbo-cantillated.uti and hbo-cantillated.utb), and the
# Katz system with no shewas or dageshes (hbo-slim.uti and
# hbo-slim.utb).

# Developed by Eric J. Harvey with support from the national
# Endowment for the Humanities (USA) and Stanford University.
# Many thanks to Leonard de Ruijter, Sarah Blake LaRose, Matthew
# Yeater, and Paul Geoghegan for their help developing and testing the
# tables, and to Abbie Howell for suggesting the inclusion of Yiddish
# characters and reviewing code.

# Copyright (C) 2025 Eric J. Harvey

#-copyright: 2025, Eric J. Harvey

#-maintainer: Eric J. Harvey <eric@blindscholar.com>

#-author: Eric J. Harvey <eric@blindscholar.com>

# Include common characters
include he-common-consonants.uti
include he-common-vowels-ihbc.uti
include spaces.uti

# Eliminate direction-switching characters
noback correct "‎" ?  # Left-to-right mark
noback correct "‏" ?  # Right-to-left mark
noback correct "‭" ?  # left-to-right override
noback correct "‮" ?  # Right-to-left override

# In rules below, attribute $x is %vowel, defined in he-common-vowels-ihbc.uti
# Attribute $y is %extcant, defined in he-common-vowels-ihbc.uti

# character reordering
## Move dagesh before nearest preceding consonant
noback correct [$l]"ּ" "ּ"*
noback correct [$l$xy.]"ּ" "ּ"*

## Move shin and sin dot next to sin/shin consonant
## Prerequisite for “always” rule in he-common-consonants.uti
## to work with vocalized texts.
noback correct [$xy.]"ׂ" "ׂ"*
noback correct [$xy.]"ׁ" "ׁ"*

# Contracting dagesh for bet, kaf, pe, and tav
noback context "ּב" @12
noback context "ּכ" @13
noback context "ּך" @13
noback context "ּפ" @1234
noback context "ּף" @1234
noback context "ּת" @1256

# Contracting ultralong vowels (vowel+mater lectionis)
attribute majCant \x05bc\x05bd

## Holam-waw and consonantal waw
noback pass3 !$xyz[@2456-135a] @246
noback pass3 [@2456-135a]$sp @246
noback pass3 [@2456-135a]~ @246
noback pass3 [@135a-2456]%hebLetter @246

## Shuruq and consonantal waw
noback context "ּו" @346
noback pass2 [@346]$xy @5a-2456

## Hiriq Yod
noback pass3 @24a-245 @35 Hiriq-yod

## Contract tsere-yod
noback pass3 @34a-245 @3456

## Shin and sin with dagesh
noback correct ["ש"$xy.]"\x05bc\x05c2" "\x05bc\x05c2"*
noback correct ["ש"$xy.]"\x05bc\x05c1" "\x05bc\x05c1"*
noback always \x05c1\x05e9 146
noback always \x05c2\x05e9 156
noback pass2 @146-5a @5a-146
noback pass2 @156-5a @5a-156

## Changing dagesh-he to mappiq
noback pass3 @5a-125 @45-125

# Back-translation rules
## dagesh
nofor pass2 @5[$l] *@5

## Reverse mappiq
nofor pass3 @45-125 @5-125

## Uncontract hiriq-yod
nofor pass4 @35 @24-245 Hiriq-yod

## Uncontract tsere-yod
nofor pass4 $lxy[@3456] @34-245

## Final letters
nofor correct _$lS"כ"~ "ך"
nofor correct _$lS"כ"[$sp] "ך"*
nofor correct _$lS"כ"[$S.$sp] "ך"*
nofor correct _$lS"כ"[$S.]~ "ך"*
nofor correct _$lS"מ"~ "ם"
nofor correct _$lS"מ"[$sp] "ם"*
nofor correct _$lS"מ"[$S.$sp] "ם"*
nofor correct _$lS"מ"[$S.]~ "ם"*
nofor correct _$lS"נ"~ "ן"
nofor correct _$lS"נ"[$sp] "ן"*
nofor correct _$lS"נ"[$S.$sp] "ן"*
nofor correct _$lS"נ"[$S.]~ "ן"*
nofor correct _$lS"פ"~ "ף"
nofor correct _$lS"פ"[$sp] "ף"*
nofor correct _$lS"פ"[$S.$sp] "ף"*
nofor correct _$lS"פ"[$S.]~ "ף"*
nofor correct _$lS"צ"~ "ץ"
nofor correct _$lS"צ"[$sp] "ץ"*
nofor correct _$lS"צ"[$S.$sp] "ץ"*
nofor correct _$lS"צ"[$S.]~ "ץ"*

## Holam-waw and shuruq
nofor always וּ 346
nofor always וֹ 246
