Example #1
0
	def oes_cwpled_cywydd(self, cwpled):
		log.info('prawf: cwpled cywydd')

		sylwadau = []
		dad = Dadansoddwr()
		adro1 = dad.oes_cynghanedd(cwpled.cyntaf)
		adro2 = dad.oes_cynghanedd(cwpled.ail)

		ateb = True
		if cwpled.cyntaf.nifer_sillau() != 7 :
			sylwadau.append('cwpled cywydd: methiant: nid oes saith sill yn y linell gyntaf')
			ateb = False
		if cwpled.ail.nifer_sillau() != 7:
			sylwadau.append('cwpled cywydd: methiant: nid oes saith sill yn yr ail linell')
			ateb = False
		if cwpled.cyntaf.ybrifodl.pwyslais() == cwpled.ail.ybrifodl.pwyslais():
			sylwadau.append('cwpled cywydd: methiant: acenion o\'r un fath')
			ateb = False
		if adro1.cynghanedd == 'DIM':
			sylwadau.append('cwpled cywydd: methiant: dim cynghanedd yn y linell gyntaf')
			ateb = False
		if adro2.cynghanedd == 'DIM':
			sylwadau.append('cwpled cywydd: methiant: dim cynghanedd yn yr ail linell')
			ateb = False
		if adro2.cynghanedd in ['LLU', 'LLL']:
			sylwadau.append('cwpled cywydd: methiant: cynghanedd lusg yn yr ail linell')
			ateb = False
		if not od.oes_odl( cwpled.cyntaf.geiriau[-1], cwpled.ail.geiriau[-1] ) :
			sylwadau.append('cwpled cywydd: methiant: dim odl')
			ateb = False

		return [ateb, [adro1, adro2], sylwadau]
Example #2
0
	def oes_hir_a_thoddaid(self, pennill):
		log.info('prawf hir-a-thoddaid')
		dad = Dadansoddwr()
		ateb = True
		adro = []
		sylwadau = []

		llinellau = list(pennill.llinellau)
		llinellau.reverse()
		
		# creu rhestr cwpledi
		cwpledi = []
		while llinellau:
			cyntaf = llinellau.pop()
			if not llinellau:
				sylwadau.append('torr mesur (hir-a-thoddaid): llinell unigol')
				ateb = False
				break
			ail = llinellau.pop()
			cwpledi.append( Cwpled(cyntaf,ail) )
		
		if len(cwpledi) < 2:
			sylwadau.append('torr mesur (hir-a-thoddaid): dim digon o linellau')
			ateb = False
		
		# profi cynghanedd y cwpledi, ar wahan i'r olaf
		adro = []
		for cwpled in cwpledi[:-1]:
			# nifer sillau
			if cwpled.cyntaf.nifer_sillau() != 10 or cwpled.ail.nifer_sillau() != 10:
				sylwadau.append('torr mesur (hir-a-thoddaid): mae angen 10 sill fan hyn')
				ateb = False
			# cynghanedd
			adro1 = dad.oes_cynghanedd( cwpled.cyntaf )
			if adro1.cynghanedd == 'DIM':
				sylwadau.append('torr mesur (hir-a-thoddaid): dim cynghanedd yn y linell gyntaf')
				ateb = False
			adro2 = dad.oes_cynghanedd( cwpled.ail )
			if adro2.cynghanedd == 'DIM':
				sylwadau.append('torr mesur (hir-a-thoddaid): dim cynghanedd yn yr ail linell')
				ateb = False
			# odl
			if not od.oes_odl( cwpled.cyntaf.geiriau[-1], cwpled.ail.geiriau[-1] ) :
				sylwadau.append('torr mesur (hir-a-thoddaid): dim odl')
				ateb = False
			# adro.extend([ adro1, adro2 ])
			adro.append(adro1)
			adro.append(adro2)
			
		# profi toddaid hi cwpled olaf
		# olaf = cwpledi[-1]
		toh = self.oes_toddaid( cwpledi[-1], hir=True )
		if not toh[0]:
			sylwadau.append('torr mesur (hir-a-thoddaid): dim toddaid byr yn y ddwy linell olaf')
			ateb = False
		# adro.extend( toh[1] )
		adro.append( toh[1][0] )
		adro.append( toh[1][0] )
		
		return [ ateb, adro, sylwadau ]
