#!/usr/bin/env python # look in newbong import re A='A' B='B' S='S' s='s' F='F' X='X' NCLINE = 0 global NCWORD,CWORD AKSAR={ 'k' :[B,'k'], 'kh' :[B,'kh'], 'g' :[B,'g'], 'gh' :[B,'gh'], 'ng' :[B,'NG'], 'ch' :[B,'c'], '^ch' :[B,'ch'], 'j' :[B,'j'], 'jh' :[B,'jh'], '^y' :[B,'NJ'], '_n' :[B,'NJ'], 't' :[B,'T'], '^th' :[B,'Th'], 'd' :[B,'D'], 'dh' :[B,'Dh'], '^n' :[B,'N'], '_t' :[B,'t'], 'th' :[B,'th'], '_d' :[B,'d'], '_dh' :[B,'dh'], 'n' :[B,'n'], 'p' :[B,'p'], 'ph' :[B,'ph'], 'f' :[B,'ph'], 'b' :[B,'b'], 'bh' :[B,'bh'], 'v' :[B,'bh'], 'm' :[B,'m'], 'M' :[F,'M'], '^j' :[B,'J'], 'J' :[B,'J'], 'r' :[B,'r'], 'R' :[F,'R'], 'l' :[B,'l'], 'L' :[F,'L'], 'W' :[F,'W'], 'V' :[F,'W'], 'h' :[B,'H'], 'kk' :[B,'kK'], 'kkm' :[B,'kK/N'], 'sh' :[B,'sh'], '^s' :[B,'Sh'], '^sh' :[B,'Sh'], 's' :[B,'s'], '^r' :[B,'rh'], '^rh' :[B,'rhh'], 'y' :[B,'y'], 'Y' :[F,'Y'], 'JY' :[F,'Y'], '__t' :[B,'t//'], '^ng' :[B,'NNG'], ':h' :[B,'h'], '^' :[F,'NN'], '_' :[F,':/'], 'A' :[S,'A'], 'AA' :[S,'Aa'], 'I' :[S,'I'], 'II' :[S,'II'], 'U' :[S,'U'], 'UU' :[S,'UU'], 'RI' :[S,'RR'], 'E' :[S,'E'], 'OI' :[S,'OI'], 'O' :[S,'O'], 'OU' :[S,'OU'], 'a' :[X,'o',1], 'aa' :[s,'a',1], 'i' :[s,'i',-1], 'ii' :[s,'ii',1], 'u' :[s,'u',1], 'uu' :[s,'uu',1], 'RII' :[s,'rR',1], 'e' :[s,'e',-1], 'oi' :[s,'oi',-2], 'oo' :[s,'oo',11], 'o' :[X,'o',1], 'ou' :[s,'ou',12], '.' :[F,'.'], '..' :[F,'..'], '...' :[F,'...'], '|' :[F,'|'], '~' :[F,'~'], '`' :[F,'`'], '!' :[F,'!'], '1' :[F,'1'], '2' :[F,'2'], 'at' :[F,'@'], '#' :[F,'#'], '3' :[F,'3'], '$' :[F,'$'], '4' :[F,'4'], '%' :[F,'%'], '5' :[F,'5'], '6' :[F,'6'], '&' :[F,'&'], '7' :[F,'7'], '*' :[F,'*'], '8' :[F,'8'], '(' :[F,'('], '9' :[F,'9'], ')' :[F,')'], '0' :[F,'0'], 'dash' :[F,'-'], '+' :[F,'+'], '=' :[F,'='], '|' :[F,'|'], '{' :[F,'{'], '[' :[F,'['], '}' :[F,'}'], ']' :[F,']'], ':' :[F,':'], ';' :[F,';'], '"' :[F,'"'], "'" :[F,"'"], '<' :[F,'<'], ',' :[F,','], '>' :[F,'>'], '.' :[F,'.'], '?' :[F,'?'], '/' :[F,'/']} CATCODES = {'SS' :[S,'','','',1], 'SB' :[B,'','','',1], 'BS' :[S,'','','',1], 'BB' :[B,'','/','',1], 'BF' :[F,'','','',1], 'Bs1' :[S,'','','',1], 'Bs-1':[S,'\*','','*',1], 'Bs-2':[S,'\*','','*{oi}',0], 'Bs11':[S,'\*','','*ea',0], 'Bs12':[S,'\*','','*eou',0], 'Fs1' :[S,'','','',1], 'Fs-1':[S,'\*','','*',1], 'Fs-2':[S,'\*','','*{oi}',0], 'Fs11':[S,'\*','','*ea',0], 'Fs12':[S,'\*','','*eou',0], 'FF' :[F,'','','',1], 'AX' :[F,'','','',1]} def blocked(line): #print('@ blocked', line , '->',) m = sre.findall('@[^@]+@',line) outline = line if not m : #print(outline) return(outline) else: for i in range(len(m)): s=m[i][:-1].replace(' ','%X%') outline = outline.replace(m[i],s,1) #print(outline) return(outline) def unblock(line): #print('@unblock', line, '->',) m = sre.findall('@[^\s]+',line) outline = line if not m : #print(outline) return(outline) else: for i in range(len(m)): s=m[i].replace('@','').replace('%X%',' ') outline = outline.replace(m[i],s) #print(outline) return(outline) def printamp(line): #print('@unblock', line, '->',) m = sre.findall('#AT',line) outline = line if not m : #print(outline) return(outline) else: for i in range(len(m)): outline = outline.replace('#AT','@') #print(outline) return(outline) def readsyll(syll): syllparts=[] start = 0; end = len(syll) while syll[start : end]: slice = syll[start : end] #print(slice) if AKSAR.has_key(slice): syllparts.append(AKSAR[slice]) start = start + len(slice) end = len(syll) else : end = end -1 return(syllparts) def fuse(list1,list2): global CCATCODE #print(list1,list2) Type1 = list1[0] Type2 = list2[0] if Type2 == s: Type3 = str(list2[2]) elif Type2 == X: Type1=A Type3='' else: Type3 ='' Type = Type1+Type2+Type3 #print('Type:', Type) try: CATCODE = CATCODES[Type] TARGET = CATCODE[0] PREFIX = CATCODE[1] MIDFIX = CATCODE[2] POSTFIX = CATCODE[3] FLAG = CATCODE[4] #print('TGT:', TARGET, PREFIX,MIDFIX,POSTFIX,FLAG) #print('RAWC', AKSAR[list1[1]][1],AKSAR[list2[1]][1]) c1=list1[1] c2=list2[1] if FLAG == 1 : c = PREFIX + c1 + MIDFIX + POSTFIX + c2 else : c = PREFIX + c1 + MIDFIX + POSTFIX fused = [TARGET,c] #print(CATCODE) return(fused) except KeyError: print('\n ERROR AT LINE:', NCLINE, 'WORD:',NCWORD, '(',CWORD,')') return(['ERROR','UNKNOWN CATCODE']) def fuseatoms(syll): slist=readsyll(syll); #print(slist) lslist=len(slist); l0=slist[0]; for i in range(1,lslist): nextitem = slist[i] l0=fuse(l0,nextitem) return(l0[1]) def fuseword(wrd): if wrd[0] == '@' : return(wrd) syllables = wrd.split('-') w0='' for eachsyll in syllables: syll=eachsyll thesyll = fuseatoms(syll) w0 = w0 + thesyll #print('FUSED WORD',w0) return(w0) def fuseline(line): global NCWORD,CWORD NCWORD = 0 #line = blocked(line) words = line.split() l0='' for eachword in words: NCWORD=NCWORD+1 word = eachword CWORD=word theword=fuseword(word) #print('XX',theword) l0=l0+' '+theword #print('FUSED LINE', l0) return(l0) # The main program import sys OK=1 finnam = sys.argv[1] foutnam = finnam.split('.')[0] + '.' + 'tex' fin = open(finnam,'rt') fout = open(foutnam,'wt') textin = fin.readlines() nlines = len(textin) textout = [] fin.close() for eachline in textin: NCLINE = NCLINE+1 if eachline[0] == '#' : lineout = eachline[1:] elif eachline[0] == '\\' : lineout = eachline elif eachline == '\n': lineout = eachline else : line1 = eachline.strip() line2 = blocked(line1) lineout = fuseline(line2) + '\n' lineout = lineout[1:] #print(':::', lineout) if lineout.find('UNKNOWN CATCODE') == -1 : lineout = unblock(lineout) #print(':::', lineout) textout.append(printamp(lineout)) else : OK = 0 fout.close() if OK == 1: fout.writelines(textout) fout.close() print('done') else: print('Unknown CATCODE, Fix The errors and try again')