def oes_odl_lusg(cyntaf, ail, olynydd=None): ''' ffwythiant: oes_odl_lusg ''' # rhaid i'r ail air fod yn lluosill if ail.nifer_sillau() < 2: return False # clymau clymau1 = cyntaf.nodau.rhestr_clymau(trwsio=True) clymau2 = ail.nodau.rhestr_clymau(trwsio=True) # tocio cynffon yr ail air (y ddau gwlwm olaf) clymau2.pop() clymau2.pop() # nodau'r gair cyntaf nodau1 = cyntaf.nodau # nodau pen blaen yr ail air nodau2 = RhestrNodau([nod for cwlwm in clymau2 for nod in cwlwm]) # gwirio am odl rhwng y cyntaf a phen blaen yr ail return oes_odl(nodau1, nodau2, olynydd, trwm_ac_ysgafn=False)
def oes_odl_ddwbl(nodau1, nodau2): ''' ffwythiant: oes_odl_ddwbl ''' if any([nod.isspace() for nod in nodau1]) or any([nod.isspace() for nod in nodau2]): return None odl_un = oes_odl_sengl(nodau1, nodau2) if odl_un: clymau1 = nodau1.rhestr_clymau(trwsio=True) clymau2 = nodau2.rhestr_clymau(trwsio=True) if len(clymau1) > 2 and len(clymau2) > 2: nodau3 = RhestrNodau( [nod for cwlwm in clymau1[:-2] for nod in cwlwm]) nodau4 = RhestrNodau( [nod for cwlwm in clymau2[:-2] for nod in cwlwm]) odl_dau = oes_odl_sengl(nodau3, nodau4) if odl_dau: return (odl_dau[0] + odl_un[0], odl_dau[1] + odl_un[1]) return odl_un
def __init__(self, s): s = s.strip() if re.search(r'\s', s): raise ValueError("Wedi methu creu Gair o'r llinyn '%s'" % s) self.nodau = RhestrNodau(s) self.clymau = self.nodau.rhestr_clymau(trwsio=True)
class Gair(object): ''' class: Gair mewnbwn: llinyn (utf8) ''' def __init__(self, s): s = s.strip() if re.search(r'\s', s): raise ValueError("Wedi methu creu Gair o'r llinyn '%s'" % s) self.nodau = RhestrNodau(s) self.clymau = self.nodau.rhestr_clymau(trwsio=True) def __unicode__(self): return self.nodau.__unicode__() def __str__(self): return self.__unicode__().encode('utf-8') def nodau_acennog(self): ''' ffwythiant: darganfod y nodau sy'n cario'r acenion allbwn: rhestr y nodau (llafariaid) sy'n cario'r acenion ''' ace = list() for cwlwm in self.clymau[::2]: # clymau llafariaid yn unig if cwlwm and cwlwm[0].isllafariad(): # llafariad sengl if len(cwlwm) == 1: ace.append(cwlwm[0]) # llafariaid dwbl (deusain) elif len(cwlwm) == 2: # ------------------------- # dydy hyn ddim yn gweithio ers newid nodau.rhestr_clymau(wgytsain=True) # i nodau.rhestr_clymau(trwsio=True). Mi fydd yn rhaid mynd nol i gael # dau restr clymau, un ar gyfer cytseinedd (y method "wgystain" gwreiddiol) # ac un ar gyfer odli (y method "trwsio") # ------------------------- """ ds = ''.join(nod.hir2byr() for nod in cwlwm).lower() if cy.dosbarth_deusain(ds): dd = cy.dosbarth_deusain[ds] # deusain talgron (acen ar yr ail lafariad) if ds in cy.deuseiniaid['talgron']: ace.append( cwlwm[1] ) # gair deusill (acen ar y ddwy lafariad) elif ds in cy.deuseiniaid['deusill']: ace.append( cwlwm[0] ) ace.append( cwlwm[1] ) # deusain lleddf (acen ar y llafariad cyntaf) else: ace.append( cwlwm[0] ) """ ace.append(cwlwm[0]) # tri neu fwy o lafariaid: defnyddio'r ail lafariad yn y cwlwm # nid yw hyn yn berthnasol ers defnyddio'r method "trwsio" else: ace.append(cwlwm[1]) return tuple(ace) def nifer_sillau(self): return len(self.acenion()) def shownodau(self): print[nod.llinyn for nod in self.nodau] def showclymau(self): print[cwl.llinyn() for cwl in self.clymau] def pwyslais(self): ''' ffwythiant: darganfod pwyslais gair mewnbwn: rhestr nodau allbwn: mynegrif: (-1 = sill olaf, -2 = sill olaf ond un) sylwadau: Mae angen helaethu ar ffyrdd i ddarganfod geiriau acennog lluosill ''' # dianc os nad oes o leiaf un llafariad (e.e. y cysylltnod mewn englyn) if not any([nod.isllafariad() for nod in self.nodau]): return 0 olaf = self.clymau[-1] olaf_ond_un = self.clymau[-2] olaf_ond_dau = self.clymau[-3] if len(self.clymau) > 2 else None # gwirio am ae o flaen y cwlwm cytseiniaid olaf (e.e. cymraeg) # ond dyw hyn ddim yn gweithio gyda 'ymadael' # if olaf and olaf_ond_un and olaf_ond_un.llinyn() == u'ae': # return -1 # gwirio am h o flaen y cwlwm llafariaid olaf (e.e. dyfalbarhau) if olaf_ond_dau and olaf_ond_dau[-1].llinyn in ['h', 'rh']: # print 'ding 2' return -1 # gwirio am lafariad hir fel cwlwm olaf (e.e. cangarŵ) if olaf_ond_un and unicode(olaf_ond_un[-1]) in cy.llafariaid_hir: # print 'ding 3' return -1 # gwiriad syml if self.nifer_sillau() == 1: return -1 # gair unsill else: return -2 # goben def traeannu(self, cytseiniaid=False): ''' ffwythiant: hollti gair yn dri (pen, canol, cwt) allbwn: tri rhestr nodau ''' pwy = self.pwyslais() # dim cytseiniaid # if not filter(None, self.clymau[1::2]): # return [], [], [] # gair acennog if pwy == -1: pen = self.clymau[:-2] can = [] cwt = self.clymau[-2:] # gair diacen else: pen = self.clymau[:-4] can = self.clymau[-4:-2] cwt = self.clymau[-2:] # cytseiniaid yn unig if cytseiniaid: pen = pen[1::2] can = can[1::2] cwt = cwt[1::2] # datod pen = [z for x in pen for z in x] can = [z for x in can for z in x] cwt = [z for x in cwt for z in x] return pen, can, cwt # allbwn def llinyn(self): return ''.join([nod.llinyn for nod in self.nodau]) def llinyn_llafariaid(self, blanksymbol=' '): ss = list() for nod in self.nodau: if nod.isllafariad(): ss.append(nod.llinyn) else: ss.append(blanksymbol * len(nod.llinyn)) return ''.join(ss) def llinyn_cytseiniaid(self, blanksymbol=' '): ss = list() for nod in self.nodau: if nod.iscytsain(): ss.append(nod.llinyn) else: ss.append(blanksymbol * len(nod.llinyn)) return ''.join(ss) def llinyn_acenion(self, blanksymbol=' '): ace = self.nodau_acennog() if self.pwyslais() == 0: return ''.join( [blanksymbol * len(nod.llinyn) for nod in self.nodau]) pwy = ace[self.pwyslais()] ss = list() for nod in self.nodau: if any([nod is x for x in ace]): if nod is pwy: ss.append('/') else: ss.append('v') else: ss.append(blanksymbol * len(nod.llinyn)) return ''.join(ss) def llinyn_acenion_colon(self, blanksymbol=' '): ace = self.nodau_acennog() ss = [blanksymbol * len(nod.llinyn) for nod in self.nodau] ss[self.nodau.index(ace[-1])] = ':' if self.pwyslais() == -2: ss[self.nodau.index(ace[-2])] = ':' return ''.join(ss) # man ffwythiannau def nifer_sillau(self): return len(self.nodau_acennog())
def __init__(self, s): s = s.strip() if re.search(r'\s', s): raise ValueError( "Wedi methu creu Gair o'r llinyn '%s'" % s ) self.nodau = RhestrNodau(s) self.clymau = self.nodau.rhestr_clymau(trwsio=True)
class Gair(object): ''' class: Gair mewnbwn: llinyn (utf8) ''' def __init__(self, s): s = s.strip() if re.search(r'\s', s): raise ValueError( "Wedi methu creu Gair o'r llinyn '%s'" % s ) self.nodau = RhestrNodau(s) self.clymau = self.nodau.rhestr_clymau(trwsio=True) def __unicode__(self): return self.nodau.__unicode__() def __str__(self): return self.__unicode__().encode('utf-8') def nodau_acennog(self): ''' ffwythiant: darganfod y nodau sy'n cario'r acenion allbwn: rhestr y nodau (llafariaid) sy'n cario'r acenion ''' ace = list() for cwlwm in self.clymau[::2]: # clymau llafariaid yn unig if cwlwm and cwlwm[0].isllafariad(): # llafariad sengl if len(cwlwm) == 1: ace.append( cwlwm[0] ) # llafariaid dwbl (deusain) elif len(cwlwm) == 2: # ------------------------- # dydy hyn ddim yn gweithio ers newid nodau.rhestr_clymau(wgytsain=True) # i nodau.rhestr_clymau(trwsio=True). Mi fydd yn rhaid mynd nol i gael # dau restr clymau, un ar gyfer cytseinedd (y method "wgystain" gwreiddiol) # ac un ar gyfer odli (y method "trwsio") # ------------------------- """ ds = ''.join(nod.hir2byr() for nod in cwlwm).lower() if cy.dosbarth_deusain(ds): dd = cy.dosbarth_deusain[ds] # deusain talgron (acen ar yr ail lafariad) if ds in cy.deuseiniaid['talgron']: ace.append( cwlwm[1] ) # gair deusill (acen ar y ddwy lafariad) elif ds in cy.deuseiniaid['deusill']: ace.append( cwlwm[0] ) ace.append( cwlwm[1] ) # deusain lleddf (acen ar y llafariad cyntaf) else: ace.append( cwlwm[0] ) """ ace.append( cwlwm[0] ) # tri neu fwy o lafariaid: defnyddio'r ail lafariad yn y cwlwm # nid yw hyn yn berthnasol ers defnyddio'r method "trwsio" else: ace.append( cwlwm[1] ) return tuple(ace) def nifer_sillau(self): return len( self.acenion() ) def shownodau(self): print [nod.llinyn for nod in self.nodau] def showclymau(self): print [cwl.llinyn() for cwl in self.clymau] def pwyslais(self): ''' ffwythiant: darganfod pwyslais gair mewnbwn: rhestr nodau allbwn: mynegrif: (-1 = sill olaf, -2 = sill olaf ond un) sylwadau: Mae angen helaethu ar ffyrdd i ddarganfod geiriau acennog lluosill ''' # dianc os nad oes o leiaf un llafariad (e.e. y cysylltnod mewn englyn) if not any([ nod.isllafariad() for nod in self.nodau ]): return 0 olaf = self.clymau[-1] olaf_ond_un = self.clymau[-2] olaf_ond_dau = self.clymau[-3] if len(self.clymau) > 2 else None # gwirio am ae o flaen y cwlwm cytseiniaid olaf (e.e. cymraeg) # ond dyw hyn ddim yn gweithio gyda 'ymadael' # if olaf and olaf_ond_un and olaf_ond_un.llinyn() == u'ae': # return -1 # gwirio am h o flaen y cwlwm llafariaid olaf (e.e. dyfalbarhau) if olaf_ond_dau and olaf_ond_dau[-1].llinyn in ['h','rh']: # print 'ding 2' return -1 # gwirio am lafariad hir fel cwlwm olaf (e.e. cangarŵ) if olaf_ond_un and unicode(olaf_ond_un[-1]) in cy.llafariaid_hir: # print 'ding 3' return -1 # gwiriad syml if self.nifer_sillau() == 1: return -1 # gair unsill else: return -2 # goben def traeannu(self, cytseiniaid=False): ''' ffwythiant: hollti gair yn dri (pen, canol, cwt) allbwn: tri rhestr nodau ''' pwy = self.pwyslais() # dim cytseiniaid # if not filter(None, self.clymau[1::2]): # return [], [], [] # gair acennog if pwy == -1: pen = self.clymau[:-2] can = [] cwt = self.clymau[-2:] # gair diacen else: pen = self.clymau[:-4] can = self.clymau[-4:-2] cwt = self.clymau[-2:] # cytseiniaid yn unig if cytseiniaid: pen = pen[1::2] can = can[1::2] cwt = cwt[1::2] # datod pen = [z for x in pen for z in x] can = [z for x in can for z in x] cwt = [z for x in cwt for z in x] return pen, can, cwt # allbwn def llinyn(self): return ''.join( [nod.llinyn for nod in self.nodau] ) def llinyn_llafariaid(self, blanksymbol=' '): ss = list() for nod in self.nodau: if nod.isllafariad(): ss.append(nod.llinyn) else: ss.append(blanksymbol*len(nod.llinyn)) return ''.join(ss) def llinyn_cytseiniaid(self, blanksymbol=' '): ss = list() for nod in self.nodau: if nod.iscytsain(): ss.append(nod.llinyn) else: ss.append(blanksymbol*len(nod.llinyn)) return ''.join(ss) def llinyn_acenion(self, blanksymbol=' '): ace = self.nodau_acennog() if self.pwyslais() == 0: return ''.join([ blanksymbol*len(nod.llinyn) for nod in self.nodau ]) pwy = ace[ self.pwyslais() ] ss = list() for nod in self.nodau: if any([nod is x for x in ace]): if nod is pwy: ss.append('/') else: ss.append('v') else: ss.append( blanksymbol*len( nod.llinyn ) ) return ''.join(ss) def llinyn_acenion_colon(self, blanksymbol=' '): ace = self.nodau_acennog() ss = [blanksymbol*len(nod.llinyn) for nod in self.nodau ] ss[ self.nodau.index(ace[-1]) ] = ':' if self.pwyslais() == -2: ss[ self.nodau.index(ace[-2]) ] = ':' return ''.join(ss) # man ffwythiannau def nifer_sillau(self): return len( self.nodau_acennog() )
def oes_cytseinedd(x_geiriau, y_geiriau): ''' ffwythiant: darganfod cytseinedd rhwng dau restr geiriau mewnbwn: dau restr geiriau allbwn: dosbarth cytseinedd (neu dosbarth bai) sylwadau: mae'r ffwythiant yn traeannu'r ddau restr geiriau: x_blaen, x_canol, x_cwt y_blaen, y_canol, y_cwt ac yn ceisio darganfod cytseinedd rhwng x_blaen a y_blaen x_canol a y_canol data: parau parau cytseiniaid rhwng x_blaen a y_blaen parau_canol parau cytseiniaid rhwng x_canol a y_canol x_pen: n-wreiddgoll, cytseiniaid pengoll y_pen: n-ganolgoll, cytseiniaid traws x_cwt: y_cwt: cynghanedd drychben: anghytbwys ddisgynedig: rhaid cyfateb x_cwt a y_canol methiant os if aceniad == ADI and x_cwt.llinyn in cyfuniadau_trychben: nod = x_cwt.pop() y_blaen.reverse() y_blaen.append( nod ) y_blaen.reverse() ''' if not x_geiriau or not y_geiriau: return (None, None, None) # type check (rhoi gair unigol mewn rhestr) if type(x_geiriau) == Gair: x_geiriau = [x_geiriau] if type(y_geiriau) == Gair: y_geiriau = [y_geiriau] # info sx = ' '.join([g.llinyn() for g in x_geiriau]) sy = ' '.join([g.llinyn() for g in y_geiriau]) log.info('oes_cytseinedd: ' + sx + '/' + sy) if debug: print 'oes_cytseinedd: ' + sx + '/' + sy # rhestri nodau x_blaen, x_canol, x_cwt = x_geiriau[-1].traeannu() y_blaen, y_canol, y_cwt = y_geiriau[-1].traeannu() # estyn blaen y ddwy hanner (dim bylchau) xb = [nod for g in x_geiriau[:-1] for nod in g.nodau] x_blaen = xb + list(x_blaen) yb = [nod for g in y_geiriau[:-1] for nod in g.nodau] y_blaen = yb + list(y_blaen) # info # log.debug([nod.llinyn for nod in x_blaen], [nod.llinyn for nod in x_canol], [nod.llinyn for nod in x_cwt]) # log.debug([nod.llinyn for nod in y_blaen], [nod.llinyn for nod in y_canol], [nod.llinyn for nod in y_cwt]) log.debug(''.join([nod.llinyn for nod in x_blaen]) + ':' + ''.join([nod.llinyn for nod in x_canol]) + ':' + ''.join([nod.llinyn for nod in x_cwt])) log.debug(''.join([nod.llinyn for nod in y_blaen]) + ':' + ''.join([nod.llinyn for nod in y_canol]) + ':' + ''.join([nod.llinyn for nod in y_cwt])) # log.debug([nod.llinyn for nod in y_blaen], [nod.llinyn for nod in y_canol], [nod.llinyn for nod in y_cwt]) # data ar gyfer y view functions data = { 'sylwadau': [], } #-------------------- # paratoi #-------------------- #-------------------- # parau canol #-------------------- trychben = [] cysylltben = [] parau_canol = [] # cytbwys ddiacen: cyfateb x_canol a y_canol if x_canol and y_canol: pa, xp, yp, sy = paru_cytseiniaid(x_canol, y_canol) # cyfatebiaeth lawn (dim cytseiniaid yn weddill) if not xp and not yp: parau_canol = pa else: log.debug( 'oes_cytseinedd: cytbwys ddiacen: x_canol a y_canol heb gyfateb' ) return (None, 'XXX', None) # anghytbwys ddisgynedig: cyfateb x_cwt a y_canol elif not x_canol and y_canol: cc = RhestrNodau(x_cwt).rhestr_clymau() x_cwt_llinyn = ''.join([nod.llinyn for nod in cc[-1]]) pa, xp, yp, sy = paru_cytseiniaid(x_cwt, y_canol) # cyfatebiaeth lawn (dim cytseiniaid yn weddill) if not xp and not yp: parau_canol = pa x_cwt = [] # profi am gynghanedd drychben elif x_cwt_llinyn in cy.cyfuniadau_trychben: log.debug('Profi am gynghanedd drychben') nod_trychben = x_cwt.pop() pa2, xp2, yp2, sy2 = paru_cytseiniaid(x_cwt, y_canol) if not xp2 and not yp2: parau_canol = pa2 trychben.append(nod_trychben) # profi am gynghanedd gysylltben: elif y_blaen: log.debug('Profi am gynghanedd gysylltben') nod_cysylltben = y_blaen[0] x_cwt_newydd = list(x_cwt) x_cwt_newydd.append(nod_cysylltben) pa3, xp3, yp3, sy3 = paru_cytseiniaid(x_cwt_newydd, y_canol) if not xp3 and not yp3: parau_canol = pa3 cysylltben.append(nod_cysylltben) else: log.debug( 'oes_cytseinedd: anghytbwys ddisgynedig: x_cwt a y_canol ddim yn cyfateb' ) return (None, 'XXX', None) else: pass # anghytbwys ddyrchafedig: elif x_canol and not y_canol: pass # cytbwys acennog else: pass log.debug('parau_canol: ' + ' '.join([a.llinyn + '/' + b.llinyn for a, b in parau_canol])) #-------------------- # parau blaen #-------------------- parau, x_pen, y_pen, syl = paru_cytseiniaid(x_blaen, y_blaen) if syl: data['sylwadau'].extend(syl) #-------------------- # paratoi a recordio'r rhestri parau.reverse() parau_canol.reverse() x_cwt = [nod for nod in x_cwt if nod.iscytsain()] y_cwt = [nod for nod in y_cwt if nod.iscytsain()] data['pengoll_chwith'] = x_pen data['pengoll_dde'] = y_pen data['parau'] = parau + parau_canol data['cwt_chwith'] = x_cwt data['cwt_dde'] = y_cwt data['trychben'] = trychben data['cysylltben'] = cysylltben log.debug('pen_ch: ' + ' '.join([nod.llinyn for nod in data['pengoll_chwith']])) log.debug('pen_dd: ' + ' '.join([nod.llinyn for nod in data['pengoll_dde']])) log.debug('parau : ' + ' '.join([a.llinyn + '/' + b.llinyn for a, b in data['parau']])) log.debug('cwt_ch: ' + ' '.join([nod.llinyn for nod in data['cwt_chwith']])) log.debug('cwt_dd: ' + ' '.join([nod.llinyn for nod in data['cwt_dde']])) log.debug('trychben: ' + ' '.join([nod.llinyn for nod in data['trychben']])) log.debug('cysylltben: ' + ' '.join([nod.llinyn for nod in data['cysylltben']])) #-------------------- # dosbarthu # proest i'r odl # if x_cwt and y_cwt and cyfateb(x_cwt[-1].llinyn, y_cwt[-1].llinyn): # return (None, 'PRO', data) # cyfatebiaeth lawn (croes) if parau and not x_pen and not y_pen: if trychben: return ('CRD', None, data) elif cysylltben: return ('CRG', None, data) else: return ('CRO', None, data) # cytseiniaid chwith yn weddill (n-wreiddgoll, croes-o-gyswllt) elif parau and x_pen and not y_pen: # n-wreiddgoll if len(x_pen) == 1 and x_pen[0].llinyn.lower() == 'n': data['sylwadau'].append('n-wreiddgoll') if trychben: return ('CRD', None, data) elif cysylltben: return ('CRG', None, data) else: return ('CRO', None, data) # croes-o-gyswllt x_nodau = [nod for g in x_geiriau for nod in g.nodau] pa, xp, yp, sy = paru_cytseiniaid(x_pen, x_nodau) if pa and not xp: if len(pa) > 1: return ('CGG', None, data) else: return ('COG', None, data) # sain (os oes o leiaf un par yn cyfateb, mae hynny'n ddigon am gynghanedd sain) if trychben: return ('SAD', None, data) elif cysylltben: return ('SAG', None, data) else: return ('SAI', None, data) # cytseiniaid dde yn weddill (n-ganolgoll, traws) elif parau and not x_pen and y_pen: # n-ganolgoll if len(y_pen) == 1 and y_pen[0].llinyn == 'n': data['sylwadau'].append('n-ganolgoll') return ('CRO', None, data) # traws else: if len(x_geiriau) == 1 or len(x_geiriau) == 2 and not any( nod.iscytsain() for nod in x_geiriau[0].nodau): # hac if trychben: return ('TFD', None, data) elif cysylltben: return ('TFG', None, data) else: return ('TRF', None, data) else: if trychben: return ('TRD', None, data) elif cysylltben: return ('TRG', None, data) else: return ('TRA', None, data) # os nad oes parau, o leiaf mae popeth yn sain-lafarog! else: # if trychben: # return ('SLD', None, data) # elif cysylltben: # return ('SLG', None, data) # else: # return ('SAL', None, data) return ('LLA', None, data)
def oes_odl(cyntaf, ail, olynydd=None, trwm_ac_ysgafn=True): # rhaid i cyntaf, ail ac olynydd fod yn rhestri nodau if type(cyntaf) == Gair: cyntaf = cyntaf.nodau if type(ail) == Gair: ail = ail.nodau # if olynydd and type(olynydd)==Gair: # olynydd = olynydd.nodau nodau1 = RhestrNodau([nod for nod in cyntaf]) nodau2 = RhestrNodau([nod for nod in ail]) if not nodau1 or not nodau2: return None, None log.info('oes_odl: ' + str(nodau1) + '/' + str(nodau2)) syl = [] # profi am odl sengl od = oes_odl_sengl(nodau1, nodau2, trwm_ac_ysgafn=trwm_ac_ysgafn) if od: return od, syl # -------------------------------- # profi am odl gudd neu odl ewinog # TODO: rhaid atal y dadansoddwr rhag odli nod gyda'i hun. # hac: edrych ond ar eiriau olynol sy'n dechrau â chytsain if type(olynydd) == Gair and len( olynydd.nodau) > 0 and olynydd.nodau[0].iscytsain(): # profi am odl gudd nodau3 = list(nodau1) meddalu = False if nodau1[-1].llinyn in cy.cytseiniaid_meddalu and olynydd.nodau[ 0].llinyn.lower() == 'd': meddalu = True nodau3.append(Nod('t')) else: nodau3.append(olynydd.nodau[0]) nodau3 = RhestrNodau(nodau3) cudd = oes_odl_sengl(nodau3, nodau2, trwm_ac_ysgafn=trwm_ac_ysgafn) dau_gytsain = False if len(olynydd.nodau) > 1 and olynydd.nodau[1].iscytsain(): # hac nodau4 = list(nodau3) nodau4.append(olynydd.nodau[1]) nodau4 = RhestrNodau(nodau4) cudd2 = oes_odl_sengl(nodau4, nodau2, trwm_ac_ysgafn=trwm_ac_ysgafn) if cudd2: dau_gytsain = True cudd = cudd2 if cudd: if meddalu: cudd[0].pop() cudd[0].append(olynydd.nodau[0]) if dau_gytsain: cudd[0].append(olynydd.nodau[1]) s0 = ''.join([nod.llinyn for nod in cudd[0]]) s1 = ''.join([nod.llinyn for nod in cudd[1]]) # syl.append('odl gudd: ' + s0 + '/' + s1) syl.append('odl gudd') return (cudd, syl) # profi am odl ewinog (dim ond cytsain gyntaf yr olynydd) # method: amnewid e.e. (b,h) gan wrthrych newydd Nod('p') # yna os oes odl, amnewid y nodau gwreidiol am y nod newydd c1 = nodau1[-1].llinyn c2 = olynydd.nodau[0].llinyn if cy.dosbarth_ceseiliad.has_key((c1, c2)): llinyn_cyfwerth = cy.dosbarth_ceseiliad[(c1, c2)] log.debug('oes_odl: paru_cytseiniaid: ' + c1 + '+' + c2 + '=' + llinyn_cyfwerth) nod_newydd = Nod(llinyn_cyfwerth) nodau3 = RhestrNodau(list(nodau1[:-1]) + [nod_newydd]) ewi = oes_odl_sengl(nodau3, nodau2, trwm_ac_ysgafn=trwm_ac_ysgafn) if ewi: # syl.append('odl ewinog') ewi[0].pop() ewi[0].append(nodau1[-1]) ewi[0].append(olynydd.nodau[0]) s0 = ''.join([nod.llinyn for nod in ewi[0]]) s1 = ''.join([nod.llinyn for nod in ewi[1]]) # syl.append('odl ewinog: ' + s0 + '/' + s1) syl.append('odl ewinog') return ewi, syl return None, None