Example #3
0
    def oes_sain_gadwynog(self, llinell):
        '''
		ffwythiant: oes_sain_gadwynog
		mewnbwn: llinell
		allbwn: adroddiad		
		'''
        log.info('prawf sain gadwynog')

        ybrifodl = llinell.geiriau[-1]
        # iteru er mwyn darganfod yr orffwysfa gyntaf
        for i in range(len(llinell.geiriau) - 3):
            yr_orffwysfa_gyntaf = llinell.geiriau[i]
            if yr_orffwysfa_gyntaf.llinyn() in cy.geiriau_gwan:
                continue

            # iteru er mwyn darganfod yr ail orffwysfa
            for j in range(i + 1, len(llinell.geiriau) - 2):
                yr_ail_orffwysfa = llinell.geiriau[j]
                if yr_ail_orffwysfa.llinyn() in cy.geiriau_gwan:
                    continue

                # iteru er mwyn darganfod yr ail orffwysfa
                for k in range(j + 1, len(llinell.geiriau) - 1):
                    y_drydedd_orffwysfa = llinell.geiriau[k]
                    if y_drydedd_orffwysfa.llinyn() in cy.geiriau_gwan:
                        continue

                    log.debug(yr_orffwysfa_gyntaf.llinyn() + '/' +
                              yr_ail_orffwysfa.llinyn() + '/' +
                              y_drydedd_orffwysfa.llinyn() + '/' +
                              ybrifodl.llinyn())

                    # profi am odl rhwng yr orffwysfa gyntaf a'r drydedd
                    odl, syl = oes_odl(yr_orffwysfa_gyntaf,
                                       y_drydedd_orffwysfa)
                    if odl:
                        dosb = None
                        # os oes odl, profi an gytseinedd
                        dosb_cyts, bai, data = oes_cytseinedd(
                            llinell.geiriau[i + 1:j + 1],
                            llinell.geiriau[k + 1:])
                        if dosb_cyts and dosb_cyts[0] in ['C', 'T']:
                            dosb = 'SAG'
                        # dianc os oes angen
                        if dosb:
                            data['gorffwysfeydd'] = (yr_orffwysfa_gyntaf,
                                                     yr_ail_orffwysfa,
                                                     y_drydedd_orffwysfa)
                            data['odl'] = odl
                            return Adroddiad(llinell=llinell,
                                             cynghanedd=dosb,
                                             aceniad=aceniad(
                                                 yr_ail_orffwysfa, ybrifodl),
                                             data=data)
        return None
