# Ethiopic Character Classes

## From Regexp::Ethiopic

### Equivalence of Family (row) and Equivalence of Form (column)

| [#1#] | [#2#] | [#3#] | [#4#] | [#5#] | [#6#] | [#7#] | [#8#] | [#9#] | [#10#] | [#11#] | [#12#]
--- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
[#ሀ#] | ሀ | ሁ | ሂ | ሃ | ሄ | ህ | ሆ |  |  |  |  |
[#ለ#] | ለ | ሉ | ሊ | ላ | ሌ | ል | ሎ |  |  |  | ሏ |
[#ሐ#] | ሐ | ሑ | ሒ | ሓ | ሔ | ሕ | ሖ |  |  |  | ሗ |
[#መ#] | መ | ሙ | ሚ | ማ | ሜ | ም | ሞ |  |  |  | ሟ |
[#ሠ#] | ሠ | ሡ | ሢ | ሣ | ሤ | ሥ | ሦ |  |  |  | ሧ |
[#ረ#] | ረ | ሩ | ሪ | ራ | ሬ | ር | ሮ |  |  |  | ሯ |
[#ሰ#] | ሰ | ሱ | ሲ | ሳ | ሴ | ስ | ሶ |  |  |  | ሷ |
[#ሸ#] | ሸ | ሹ | ሺ | ሻ | ሼ | ሽ | ሾ |  |  |  | ሿ |
[#ቀ#] | ቀ | ቁ | ቂ | ቃ | ቄ | ቅ | ቆ | ቈ | ቍ | ቊ | ቋ | ቌ
[#ቐ#] | ቐ | ቑ | ቒ | ቓ | ቔ | ቕ | ቖ | ቘ | ቝ | ቚ | ቛ | ቜ
[#በ#] | በ | ቡ | ቢ | ባ | ቤ | ብ | ቦ |  |  |  | ቧ |
[#ቨ#] | ቨ | ቩ | ቪ | ቫ | ቬ | ቭ | ቮ |  |  |  | ቯ |
[#ተ#] | ተ | ቱ | ቲ | ታ | ቴ | ት | ቶ |  |  |  | ቷ |
[#ቸ#] | ቸ | ቹ | ቺ | ቻ | ቼ | ች | ቾ |  |  |  | ቿ |
[#ኀ#] | ኀ | ኁ | ኂ | ኃ | ኄ | ኅ | ኆ | ኈ | ኍ | ኊ | ኋ | ኌ
[#ነ#] | ነ | ኑ | ኒ | ና | ኔ | ን | ኖ |  |  |  | ኗ |
[#ኘ#] | ኘ | ኙ | ኚ | ኛ | ኜ | ኝ | ኞ |  |  |  | ኟ |
[#አ#] | አ | ኡ | ኢ | ኣ | ኤ | እ | ኦ |  |  |  | ኧ |
[#ከ#] | ከ | ኩ | ኪ | ካ | ኬ | ክ | ኮ | ኰ | ኵ | ኲ | ኳ | ኴ
[#ኸ#] | ኸ | ኹ | ኺ | ኻ | ኼ | ኽ | ኾ | ዀ | ዅ | ዂ | ዃ | ዄ
[#ወ#] | ወ | ዉ | ዊ | ዋ | ዌ | ው | ዎ |  |  |  |  |
[#ዐ#] | ዐ | ዑ | ዒ | ዓ | ዔ | ዕ | ዖ |  |  |  |  |
[#ዘ#] | ዘ | ዙ | ዚ | ዛ | ዜ | ዝ | ዞ |  |  |  | ዟ |
[#ዠ#] | ዠ | ዡ | ዢ | ዣ | ዤ | ዥ | ዦ |  |  |  | ዧ |
[#የ#] | የ | ዩ | ዪ | ያ | ዬ | ይ | ዮ |  |  |  |  |
[#ደ#] | ደ | ዱ | ዲ | ዳ | ዴ | ድ | ዶ |  |  |  | ዷ |
[#ዸ#] | ዸ | ዹ | ዺ | ዻ | ዼ | ዽ | ዾ |  |  |  | ዿ |
[#ጀ#] | ጀ | ጁ | ጂ | ጃ | ጄ | ጅ | ጆ |  |  |  | ጇ |
[#ገ#] | ገ | ጉ | ጊ | ጋ | ጌ | ግ | ጎ | ጐ | ጕ | ጒ | ጓ | ጔ
[#ጘ#] | ጘ | ጙ | ጚ | ጛ | ጜ | ጝ | ጞ |  |  |  |  |
[#ጠ#] | ጠ | ጡ | ጢ | ጣ | ጤ | ጥ | ጦ |  |  |  | ጧ |
[#ጨ#] | ጨ | ጩ | ጪ | ጫ | ጬ | ጭ | ጮ |  |  |  | ጯ |
[#ጰ#] | ጰ | ጱ | ጲ | ጳ | ጴ | ጵ | ጶ |  |  |  | ጷ |
[#ጸ#] | ጸ | ጹ | ጺ | ጻ | ጼ | ጽ | ጾ |  |  |  | ጿ |
[#ፀ#] | ፀ | ፁ | ፂ | ፃ | ፄ | ፅ | ፆ |  |  |  |  |
[#ፈ#] | ፈ | ፉ | ፊ | ፋ | ፌ | ፍ | ፎ |  |  |  | ፏ |
[#ፐ#] | ፐ | ፑ | ፒ | ፓ | ፔ | ፕ | ፖ |  |  |  | ፗ |

### Character Class Aliases

Alias | Equivalence of Form
--- | ---
[:ግዕዝ:] [:geez:] | [#1#]
[:ካዕብ:] [:kaib:] | [#2#]
[:ሣልስ:] [:salis:] | [#3#]
[:ራብዕ:] [:rabi:] | [#4#]
[:ኃምስ:] [:hamis:] | [#5#]
[:ሳድስ:] [:sadis:] | [#6#]
[:ሳብዕ:] [:sabi:] | [#7#]
[:ዘመደ፡ግዕዝ:] [:zemede:geez:] | [#8#]
[:ዘመደ፡ካዕብ:] [:zemede:kaib:] | [#9#]
[:ዘመደ፡ሣልስ:] [:zemede:salis:] | [#10#]
[:ዘመደ፡ራብዕ:] [:zemede:rabi:] | [#11#]
[:ዘመደ፡ኃምስ:] [:zemede:hamis:] | [#12#]
Other Class | Expansion
--- | ---
[:አኃዝ:] [:ahaz:] | [፩-፼]

## From Regexp::Ethiopic::Amharic

### Equivalence in Phono-Orthography
Class | Perl RE Expansion
--- | ---
[=ሀ=] [=ሐ=] [=ሃ=] [=ሓ=] [=ኀ=] [=ኃ=] [=ኻ=] | [ሀሃሐሓኀኃኻ]
[=ሁ=] [=ሑ=] [=ኁ=] [=ኹ=] | [ሁሑኁኹ]
[=ሂ=] [=ሒ=] [=ኂ=] [=ኺ=] | [ሂሒኂኺ]
[=ሄ=] [=ሔ=] [=ኄ=] [=ኼ=] | [ሄሔኄኼ]
[=ህ=] [=ሕ=] [=ኅ=] [=ኽ=] | [ህሕኅኽ]
[=ሆ=] [=ሖ=] [=ኆ=] [=ኈ=] [=ኾ=] [=ዀ=] | [ሆሖኆኈኾዀ]
[=ሗ=] [=ኋ=] [=ዃ=]
| [ሗኋዃ]
[=ሰ=] [=ሠ=] | [ሰሠ]
[=ሱ=] [=ሡ=] | [ሱሡ]
[=ሲ=] [=ሢ=] | [ሲሢ]
[=ሳ=] [=ሣ=] | [ሳሣ]
[=ሴ=] [=ሤ=] | [ሴሤ]
[=ስ=] [=ሥ=] | [ስሥ]
[=ሶ=] [=ሦ=] | [ሶሦ]
[=ሷ=] [=ሧ=] | [ሷሧ]
[=ቁ=] [=ቍ=] | [ቁቍ]
[=ቆ=] [=ቈ=] | [ቆቈ]
[=አ=] [=ዐ=] [=ኣ=] [=ዓ=] | [አኣዐዓ]
[=ኡ=] [=ዑ=] | [ኡዑ]
[=ኢ=] [=ዒ=] | [ኢዒ]
[=ኤ=] [=ዔ=] | [ኤዔ]
[=እ=] [=ዕ=] | [እዕ]
[=ኦ=] [=ዖ=] | [ኦዖ]
[=ኮ=] [=ኰ=] | [ኮኰ]
[=ጎ=] [=ጐ=] | [ጎጐ]
[=ጸ=] [=ፀ=] | [ጸፀ]
[=ጹ=] [=ፁ=] | [ጹፁ]
[=ጺ=] [=ፂ=] | [ጺፂ]
[=ጻ=] [=ፃ=] | [ጻፃ]
[=ጼ=] [=ፄ=] | [ጼፄ]
[=ጽ=] [=ፅ=] | [ጽፅ]
[=ጾ=] [=ፆ=] | [ጾፆ]

### Equivalence of Families

Class | Perl RE Expansion
--- | ---
[=#ሀ#=] [=#ሐ#=] [=#ኀ#=] [=#ኸ#=] | [ሀ-ሆሐ-ሗኀ-ኆኈ-ኍኸ-ኾዀ-ዅ]
[=#ሰ#=] [=#ሠ#=] | [ሰ-ሷሠ-ሧ]
[=#አ#=] [=#ዐ#=] | [አ-ኧዐ-ዖ]
[=#ጸ#=] [=#ፀ#=] | [ጸ-ጿፀ-ፆ]

### Notes on Functional Use

The overloading of Perl's regular expressions mechanism is the preferred usage for the Regexp::Ethiopic package. However, the overloading mechanism only applies to the constant part of the RE. The following would not be handled by the Regexp::Ethipic package as expected:

    use Regexp::Ethiopic 'overload';

    my $x = "ከ";
        :
        :
    	if ( /[#$x#]/ ) {
    	      :
    	      :
    	}

The package never gets to see the variable `$x` to then perform the RE expansion. The work around is to use the package as per:

    use Regexp::Ethiopic 'overload';

    my $x = "ከ";
        :
        :
    	my $re = Regexp::Ethiopic::getRe ( "[#$x#]" );

    	if ( /$re/ ) {
    	      :
    	      :
    	}

This works as expected at the cost of one extra step. The overloading and functional modes of the Regexp::Ethiopic package may be used together without conflict.

### Notes on Notation

The initial philosophy applied to syllabic character class development was to stick with existing POSIX definitions and notation ([=x=], [:x:], etc) and simply apply them in the context of a syllabary. Shoe-horning syllabic classes into POSIX norms has proven at times to be both awkward and confusing. As this package is experimental, a clean break is made at this time from previously proposed notations and class symbols are used that appear to be intuitive and easy to type.

In large part, a complication for working with Ethiopic character classes easily has been the difference between greater number of Ethiopic classes and available (while somewhat applicable) POSIX abstractions. There are four types of character equivalence that are of interest in Ethiopic regular expressions:

The syllable x is:

- [#xe#]: a member of the "xe" family.
- [#\d#]: in the syllabic form of \d.
- [=y=]: homophonically equivalent in writing to other syllables in phoneme char "y".
- [=#ze#=]: a member of a family that is homophonically equivalent in writing to other families (family equivalence "ze").

The choice of # has been made at this time for no other reason than that symbol itself looks like the grid that the syllables are invariably presented in. The interpretation of the character between #s is made by the character's context as either a letter or numeral. This may prove to be a good neumanic device.

Notation is of course subject to change. Putting theory into practice (and code!) and experimentation is the only real way to shake out the wilburries. Once settled GUS notation will be updated accordingly and I'll get back to IPA based pattern matching with GUS (aka "folding script"). Honest, for real this time... ;-)

#### References

- The Grand Unified Syllabary Project
- An Introduction to Syllabaries and Syllabic Pattern Matching
- Ethiopic Character Classes (exert, 2001)
- Developing Amharic Regular Expressions in Perl (2/99)
- Thoughts on Regular Expressions for Ethiopic (9/97)