Galilee to Unicode Encoding Converter

Given below is the map file to use with TECkit to convert legacy data composed with the Galilee Greek font to Unicode. This is now useable and has been tested, though not yet extensively. If you find errors, please let me know. I have noted a few occasional errors, so be sure to proofread the conversion. Hopefully I can pinpoint the particular problems and fix them in due time–but I may not have time right away. In particular, watch for the conversion of the semicolon (mid-dot; sometimes this becomes a spacing circumflex) and question mark (sometimes becomes a macron over the previous letter). I’ve also seen one instance in which an omicron with rough breathing and acute converted as two separate characters. My guess is that an unexpected sequence was used in the original Galilee text. [Later note: it’s possible that these conversion errors were due to the original file; the Galilee files I work with have been moved through at least one, sometimes two previous Greek fonts, and I think the errors I’ve noted may be due to characters from the previous font that were never correctly converted to Galilee. I’ve verified that at least two of the possible errors here are due to that in at least one document I’ve tested.]

TECkit must have a  compiled file, but the mapping on this page provides a “human-readable” form to work with. (Tab formatting doesn’t survive the copy and paste to html from a text file, so some spacing is a bit harder to read than it might be.) You can see a sample conversion on the demo page. Please read the information/comments in the map file below. I am NOT able to provide support for your use of this tool and accept no liability for your use of it.  Always work with copies of your files, never the original. If you don’t know how TECkit works, you’ll have to either figure it out for yourself or find someone who does. (There is documentation included in the download linked above.) I have no connection with the providers of TECkit, and they will not likely know anything about the materials provided here. Caveat emptor! (Remember what you’re paying for this! 🙂

It appears to be working correctly when converting text formatted in the Galilee Greek font to Unicode. I’ve tested both complete file conversions (in which all text is converted) as well as selective conversion of Galilee formatted text in MS Word documents. Both work very well and are very fast. I have not tried Unicode to Galilee conversion. I didn’t design it for that purpose and though it might work, I make no promises in that regard (nor am I going to expend a lot of time testing and debugging such conversion). (This is now v. 1.0.)

;Galilee.map
;Copyright (c) 2003 Rodney J. Decker

;Galilee

EncodingName "Decker-Greek_Galilee-2003"
DescriptiveName "Galilee Greek Encoding (Galilee)"

Version "1.0"
Contact "fonts 'at' ntresources.com" ;you'll have to "fix" the email link, this form avoids spam
RegistrationAuthority "Rodney J. Decker"
RegistrationName "Greek (Galilee)"

LHSFlags ()
RHSFlags (GeneratesNFC ExpectsNFC)

; Mapping table intended for use with the TECkit encoding converter available
; from SIL: <http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&cat_id=TECkit>.
; 
; The author of this table provides no support for TECkit (and only limited support
; for the mapping table itself--limited to correcting errors in the table as and if
; time permits). I cannot help you figure out how to use these tools to convert your
; data. Sorry. But since you've made use of my free font, I'm making some effort to
; facilitate you moving your data to Unicode format. (The Galilee font is, or will
; soon be, available in Unicode format.)
; 
; This mapping table is intended primarily to convert legacy data prepared with 
; the Galilee Greek font *to* Unicode. Although bidirectional conversion rules have
; been included below, the map has not been tested and debugged in the opposite
; direction (i.e., Unicode to byte/Galilee). Some rules have deliberately been
; specified as unidirectional.
; 
; Only koine Greek as it is used in the New Testament and related materials is included
; since that is the purpose of the Galilee font. If you have used if for classical Greek,
; etc., then you may not get a complete or satisfactory conversion.
; 
; Anyone who desires may adapt or modify this mapping table for use in another font.
; It may not be modified for different use with the Galilee font. If errors are noted,
; please contact the copyright holder (see above) so that corrections may be made.
; 
; Disclaimer: This mapping table has been prepared by a New Testament scholar, not 
; a programmer. There may be errors and a perfect conversion is not guaranteed.
; I accept no liability for your use of this file or the compiled version of it.
; Caveat emptor! There may also be easier or faster ways to design such a conversion 
; table, but this one works reasonably well.

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Pass(Byte_Unicode)

ByteDefault 0x9F
UniDefault replacement_character

; The following classes handle control codes, etc.

ByteClass [CTL] = ( 0x00 .. 0x1f 0x7f )
UniClass [CTL] = ( U+0000 .. U+001f U+007f )

[CTL] <> [CTL]

; The following rules will map the legacy byte encoding of the Galilee font to Unicode.

; This first section handles creating the precomposed characters in Unicode from the
; multiple characters used in Galilee. The overall order of this table follows first 
; the Greek Extended Unicode range (sequentially) and then the Greek range. Not all 
; characters have been included since the intended purpose if for koine/NT Greek. As
; a result, characters that might be needed for other forms of Greek are not included.
; (Since they are not included in the Galilee font either, this should not be a problem.)

; Greek Extended range
; col 1 (1F0) in Unicode chart, alpha

'aj' <> U+1F00 ; alpha smooth
'aJ' <> U+1F01 ; alpha rough
'a]' <> U+1F02 ; alpha smooth grave
'a}' <> U+1F03 ; alpha rough grave
'a[' <> U+1F04 ; alpha smooth acute
'a{' <> U+1F05 ; alpha rough acute
'a\' <> U+1F06 ; alpha smooth circumflex
'a|' <> U+1F07 ; alpha rough circumflex

')A' <> U+1F08 ; ALPHA smooth
'(A' <> U+1F09 ; ALPHA rough
'@A' <> U+1F0A ; ALPHA smooth grave
'%A' <> U+1F0B ; ALPHA rough grave
'!A' <> U+1F0C ; ALPHA smooth acute
'$A' <> U+1F0D ; ALPHA rough acute
'#A' <> U+1F0E ; ALPHA smooth circumflex
'^A' <> U+1F0F ; ALPHA rough circumflex

; col 2 (1F1) in Unicode chart, epsilon

'ej' <> U+1F10 ; epsilon smooth
'eJ' <> U+1F11 ; epsilon rough
'e]' <> U+1F12 ; epsilon smooth grave
'e}' <> U+1F13 ; epsilon rough grave
'e[' <> U+1F14 ; epsilon smooth acute
'e{' <> U+1F15 ; epsilon rough acute

')E' <> U+1F18 ; EPSILON smooth
'(E' <> U+1F19 ; EPSILON rough
'@E' <> U+1F1A ; EPSILON smooth grave
'%E' <> U+1F1B ; EPSILON rough grave
'!E' <> U+1F1C ; EPSILON smooth acute
'$E' <> U+1F1D ; EPSILON rough acute

; col 3 (1F2) in Unicode chart, eta

'hj' <> U+1F20 ; eta smooth
'hJ' <> U+1F21 ; eta rough
'h]' <> U+1F22 ; eta smooth grave
'h}' <> U+1F23 ; eta rough grave
'h[' <> U+1F24 ; eta smooth acute
'h{' <> U+1F25 ; eta rough acute
'h\' <> U+1F26 ; eta smooth circumflex
'h|' <> U+1F27 ; eta rough circumflex

')H' <> U+1F28 ; ETA smooth
'(H' <> U+1F29 ; ETA rough
'@H' <> U+1F2A ; ETA smooth grave
'%H' <> U+1F2B ; ETA rough grave
'!H' <> U+1F2C ; ETA smooth acute
'$H' <> U+1F2D ; ETA rough acute
'#H' <> U+1F2E ; ETA smooth circumflex
'^H' <> U+1F2F ; ETA rough circumflex

; col 4 (1F3) in Unicode chart, iota

'ij' <> U+1F30 ; iota smooth
'iJ' <> U+1F31 ; iota rough
'i]' <> U+1F32 ; iota smooth grave
'i}' <> U+1F33 ; iota rough grave
'i[' <> U+1F34 ; iota smooth acute
'i{' <> U+1F35 ; iota rough acute
'i\' <> U+1F36 ; iota smooth circumflex
'i|' <> U+1F37 ; iota rough circumflex

')I' <> U+1F38 ; IOTA smooth
'(I' <> U+1F39 ; IOTA rough
'@I' <> U+1F3A ; IOTA smooth grave
'%I' <> U+1F3B ; IOTA rough grave
'!I' <> U+1F3C ; IOTA smooth acute
'$I' <> U+1F3D ; IOTA rough acute
'#I' <> U+1F3E ; IOTA smooth circumflex
'^I' <> U+1F3F ; IOTA rough circumflex

; col 5 (1F4) in Unicode chart, omicron

'oj' <> U+1F40 ; omicron smooth
'oJ' <> U+1F41 ; omicron rough
'o]' <> U+1F42 ; omicron smooth grave
'o}' <> U+1F43 ; omicron rough grave
'o[' <> U+1F44 ; omicron smooth acute
'o[' <> U+1F45 ; omicron rough acute

')O' <> U+1F48 ; OMICRON smooth
'(O' <> U+1F49 ; OMICRON rough
'@O' <> U+1F4A ; OMICRON smooth grave
'%O' <> U+1F4B ; OMICRON rough grave
'!O' <> U+1F4C ; OMICRON smooth acute
'$O' <> U+1F4D ; OMICRON rough acute

; col 6 (1F5) in Unicode chart, upsilon

'uj' <> U+1F50 ; upsilon smooth
'uJ' <> U+1F51 ; upsilon rough
'u]' <> U+1F52 ; upsilon smooth grave
'u}' <> U+1F53 ; upsilon rough grave
'u[' <> U+1F54 ; upsilon smooth acute
'u{' <> U+1F55 ; upsilon rough acute
'u\' <> U+1F56 ; upsilon smooth circumflex
'u|' <> U+1F57 ; upsilon rough circumflex

'(U' <> U+1F59 ; IOTA rough
'%U' <> U+1F5B ; IOTA rough grave
'$U' <> U+1F5D ; IOTA rough acute
'^U' <> U+1F5F ; IOTA rough circumflex

; col 7 (1F6) in Unicode chart, omega

'wj' <> U+1F60 ; omega smooth
'wJ' <> U+1F61 ; omega rough
'w]' <> U+1F62 ; omega smooth grave
'w}' <> U+1F63 ; omega rough grave
'w[' <> U+1F64 ; omega smooth acute
'w{' <> U+1F65 ; omega rough acute
'w\' <> U+1F66 ; omega smooth circumflex
'w|' <> U+1F67 ; omega rough circumflex

')W' <> U+1F68 ; OMEGA smooth
'(W' <> U+1F69 ; OMEGA rough
'@W' <> U+1F6A ; OMEGA smooth grave
'%W' <> U+1F6B ; OMEGA rough grave
'!W' <> U+1F6C ; OMEGA smooth acute
'$W' <> U+1F6D ; OMEGA rough acute
'#W' <> U+1F6E ; OMEGA smooth circumflex
'^W' <> U+1F6F ; OMEGA rough circumflex

; col 8 (1F7) in Unicode chart, acute & grave

'a;' <> U+1F70 ; alpha grave
'av' <> U+1F71 ; alpha acute
'e;' <> U+1F72 ; epsilon grave
'ev' <> U+1F73 ; epsilon acute
'h;' <> U+1F74 ; eta grave
'hv' <> U+1F75 ; eta acute
'i;' <> U+1F76 ; iota grave
'iv' <> U+1F77 ; iota acute
'o;' <> U+1F78 ; omicron grave
'ov' <> U+1F79 ; omicron acute
'u;' <> U+1F7A ; upsilon grave
'uv' <> U+1F7B ; upsilon acute
'w;' <> U+1F7C ; omega grave
'wv' <> U+1F7D ; omega acute

; col 9 (1F8) in Unicode chart, alpha iota subscript

'aj/' <> U+1F80 ; alpha smooth iotasub
'aJ/' <> U+1F81 ; alpha rough iotasub
'a]/' <> U+1F82 ; alpha smooth grave iotasub
'a}/' <> U+1F83 ; alpha rough grave iotasub
'a[/' <> U+1F84 ; alpha smooth acute iotasub
'a{/' <> U+1F85 ; alpha rough acute iotasub
'a\/' <> U+1F86 ; alpha smooth circumflex iotasub
'a|/' <> U+1F87 ; alpha rough circumflex iotasub
; if typed in reverse order in Galilee, then use these "one way" rules:
'a/j' > U+1F80 ; alpha smooth iotasub
'a/J' > U+1F81 ; alpha rough iotasub
'a/]' > U+1F82 ; alpha smooth grave iotasub
'a/}' > U+1F83 ; alpha rough grave iotasub
'a/[' > U+1F84 ; alpha smooth acute iotasub
'a/{' > U+1F85 ; alpha rough acute iotasub
'a/\' > U+1F86 ; alpha smooth circumflex iotasub
'a/|' > U+1F87 ; alpha rough circumflex iotasub

; col 10 (1F9) in Unicode chart, eta iota subscript

'hj/' <> U+1F90 ; eta smooth iotasub
'hJ/' <> U+1F91 ; eta rough iotasub
'h]/' <> U+1F92 ; eta smooth grave iotasub
'h}/' <> U+1F93 ; eta rough grave iotasub
'h[/' <> U+1F94 ; eta smooth acute iotasub
'h{/' <> U+1F95 ; eta rough acute iotasub
'h\/' <> U+1F96 ; eta smooth circumflex iotasub
'h|/' <> U+1F97 ; eta rough circumflex iotasub
; if typed in reverse order in Galilee, then use these "one way" rules:
'h/j' > U+1F90 ; eta smooth iotasub
'h/J' > U+1F91 ; eta rough iotasub
'h/]' > U+1F92 ; eta smooth grave iotasub
'h/}' > U+1F93 ; eta rough grave iotasub
'h/[' > U+1F94 ; eta smooth acute iotasub
'h/{' > U+1F95 ; eta rough acute iotasub
'h/\' > U+1F96 ; eta smooth circumflex iotasub
'h/|' > U+1F97 ; eta rough circumflex iotasub

; col 11 (1FA) in Unicode chart, omega iota subscript

'wj/' <> U+1FA0 ; omega smooth iotasub
'wJ/' <> U+1FA1 ; omega rough iotasub
'w]/' <> U+1FA2 ; omega smooth grave iotasub
'w}/' <> U+1FA3 ; omega rough grave iotasub
'w[/' <> U+1FA4 ; omega smooth acute iotasub
'w{/' <> U+1FA5 ; omega rough acute iotasub
'w\/' <> U+1FA6 ; omega smooth circumflex iotasub
'w|/' <> U+1FA7 ; omega rough circumflex iotasub
; if typed in reverse order in Galilee, then use these "one way" rules:
'w/j' > U+1FA0 ; omega smooth iotasub
'w/J' > U+1FA1 ; omega rough iotasub
'w/]' > U+1FA2 ; omega smooth grave iotasub
'w/}' > U+1FA3 ; omega rough grave iotasub
'w/[' > U+1FA4 ; omega smooth acute iotasub
'w/{' > U+1FA5 ; omega rough acute iotasub
'w/\' > U+1FA6 ; omega smooth circumflex iotasub
'w/|' > U+1FA7 ; omega rough circumflex iotasub

; col 12 (1FB) in Unicode chart, more alphas, etc.

'a;/' <> U+1FB2 ; alpha grave iotasub
'a/' <> U+1FB3 ; alpha iotasub
'a;/' <> U+1FB4 ; alpha acute iotasub
'a:' <> U+1FB6 ; alpha circumflex 
'a:/' <> U+1FB7 ; alpha circumflex iotasub
; if typed in reverse order in Galilee, then use these "one way" rules:
'a/;' > U+1FB2 ; alpha grave iotasub
'a/;' > U+1FB4 ; alpha acute iotasub
'a/:' > U+1FB7 ; alpha circumflex iotasub

')' < U+1FBD ; coronis/contraction mark 

'/' <> U+1FBE ; iota subscript
' )' < space U+1FBF ; smooth breathing
')' <> U+1FBF ; psili, smooth breathing
')' > U+1FBF ; smooth breathing

; col 13 (1FC) in Unicode chart, more etas, etc.

':' <> U+1FC0 ; circumflex
'+' <> U+1FC1 ; circumflex diaeresis
'h;/' <> U+1FC2 ; eta grave iotasub
'h/' <> U+1FC3 ; eta iotasub
'hv/' <> U+1FC4 ; eta acute iotasub
'h:' <> U+1FC6 ; eta circumflex 
'h:/' <> U+1FC7 ; eta circumflex iotasub
; if typed in reverse order in Galilee, then use these "one way" rules:
'h/;' > U+1FC2 ; eta grave iotasub
'h/v' > U+1FC4 ; eta acute iotasub
'h/:' > U+1FC7 ; eta circumflex iotasub

'@' <> U+1FCD ; smooth grave
']' > U+1FCD ; smooth grave
'!' <> U+1FCE ; smooth acute
'[' > U+1FCE ; smooth acute
'#' <> U+1FCF ; smooth circumflex
'\' > U+1FCF ; smooth circumflex

; col 14 (1FD) in Unicode chart, more iotas, etc.

'i_' <> U+1FD2 ; iota diaeresis grave
'i=' <> U+1FD3 ; iota diaeresis acute
'i:' <> U+1FD6 ; iota circumflex
'i+' <> U+1FD7 ; iota diaeresis circumflex
'%' <> U+1FDD ; rough grave
'$' <> U+1FDE ; rough acute
'^' <> U+1FDF ; rough circumflex
'}' > U+1FDD ; rough grave
'{' > U+1FDE ; rough acute
'|' > U+1FDF ; rough circumflex

; col 15 (1FE) in Unicode chart, upsilon and rho, etc.

'u_' <> U+1FE2 ; upsilon diaeresis grave
'u=' <> U+1FE3 ; upsilon diaeresis acute
'rJ' <> U+1FE5 ; rho rough
'u:' <> U+1FE6 ; upsilon circumflex 
'u+' <> U+1FE7 ; upsilon diaeresis circumflex
'(R' <> U+1FEC ; rho rough
'_' <> U+1FED ; diaeresis grave
'=' <> U+1FEE ; diaeresis acute
';' <> U+1FEF ; grave

; col 16 (1FF) in Unicode chart, more omegas

'w;/' <> U+1FF2 ; omega grave iotasub
'w/' <> U+1FF3 ; omega iotasub
'wv/' <> U+1FF4 ; omega acute iotasub
'w:' <> U+1FF6 ; omega circumflex 
'w:/' <> U+1FF7 ; omega circumflex iotasub
; if typed in reverse order in Galilee, then use these "one way" rules
'w/;' > U+1FF2 ; omega grave iotasub
'w/v' > U+1FF4 ; omega acute iotasub
'w/:' > U+1FF7 ; omega circumflex iotasub

'v' <> U+1FFD ; acute
' (' < space U+1FFE ; rough breathing
'J' <> U+1FFE ; dasia, rough breathing
'(' > U+1FFE ; rough breathing

; Greek Unicode range and other characters
; This section handles the basic punctuation marks that are unchanged in Galilee,
; as well as digits and the basic alphabetical characters.

' ' <> space
'&' <> ampersand
'*' <> asterisk
',' <> comma
'.' <> full_stop
'~' <> U+00B7 ; mid-dot, = Greek semicolon
'`' <> U+002D ; hyphen

'0' <> digit_zero
'1' <> digit_one
'2' <> digit_two
'3' <> digit_three
'4' <> digit_four
'5' <> digit_five
'6' <> digit_six
'7' <> digit_seven
'8' <> digit_eight
'9' <> digit_nine
'?' <> semicolon ; canonical decomposition of Greek question mark

'A' <> greek_capital_letter_alpha
'B' <> greek_capital_letter_beta
'C' <> greek_capital_letter_chi
'D' <> greek_capital_letter_delta
'E' <> greek_capital_letter_epsilon
'F' <> greek_capital_letter_phi
'G' <> greek_capital_letter_gamma
'H' <> greek_capital_letter_eta
'I' <> greek_capital_letter_iota
'J' <> combining_reversed_comma_above ; psili, rough breathing mark
'K' <> greek_capital_letter_kappa
'L' <> greek_capital_letter_lamda
'M' <> greek_capital_letter_mu
'N' <> greek_capital_letter_nu
'O' <> greek_capital_letter_omicron
'P' <> greek_capital_letter_pi
'Q' <> greek_capital_letter_theta
'R' <> greek_capital_letter_rho
'S' <> greek_capital_letter_sigma
'T' <> greek_capital_letter_tau
'U' <> greek_capital_letter_upsilon
'V' <> greek_small_letter_final_sigma
'W' <> greek_capital_letter_omega
'X' <> greek_capital_letter_xi
'Y' <> greek_capital_letter_psi
'Z' <> greek_capital_letter_zeta

'a' <> greek_small_letter_alpha
'b' <> greek_small_letter_beta
'c' <> greek_small_letter_chi
'd' <> greek_small_letter_delta
'e' <> greek_small_letter_epsilon
'f' <> greek_small_letter_phi
'g' <> greek_small_letter_gamma
'h' <> greek_small_letter_eta 
'i' <> greek_small_letter_iota
'j' <> combining_comma_above ; dasia, smooth breathing mark
'k' <> greek_small_letter_kappa
'l' <> greek_small_letter_lamda
'm' <> greek_small_letter_mu
'n' <> greek_small_letter_nu
'o' <> greek_small_letter_omicron
'p' <> greek_small_letter_pi
'q' <> greek_small_letter_theta
'r' <> greek_small_letter_rho
's' <> greek_small_letter_sigma
't' <> greek_small_letter_tau
'u' <> greek_small_letter_upsilon
'w' <> greek_small_letter_omega
'x' <> greek_small_letter_xi
'y' <> greek_small_letter_psi
'z' <> greek_small_letter_zeta

; Other characters from the "upper ASCII" range of the Galilee font

0x81 <> U+00A6 ; vertical line
0x82 <> U+00A7 ; section mark
0x83 > U+0308 ; diaeresis
0x84 > U+002D ; hyphen
0x85 <> U+0304 ; macron
0x86 <> U+00B0 ; degree
0x87 <> U+00B4 ; spacing acute
0x88 <> U+00B6 ; paragraph mark
0x89 <> U+2135 ; aleph
0x8A <> U+1D510 ; Majority text symbol
0x8B <> U+1D513 ; papyri symbol
0x8C <> U+03E1 ; sampi
0x8D > U+005D ; closing double square bracket (incorrect! no other option!)
0x8E <> U+03D9 ; koppa
0x8F <> U+005D ; closing single square bracket
0x90 <> U+03DD ; digamma
0x9D <> U+2020 ; single dagger
0x9E <> U+2021 ; double dagger
0x9F <> U+2022 ; bullet
0xA0 <> U+2026 ; ellipsis
0xA1 <> U+03F3 ; consonantal iota
0xA2 <> U+03DB ; stigma
0xA3 > U+005B ; opening double square bracket (incorrect! no other option!)
0xA4 <> U+005B ; opening single square bracket

; Other misc. conversions, mostly for Unicode to byte use (though that 
; is not the primary purpose of this map; use it at your own discretion).
; Many from Combining Diacritics range.

';' < U+0300 ; grave
'v' < U+0301 ; acute
':' < U+0302 ; circumflex
'-' < U+0308 ; diaeresis
'j' < U+0313 ; smooth breathing
'J' < U+0314 ; rough breathing
':' < U+0342 ; circumflex
'j' < U+0343 ; combining koronis
'/' < U+0345 ; iota subscript
'b' < U+03D0 ; beta alt
'q' < U+03D1 ; theta alt
'Y' < U+03D2 ; UPSILON alt
0x8E < U+03D8 ; KOPPA
0xA2 < U+03DA ; STIGMA
0x8C < U+03E0 ; SAMPI

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; (end of file)

Posted 9/12/03; this page last edited
02/19/2007