Example #4
0
	def oes_sain_gadwynog(self, llinell):
		'''
		ffwythiant: oes_sain_gadwynog
		mewnbwn: llinell
		allbwn: adroddiad		
		'''
		log.info('prawf sain gadwynog')
		
		ybrifodl = llinell.geiriau[-1]
		# iteru er mwyn darganfod yr orffwysfa gyntaf
		for i in range( len(llinell.geiriau)-3 ):
			yr_orffwysfa_gyntaf = llinell.geiriau[i]
			if yr_orffwysfa_gyntaf.llinyn() in cy.geiriau_gwan:
				continue
		
			# iteru er mwyn darganfod yr ail orffwysfa
			for j in range( i+1, len(llinell.geiriau)-2 ):
				yr_ail_orffwysfa = llinell.geiriau[j]
				if yr_ail_orffwysfa.llinyn() in cy.geiriau_gwan:
					continue

				# iteru er mwyn darganfod yr ail orffwysfa
				for k in range( j+1, len(llinell.geiriau)-1 ):
					y_drydedd_orffwysfa = llinell.geiriau[k]
					if y_drydedd_orffwysfa.llinyn() in cy.geiriau_gwan:
						continue

					log.debug( yr_orffwysfa_gyntaf.llinyn() + '/' + yr_ail_orffwysfa.llinyn() + '/' + y_drydedd_orffwysfa.llinyn() + '/' + ybrifodl.llinyn() )

					# profi am odl rhwng yr orffwysfa gyntaf a'r drydedd 
					odl,syl = oes_odl( yr_orffwysfa_gyntaf, y_drydedd_orffwysfa )
					if odl:	
						dosb = None
						# os oes odl, profi an gytseinedd
						dosb_cyts, bai, data = oes_cytseinedd( llinell.geiriau[i+1:j+1], llinell.geiriau[k+1:] )
						if dosb_cyts and dosb_cyts[0] in ['C','T']:
							dosb = 'SAG'
						# dianc os oes angen		
						if dosb:
							data['gorffwysfeydd'] = (yr_orffwysfa_gyntaf,yr_ail_orffwysfa,y_drydedd_orffwysfa)
							data['odl'] = odl
							return Adroddiad(
								llinell = llinell,
								cynghanedd = dosb,
								aceniad = aceniad( yr_ail_orffwysfa, ybrifodl ),
								data = data
							)
		return None
Example #5
0
    def oes_cyhydedd_nawban(self, pennill):
        log.info('prawf cyhydedd nawban')
        dad = Dadansoddwr()
        ateb = True
        sylwadau = []
        adro = []

        # nifer llinellau
        if not pennill.llinellau or len(pennill.llinellau) != 4:
            sylwadau.append('torr mesur (cyhydedd nawban): nid oes 4 llinell')
            ateb = False

        # llinellau unigol
        for llinell in pennill.llinellau:

            # nifer sillau
            if llinell.nifer_sillau() != 9:
                sylwadau.append(
                    'torr mesur (cyhydedd nawban): rhaid cael naw sill ymhob llinell'
                )
                ateb = False

            # cynghanedd
            ad = dad.oes_cynghanedd(llinell)
            adro.append(ad)
            if ad.cynghanedd == 'DIM':
                sylwadau.append(
                    'torr mesur (cyhydedd nawban): dim cynghanedd (%s)' %
                    llinell.llinyn())
                ateb = False
                break
        # odl
        for j in range(len(pennill.llinellau) - 1):
            odl = od.oes_odl(pennill.llinellau[j].geiriau[-1],
                             pennill.llinellau[j + 1].geiriau[-1])
            if not odl:
                sylwadau.append('torr mesur (cyhydedd nawban): dim odl')
                ateb = False
                break

        return [ateb, adro, sylwadau]
Example #6
0
    def oes_cwpled_cywydd(self, cwpled):
        log.info('prawf: cwpled cywydd')

        sylwadau = []
        dad = Dadansoddwr()
        adro1 = dad.oes_cynghanedd(cwpled.cyntaf)
        adro2 = dad.oes_cynghanedd(cwpled.ail)

        ateb = True
        if cwpled.cyntaf.nifer_sillau() != 7:
            sylwadau.append(
                'cwpled cywydd: methiant: nid oes saith sill yn y linell gyntaf'
            )
            ateb = False
        if cwpled.ail.nifer_sillau() != 7:
            sylwadau.append(
                'cwpled cywydd: methiant: nid oes saith sill yn yr ail linell')
            ateb = False
        if cwpled.cyntaf.ybrifodl.pwyslais() == cwpled.ail.ybrifodl.pwyslais():
            sylwadau.append('cwpled cywydd: methiant: acenion o\'r un fath')
            ateb = False
        if adro1.cynghanedd == 'DIM':
            sylwadau.append(
                'cwpled cywydd: methiant: dim cynghanedd yn y linell gyntaf')
            ateb = False
        if adro2.cynghanedd == 'DIM':
            sylwadau.append(
                'cwpled cywydd: methiant: dim cynghanedd yn yr ail linell')
            ateb = False
        if adro2.cynghanedd in ['LLU', 'LLL']:
            sylwadau.append(
                'cwpled cywydd: methiant: cynghanedd lusg yn yr ail linell')
            ateb = False
        if not od.oes_odl(cwpled.cyntaf.geiriau[-1], cwpled.ail.geiriau[-1]):
            sylwadau.append('cwpled cywydd: methiant: dim odl')
            ateb = False

        return [ateb, [adro1, adro2], sylwadau]
