﻿#--------------------------------------------------------------------
# Copyright (c) 1999-2004, International Business Machines
# Corporation and others. All Rights Reserved.
#--------------------------------------------------------------------
# For modern Greek, based on UNGEGN rules.

# Rules are predicated on running NFD first, and NFC afterwards
# MINIMAL FILTER GENERATED FOR: Greek-Latin/UNGEGN
# WARNING: need to add accents to both filters ###
# :: [́̄̆̈;µ·ÀÂÈÊÌÎÒÔÙÛàâèêìîòôùûĈ-ĉĜ-ĝĤ-ĥĴ-ĵŜ-ŝŴ-ŷǛ-ǜǸ-ǹ̀̂̓-̔̀͂-̓ͅͺ;Ά-ΊΌΎ-ΡΣ-ώϐ-ϖϰ-ϵЀЍѐѝḔ-ḕṐ-ṑẀ-ẁẐ-ẑẤ-ậẰ-ằẾ-ệỐ-ộỜ-ờỪ-ừỲ-ỳἀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼι῁-ῄῆ-῍῏-ΐῖ-Ί῝῟-῭ῲ-ῴῶ-ῼΩ\u03F7-\u07FB\u03F9] ;

:: [[[:Greek:][:Mn:][:Me:]] [\:-;?\u00B7\u037E\u0387]] ;
::NFD (NFC) ;

# Useful variables

$lower = [[:latin:][:greek:] & [:Ll:]] ;
$upper = [[:latin:][:greek:] & [:Lu:]] ;
$accent = [[:Mn:][:Me:]] ;

$macron = ̄ ;
$ddot = ̈ ;

$lcgvowel = [αεηιουω] ;
$ucgvowel = [ΑΕΗΙΟΥΩ] ;
$gvowel = [$lcgvowel $ucgvowel] ;
$lcgvowelC = [$lcgvowel $accent] ;

$evowel = [aeiouyAEIOUY];
$vowel = [ $evowel $gvowel] ;

$beforeLower = $accent * $lower ;

$gammaLike = [ΓΚΞΧγκξχϰ] ;
$egammaLike = [GKXCgkxc] ;
$smooth = ̓ ;
$rough = ̔ ;
$iotasub = ͅ ;

$softener = [βΒγΓδΔζΖλΛμΜνΝρΡ$gvowel] ;

$under = ̱;

$caron = ̌;

$afterLetter = [:L:] [\'$accent]* ;
$beforeLetter = [\'$accent]* [:L:] ;

# Fix punctuation

# preserve orginal
\: <> \: $under ;
\? <> \? $under ;

\; <> \? ;
· <> \: ;

# Fix any ancient characters that creep in

͂ > ́ ;
̂ > ́ ;
̀ > ́ ;
$smooth > ;
$rough > ;
$iotasub > ;
ͺ > ;

# need to have these up here so the rules don't mask

η <> i $under ;
Η <> I $under ;

Ψ } $beforeLower <> Ps ;
Ψ <> PS ;
ψ <> ps ;

ω <> o $under ;
Ω <>  O $under;

# at begining or end of word, convert mp to b

[^[:L:]$accent] { μπ > b ;
μπ } [^[:L:]$accent] > b ;
[^[:L:]$accent] { [Μμ][Ππ] > B ;
[Μμ][Ππ] } [^[:L:]$accent] > B ;

μπ < b ;
Μπ < B } $beforeLower ;
ΜΠ < B ;

# handle diphthongs ending with upsilon

ου <> ou ;
ΟΥ <> OU ;
Ου <> Ou ;
οΥ <> oU ;

$fmaker = [aeiAEI] $under ? ;
$shiftForwardVowels = [[:Mn:]-[\u0308]]; # note: a diaeresis keeps the items separate

$fmaker { υ ( $shiftForwardVowels )* } $softener > $1 v $under ;
υ $1 < ( $shiftForwardVowels )* v $under ;

$fmaker { υ ( $shiftForwardVowels )* } > $1 f $under;
υ $1 < ( $shiftForwardVowels )* f $under ;

$fmaker { Υ } $softener <> V $under ;
$fmaker { Υ <> U $under ;

υ <> y ;
Υ <> Y ;

# NORMAL

α <> a ;
Α <> A ;

β <> v ;
Β <> V ;

γ } $gammaLike <> n } $egammaLike ;
γ <> g ;
Γ } $gammaLike <> N } $egammaLike ;
Γ <> G ;

δ <> d ;
Δ <> D ;

ε <> e ;
Ε <> E ;

ζ <> z ;
Ζ <> Z ;

θ <> th ;
Θ } $beforeLower <> Th ;
Θ <> TH ;

ι <> i ;
Ι <> I ;

κ <> k ;
Κ <> K ;

λ <> l ;
Λ <> L ;

μ <> m ;
Μ <> M ;

ν } $gammaLike > n\' ;
ν <> n ;
Ν } $gammaLike <> N\' ;
Ν <> N ;

ξ <> x ;
Ξ <> X ;

ο <> o ;
Ο <> O ;

π <> p ;
Π <> P ;

ρ <> r ;
Ρ <> R ;

# insert separator before things that turn into s
[Pp] { } [ςσΣϷϸϺϻ] > \' ; 

# special S variants

Ϸ <> Š ; # Ϸ GREEK CAPITAL LETTER SHO Uppercase_Letter Grek - L 
ϸ <> š ; #ϸ GREEK SMALL LETTER SHO Lowercase_Letter Grek - L 
Ϻ <> Ŝ ; # Ϻ GREEK CAPITAL LETTER SAN Uppercase_Letter Grek - L 
ϻ <> ŝ ; # ϻ GREEK SMALL LETTER SAN Lowercase_Letter Grek - L 

# Caron means exception

# before a letter, initial
ς } $beforeLetter <> s $under } $beforeLetter;
σ } $beforeLetter <> s } $beforeLetter;

# otherwise, after a letter = final
$afterLetter { σ <> $afterLetter { s $under;
$afterLetter { ς <> $afterLetter { s ;

# otherwise (isolated) = initial
ς <> s $under;
σ <> s ;

# [Pp] { Σ <> \'S ;
Σ <> S ;

τ <> t ;
Τ <> T ;

φ <> f ;
Φ <> F ;

χ <> ch ;
Χ } $beforeLower <> Ch ;
Χ <> CH ;

# Completeness for ASCII

# $ignore = [[:Mark:]''] * ;

| ch < h ;
| k  < c ;
| i  < j ;
| k < q ;
| b < u } $vowel ;
| b < w } $vowel ;
| y < u ;
| y < w ;

| Ch < H ;
| K < C ;
| I < J ;
| K < Q ;
| B < W } $vowel ;
| B < U } $vowel ;
| Y < W ;
| Y < U ;

# Completeness for Greek

ϐ > | β ;
ϑ > | θ ;
ϒ > | Υ ;
ϕ > | φ ;
ϖ > | π ;

ϰ > | κ ;
ϱ > | ρ ;
ϲ > | σ ;
Ϲ > | Σ; #U+03F9 GREEK CAPITAL LUNATE SIGMA SYMBOL
ϳ > j ;
ϴ > | Θ ;
ϵ > | ε ;
µ > | μ ;

# delete any trailing ' marks used for roundtripping

 < [Ππ] { \' } [Ss] ;
 < [Νν] { \' } $egammaLike ;

::NFC (NFD) ;

# MINIMAL FILTER GENERATED FOR: Latin-Greek/UNGEGN BACKWARD
:: ([[[:Latin:][:Mn:][:Me:]] ['\:?]]) ;
