def frac(self, input, start, rting=()): '''Translates fractions into Nemeth. Returns touple as above''' numerator = get_arg(input, start) if numerator[1] < len(input): denominator = get_arg(input, numerator[1]) else: denominator = ("", numerator[1], numerator[1]) if numerator[0].isdigit() and denominator[0].isdigit(): translation = numerator[0] + "/" + denominator[0] if rting != (): for j in range(len(numerator[0])): self.rt.append((rting[1] + j, rting[0] + numerator[2] + j)) for j in range(len(denominator[0])): self.rt.append((rting[1] + j + 1 + len(numerator[0]), rting[0] + denominator[2] + j)) else: if rting == (): translation = "?" + self.translate( numerator[0]) + "/" + self.translate(denominator[0]) + "#" else: transnum = self.translate( numerator[0], (rting[0] + numerator[2], rting[1] + 1)) transden = self.translate( denominator[0], (rting[0] + denominator[2], rting[1] + len(transnum) + 2)) translation = "?" + transum + "/" + transden + "#" return (translation, denominator[1])
def frac(self,input,start,rting=()): '''Translates fractions into ueb. Returns touple as above''' numerator=get_arg(input,start) denominator=get_arg(input,numerator[1]) if str(numerator[0]).isdigit () and str(denominator[0]).isdigit(): translation = "#" for number in numerator[0]: translation+=self.upperNumbers[int(number)] translation+="/" for number in denominator[0]: translation+=self.upperNumbers[int(number)] if rting != (): for j in range(len(numerator[0])): self.rt.append((rting[1]+j+1,rting[0]+numerator[2]+j)) for j in range(len(denominator[0])): self.rt.append((rting[1]+j+2+len(numerator[0]),rting[0]+denominator[2]+j)) self.lastnumber=denominator[1] else: # complex fraction self.lastnumber = -1 if rting != (): transnum=self.translate(numerator[0],(rting[0]+numerator[2],rting[1]+2)) self.lastnumber = -1 transden=self.translate(denominator[0],(rting[0]+denominator[2],rting[1]+len(transnum)+4)) translation=";("+transum+"./"+transden+";)" else: translation = ";("+self.translate (numerator[0])+"./" self.lastnumber = -1 translation+=self.translate(denominator[0])+";)" return (translation, denominator[1])
def sqrt(self,input,start): '''Translates roots into speech. returns touple.''' if self.sqrt_with_two_args.match(input): first_arg =latex_access.get_optional_arg(input, start) second_arg=get_arg(input, first_arg[1]) if first_arg[0] =="2": translation =u" square " elif first_arg[0] =="3": translation =u" cube " elif first_arg[0].lower() =="n": translation =u"enth " elif first_arg[0].lower() =="x": translation =u"exth " elif first_arg[0] =="": translation =u"" else: translation =first_arg[0] +u"th " if len(second_arg[0]) ==1: translation +=u"root " +self.correct(self.translate(second_arg[0])) else: translation +=u"root of " +self.correct(self.translate(second_arg[0])) translation +=u" end root " return (translation,second_arg[1]) arg=get_arg(input,start) if arg[0].isdigit() or len(arg[0])==1: translation =u" root " +arg[0] +u" " else: translation =u" root of " +self.correct(self.translate(arg[0])) +u" end root " return (translation,arg[1])
def newcommand(self, input, start): command = latex_access.get_arg(input, start) args = latex_access.get_optional_arg(input, command[1]) if args: start = args[1] args = int(args[0]) else: args = 0 start = command[1] translation = latex_access.get_arg(input, start) self.preprocessor.add_from_string(command[0], args, translation[0]) return ("", translation[1])
def binom(self, input, start): '''Translate binomials into speech. Returns touple.''' arg_1=get_arg(input,start) if arg_1[1]<len(input): arg_2=get_arg(input,arg_1[1]) else: arg_2=("",arg_1[1]) if len(arg_1[0])==1 and len(arg_2[0])==1: translation =" %s alatt %s " % (self.correct(self.translate(arg_1[0])), self.correct(self.translate(arg_2[0]))) else: translation=u" binom, %s alatt %s, binom zár " % (self.correct(self.translate(arg_1[0])), self.correct(self.translate(arg_2[0]))) return (translation, arg_2[1])
def norma(self, input, start): m =absertek.match(input) if m is not None: arg=get_arg("{"+m.group(1)+"}", 0) if len(arg[0]) ==1: output =self.translate(arg[0])+u" abszolút " return (output, arg[1]) else: output =u" abszolút " +self.translate(arg[0]+u" abszolút ") return (output, arg[1]) else: arg =get_arg(input, start-1) output =u" függőleges " return (output, arg[1])
def overline(self,input,start): arg=get_arg(input,start) if arg[0].isdigit() or len(arg[0])==1: translation=arg[0]+u" felülvonás " else: translation=u" felülvonás "+self.translate(self.correct(arg[0])) +u" felülvonás zár " return (translation,arg[1])
def vect(self,input,start): arg=get_arg(input,start) if arg[0].isdigit() or len(arg[0])==1: translation=arg[0].replace("a", u"á") +u" vektor " else: translation=u" vektor, "+self.translate(self.correct(arg[0])) +u", vektor zár " return (translation,arg[1])
def hat(self,input,start): arg=get_arg(input,start) if arg[0].isdigit() or len(arg[0])==1: translation=arg[0]+u" kalap " else: translation=u" kalap "+self.translate(self.correct(arg[0])) +u" kalap zár " return (translation,arg[1])
def tilde(self,input,start): arg=get_arg(input,start) if arg[0].isdigit() or len(arg[0])==1: translation=arg[0]+u" hullám " else: translation=u" hullám "+self.translate(self.correct(arg[0])) +u" hullám zár " return (translation,arg[1])
def super(self,input,start): '''Translate superscripts into speech. Returns a touple with translated string and index of first char after end of super.''' arg_with_minus =re.compile(r"-.?") arg=get_arg(input,start) #Handle squared and cubed as special cases if arg[0] == "2": translation=u" négyzet " elif arg[0]=="3": translation=u" köb " elif len(arg[0]) <2 or arg_with_minus.match(arg[0]): translation =u" ad %s, " % self.correct(self.translate(arg[0])) #Handle primes elif primes.match(arg[0]): if arg[0].count("p") ==1: if arg[0].count("\\prime") ==1: translation=u" vessző " else: translation=u" " +str(arg[0].count("\\prime")).replace("2", u"két") +u" vessző " elif arg[0].count("p") >1: translation=u" " +str(self.correct(arg[0]).count("p")).replace("2", u"két") +u" vessző " elif argprimes.match(arg[0]) and self.handleBracketsAsPrime: translation =u" %s " % self.translate(self.correct(arg[0])) +u" vessző " else: translation = u" ad <sup> %s </sup>" % self.translate(self.correct(arg[0])) return (translation, arg[1])
def ang(self, input, start): '''Translate angles into speech. Returns a touple with translated string and index of first char after end of angle.''' translation = "" counter = 0 arg = get_arg(input, start) if ';' in arg[0]: # we have mins possibly seconds too for x in arg[0]: if ';' == x: # we have mins/sec counter = counter + 1 if counter == 1: translation = translation + " degrees " continue elif counter == 2: translation = translation + " minutes " continue elif counter == 3: translation = translation + " seconds " continue translation = translation + x if counter == 1: translation = translation + " minutes" elif counter == 2: translation = translation + " seconds" else: translation = arg[0] + " degrees" return (translation, arg[1])
def vect(self,input,start): arg=get_arg(input,start) if arg[0].isdigit() or len(arg[0])==1: translation=arg[0] +u" vector " else: translation =u" vector " +self.correct(self.translate(arg[0])) +u" end vector " return (translation,arg[1])
def sqrt(self,input,start,rting=()): '''Translatesroots in latex. Returns a touple as above.''' arg=get_optional_arg(input,start) if arg: translation=";;%9"+self.translate(arg[0]) arg=get_arg(input,arg[1]) translation+=self.translate(arg[0])+"+" else: arg=get_arg(input,start) if rting != (): translation="%"+self.translate(arg[0],(rting[0]+arg[2],rting[1]+1))+"+" else: translation="%"+self.translate(arg[0])+"+" return (translation,arg[1])
def tag(self, input, start): '''Translate tags into Nemeth. Returns a touple with translated string and index of first char after end of tag.''' arg = get_arg(input, start) translation = " {" + arg[0] + "}" return (translation, arg[1])
def tag(self, input, start): '''Translate tags into speech. Returns a touple with translated string and index of first char after end of tag.''' arg = get_arg(input, start) translation = " tag left paren " + arg[0] + " right paren " return (translation, arg[1])
def sqrt(self,input,start): '''Translates squareroots into speech. returns touple.''' opt_arg=latex_access.get_optional_arg(input, start) if opt_arg: arg=get_arg(input,opt_arg[1]) if opt_arg[0]=="2": opt="square" elif opt_arg[0]=="3": opt="cube" elif opt_arg[0]=="": opt="" else: opt=opt_arg[0]+"th" else: arg=get_arg(input,start) opt="" if arg[0].isdigit() or len(arg[0])==1: translation="%s root %s" %(opt,arg[0]) else: translation=" begin %s root %s end root" % (opt,self.translate(arg[0])) return (translation,arg[1])
def frac(self,input,start): '''Translate fractions into speech. Returns touple.''' numerator=get_arg(input,start) if numerator[1]<len(input): denominator=get_arg(input,numerator[1]) else: denominator=("",numerator[1]) if len(numerator[0])==1 and len(denominator[0])==1: if numerator[0].isdigit() and denominator[0].isdigit(): translation = numerator[0]+denominators[int(denominator[0])] if int(numerator[0])>1: translation+="" translation+=" " else: translation =" %s per %s " % (self.correct(numerator[0]), self.correct(denominator[0])) else: translation=u" tört, %s per %s, tört zár " % (self.translate(self.correct(numerator[0])), self.translate(self.correct(denominator[0]))) return (translation,denominator[1])
def tag(self,input,start, rting=()): '''Translate tags into Nemeth. Returns a touple with translated string and index of first char after end of tag.''' arg=get_arg(input,start) if rting != (): translation = '"<'+self.translate(arg[0],(rting[0]+arg[2],rting[1]+3))+'">' else: translation = ' "<'+self.translate(arg[0])+'">' return (translation, arg[1])
def frac(self,input,start): '''Translate fractions into speech. Returns touple.''' numerator=get_arg(input,start) if numerator[1]<len(input): denominator=get_arg(input,numerator[1]) else: denominator=("",numerator[1]) if len(numerator[0])==1 and len(denominator[0])==1: if numerator[0].isdigit() and denominator[0].isdigit(): translation = numerator[0]+denominators[int(denominator[0])] if int(numerator[0])>1: translation+="s" translation+=" " else: translation =" %s over %s " % (numerator[0], denominator[0]) else: translation=" begin frac, %s over %s, end frac " % (self.translate(numerator[0]), self.translate(denominator[0])) return (translation,denominator[1])
def sqrt(self, input, start): '''Translates squareroots into speech. returns touple.''' arg = get_arg(input, start) if arg[0].isdigit() or len(arg[0]) == 1: translation = " root " + arg[0] else: translation = " begin root " + sb + self.translate( arg[0]) + " end root " + sb return (translation, arg[1])
def ln(self,input,start): '''Translate natural logs into speech. We translate natural logs in the form \ln(x) as loen of x. Usually natural logs do not have an extra base as day already to the base e by definition. The natural log is correctly pronounced as loen and not as ln. Returns a touple with translated string and index of first char after end of entire logarithm.''' ln=get_arg(input,start) translation=" loen " if len(ln[0]) < 1 or ln[0][0] != "_": # \ln by itself return (translation, ln[2]) # ignore the supposed command translation+="base " base=get_arg(input, ln[1]) translation+=self.translate (base[0]) translation+=" of " return (translation, base[1])
def sqrt(self,input,start): '''Translates roots into speech. returns touple.''' if sqrt_with_two_args.match(input): first_arg =latex_access.get_optional_arg(input, start) second_arg=get_arg(input, first_arg[1]) if self.abbrev_first_root_arg ==True: if first_arg[0].isdigit() or len(first_arg[0]) ==1: translation =denominators[int(first_arg[0])] +" " elif first_arg[0] in ["x", "n"] and len(first_arg[0]) ==1: translation =first_arg[0] +u"-ed " elif first_arg[0] =="3": translation =u" köb " else: translation =self.correct(self.translate(first_arg[0])) +u". " else: if first_arg[0] =="3": translation =u" köb " elif first_arg[0].lower() =="n": translation =u"n-edik " elif first_arg[0] =="x": translation ="x-edik " else: translation =self.correct(self.translate(first_arg[0])) +u". " if len(second_arg[0]) ==1: translation +=u" gyök " +self.correct(self.translate(second_arg[0])) else: translation +=u" gyök alatt, "+self.correct(self.translate(second_arg[0])) +u", gyök zár " return (translation, second_arg[1]) arg=get_arg(input, start) if arg[0].isdigit() or len(arg[0])==1: translation=u" gyök " +arg[0] else: translation=u" gyök alatt, " +self.correct(self.translate(arg[0])) +u", gyök zár" return (translation,arg[1])
def bar(self, input, start, rting=()): '''Handles bar/overline. Returns toutple''' arg = get_arg(input, start) if len(arg[0]) == 1: translation = ":%s" % arg[0] if rting != (): self.rt.append((rting[1] + 1, rting[0] + arg[2])) else: if rting == (): translation = ":{%so" % self.translate(arg[0]) else: translation = ":{%so" % self.translate( arg[0], (rting[0] + arg[2], rting[1] + 2)) return (translation, arg[1])
def log(self, input, start): '''Translate logs into speech. We translate logs in the form \log_a(x) as log base a of x If the log appaears ambiguous, i.e. we can not reasonably determine the base, we shall translate as just "log" followed by any usual translation. Returns a touple with translated string and index of first char after end of entire logarithm.''' log = get_arg(input, start) translation = " log " if len(log[0]) < 1 or log[0][0] != "_": # \log by itself return (translation, log[2]) # ignore the supposed command # Safe to assume log is of the form \log_a(x) translation += "base " base = get_arg(input, log[1]) translation += self.translate(base[0]) translation += " of " return (translation, base[1])
def sqrt(self, input, start, rting=()): '''Translatesroots in latex. Returns a touple as above.''' arg = get_arg(input, start) if arg[0].isdigit() or len(arg[0]) == 1: translation = ">" + arg[0] if rting != (): for j in range(len(arg[0])): self.rt.append((rting[1] + 1 + j, rting[0] + arg[2] + j)) else: if rting != (): translation = ">" + self.translate( arg[0], (rting[0] + arg[2], rting[1] + 1)) + "}" else: translation = ">" + self.translate(arg[0]) + "}" return (translation, arg[1])
def sub(self, input, start, rting=()): '''Translates nemeth subscripts. Returns a touple, as above''' arg = get_arg(input, start) if arg[0].isdigit(): translation = arg[0] if rting != (): for j in range(len(arg[0])): self.rt.append((rting[1] + j, rting[0] + arg[2] + j)) else: if rting == (): translation = ";" + self.translate(arg[0]) + "\"" else: translation = ";" + self.translate( arg[0], (rting[0] + arg[2], rting[1] + 1)) + "\"" return (translation, arg[1])
def sub(self,input,start,rting=()): '''Translates ueb subscripts. Returns a touple, as above''' arg=get_arg(input,start) if len(arg[0]) <=1: if rting != (): translation = ";5"+self.translate(arg[0],(rting[0]+arg[2],rting[1]+2)) else: translation = ";5"+self.translate(arg[0]) self.lastnumber = arg[1] else: if rting != (): translation = ";5<"+self.translate(arg[0],(rting[0]+arg[2],rting[1]+3)) + ">" else: translation = ";5<"+self.translate(arg[0]) + ">" return (translation,arg[1])
def super(self, input, start): '''Translate superscripts into speech. Returns a touple with translated string and index of first char after end of super.''' arg = get_arg(input, start) #Handle squared and cubed as special cases if arg[0] == "2": translation = " squared " elif arg[0] == "3": translation = " cubed " #Handle primes elif latex_access.primes.match(arg[0]): translation = " prime " * arg[0].count("\\prime") else: translation = " to the <sup> %s </sup> " % self.translate(arg[0]) return (translation, arg[1])
def super(self,input,start,rting=()): '''Translate superscripts into UEB. Returns a touple with translated string and index of first char after end of super.''' arg=get_arg(input,start) if len(arg[0]) <=1: if rting != (): translation = ";9" + self.translate(arg[0],(rting[0]+arg[2],rting[1]+2)) else: translation = ";9" + self.translate(arg[0]) self.lastnumber = arg[1] else: if rting != (): translation = ";9<" + self.translate(arg[0],(rting[0]+arg[2],rting[1]+3))+">" else: translation = ";9<" + self.translate(arg[0])+">" return (translation,arg[1])