Example #7
0
	def oes_cyhydedd_nawban(self, pennill):
		log.info('prawf cyhydedd nawban')
		dad = Dadansoddwr()
		ateb = True
		sylwadau = []
		adro = []

		# nifer llinellau
		if not pennill.llinellau or len(pennill.llinellau) != 4:
			sylwadau.append('torr mesur (cyhydedd nawban): nid oes 4 llinell')
			ateb = False
		
		# llinellau unigol
		for llinell in pennill.llinellau:

			# nifer sillau
			if llinell.nifer_sillau() != 9:
				sylwadau.append('torr mesur (cyhydedd nawban): rhaid cael naw sill ymhob llinell')
				ateb = False
			
			# cynghanedd
			ad = dad.oes_cynghanedd( llinell )
			adro.append(ad)
			if ad.cynghanedd == 'DIM':
				sylwadau.append( 'torr mesur (cyhydedd nawban): dim cynghanedd (%s)' % llinell.llinyn() )
				ateb = False
				break
		# odl
		for j in range( len(pennill.llinellau) - 1 ):
			odl = od.oes_odl(pennill.llinellau[j].geiriau[-1], pennill.llinellau[j+1].geiriau[-1])
			if not odl:
				sylwadau.append('torr mesur (cyhydedd nawban): dim odl')
				ateb = False
				break

		return [ ateb, adro, sylwadau ]
Example #8
0
    def oes_sain(self, llinell):
        '''
		ffwythiant: oes_sain
		mewnbwn: llinell
		allbwn: adroddiad		
		'''
        log.info('prawf sain')

        # sain gadwynog
        adro_sain_gadwynog = self.oes_sain_gadwynog(llinell)
        if adro_sain_gadwynog:
            return adro_sain_gadwynog

        ybrifodl = llinell.geiriau[-1]

        # iteru er mwyn darganfod yr orffwysfa gyntaf
        for j in range(len(llinell.geiriau) - 2):
            yr_orffwysfa_gyntaf = llinell.geiriau[j]
            if yr_orffwysfa_gyntaf.llinyn() in cy.geiriau_gwan:
                continue

            # iteru er mwyn darganfod yr ail orffwysfa
            for k in range(j + 1, len(llinell.geiriau) - 1):
                yr_ail_orffwysfa = llinell.geiriau[k]
                if yr_ail_orffwysfa.llinyn() in cy.geiriau_gwan:
                    continue

                log.debug(yr_orffwysfa_gyntaf.llinyn() + '/' +
                          yr_ail_orffwysfa.llinyn() + '/' + ybrifodl.llinyn())

                # profi am odl
                yrolynydd = llinell.geiriau[j + 1]
                odl, syl = oes_odl(yr_orffwysfa_gyntaf,
                                   yr_ail_orffwysfa,
                                   olynydd=yrolynydd)
                if not odl:
                    yrolynydd = llinell.geiriau[k + 1]
                    odl, syl = oes_odl(yr_ail_orffwysfa,
                                       yr_orffwysfa_gyntaf,
                                       olynydd=yrolynydd)

                # os oes odl, profi am gytseinedd
                if odl:
                    dosb = None
                    dosb_cyts, bai, data = oes_cytseinedd(
                        yr_ail_orffwysfa, llinell.geiriau[k + 1:])
                    if dosb_cyts == 'LLA':
                        dosb = 'SAL'
                    elif data and data.has_key('parau'):
                        if data['parau']:
                            if dosb_cyts == 'COG':
                                dosb = 'SOG'
                            else:
                                dosb = 'SAI'

                    # dianc os oes angen
                    if dosb:
                        data['gorffwysfeydd'] = (yr_orffwysfa_gyntaf,
                                                 yr_ail_orffwysfa)
                        data['odl'] = odl
                        data['sylwadau'] = syl
                        return Adroddiad(llinell=llinell,
                                         cynghanedd=dosb,
                                         aceniad=aceniad(
                                             yr_ail_orffwysfa, ybrifodl),
                                         data=data)
        return None
