@@ -1,244 +0,0 @@
--functions
function CopyToClipboard ( textString )
outClipFile , err = io.open ( " clipboardTempFile " , ' w ' )
if err then
print ( " [Error Opening Clipboard Temporary File for Writing] " )
return
end
outClipFile : write ( textString , ' \n ' )
outClipFile : close ( )
command = ' cat " ' .. " clipboardTempFile " .. ' " | xclip -selection clipboard & '
os.execute ( command )
os.execute ( " rm clipboardTempFile " )
end
function PrintPosition ( string )
local print_text = " "
for i = 1 , string.len ( string ) do
while i >= 10 do i = i - 10 end
print_text = print_text .. tostring ( i )
end
print ( " pos: " .. print_text )
print_text = " "
for i = 1 , string.len ( string ) do
i = math.floor ( i / 10 )
while i >= 10 do i = i - 10 end
if i == 0 then i = " " end
print_text = print_text .. tostring ( i )
end
print ( " " .. print_text )
end
-- DATA
-- vowels
vowel_table = { " a " , " e " , " i " , " o " , " u " }
symbol_vowel = { " " , " " , " " , " " , " " }
symbol_extending_vowel = { " " , " " , " " , " " , " " }
-- consonants
consonant_table = { " g " , " sh " , " r " , " ny " , " ch " , " n " , " y " , " f " , " t " , " k " , " w " , " l " , " p " , " b " , " d " , " h " , " m " }
symbol_consonant = { " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " }
symbol_extending_consonant = { " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " }
-- composites
composing_consonant_table = { " g " , " sh " , " r " , " ny " , " ch " , " m " , " y " , " f " , " t " , " k " , " w " , " l " , " p " , " b " , " d " , " h " }
symbol_composite = {
{ " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " } ,
{ " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " } ,
{ " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " } ,
{ " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " } ,
{ " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " }
}
-- program start
function convertToHeonian ( text )
local step = true -- this is set to false when a conclusion has been reached
local transcribed = false
local transcribed_text = " "
local debug = false
local autocopy = false
for _ , v in pairs ( arg ) do
if v == " -v " or v == " --verbose " then debug = true end
if v == " -c " or v == " --copy " then autocopy = true end
end
-- if its necessary to run the script, then we continue :D
if step then
-- prepare text
-- 1. add syllable marker at start if it isn't already present.
if string.sub ( text , 1 , 1 ) ~= " . " then text = " . " .. text end
-- 2. turn [x] into [ksh]
text = string.gsub ( text , " x " , " ksh " )
-- 3. turn [z] into [dsh]
text = string.gsub ( text , " z " , " d.sh " )
-- 4. turn [j] into [y]
text = string.gsub ( text , " j " , " y " )
-- read input and transcribe
-- debug log
if debug then print ( " " ) end
if debug then print ( " src: " .. text ) end
if debug then PrintPosition ( text ) end
-- sort through all the letters
local i = 1
while i < string.len ( text ) + 1 do
local pos = i
-- know current pos, since we will be modifying i but still evaluating from the position
local char_step = true
-- this is false when a conclusion has been reached about what symbol does the next segment correspond to
local debug_s = " "
-- debug string
local new_syllable = false
-- this is true when a new syllable begins, and is used to distinguish normal vowels and consonants from trailing ones
if i == 1 then new_syllable = true end
if string.sub ( text , i , i ) == " \t "
or string.sub ( text , i , i ) == " - " then -- check if its an unsupported symbol to skip it.
-- adjust i
i = i + 1
pos = i
char_step = false
end
-- init checkup
if string.sub ( text , i , i ) == " . "
or string.sub ( text , i , i ) == " ' "
or string.sub ( text , i , i ) == " "
or string.sub ( text , i , i ) == " ’ " then -- this forces the new syllable, since . is the syllable separator, also skips the symbol and repositions
if string.sub ( text , i , i ) == " " then -- spaces are exception
transcribed_text = transcribed_text .. " "
new_syllable = true
end
-- debug log
if debug then print ( " " ) end
if debug then print ( " @[ " .. tostring ( i ) .. " ] " .. debug_s .. " new syllable MARKER found " ) end
-- start syllable
new_syllable = true
debug_s = " "
-- adjust i
i = i + 1
-- debug log
if debug then print ( " >>> adjusting by (1) from [ " .. pos .. " ] to [ " .. i .. " ] " ) end
-- adjust pos
pos = i
end
-- debug log
if debug then print ( " " ) end
if debug then print ( " @[ " .. tostring ( i ) .. " ] " .. debug_s .. " checking string: " .. string.sub ( text , i , i ) ) end -- debug print positional info
-- lets check if it is a composite
if char_step == true then
local cons_id = 0
local length = 0
-- check if its valid consonant for a composite
for _ , consonant in pairs ( composing_consonant_table ) do
cons_id = cons_id + 1
-- get consonant length its checking against, so we can properly compare.
length = string.len ( consonant )
-- debug log
--if debug then print(" checking composite consonant: " .. composing_consonant_table[cons_id]) end
if string.sub ( text , i , i + length - 1 ) == consonant then
-- debug log
if debug then print ( " (!) valid consonant: " .. composing_consonant_table [ cons_id ] ) end
-- check if its a valid vowel AFTER the valid consonant, while sorting through all vowels
local vowel_id = 0
for _ , vowel in pairs ( vowel_table ) do
vowel_id = vowel_id + 1
--if debug then print(" checking composite: " .. composing_consonant_table[cons_id]..vowel_table[vowel_id]) end
if string.sub ( text , i + length , i + length ) == vowel then
-- adjust by consonant length + vowel
i = i + string.len ( consonant ) + 1
-- debug log
if debug then print ( " (!) valid composite: " .. consonant .. vowel .. " , length: " .. length + 1 ) end
if debug then print ( " >>> adjusting by ( " .. tostring ( length + 1 ) .. " ) from [ " .. pos .. " ] to [ " .. i .. " ] " ) end
-- transcribe; conclude;
transcribed_text = transcribed_text .. symbol_composite [ vowel_id ] [ cons_id ]
char_step = false
break
end
end
-- no need to check for more consonants if one is valid
break
end
end
if debug then if char_step ~= false then print ( " [!] invalid composite " ) end end
end
-- lets check if it is a non composite vowel
if char_step == true then
local id = 0
local length = 0
for _ , vowel in pairs ( vowel_table ) do
id = id + 1
-- get vowel length its checking against, so we can properly compare.
length = string.len ( vowel )
-- debug log
--if debug then print(" checking standalone vowel: " .. vowel_table[id]) end
if string.sub ( text , i , i + length - 1 ) == vowel then
i = i + string.len ( vowel )
-- debug log
if debug then print ( " (!) valid vowel: " .. vowel_table [ id ] ) end
if debug then print ( " >>> adjusting by ( " .. tostring ( length ) .. " ) from [ " .. pos .. " ] to [ " .. i .. " ] " ) end
-- transcribe; conclude;
local table = nil
if new_syllable then
table = symbol_vowel
else
table = symbol_extending_vowel
end
transcribed_text = transcribed_text .. table [ id ]
char_step = false
break
end
end
end
-- lets check if it is a non composite consonant
if char_step == true then
local id = 0
local length = 0
for _ , consonant in pairs ( consonant_table ) do
id = id + 1
-- get consonant length its checking against, so we can properly compare.
length = string.len ( consonant )
-- debug log
--if debug then print(" checking standalone consonant: " .. consonant_table[id]) end
if string.sub ( text , i , i + length - 1 ) == consonant then
i = i + string.len ( consonant )
-- debug log
if debug then print ( " (!) valid consonant: " .. consonant_table [ id ] ) end
if debug then print ( " >>> adjusting by ( " .. tostring ( length ) .. " ) from [ " .. pos .. " ] to [ " .. i .. " ] " ) end
-- transcribe; conclude;
local table = nil
if new_syllable then
table = symbol_consonant
else
table = symbol_extending_consonant
end
transcribed_text = transcribed_text .. table [ id ]
char_step = false
break
end
end
end
-- if no idea, move on, and just be confused. prints ?
if char_step == true then
-- debug log
if debug then print ( " [!] no idea; moving on to next [ " .. pos + 1 .. " ] " ) end
-- no idea
transcribed_text = transcribed_text .. string.sub ( text , i , i )
i = i + 1
-- debug log
if debug then print ( " >>> adjusting by (1) from [ " .. pos .. " ] to [ " .. i .. " ] " ) end
end
end
-- output
if autocopy then CopyToClipboard ( string.sub ( transcribed_text , 0 , - 1 ) ) end
return transcribed_text
end
end