212 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| --functions
 | ||
| 
 | ||
| -- 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 mod_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
 | ||
| 		return transcribed_text 
 | ||
| 	end
 | ||
| end |