Example #9
0
	def oes_sain(self, llinell):
		'''
		ffwythiant: oes_sain
		mewnbwn: llinell
		allbwn: adroddiad		
		'''
		log.info('prawf sain')
		
		# sain gadwynog
		adro_sain_gadwynog = self.oes_sain_gadwynog(llinell)
		if adro_sain_gadwynog:
			return adro_sain_gadwynog

		ybrifodl = llinell.geiriau[-1]
		
		# iteru er mwyn darganfod yr orffwysfa gyntaf
		for j in range( len(llinell.geiriau)-2 ):
			yr_orffwysfa_gyntaf = llinell.geiriau[j]
			if yr_orffwysfa_gyntaf.llinyn() in cy.geiriau_gwan:
				continue
		
			# iteru er mwyn darganfod yr ail orffwysfa
			for k in range( j+1, len(llinell.geiriau)-1 ):			
				yr_ail_orffwysfa = llinell.geiriau[k]
				if yr_ail_orffwysfa.llinyn() in cy.geiriau_gwan:
					continue

				log.debug(yr_orffwysfa_gyntaf.llinyn() + '/' + yr_ail_orffwysfa.llinyn() + '/' + ybrifodl.llinyn())
				
				# profi am odl
				yrolynydd = llinell.geiriau[j+1]
				odl, syl = oes_odl( yr_orffwysfa_gyntaf, yr_ail_orffwysfa, olynydd=yrolynydd)
				if not odl:
					yrolynydd = llinell.geiriau[k+1]
					odl, syl = oes_odl( yr_ail_orffwysfa, yr_orffwysfa_gyntaf, olynydd=yrolynydd)
				
				# os oes odl, profi am gytseinedd
				if odl:	
					dosb = None
					dosb_cyts, bai, data = oes_cytseinedd( yr_ail_orffwysfa, llinell.geiriau[k+1:] )
					if dosb_cyts == 'LLA':
						dosb = 'SAL'
					elif data and data.has_key('parau'):
						if data['parau']:
							if dosb_cyts == 'COG':
								dosb = 'SOG'
							else:
								dosb = 'SAI'

					# dianc os oes angen		
					if dosb:
						data['gorffwysfeydd'] = (yr_orffwysfa_gyntaf,yr_ail_orffwysfa)
						data['odl'] = odl
						data['sylwadau'] = syl
						return Adroddiad(
							llinell = llinell,
							cynghanedd = dosb,
							aceniad = aceniad( yr_ail_orffwysfa, ybrifodl ),
							data = data
						)
		return None
Example #10
0
	def oes_toddaid(self, cwpled, byr=False, hir=False):
		if byr: 
			enw = 'toddaid_byr'
		elif hir:
			enw = 'toddaid_hir'
		else:
			enw = 'toddaid'
		log.info('prawf: ' + enw)
		
		sylwadau = []
		dad = Dadansoddwr()
		ateb = True
		
		# profi am air luosill ar ddiwedd yr ail linell
		if cwpled.ail.geiriau[-1].nifer_sillau() < 2:
			sylwadau.append(enw + ': methiant: dim gair lluosill ar ddiwedd yr ail linell.')
			ateb = False
			
		# profi nifer sillau
		if cwpled.cyntaf.nifer_sillau() != 10:
			sylwadau.append(enw + ': nid oes 10 sill yn y linell gyntaf')
			ateb = False
		if byr:
			if cwpled.ail.nifer_sillau() != 6:
				sylwadau.append(enw + ': nid oes 6 sill i\'r ail linell')
				ateb = False
		elif hir:
			if cwpled.ail.nifer_sillau() != 10:
				sylwadau.append(enw + ': nid oes 10 sill i\'r ail linell')
				ateb = False
		else:
			if cwpled.ail.nifer_sillau() != 9:
				sylwadau.append(enw + ': nid oes 9 sill i\'r ail linell')
				ateb = False

		# prosesu'r linell gyntaf (hollti ar gysylltnod)
		rhestr_cyntaf = []		
		rhestr_cyrch = []		
		heibio = False
		for gair in cwpled.cyntaf.geiriau:
			if gair.llinyn() == '-':
				heibio = True
			elif not heibio:
				rhestr_cyntaf.append(gair)
			else:
				rhestr_cyrch.append(gair)
		
		llinell_cyntaf = Llinell( rhestr_cyntaf )

		# profi presenoldeb cysylltnod
		if not heibio:
			sylwadau.append(enw + ': methiant: dim cysylltnod yn y linell gyntaf.')
			ateb = False
		
		# profi nifer sillau y cyrch
		ns_cyrch = sum([ g.nifer_sillau() for g in rhestr_cyrch ])
		if ns_cyrch < 1 or ns_cyrch > 3:
			sylwadau.append(enw + ': methiant: nid oes 1-3 sill yn y cyrch.')
			ateb = False

		# profi am gynghanedd yn y linell gyntaf
		adro1 = dad.oes_cynghanedd(llinell_cyntaf)
		if adro1.cynghanedd == 'DIM':
			sylwadau.append(enw + ': dim cynghanedd yn y linell gyntaf')
			ateb = False
		
		# prosesu'r ail linell (dibynnu ar pa fath o doddaid)
		if not byr:
			adro2 = dad.oes_cynghanedd(cwpled.ail) # cyrch yn bengoll mewn toddaid neu doddaid hir
			if adro2.cynghanedd == 'DIM':
				sylwadau.append(enw + ': dim cynghanedd yn yr ail linell')
				ateb = False
		else:
			rhestr_ail = list(rhestr_cyrch)
			rhestr_pengoll = []
			llwyddiant = False
			for gair in cwpled.ail.geiriau:
				if not llwyddiant:
					rhestr_ail.append(gair)
					adro2 = dad.oes_cynghanedd( Llinell( rhestr_ail ) )
					if adro2.cynghanedd not in ['DIM', 'LLU', 'LLL']:
						llwyddiant = True
				else:
					rhestr_pengoll.append(gair)
			if not llwyddiant: 
				sylwadau.append(enw + ': dim cynghanedd yn y cyrch a rhan gyntaf yr ail linell')
				ateb = False
		
		# mae bob amser angen odl rhwng prifodl y gynghanedd gyntaf a diwedd yr ail linell
		if not od.oes_odl( rhestr_cyntaf[-1], cwpled.ail.geiriau[-1] ):
			sylwadau.append(enw + 'methiant: dim odl rhwng prifodl y gynghanedd gyntaf a diwedd yr ail linell')
			ateb = False

		# os toddaid neu doddaid hir, mae hefyd angen odl rhwng y cyrch a gorffwysfa'r ail linell
		# TODO: os oes mwy nag un gorffwysfa (e.e. sain), gall y cyrch odli gyda unrhyw un ohonynt
		if not byr:
			if adro2.data.has_key('gorffwysfeydd'):
				gorffwysfeydd = adro2.data['gorffwysfeydd']
				if rhestr_cyrch and not any([ od.oes_odl(rhestr_cyrch[-1], gorff) for gorff in gorffwysfeydd ]):
					sylwadau.append(enw + 'methiant: dim odl rhwng y cyrch a gorffwysfa yr ail linell')
					ateb = False
		
		# print ateb
		# print adro1
		# print adro2
		# print sylwadau
		# diwedd
		return [ateb, [adro1, adro2], sylwadau]
Example #11
0
    def oes_toddaid(self, cwpled, byr=False, hir=False):
        if byr:
            enw = 'toddaid_byr'
        elif hir:
            enw = 'toddaid_hir'
        else:
            enw = 'toddaid'
        log.info('prawf: ' + enw)

        sylwadau = []
        dad = Dadansoddwr()
        ateb = True

        # profi am air luosill ar ddiwedd yr ail linell
        if cwpled.ail.geiriau[-1].nifer_sillau() < 2:
            sylwadau.append(
                enw +
                ': methiant: dim gair lluosill ar ddiwedd yr ail linell.')
            ateb = False

        # profi nifer sillau
        if cwpled.cyntaf.nifer_sillau() != 10:
            sylwadau.append(enw + ': nid oes 10 sill yn y linell gyntaf')
            ateb = False
        if byr:
            if cwpled.ail.nifer_sillau() != 6:
                sylwadau.append(enw + ': nid oes 6 sill i\'r ail linell')
                ateb = False
        elif hir:
            if cwpled.ail.nifer_sillau() != 10:
                sylwadau.append(enw + ': nid oes 10 sill i\'r ail linell')
                ateb = False
        else:
            if cwpled.ail.nifer_sillau() != 9:
                sylwadau.append(enw + ': nid oes 9 sill i\'r ail linell')
                ateb = False

        # prosesu'r linell gyntaf (hollti ar gysylltnod)
        rhestr_cyntaf = []
        rhestr_cyrch = []
        heibio = False
        for gair in cwpled.cyntaf.geiriau:
            if gair.llinyn() == '-':
                heibio = True
            elif not heibio:
                rhestr_cyntaf.append(gair)
            else:
                rhestr_cyrch.append(gair)

        llinell_cyntaf = Llinell(rhestr_cyntaf)

        # profi presenoldeb cysylltnod
        if not heibio:
            sylwadau.append(enw +
                            ': methiant: dim cysylltnod yn y linell gyntaf.')
            ateb = False

        # profi nifer sillau y cyrch
        ns_cyrch = sum([g.nifer_sillau() for g in rhestr_cyrch])
        if ns_cyrch < 1 or ns_cyrch > 3:
            sylwadau.append(enw + ': methiant: nid oes 1-3 sill yn y cyrch.')
            ateb = False

        # profi am gynghanedd yn y linell gyntaf
        adro1 = dad.oes_cynghanedd(llinell_cyntaf)
        if adro1.cynghanedd == 'DIM':
            sylwadau.append(enw + ': dim cynghanedd yn y linell gyntaf')
            ateb = False

        # prosesu'r ail linell (dibynnu ar pa fath o doddaid)
        if not byr:
            adro2 = dad.oes_cynghanedd(
                cwpled.ail)  # cyrch yn bengoll mewn toddaid neu doddaid hir
            if adro2.cynghanedd == 'DIM':
                sylwadau.append(enw + ': dim cynghanedd yn yr ail linell')
                ateb = False
        else:
            rhestr_ail = list(rhestr_cyrch)
            rhestr_pengoll = []
            llwyddiant = False
            for gair in cwpled.ail.geiriau:
                if not llwyddiant:
                    rhestr_ail.append(gair)
                    adro2 = dad.oes_cynghanedd(Llinell(rhestr_ail))
                    if adro2.cynghanedd not in ['DIM', 'LLU', 'LLL']:
                        llwyddiant = True
                else:
                    rhestr_pengoll.append(gair)
            if not llwyddiant:
                sylwadau.append(
                    enw +
                    ': dim cynghanedd yn y cyrch a rhan gyntaf yr ail linell')
                ateb = False

        # mae bob amser angen odl rhwng prifodl y gynghanedd gyntaf a diwedd yr ail linell
        if not od.oes_odl(rhestr_cyntaf[-1], cwpled.ail.geiriau[-1]):
            sylwadau.append(
                enw +
                'methiant: dim odl rhwng prifodl y gynghanedd gyntaf a diwedd yr ail linell'
            )
            ateb = False

        # os toddaid neu doddaid hir, mae hefyd angen odl rhwng y cyrch a gorffwysfa'r ail linell
        # TODO: os oes mwy nag un gorffwysfa (e.e. sain), gall y cyrch odli gyda unrhyw un ohonynt
        if not byr:
            if adro2.data.has_key('gorffwysfeydd'):
                gorffwysfeydd = adro2.data['gorffwysfeydd']
                if rhestr_cyrch and not any([
                        od.oes_odl(rhestr_cyrch[-1], gorff)
                        for gorff in gorffwysfeydd
                ]):
                    sylwadau.append(
                        enw +
                        'methiant: dim odl rhwng y cyrch a gorffwysfa yr ail linell'
                    )
                    ateb = False

        # print ateb
        # print adro1
        # print adro2
        # print sylwadau
        # diwedd
        return [ateb, [adro1, adro2], sylwadau]
Example #12
0
    def oes_hir_a_thoddaid(self, pennill):
        log.info('prawf hir-a-thoddaid')
        dad = Dadansoddwr()
        ateb = True
        adro = []
        sylwadau = []

        llinellau = list(pennill.llinellau)
        llinellau.reverse()

        # creu rhestr cwpledi
        cwpledi = []
        while llinellau:
            cyntaf = llinellau.pop()
            if not llinellau:
                sylwadau.append('torr mesur (hir-a-thoddaid): llinell unigol')
                ateb = False
                break
            ail = llinellau.pop()
            cwpledi.append(Cwpled(cyntaf, ail))

        if len(cwpledi) < 2:
            sylwadau.append(
                'torr mesur (hir-a-thoddaid): dim digon o linellau')
            ateb = False

        # profi cynghanedd y cwpledi, ar wahan i'r olaf
        adro = []
        for cwpled in cwpledi[:-1]:
            # nifer sillau
            if cwpled.cyntaf.nifer_sillau() != 10 or cwpled.ail.nifer_sillau(
            ) != 10:
                sylwadau.append(
                    'torr mesur (hir-a-thoddaid): mae angen 10 sill fan hyn')
                ateb = False
            # cynghanedd
            adro1 = dad.oes_cynghanedd(cwpled.cyntaf)
            if adro1.cynghanedd == 'DIM':
                sylwadau.append(
                    'torr mesur (hir-a-thoddaid): dim cynghanedd yn y linell gyntaf'
                )
                ateb = False
            adro2 = dad.oes_cynghanedd(cwpled.ail)
            if adro2.cynghanedd == 'DIM':
                sylwadau.append(
                    'torr mesur (hir-a-thoddaid): dim cynghanedd yn yr ail linell'
                )
                ateb = False
            # odl
            if not od.oes_odl(cwpled.cyntaf.geiriau[-1],
                              cwpled.ail.geiriau[-1]):
                sylwadau.append('torr mesur (hir-a-thoddaid): dim odl')
                ateb = False
            # adro.extend([ adro1, adro2 ])
            adro.append(adro1)
            adro.append(adro2)

        # profi toddaid hi cwpled olaf
        # olaf = cwpledi[-1]
        toh = self.oes_toddaid(cwpledi[-1], hir=True)
        if not toh[0]:
            sylwadau.append(
                'torr mesur (hir-a-thoddaid): dim toddaid byr yn y ddwy linell olaf'
            )
            ateb = False
        # adro.extend( toh[1] )
        adro.append(toh[1][0])
        adro.append(toh[1][0])

        return [ateb, adro, sylwadau]