Attribute VB_Name = "EspSINTAKS" 'EspSINTAKS 'ESPSOF Versio 0.9 Subordigita Makroo-Modjulo speciale por SIntakso 'ESPSOF Versio 0.9 '25 Majo 2008 TW (Toon Witkam) 'tiu chi modjulo entenas 8 procedurojn: chiuj estas funkcioj; 'ili estas subordigitaj al la sintaksa brancho de la ESPSOF-chefprogramo TEKSTanal Option Explicit Function SyntaxSubjObjVerbPairs(iZin As Integer, VortSpecString As String, WoordPositiesSVO() As Integer, ntrio As Integer) As Boolean '17 Majo 2008 TW (Toon Witkam) 'Dit macro gaat uit van de EspTextAnalyzer-output in Excel-Sheet 'Zinsbouw', 'namelijk de VortSpecEnFrazo-STRING van de AZM-zin. 'Dit macro behandelt in een zin eerst alles LINKS van het eerste Werkwoord (Finite Verb): 'dit zinsdeel wordt bij de verwerking doorn het macro eerst gesplitst in de volgende 2 delen: ' ' 1. ZinsdeelVoorKomma: zinsdeel vanaf Zinsbegin tot en met de Laatste Komma voor het (eerste) Werkwoord; ' 2. ZinsdeelVoorW: zinsdeel vanaf de Laatste Komma tot het (eerste) Werkwoord; ivm verwerkingsefficiency wordt ' dit zinsdeel tijdelijk omgekeerd en heet dan OmgekZinsdeelVoorW. 'Het ZinsdeelVoorKomma kan uiteraard leeg zijn. 'Als rechter-onderdeel van ZinsdeelVoorW wordt bovendien nog onderscheiden het zgn. TussenZinsdeel; 'het TussenZinsdeel is het stuk tussen het (eerste) Werkwoord en het daaraan voorafgaande als Subject of Object ... '... optredende Personpronomo of Noun; uiteraard kan ook het TusenZinsdeel leeg zijn. 'Vervolgens wordt het eind van zin bepaald. Dat kan het eind van de hele zin zijn, maar ook het eind van alleen maar ... ' ...een grammaticale hoofd- of bijzin (Propozicio). 'De volgende stap is het opsporen van alle Infinitief+Object constructies in de zin, en daarna behandelt het macro... '...als Object of Subject optredende Nouns en Personpronomoj RECHTS van het Werkwoord (Finite Verb). 'Bij een samengestelde zin wordt de hele cyclus dan weer herhaald voor elke Propozicio. Dim i As Integer Dim iposW As Integer Dim iposWOngecorr As Integer Dim iposN1 As Integer Dim iposN2 As Integer Dim iposN3 As Integer Dim EventualaSubj As Boolean Dim iposEvSubjOngecorr As Integer Dim WoordPosEventualaSubj As Integer Dim iposSubjObj As Integer Dim iposSubjObjOngecorr As Integer Dim ipos As Integer Dim ipos4ju As Integer Dim iposKomma As Integer Dim nposmin As Integer Dim ZinsdeelVoorW As String Dim OmgekZinsdeelVoorW As String 'Dim OmgekZinsdeelAchterW As String Dim LenZinsdeelVoorW As Integer Dim ZinsdeelAchterW As String Dim LenZinsdeelAchterW As Integer Dim ZinsdeelVoorKomma As String Dim LenZinsdeelVoorKomma As Integer Dim TussenZinsdeel As String Dim LenTussenZinsdeel As Integer Dim SubjectVoorW As Boolean Dim SubjectAchterW As Boolean Dim N4 As Integer 'N4=0 betekent: Noun heeft GEEN accusatief-uitgang; N4=1 betekent: WEL accusatief-uitgang; Dim ObjectVoorW As Boolean 'Let op: "accusatief" is niet identiek aan "Object" (er bestaat ook Richtings-Accusatief) Dim ObjectAchterW As Boolean Dim Verb As Boolean Dim itrio As Integer Dim itrioVoorafAanInfObj As Integer Dim iZoekPronomen As Integer Dim iZoekN As Integer Dim nNouns As Integer Dim AlternativMethod As Boolean Dim TwinMethods As Boolean Dim NounSearched As Boolean Dim iposSubjObjMeth1 As Integer Dim iposSubjObjMeth2 As Integer Dim iposInfinitivPlusObject As Integer Dim iposInfinitivPlusObjectOngecorr As Integer Dim iposObjvanIO As Integer Dim iposObjvanIOongecorr As Integer Dim iposInfinitiv As Integer Dim iposVerderInfinitiv As Integer Dim ZinsdeelVoorInfinitiv As String Dim ZinsdeelVoorObjvanIO As String Dim nposmin2 As Integer Dim LenZinsdeelVoorWcorr As Integer Dim nposminKommaVoorW As Integer Dim GeenFiniteVerb As Boolean Dim GeenHerhalingVoorW As Boolean Dim ZoekSOVofOSV As Boolean Dim iposPunktKomo As Integer Dim iposDupunkto As Integer Dim iposHaltostreko As Integer Dim iposVraagteken As Integer Dim iposUitroepteken As Integer Dim iposOpenCitilo As Integer Dim IposSluitCitilo As Integer Dim iposOpenHaak As Integer Dim iposSluitHaak As Integer Dim ip As Integer Dim finPropozicio As Integer Dim iposSubj As Integer Dim iposObj As Integer Dim ipos2eVerb As Integer Dim nWoordenVooraf As Integer Dim iposRelSubjunkcio As Integer Dim iposRelCorr As Integer Dim iposKonjunkcio As Integer Dim VerbImperativ As Boolean Dim Zin As String Dim SamengesteldeZin As String Dim VoorafgaandeZinnen As String Dim LenSamengesteldeZin As Integer Dim LenResterendeZinnen As Integer Dim LenVoorafgaandeZinnen As Integer Dim LenVoorafgaandeZinnenOngecorr As Integer SamengesteldeZin = VortSpecString LenSamengesteldeZin = Len(SamengesteldeZin) Zin = SamengesteldeZin VoorafgaandeZinnen = "" LenVoorafgaandeZinnen = 0 LenVoorafgaandeZinnenOngecorr = 0 itrio = 0 '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 'Begin van (eerste of volgende) P R O P O Z I C I O van K O M P L E K S A F R A Z O : '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 'For iPropozicio = 1 to nPropozicio: '[Quasi-LOOP} 2: '[ Instappunt bij nieuwe Propozicio van een Samengestelde Zin] SubjectVoorW = False ObjectVoorW = False Verb = False VerbImperativ = False GeenFiniteVerb = False nposminKommaVoorW = 0 ZinsdeelVoorKomma = "" LenZinsdeelVoorKomma = 0 NounSearched = False iposSubj = 0 iposObj = 0 iposSubjObj = 0 iposSubjObjOngecorr = 0 EventualaSubj = False iposInfinitivPlusObject = 0 '[16-08-07] '.... '..... <== **hier toevoegen: evt. verdere variabelen die voor een nieuwe Propozicie ("Zin") nog op default-waarde gezet moeten worden '... GeenHerhalingVoorW = False ZoekSOVofOSV = False '******************************************************************************************************************** 'Zoek 1e Werkwoord: van links naar rechts zoekend, het 1e Werkwoord (Finite Verb, 'W') in de zin: '******************************************************************************************************************** itrio = itrio + 1 'teller voor aan oproepende programma terug te geven SVO-Woordpositie-trio's, SV- of VO-paren: For i = itrio To itrio + 1 WoordPositiesSVO(itrio, 1) = 0 'SUBJECT (default) WoordPositiesSVO(itrio, 2) = 0 'VERB (default) WoordPositiesSVO(itrio, 3) = 0 'OBJECT (default) Next i 'Bepaling P O S I T I E 1e Werkwoord (Finite Verb): iposW = InStr(1, Zin, "W") If iposW = 0 Then GoTo 81 '(GEEN Werkwoord gevonden) If iposW = 1 Then GoTo 82 '(zin BEGINT met Werkwoord) ZinsdeelVoorW = Left(Zin, iposW - 1) 'iposW (positie Werkwoord) gerekend vanaf het Totale Zinsbegin If iposW = 2 Then GoTo 9 '(leesteken voor Werkwoord niet mogelijk) 7: 'Kijk of er 1 of meer komma's, andere L E E S T E K E N S , of RelSubjunkcioj / Konjunkcioj in het aan 1e Werkwoord voorafgaande zinsdeel staan; 'het gaat daarbij om het vinden van het M E E S T R E C H T S E van al deze tekens: iposKomma = InStr(1, ZinsdeelVoorW, ",") If iposKomma > 0 Then 'Else goto 71 'Komma aangetroffen: ZinsdeelVoorKomma = ZinsdeelVoorKomma + Left(ZinsdeelVoorW, iposKomma) 'totale zinsdeel voor die (laatste) Komma ZinsdeelVoorW = Right(ZinsdeelVoorW, Len(ZinsdeelVoorW) - iposKomma) 'zinsdeel vanaf (laatste) Komma tot het eerste Werkwoord LenZinsdeelVoorKomma = Len(ZinsdeelVoorKomma) If Len(ZinsdeelVoorW) = 0 Then GoTo 9 GoTo 7 '(er kunnen MEERDERE komma's aan het eerste Werkwoord voorafgaan) End If 71: iposPunktKomo = InStr(1, ZinsdeelVoorW, ";") If iposPunktKomo > 0 Then 'Else goto 72 'PuntKomma aangetroffen: ZinsdeelVoorKomma = ZinsdeelVoorKomma + Left(ZinsdeelVoorW, iposPunktKomo) 'totale zinsdeel voor die (laatste) PunktKomo ZinsdeelVoorW = Right(ZinsdeelVoorW, Len(ZinsdeelVoorW) - iposPunktKomo) 'zinsdeel vanaf (laatste) PunktKomo tot het eerste Werkwoord LenZinsdeelVoorKomma = Len(ZinsdeelVoorKomma) If Len(ZinsdeelVoorW) = 0 Then GoTo 9 GoTo 71 '(er kunnen MEERDERE PuntKomma's aan het eerste Werkwoord voorafgaan) End If 72: iposDupunkto = InStr(1, ZinsdeelVoorW, ":") If iposDupunkto > 0 Then 'Else goto 73 'Dubbele Punt aangetroffen: ZinsdeelVoorKomma = ZinsdeelVoorKomma + Left(ZinsdeelVoorW, iposDupunkto) 'totale zinsdeel voor die (laatste) DuPunkto ZinsdeelVoorW = Right(ZinsdeelVoorW, Len(ZinsdeelVoorW) - iposDupunkto) 'zinsdeel vanaf (laatste) DuPunkto tot het eerste Werkwoord LenZinsdeelVoorKomma = Len(ZinsdeelVoorKomma) If Len(ZinsdeelVoorW) = 0 Then GoTo 9 GoTo 72 '(er kunnen MEERDERE Dubbele Punten aan het eerste Werkwoord voorafgaan) End If 73: iposHaltostreko = InStr(1, ZinsdeelVoorW, "-") '[in de VortSpecMarkilo-string wordt een gedachtenstreep als Ascii 45 afgebeeld] If iposHaltostreko > 0 Then 'Else goto 73001 'Gedachtenstreep aangetroffen: ZinsdeelVoorKomma = ZinsdeelVoorKomma + Left(ZinsdeelVoorW, iposHaltostreko) 'totale zinsdeel voor die (laatste) Gedachtenstreep ZinsdeelVoorW = Right(ZinsdeelVoorW, Len(ZinsdeelVoorW) - iposHaltostreko) 'zinsdeel vanaf (laatste) Gedachtenstreep tot het eerste Werkwoord LenZinsdeelVoorKomma = Len(ZinsdeelVoorKomma) If Len(ZinsdeelVoorW) = 0 Then GoTo 9 GoTo 73 '(er kunnen MEERDERE Gedachtenstrepen aan het eerste Werkwoord voorafgaan) End If 73001: iposVraagteken = InStr(1, ZinsdeelVoorW, "?") If iposVraagteken > 0 Then 'Else goto 73002 'Vraagteken aangetroffen: ZinsdeelVoorKomma = ZinsdeelVoorKomma + Left(ZinsdeelVoorW, iposVraagteken) 'totale zinsdeel voor dat (laatste) Vraagteken ZinsdeelVoorW = Right(ZinsdeelVoorW, Len(ZinsdeelVoorW) - iposVraagteken) 'zinsdeel vanaf (laatste) Vraagteken tot het eerste Werkwoord LenZinsdeelVoorKomma = Len(ZinsdeelVoorKomma) If Len(ZinsdeelVoorW) = 0 Then GoTo 9 GoTo 73001 '(er kunnen MEERDERE Gedachtenstrepen aan het eerste Werkwoord voorafgaan) End If 73002: iposUitroepteken = InStr(1, ZinsdeelVoorW, "!") If iposUitroepteken > 0 Then 'Else goto 74 'Uitroepteken aangetroffen: ZinsdeelVoorKomma = ZinsdeelVoorKomma + Left(ZinsdeelVoorW, iposUitroepteken) 'totale zinsdeel voor dat (laatste) Uitroepteken ZinsdeelVoorW = Right(ZinsdeelVoorW, Len(ZinsdeelVoorW) - iposUitroepteken) 'zinsdeel vanaf (laatste) Uitroepteken tot het eerste Werkwoord LenZinsdeelVoorKomma = Len(ZinsdeelVoorKomma) If Len(ZinsdeelVoorW) = 0 Then GoTo 9 GoTo 73002 '(er kunnen MEERDERE Gedachtenstrepen aan het eerste Werkwoord voorafgaan) End If 74: iposOpenCitilo = InStr(1, ZinsdeelVoorW, "<") '[in de VortSpecMarkilo-string wordt een OpeningsCitilo als Ascii 60 afgebeeld] If iposOpenCitilo > 0 Then 'Else goto 75 'OpeningsCitilo aangetroffen: ZinsdeelVoorKomma = ZinsdeelVoorKomma + Left(ZinsdeelVoorW, iposOpenCitilo) 'totale zinsdeel voor die (laatste) OpeningsCitilo ZinsdeelVoorW = Right(ZinsdeelVoorW, Len(ZinsdeelVoorW) - iposOpenCitilo) 'zinsdeel vanaf (laatste) OpeningsCitilo tot het eerste Werkwoord LenZinsdeelVoorKomma = Len(ZinsdeelVoorKomma) If Len(ZinsdeelVoorW) = 0 Then GoTo 9 GoTo 74 '(er kunnen MEERDERE OpeningsCitiloj aan het eerste Werkwoord voorafgaan) End If 75: IposSluitCitilo = InStr(1, ZinsdeelVoorW, ">") '[in de VortSpecMarkilo-string wordt een SluitCitilo als Ascii 62 afgebeeld] If IposSluitCitilo > 0 Then 'Else goto 76 'SluitCitilo aangetroffen: ZinsdeelVoorKomma = ZinsdeelVoorKomma + Left(ZinsdeelVoorW, IposSluitCitilo) 'totale zinsdeel voor die (laatste) SluitCitilo ZinsdeelVoorW = Right(ZinsdeelVoorW, Len(ZinsdeelVoorW) - IposSluitCitilo) 'zinsdeel vanaf (laatste) SluitCitilo tot het eerste Werkwoord LenZinsdeelVoorKomma = Len(ZinsdeelVoorKomma) If Len(ZinsdeelVoorW) = 0 Then GoTo 9 GoTo 75 '(er kunnen MEERDERE SluitCitiloj aan het eerste Werkwoord voorafgaan) End If 76: iposOpenHaak = InStr(1, ZinsdeelVoorW, "(") '[in de VortSpecMarkilo-string wordt een OpeningsHaak als Ascii 40 afgebeeld] If iposOpenHaak > 0 Then 'Else goto 77 'OpeningsHaak aangetroffen: ZinsdeelVoorKomma = ZinsdeelVoorKomma + Left(ZinsdeelVoorW, iposOpenHaak) 'totale zinsdeel voor die (laatste) OpeningsHaak ZinsdeelVoorW = Right(ZinsdeelVoorW, Len(ZinsdeelVoorW) - iposOpenHaak) 'zinsdeel vanaf (laatste) OpeningsĤaak tot het eerste Werkwoord LenZinsdeelVoorKomma = Len(ZinsdeelVoorKomma) If Len(ZinsdeelVoorW) = 0 Then GoTo 9 GoTo 76 '(er kunnen MEERDERE OpeningsCitiloj aan het eerste Werkwoord voorafgaan) End If 77: iposSluitHaak = InStr(1, ZinsdeelVoorW, ")") '[in de VortSpecMarkilo-string wordt een SluitHaak als Ascii 41 afgebeeld] If iposSluitHaak > 0 Then 'Else goto 78 ZinsdeelVoorKomma = ZinsdeelVoorKomma + Left(ZinsdeelVoorW, iposSluitHaak) 'totale zinsdeel voor die (laatste) SluitHaak ZinsdeelVoorW = Right(ZinsdeelVoorW, Len(ZinsdeelVoorW) - iposSluitHaak) 'zinsdeel vanaf (laatste) SluitHaak tot het eerste Werkwoord LenZinsdeelVoorKomma = Len(ZinsdeelVoorKomma) If Len(ZinsdeelVoorW) = 0 Then GoTo 9 GoTo 77 '(er kunnen MEERDERE SluitCitiloj aan het eerste Werkwoord voorafgaan) End If 'R E L S U B J U N K C I O J en K O N J U N K C I O J : 78: iposRelSubjunkcio = InStr(2, ZinsdeelVoorW, "r") '["r" is de VortSpecMarkilo voor RelSubjunkcioj: kiu, kiam, kie, ke, se, ĉar, dum, ĝis, ĉu, ....] [28-7-07] '[*8-8-07: in bovenstaand stmt startpositie "InStr(1,..." veranderd in "InStr(2,...", anders krijg je meteen aan het begin perikelen!!] If iposRelSubjunkcio > 0 Then 'Else goto 79 'RelSubjunkcio aangetroffen: ZinsdeelVoorKomma = ZinsdeelVoorKomma + Left(ZinsdeelVoorW, iposRelSubjunkcio) 'totale zinsdeel voor die (laatste) RelSubjunkcio ZinsdeelVoorW = Right(ZinsdeelVoorW, Len(ZinsdeelVoorW) - iposRelSubjunkcio) 'zinsdeel vanaf (laatste) RelSubjunkcio tot het eerste Werkwoord LenZinsdeelVoorKomma = Len(ZinsdeelVoorKomma) If Len(ZinsdeelVoorW) = 0 Then GoTo 9 GoTo 78 '(er kunnen MEERDERE RelSubjunkcioj aan het eerste Werkwoord voorafgaan) End If 79: 'iposKonjunkcio = InStr(1, ZinsdeelVoorW, "k") '["k" is de VortSpecMarkilo voor Konjunkcioj: kaj, aŭ, nek, ju, des, ol ] 'If iposKonjunkcio > 0 Then 'Else goto 9 ' 'Konjunkcio aangetroffen: ' ZinsdeelVoorKomma = ZinsdeelVoorKomma + Left(ZinsdeelVoorW, iposKonjunkcio) 'totale zinsdeel voor die (laatste) Konjunkcio ' ZinsdeelVoorW = Right(ZinsdeelVoorW, Len(ZinsdeelVoorW) - iposKonjunkcio) 'zinsdeel vanaf (laatste) Konjunkcio tot het eerste Werkwoord ' LenZinsdeelVoorKomma = Len(ZinsdeelVoorKomma) ' If Len(ZinsdeelVoorW) = 0 Then GoTo 9 ' GoTo 79 '(er kunnen MEERDERE Konjunkcioj aan het eerste Werkwoord voorafgaan) 'End If 'Z I N S G E L E D I N G in 'ZinsdeelVoorKomma' en 'ZinsdeelVoorW' is nu bepaald: 9: LenZinsdeelVoorW = Len(ZinsdeelVoorW) 'If LenZinsdeelVoorW = 0 Then MsgBox "LenZinsdeelVoorW = 0 " iZoekPronomen = 1 'beginpositie voor zoeken van Personpronomen [bij zoeken naar een 1e Subj of Obj ] iZoekN = 1 'beginpositie voor zoeken van Noun [bij zoeken naar een 1e Subj of Obj ] 6: '[ Instappunt bij Herhaling voor zoeken naar een 2e Subj of Obj ] If LenZinsdeelVoorW = 1 Then 'Indien slechts 1 woord aan het Werkwoord voorafgaat: If Left(ZinsdeelVoorW, 1) = ChrW(349) Then 'test op Vortspec-Markilo 'ŝ' (Personpronomo) SubjectVoorW = True iposSubjObj = 1 iposSubjObjOngecorr = iposSubjObj ElseIf Left(ZinsdeelVoorW, 1) = "N" Then 'test op Vortspec-Markilo 'N' (Noun) SubjectVoorW = True iposSubjObj = 1 iposSubjObjOngecorr = iposSubjObj End If LenZinsdeelVoorWcorr = 1 GeenHerhalingVoorW = True '(bij slechts 1 woord voor W hoeft in ieder geval niet naar een 2e Subj of Obj gezocht te worden) GoTo 55 End If OmgekZinsdeelVoorW = StrReverse(ZinsdeelVoorW) '============================================================================================== 'Opsporen van S U B J E C T en/of O B J E C T ter L I N K E R Z I J D E van het Finite Verb: '============================================================================================== 'Instel-Schakelaars betreffende het Deel Voor W: TwinMethods = False '<== SWITCH voor het al dan niet aanzetten van DUBBELE METHODE: Z O W E L Methode 1 als Methode 2 AlternativMethod = False '<== SWITCH voor het kiezen van Methode 2 (Alternatieve Methode), indien TwinMethods = False 10: ' V O O R W : 'Zoek Personpronomo dat aan het Werkwoord voorafgaat (begin te zoeken vlak voor het Werkwoord): 'iZoekPronomen = 1 'beginpositie voor zoeken Personpronomo [bij SOVofOSV-herhaling is iZoekPronomen = iposSubjObjOngecorr + 1] 11: iposN1 = InStr(iZoekPronomen, OmgekZinsdeelVoorW, ChrW(349)) 'test op Vortspec-Markilo 'ŝ' If iposN1 = 0 Then GoTo 20 'geen (zelfstandig) Personpronomo voorafgaand aan het Werkwoord 'Personpronomo gevonden; check nu of daar geen Prepozicio of Konjunkcio ("kaj", "aŭ") direct aan vooraf gaat: If Mid(OmgekZinsdeelVoorW, iposN1 + 1, 1) = "p" Then '[* ### 17-1-07 weggehaald: ### Or Mid(OmgekZinsdeelVoorW, iposN1 + 1, 1) = "k" Then If iZoekPronomen = 1 Then iZoekPronomen = iposN1 + 2 'zoek nog 1 x verder (voor de PP kan nog een Pronomo staan, bijv. "Ŝi pri li diris..." ) GoTo 11 Else GoTo 20 'GEEN zelfstandig Personpronomo aangetroffen (en niet verder zoeken ernaar) End If Else 'Zelfstandig Personpronomo, kan Subject maar ook Object van het Werkwoord zijn: If iposN1 > 1 Then If Mid(OmgekZinsdeelVoorW, iposN1 - 1, 1) = "4" Then ObjectVoorW = True Else SubjectVoorW = True If ObjectVoorW Then 'check of het Pronomen niet het object is van een daaraan onmiddellijk voorafgaand Infinitiv: If Mid(OmgekZinsdeelVoorW, iposN1 + 1, 1) = "i" Then 'Extra'tje: IO gevonden, bestaande uit Infinitiv & Pronomen (in accusatief): iposInfinitivPlusObject = iposN1 + 1 'de (ongecorrigeerde) positie van de Infinitiv; de Pronomen staat daar direct naast 'Nu weer wat betreft het Finite Verb: If iZoekPronomen = 1 Then iZoekPronomen = iposN1 + 2 'zoek nog 1 x verder (voor de Infinitiv kan nog een Pronomo staan, .... GoTo 11 ' ... bijv. "Ŝi por konsoli lin diris..." ) Else GoTo 20 'GEEN zelfstandig Personpronomo aangetroffen (en niet verder zoeken ernaar) End If End If End If Else SubjectVoorW = True End If iposSubjObj = iposN1 'woord op positie iposN1 in OmgekZinsdeelVoorW is Subject of Object End If GoTo 50 'Attentie: KIU- en TIU- woorden (Vortspec-Markilo 'D') en KIO en TIO (Vortspec-Markilo 'Z') ... ' ...als zelfstandige Subjecten of Objecten worden hier genegeerd ! '------------------------------------------------------------------------------------------------------------------------------------------------------- 20: NounSearched = True 'Zoek N O U N dat aan het Werkwoord voorafgaat (begin te zoeken vlak voor het Werkwoord); 'hiervoor zijn er Twee Methodes, die desgewenst allebei kunnen worden toegepast - voor extra zekerheid: If (Not TwinMethods) And (AlternativMethod) And (Not ZoekSOVofOSV) Then GoTo 200 '[7-7-07] 'Methode 1, gebaseerd op lijst van meer dan 20 s y n t a c t i s c h e v a r i a n t e n van een PP: 'iZoekN = 1 [bij SOVofOSV-herhaling is iZoekN = iposSubjObjOngecorr + 1] nNouns = 1 21: iposN1 = InStr(iZoekN, OmgekZinsdeelVoorW, "N") 'test op Vortspec-Markilo 'N' If iposN1 = 0 Then 'GEEN Noun voorafgaand aan het Werkwoord: If EventualaSubj Then GoTo 23 '[9-8-07] If TwinMethods And (Not ZoekSOVofOSV) Then GoTo 200 '[8-7-07] Else GoTo 28 '(want GEEN TwinMethods) End If End If 'Bekijk Noun (op positie iposN1, eerst het dichtst bij het Werkwoord, vervolgens op 1 na of op 2 na het dichtst bij het Werkwoord): If iposN1 > 1 Then If Mid(OmgekZinsdeelVoorW, iposN1 - 1, 1) = "4" Then N4 = 1 Else N4 = 0 'N4 op zich impliceert nog geen Object Else '(denk aan Richtings-Accusatief, bij voorafgaande Prepozicio) N4 = 0 End If If SubjectVoorW And N4 = 0 Then 'tijdens herhaling is een 2e Subject of een EventualaSubj (=onzeker subject) ontdekt '[11-8-07] If Not EventualaSubj Then MsgBox "2e Subject VOOR Verb ontdekt" '[11-8-07] iZoekN = iposN1 + 1 GoTo 21 End If If NounSubHeaderPP(OmgekZinsdeelVoorW, iposN1, N4, EventualaSubj) Then 'check tegen lijst van syntactische varianten van een PP '[9-8-07: parameter EventualaSubj ] 'NounSubHeaderPP geldt OOK voor "dum" en "ĝis", maar dan wordt automatisch 'EventualaSubj' op 'true' gezet (want dat zijn EVENTUEEL Prepozicioj) [9-8-07] If EventualaSubj Then iposEvSubjOngecorr = iposN1 '[9-8-07] If nNouns = 8 Then GoTo 24 '(na 8 PP's geven we het op!) nNouns = nNouns + 1 iZoekN = iposN1 + 1 GoTo 21 End If If N4 = 1 Then 'bij Noun in accusatief ook checken tegen lijst van syntactische varianten van een Infinitiv-phrase: '[9-7-07] If NounAccSubHeaderInfinitiv(OmgekZinsdeelVoorW, iposN1, N4) Then 'Extra'tje: IO gevonden, bestaande uit Infinitiv & Noun (in accusatief): iposInfinitivPlusObject = InStr(iposN1 + 1, OmgekZinsdeelVoorW, "i") 'de (ongecorrigeerde) positie van de Infinitiv; het ... 'Wat betreft het Finite Verb: ' ...bijbehorend Noun (acc) staat daar niet altijd direct naast; If nNouns = 4 Then GoTo 24 '(na 4 PP's geven we het op!) nNouns = nNouns + 1 iZoekN = iposN1 + 1 GoTo 21 End If End If 23: 'Indien GEEN prepositie voor Noun, dus een 'zelfstandig' Noun: If N4 = 1 Then ObjectVoorW = True Else SubjectVoorW = True iposSubjObj = iposN1 'woord op zinspositie iposN1 in OmgekZinsdeelVoorW is Subject of Object If EventualaSubj Then iposSubjObj = iposEvSubjOngecorr '[9-8-07] If TwinMethods And (Not ZoekSOVofOSV) Then iposSubjObjMeth1 = iposSubjObj '[7-7-07] GoTo 200 End If GoTo 50 24: If ZoekSOVofOSV Then GoTo 28 If Not TwinMethods Then GoTo 83 '(8 Nouns voorafgaand aan het Werkwoord hebben een Prepozicio of Infinitiv als header !) '[in dit geval geeft Meth1 het op; als bij TwinMethods alsnog Meth2 een Subject of Object vindt, zal dit als "unsure" worden gemarkeerd] [7-7-07] 200: 'Methode 2, A L T E R N A T I E V E Methode (functioneert ook bij i n g e b e d d e NP's, bijv. "la de mia patro konstruita domo"): If ZelfstandigNounOpgespoord(OmgekZinsdeelVoorW, iposN1) Then 'Bekijk Noun (op positie iposN1): If iposN1 > 1 Then If Mid(OmgekZinsdeelVoorW, iposN1 - 1, 1) = "4" Then N4 = 1 Else N4 = 0 'N4 op zich impliceert nog geen Object (denk aan Richtings-Accusatief) ... Else '...maar hier komt het zelfstandig, ZONDER Prepozicio, voor N4 = 0 End If 'zelfstandig' Noun: If N4 = 1 Then ObjectVoorW = True Else SubjectVoorW = True iposSubjObj = iposN1 'woord op zinspositie iposN1 in OmgekZinsdeelVoorW is Subject of Object If TwinMethods And (Not ZoekSOVofOSV) Then iposSubjObjMeth2 = iposSubjObj '[7-7-07] GoTo 50 Else 'GEEN Noun voorafgaand aan het Werkwoord: If TwinMethods And (Not ZoekSOVofOSV) Then GoTo 80 Else GoTo 28 '(want GEEN TwinMethods) '[20-7-07] End If End If '------------------------------------------------------------------------------------------------------------------------------------------------------- 'Berekening van precieze (AZM-conforme) woordposities: 50: 'Omkering ZinsdeelVoorW [tijdelijk omkeren van de string bespoedigt het gebruik van Instr binnen de Functie ExtraTekensInVortSpecoString]: iposSubjObjOngecorr = LenZinsdeelVoorW + 1 - iposSubjObj '[*ongecorrigeerde berekening is nog nodig, o.a. bij bepaling van het zgn.TussenZinsdeel ] 'Correctie van Woordpositie (de correctie betreft accusatief-, meervouds- en lees-tekens in de VortSpecEnFrazo-STRING): nposmin = 0 If ExtraTekensInVortSpecoString(iposSubjObj + 1, OmgekZinsdeelVoorW, nposmin) Then 'tel accusatief- en meervouds- tekens in VortSpecoString LenZinsdeelVoorW = LenZinsdeelVoorW - nposmin '[*Let op: LenZinsdeelVoorW is nu gecorrigeerd; voor ongecorrigeerde berekening, gebruik Len(ZinsdeelVoorW)] End If 'Gebruik "LenZinsdeelVoorWcorr" voor gecorrigeerde berekening (AZM-woordpositie), ... ' ... en "Len(ZinsdeelVoorW)" voor ongecorrigeerde berekening (VortSpecEnFrazo-STRING): LenZinsdeelVoorWcorr = LenZinsdeelVoorW If Not GeenHerhalingVoorW Then iZoekPronomen = iposSubjObj + 1 '(vooruitlopend op zoeken van een evt. Tweede Pronomen of Noun) iZoekN = iposSubjObj + 1 End If 'Terug-Omkering Woordpositie (vanuit OmgekZinsdeelVoorW weer terug naar ZinsdeelVoorW): iposSubjObj = LenZinsdeelVoorWcorr + 1 - iposSubjObj 55: nposmin = 0 '[* 17-7-07] If Not ZoekSOVofOSV Then 'nposmin = 0 If LenZinsdeelVoorKomma <> 0 Then If ExtraTekensInVortSpecoString(1, ZinsdeelVoorKomma, nposmin) Then End If '(correctie voor ALLE leestekens, accusatief- , meervouds-tekens in VortSpecoString) '[28-7-07] End If nposminKommaVoorW = nposmin End If 'Resulterende berekening Woordpositie iposSubjObj (Header-woord van Subject of Object): iposSubjObj = iposSubjObj + LenZinsdeelVoorKomma - nposminKommaVoorW 'iposSubjObj (gecorrigeerde positie) gerekend vanaf Begin van Zin (Propozicio) '*************************************************************************************************************** 'Doorgeven zins-woordnummer Pronoun of Header-Noun (Subject of Object) links van het Verb: '*************************************************************************************************************** If TwinMethods And NounSearched Then 'bij TwinMethods, en wanneer het gaat over Nouns (niet Pronouns): '[7-7-07] If iposSubjObjMeth1 <> iposSubjObjMeth2 Then 'als Meth1 en Meth2 het niet met elkaar eens zijn, dan wordt... WoordPositiesSVO(itrio, 1) = "9999" '...middels dit getal een "unsure" outcome to the calling program gesignaleerd, ... WoordPositiesSVO(itrio, 3) = "9999" '...zowel voor Object als Subject; GoTo 30 'de Verb-positie wordt WEL normaal doorgegeven End If End If If SubjectVoorW Then 'MsgBox ("Zin " & iZin & ": SubjectVoorW is woord " & iposSubjObj) If EventualaSubj Then '[9-8-07] 'EventualaSubj wordt achter de hand gehouden tot beslissing Achter W [ WoordPosEventualaSubj = LenVoorafgaandeZinnen + iposSubjObj 'EventualaSubj wordt achter de hand gehouden tot beslissing Achter W Else 'opslaan als Subject in SVO-trio: WoordPositiesSVO(itrio, 1) = LenVoorafgaandeZinnen + iposSubjObj 'Subject ALTIJD in cel 1 van trio [25 juni 2007] 'het zins-woordnummer wordt doorgegeven aan het oproepende programma, ... '...dat vervolgens de Uitgang van het woord (-i, -o, -oj) controleert End If ElseIf ObjectVoorW Then 'MsgBox ("Zin " & iZin & ": ObjectVoorW is woord " & iposSubjObj) 'opslaan als Object in SVO-trio: WoordPositiesSVO(itrio, 3) = LenVoorafgaandeZinnen + iposSubjObj 'Object ALTIJD in cel 3 van trio [25 juni 2007] 'het zins-woordnummer wordt doorgegeven aan het oproepende programma, ... '...dat vervolgens de Uitgang van het woord (-in, -on, -ojn) controleert, ... '...en nakijkt of de accusatief geen TIJDSDUUR-BEPALING (horojn, tagojn, ...) betreft End If 'Zoek een evt. Tweede Noun of Pronomen, voorafgaand aan het Finite Verb ( S O V of O S V ) : If Not GeenHerhalingVoorW Then GeenHerhalingVoorW = True '(na deze herhaling niet nog een herhaling) LenZinsdeelVoorW = Len(ZinsdeelVoorW) 'voor de herhaling weer ongecorrigeerd maken [de gecorrigeerde lengte wordt bewaard in 'LenZinsdeelVoorWcorr' ] '[*op 17-7-07 toegevoegd] SubjectVoorW = False ObjectVoorW = False ZoekSOVofOSV = True 'bij de Herhaling wordt ALTIJD Methode1 voor het zoeken van een zelfstandig Noun gebruikt, ongeacht de keuze van TwinMethods GoTo 6 End If GoTo 30 '[21-7-07] 28: 'GEEN Zelfstandig Noun voorafgaand aan het Werkwoord gevonden (blokken label 50 en 55 oversprongen): '[21-7-07] nposmin = 0 '[21-7-07] If Not ZoekSOVofOSV Then LenZinsdeelVoorWcorr = Len(ZinsdeelVoorW) '[21-7-07] If Not ZoekSOVofOSV Then '[*2-8-07] nposmin = 0 If LenZinsdeelVoorKomma <> 0 Then If ExtraTekensInVortSpecoString(1, ZinsdeelVoorKomma, nposmin) Then End If '(correctie voor ALLE leestekens, accusatief- , meervouds-tekens in VortSpecoString) '[28-7-07] End If nposminKommaVoorW = nposmin End If GoTo 30 'Einde van zoeken naar (1e en 2e) Pronomen of Noun voorafgaand aan Finite Verb [of er al dan niet een 2e Pronomen of Noun ... ' ...gevonden is, is te zien aan de inhoud van de WoordPositiesSVO(itrio, 1) en (itrio,3), resp. voor Subject en Object ] '************************************************************************************** 'Ophalen en doorgeven zins-woordnummer van Werkwoord (Finite Verb): '************************************************************************************** 30: 'Voor herbepaling van de positie van het (eerste) Werkwoord, ... '... een correctie aanbrengen voor accusatief- , meervouds- en evt. lees-tekens in het zgn. TussenZinsdeel, ... '... dat is het zinsdeel tussen positie iposSubjObj en positie Werkwoord; '... het TussenZinsdeel is overigens een onderdeel van ZinsdeelVoorW, ... '... en wordt bepaald op basis van ongecorrigeerde lengte ZinsdeelVoorW en iposSubjObjOngecorr: TussenZinsdeel = Right(ZinsdeelVoorW, Len(ZinsdeelVoorW) - iposSubjObjOngecorr) nposmin = 0 '[23-7-07] 'Resulterende berekening woordpositie iposW (Werkwoord, finite verb): iposWOngecorr = iposW If TussenZinsdeel <> "" Then If ExtraTekensInVortSpecoString(1, TussenZinsdeel, nposmin) Then 'tel accusatief- en/of meervouds-tekens in VortSpecoString End If '[*alleen de uitvoerparameter nposmin doet hier terzake] End If iposW = LenZinsdeelVoorKomma - nposminKommaVoorW + LenZinsdeelVoorWcorr - nposmin + 1 '[23-7-07] 'MsgBox ("Zin " & iZin & ": Verb is woord " & iposW) 'opslaan als 2e woord in SVO-trio: WoordPositiesSVO(itrio, 2) = LenVoorafgaandeZinnen + iposW 'Finite Verb ALTIJD in cel 2 van trio [25 juni 2007] 'het zins-woordnummer wordt doorgegeven aan het oproepende programma, ... '...dat vervolgens de Verb-uitgang van het woord controleert en nakijkt of het Verb een KOPULO is (estas, ŝajnas, ...) 'Beeindiging Subject- en/of Object-verwerking links van het Finite Verb: 275: ntrio = itrio 'aantal opgespoorde SVO/OVS trios cq. SV/VO paren 300: If GeenFiniteVerb Then GoTo 302 'indien 1st maal GeenFiniteVerb (in hele, samengestelde zin!) dan nu direct InfinObj en daarna Schluss (-> 900) 90: If GeenFiniteVerb Then GoTo 900 GoTo 500 '----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 'Bijzondere gevallen (geen Noun voor Verb; helemaal geen Verb; zin begint met Verb; 4 PP's voor Verb): '----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 80: 'MsgBox ("Zin " & iZin & ": Geen zelfstandig NOUN aangetroffen..." & vbCr & _ " ...dat VOORAFGAAT aan 1e Werkwoord" & vbCr & _ " ...en NIET daarvan gescheiden is door een komma") 'Bij TwinMethods, en wanneer het gaat over Nouns (niet Pronouns): '[7-7-07] If Not (TwinMethods And NounSearched) Then MsgBox "ERROR: this branching should not occur" '[20-7-07] If iposSubjObjMeth1 <> iposSubjObjMeth2 Then 'als slechts een van de twee Methodes geen zelfstandig Noun heeft aangetroffen, dan wordt... WoordPositiesSVO(itrio, 1) = "9999" '...middels dit getal een "unsure" outcome to the calling program gesignaleerd, ... WoordPositiesSVO(itrio, 3) = "9999" '...zowel voor Object als Subject; 'de Verb-positie wordt WEL normaal berekend en doorgegeven: If ExtraTekensInVortSpecoString(1, ZinsdeelVoorW, nposmin) Then 'correctie ivm accusatief- , meervouds- en evt. lees-tekens in VortSpecoString End If '[*alleen de uitvoerparameter nposmin doet hier terzake] iposW = Len(ZinsdeelVoorW) - nposmin + 1 '(van de ongecorrigeerde lengte 'ZinsdeelVoorW' wordt de correctie 'nposmin' afgetrokken) nposmin = 0 If LenZinsdeelVoorKomma <> 0 Then If ExtraTekensInVortSpecoString(1, ZinsdeelVoorKomma, nposmin) Then End If '(correctie voor ALLE leestekens, accusatief- , meervouds-tekens in VortSpecoString) '[28-7-07] End If iposW = iposW + LenZinsdeelVoorKomma - nposmin 'iposW (gecorrigeerde positie W) gerekend vanaf Totale Zinsbegin 'opslaan als 2e woord in SVO-trio: '(van de ongecorrigeerde lengte 'ZinsdeelVoorKomma' wordt de correctie 'nposmin' afgetrokken) WoordPositiesSVO(itrio, 2) = LenVoorafgaandeZinnen + iposW GoTo 275 'bij Twin Methods wordt aan het oproepende programma deze ("unsure") uitkomst teruggemeld End If GoTo 90 81: 'MsgBox ("Zin " & iZin & ": in de hele zin GEEN Finite Verb aangetroffen") itrio = itrio - 1 GeenFiniteVerb = True GoTo 302 '(misschien is er wel een Infinitiv) 82: 'MsgBox ("Zin " & iZin & ": zin BEGINT met Finite Verb") GoTo 275 '[**eerst de bij het Finite Verb behorende Subj/Obj opsporen, daarna dan alsnog evt. Infinitiv-constructie (label 320) opsporen] [7-8-07: goto 300 veranderd in goto 275] 83: 'MsgBox ("8 Nouns voorafgaand aan het Finite Verb hebben een voorzetsel voor zich !") GoTo 28 '[11-8-07] 'van de Finite-Verb analyse Voor W blijft zal nu alleen de registratie van het Finite Verb zelf overblijven; vervolgens ... '...wordt de InfObj-opsporing (label 320) doorlopen en de analyse Achter W uitgevoerd 'GoTo 90 '[doe alsof er helemaal geen Subj of Obj aan het Finite Verb voorafging, dus ook hier:] '[11-8-07: verwijderd, leidde tot ontsporing] '[**eerst de bij het Finite Verb behorende Subj/Obj opsporen, daarna dan alsnog Infinitiv-constructie (label 320) opsporen] '============================================================================================== ' Bepaal nu eerst een handzame A f g r e n z i n g van de Zin ter R E C H T E R Z I J D E van het current Finite Verb: '============================================================================================== 500: If iposW = 1 Then 'If Len(Zin) = LenSamengesteldeZin Then '(denk aan een zin als: "Estis simple sed interese.") [31-7-07] If Left(Zin, 1) = "W" Then '(denk bijv.aan: "Estis simple sed interese." maar ook aan bijv. "Ĉu vi venos? demandis li.") [2-8-07] iposWOngecorr = 1 End If Else If WoordPositiesSVO(itrio, 2) = 0 Then MsgBox "ERROR: itrio=1 heeft GEEN Finite Verb" '[*zekerheidscontrole] End If If iposWOngecorr = 0 Then MsgBox "ERROR: itrio = " & itrio & " heeft GEEN Ongecorr POSITIE Finite Verb" '[*zekerheidscontrole] 'De reikwijdte van de "Zin" wordt nu beperkt tot een P R O P O Z I C I O : 'Vaststellen begrenzing current Propozicio (als onderdeel van Kompleksa Frazo): 'Bepaal eerst de positie van het V O L G E N D E Finite Verb in de (samengestelde) zin: If iposWOngecorr = Len(Zin) Then GoTo 508 '(1eVerb is Zinseinde) ipos2eVerb = InStr(iposWOngecorr + 1, Zin, "W") 'de aanduiding "2e" Verb is generiek te verstaan (wordt "1e" Verb in de nieuwe Propozicio) If ipos2eVerb = 0 Then ipos2eVerb = Len(Zin) + 1 '(geen 2eVerb gevonden in Zin) '[27-7-07, ipv GoTo 508] Zin = Left(Zin, ipos2eVerb - 1) ZinsdeelAchterW = Right(Zin, Len(Zin) - iposWOngecorr) 'ZinsdeelAchterW is op dit moment nog: ALLES tussen het "1e" Verb en het "2e" Verb LenZinsdeelAchterW = Len(ZinsdeelAchterW) If LenZinsdeelAchterW = 0 Then GoTo 509 '[14-8-07] 'wanneer 2 Finite Verbs naast elkaar liggen, bijv. in een zin als: "Kio ŝanĝiĝis estas ke..." 'De reikwijdte tussen het "1e" Verb en het "2e" Verb wordt nu opgesplitst in een nader te preciseren: 'ZinsdeelAchterW: behorend bij het 1e Verb ["behoren" tot een Verb is in dit macro te verstaan als een approximatie, ... ] 'nieuwe Zin: behorend bij het 2e Verb [ ...want in de eerste plaats gericht op het vinden van geldige SVO-relaties ] ] 501: 'De opsplitsing wordt in eerste instantie getriggerd door komma's of andere L E E S T E K E N S : 'het gaat daarbij om het vinden van het M E E S T L I N K S E Leesteken: iposKomma = InStr(1, ZinsdeelAchterW, ",") iposPunktKomo = InStr(1, ZinsdeelAchterW, ";") iposDupunkto = InStr(1, ZinsdeelAchterW, ":") iposHaltostreko = InStr(1, ZinsdeelAchterW, "-") iposVraagteken = InStr(1, ZinsdeelAchterW, "?") iposUitroepteken = InStr(1, ZinsdeelAchterW, "!") iposOpenCitilo = InStr(1, ZinsdeelAchterW, "<") IposSluitCitilo = InStr(1, ZinsdeelAchterW, ">") iposOpenHaak = InStr(1, ZinsdeelAchterW, "(") iposSluitHaak = InStr(1, ZinsdeelAchterW, ")") 'Kies uit bovenstaanden de kleinste positieve waarde: For ip = 1 To LenZinsdeelAchterW If iposKomma = ip Then GoTo 502 ElseIf iposPunktKomo = ip Then: GoTo 502 ElseIf iposDupunkto = ip Then: GoTo 502 ElseIf iposHaltostreko = ip Then: GoTo 502 ElseIf iposVraagteken = ip Then: GoTo 502 ElseIf iposUitroepteken = ip Then: GoTo 502 ElseIf iposOpenCitilo = ip Then: GoTo 502 ElseIf IposSluitCitilo = ip Then: GoTo 502 ElseIf iposOpenHaak = ip Then: GoTo 502 ElseIf iposSluitHaak = ip Then: GoTo 502 End If Next ip 'ip = LenZinsdeelAchterW + 1 '(geen Leesteken gevonden) '[en in onderstaand stmt wordt dan finPropozicio = LenZinsdeelAchterW] 502: finPropozicio = ip - 1 'positie vlak voor het MEEST LINKSE van de gevonden leestekens 'In tweede instantie wordt getriggerd door R E L S U B J U N K C I O J of K O N J U N K C I O J : 'daarbij gaat het alleen om het M E E S T L I N K S E functiewoordje voorafgaand aan het meest linkse leesteken: iposRelSubjunkcio = InStr(1, Left(ZinsdeelAchterW, finPropozicio), "r") iposRelCorr = 0 '[31-7-07] If iposRelSubjunkcio > 0 Then '[31-7-07] If Mid(ZinsdeelAchterW, iposRelSubjunkcio, 3) = "r4j" Then iposRelCorr = 2 ElseIf Mid(ZinsdeelAchterW, iposRelSubjunkcio, 2) = "r4" Or Mid(ZinsdeelAchterW, iposRelSubjunkcio, 2) = "rj" Then iposRelCorr = 1 End If End If 'iposKonjunkcio = InStr(1, Left(ZinsdeelAchterW, finPropozicio), "k") For ip = 1 To finPropozicio If iposRelSubjunkcio = ip Then '[zolang iposRelSubjunkcio de enige geaktiveerde in deze For-Next loop is, kan de hele loop ... GoTo 503 ' ...eigenlijk vervangen worden door: If iposRelSubjunkcio > 0 Then ip=iposRelSubjunkcio: GoTo 503] 'ElseIf iposKonjunkcio = ip Then: GoTo 503 End If Next ip 'ip = finPropozicio + 1 '(geen RelSubjunkcio of Konjunkcio gevonden) If finPropozicio = LenZinsdeelAchterW Then ip = ip - 1 '[finPropozicio staat daarmee op positie van het meest linkse leesteken of (bij geen leestekens) op LenZinsdeelAchterW] 503: finPropozicio = ip + iposRelCorr 'positie van het MEEST LINKSE van de gevonden Sub- of Konjunkcioj, cq. van het meest linkse Leesteken (als Sub- en Konjunkcioj ontbraken) 505: nWoordenVooraf = 0 '[31-7-07] '["nWoordenVooraf" slaat op evt. woord(en) voorafgaand aan 2eVerb die dan als daarbij behorend worden beschouwd] If finPropozicio = LenZinsdeelAchterW Then 'indien GEEN Leesteken, RelSubjunkcio of Konjunkcio gevonden, ... ' ...dan wordt als laatste redmiddel de reikwijdte opgesplitst op 1 WOORDPOSITIE VOOR het 2e Verb: 'If Mid(Zin, ipos2eVerb - 1, 1) = "," Then 'komma voor 2eVerb wordt NIETgerekend tot Propozicio van 2eVerb, maar tot Voorgaande Propozicio ' nWoordenVooraf = 0 '[*28-7-07: dit stmt was overbodig] If Mid(Zin, ipos2eVerb - 1, 1) = "4" Then nWoordenVooraf = 2 'voorafgaand Noun, Adjective, Pronoun wordt gerekend tot Propozicio van 2eVerb ElseIf Mid(Zin, ipos2eVerb - 1, 1) = "j" And Mid(Zin, ipos2eVerb - 2, 1) <> "4" Then: nWoordenVooraf = 2 ElseIf Mid(Zin, ipos2eVerb - 2, 2) = "4j" Then: nWoordenVooraf = 3 ElseIf Right(ZinsdeelAchterW, 1) = "." Or Right(ZinsdeelAchterW, 1) = "?" Or Right(ZinsdeelAchterW, 1) = "!" Then '[31-7-07] 'bij Einde van Samengestelde Zin (zinseinde-punt, -vraagteken of -uitrooepteken) '[**aktiveer onderstaand IF-stmt indien sporadische gevallen van punt (Ascii 46) middenin VortSpeco-string problemen zouden geven] 'If LenVoorafgaandeZinnenOngecorr + iposWOngecorr + finPropozicio = LenSamengesteldeZin Then nWoordenVooraf = 0 Else nWoordenVooraf = 1 'voorafgaand woord van een andere categorie (Eigennaam, Adverb, Montra) wordt gerekend tot Propozicio van 2eVerb End If finPropozicio = LenZinsdeelAchterW - nWoordenVooraf 'een 2e Finite Verb (met soms een enkel woord daarvoor) geldt als Propozicio-begrenzing End If 507: Zin = Left(Zin, iposWOngecorr + finPropozicio) ZinsdeelAchterW = Left(ZinsdeelAchterW, finPropozicio) LenZinsdeelAchterW = Len(ZinsdeelAchterW) GoTo 509 508: 'indien 1eVerb is Zinseinde: ZinsdeelAchterW = Right(Zin, Len(Zin) - iposWOngecorr) LenZinsdeelAchterW = Len(ZinsdeelAchterW) 509: 'De afgrenzing van de nog in bewerking zijnde Zin (Propozicio) is nu bepaald, en daarmee ook de lengte van het ZinsdeelAchterW; ... '...zonodig kan daarin naar een InfObj, Object of Subject worden gezocht, alvorens bij label 800 wordt overgestapt naar de volgende Zin (Propozicio): '****************************************************************************************************************************** ' I n f i n O b j e c t - Behandeling van evt. Infinitiv + Object constructies (voor of achter het Finite Verb): '****************************************************************************************************************************** 301: itrioVoorafAanInfObj = ntrio 302: 'Apart trio (eigenlijk duo): IO (Infinitiv + PersonPronomo-Object) '[minder interessant uit Kennisbank-oogpunt]': 'If iposInfinitivPlusObject > 0 And Not NounSearched Then '[dit zijn gevallen die gesignaleerd zijn bij het speuren naar PersonPronomoj (rond Finite Verb) onder label 11] 'bij evt. implementatie hiervan correctie aanbrengen op (ongecorrigeerde) woordpositie iposInfinitivPlusObject ' 'End If 320: 'InfObj is een bijzonder soort 'trio' (eigenlijk duo: Infinitiv + Noun-Object): itrio = itrio + 1 '(we gaan er alvast van uit dat er 1 InfObj gevonden wordt) If iposInfinitivPlusObject > 0 And NounSearched Then 'Indien infinitivPlusObject reeds ontdekt is bij het zoeken naar SVO (Finite verb): '350: LenZinsdeelVoorW = Len(ZinsdeelVoorW) '[19-8-07] 'correctie aanbrengen op (ongecorrigeerde) woordpositie iposInfinitivPlusObject [analoog aan codedelen onder labels 50 en 55]: iposInfinitivPlusObjectOngecorr = LenZinsdeelVoorW + 1 - iposInfinitivPlusObject '[*ongecorrigeerde berekening is nog nodig bij bepaling van het zgn.TussenZinsdeel (voor label 501)] nposmin2 = 0 '[17-8-07: nposmin hier vervangen door nposmin2, om bij bepaling iposObjvanIO zowel deze nposmin2 als nposmin-uit-ZinsdeelVoorKomma te kunnen doorgeven] If ExtraTekensInVortSpecoString(iposInfinitivPlusObject + 1, OmgekZinsdeelVoorW, nposmin2) Then 'tel accusatief- , meervouds- en evt. lees-tekens in VortSpecoString LenZinsdeelVoorW = LenZinsdeelVoorW - nposmin2 '[*Let op: LenZinsdeelVoorW is gecorrigeerd; voor ongecorrigeerde berekening, gebruik Len(ZinsdeelVoorW)] End If 'Terug-Omkering Woordpositie (vanuit OmgekZinsdeelVoorW weer terug naar ZinsdeelVoorW): iposInfinitivPlusObject = LenZinsdeelVoorW + 1 - iposInfinitivPlusObject 'gecorrigeerde woordpositie Infinitiv iposObjvanIO = InStr(iposInfinitivPlusObjectOngecorr + 1, ZinsdeelVoorW, "N4") 'ongecorrigeerde woordpositie Object behorend bij Infinitiv If iposObjvanIO = 0 Then iposObjvanIO = InStr(iposInfinitivPlusObjectOngecorr + 1, ZinsdeelVoorW, ChrW(349) & "4") 'indien PersonPronomo ipv Noun als Object '[17-5-08] iposObjvanIOongecorr = iposObjvanIO 'If iposObjvanIOongecorr > iposInfinitivPlusObject + 2 Then '(als beiden vlak naast elkaar liggen zijn geen tussenliggende extratekens mogelijk) '[17-8-07 verwijderd] If iposObjvanIOongecorr > iposInfinitivPlusObjectOngecorr + 2 Then '(als beiden vlak naast elkaar liggen zijn geen tussenliggende extratekens mogelijk) '[17-8-07] TussenZinsdeel = Left(ZinsdeelVoorW, iposObjvanIOongecorr - 1) 'bepaal het TussenZinsdeel tussen (ongecorr) positie Infinitiv en positie bijbehorend Object: TussenZinsdeel = Right(TussenZinsdeel, Len(TussenZinsdeel) - iposInfinitivPlusObjectOngecorr) nposmin = 0 '[17-8-07, bij 2e herziening] If ExtraTekensInVortSpecoString(1, TussenZinsdeel, nposmin) Then 'tel accusatief- en/of meervouds-tekens in VortSpecoString iposObjvanIO = iposObjvanIOongecorr - nposmin End If End If '355: nposmin = 0 If LenZinsdeelVoorKomma <> 0 Then If ExtraTekensInVortSpecoString(1, ZinsdeelVoorKomma, nposmin) Then End If '(correctie voor ALLE leestekens, accusatief- , meervouds-tekens in VortSpecoString) End If 'Resulterende berekening Woordpositie iposInfinitivPlusObject (zowel Infinitiv Header-woord, als Noun-Object daarvan): iposInfinitivPlusObject = iposInfinitivPlusObject + LenZinsdeelVoorKomma - nposmin 'iposObjvanIO = iposObjvanIO + LenZinsdeelVoorKomma - nposmin '(gecorrigeerde posities gerekend vanaf TotaleZinsbegin) iposObjvanIO = iposObjvanIO + LenZinsdeelVoorKomma - nposmin - nposmin2 '[17-8-07] '(gecorrigeerde posities gerekend vanaf Zinsbegin) WoordPositiesSVO(itrio, 1) = 9001 'IO (Infinitiv+Object) -signalering aan oproepend programma WoordPositiesSVO(itrio, 2) = LenVoorafgaandeZinnen + iposInfinitivPlusObject 'Infinitiv in cel 2 van trio WoordPositiesSVO(itrio, 3) = LenVoorafgaandeZinnen + iposObjvanIO 'Object in cel 3 van trio 'Nu verder zoeken naar NOG een Infinitiv-Object constructie (binnen dezlefde Zin-Prpozicio): iposInfinitiv = InStr(iposObjvanIOongecorr + 1, Zin, "i") itrio = itrio + 1 GoTo 361 Else 'Z O E K E N van InfinitivPlusObject: 'Indien er toevallig nog GEEN InfinitivPlusObject ontdekt is tijdens het zoeken naar SVO voorafgaand aan het Finite Verb: iposInfinitiv = InStr(1, Zin, "i") 'InfinitivPlusObject kan nu ook ACHTER het eerste Finite Verb liggen! 361: If iposInfinitiv = 0 Then GoTo 381 '(GEEN Infinitiv gevonden) iposVerderInfinitiv = 0 'reset (voor evt.volgende Infinitiv) 362: ZinsdeelVoorInfinitiv = Left(Zin, iposInfinitiv - 1) 'iposInfinitiv (positie Infinitiv) gerekend vanaf het begin van de Propozicio nposmin = 0 If iposInfinitiv > 1 Then '(Else: zin BEGINT met Infinitiv) If ExtraTekensInVortSpecoString(1, ZinsdeelVoorInfinitiv, nposmin) Then 'tel accusatief- , meervouds- en evt. lees-tekens in VortSpecoString End If '[*alleen de uitvoerparameter nposmin doet hier terzake] End If If Mid(Zin, iposInfinitiv + 1, 2) = ChrW(349) & "4" Then 'Infinitiv heeft PersonPronomo als Object (PersonPronomo volgt direct op de Infinitiv): '[InfinitivObject gevallen met Personpronomo zijn minder interessant uit Kennisbank-oogpunt, daarom... '...**onderstaande 4 stmts afklemmen Indien het registreren van InfinitivObject gevallen met Personpronomo ongewenst is]: iposObjvanIO = iposInfinitiv + 1 WoordPositiesSVO(itrio, 1) = 9001 'IO (Infinitiv+Object) -signalering aan oproepend programma WoordPositiesSVO(itrio, 2) = LenVoorafgaandeZinnen + iposInfinitiv - nposmin 'Infinitiv in cel 2 van trio (iposInfinitiv is nu echt beginpositie van een Infinitiv met Object) WoordPositiesSVO(itrio, 3) = LenVoorafgaandeZinnen + iposObjvanIO - nposmin 'Object in cel 3 van trio 367: 'nu verder zoeken naar NOG een Infinitiv-Object constructie, evt. met Noun als Object (denk ook aan bijv. "helpi lin konstrui domon"): iposInfinitiv = InStr(iposObjvanIO + 1, Zin, "i") itrio = itrio + 1 GoTo 361 End If 'Zoek Noun-Object bij Infinitiv [bij de 1e doorloop van de 362-quasi-loop is iposVerderInfinitiv = 0 ]: If iposVerderInfinitiv = 0 Then iposObjvanIO = InStr(iposInfinitiv + 1, Zin, "N4") 'eerste Accusatief-Noun-Object rechts van de Infinitiv If iposObjvanIO = 0 Then GoTo 381 'GEEN echte Inf-Obj constructie, want geen Noun of PersonPronomo in accusatief gevonden; If iposObjvanIO = iposInfinitiv + 1 Then '(geen extratekens tussenin mogelijk [bij "=iposInfinitiv+2" zou nog een leesteken mogelijk zijn]) 'het is een echte Inf-Obj constructie, en het Obj (Noun) volgt direct op de Infinitiv: WoordPositiesSVO(itrio, 1) = 9001 'IO (Infinitiv+Object) -signalering aan oproepend programma WoordPositiesSVO(itrio, 2) = LenVoorafgaandeZinnen + iposInfinitiv - nposmin 'Infinitiv in cel 2 van trio (iposInfinitiv is nu echt beginpositie van een Infinitiv met Object) WoordPositiesSVO(itrio, 3) = LenVoorafgaandeZinnen + iposObjvanIO - nposmin 'Object in cel 3 van trio GoTo 369 ElseIf (iposObjvanIO = iposInfinitiv + 4) And Mid(Zin, iposInfinitiv + 1, 3) = "EB&" Then 'Geassimileerde Eigennaam als Object Noun '[16-5-08] WoordPositiesSVO(itrio, 1) = 9001 'IO (Infinitiv+Object) -signalering aan oproepend programma WoordPositiesSVO(itrio, 2) = LenVoorafgaandeZinnen + iposInfinitiv - nposmin 'Infinitiv in cel 2 van trio (iposInfinitiv is nu echt beginpositie van een Infinitiv met Object) WoordPositiesSVO(itrio, 3) = LenVoorafgaandeZinnen + iposObjvanIO - 3 - nposmin 'Object in cel 3 van trio GoTo 369 Else 'Infinitiv en Object liggen niet direct naast elkaar (extra controle op verdere mogelijke Infinitiv-Object varianten en correctie op evt. extratekens nodig): 'Check bovendien of er tussen Infinitiv en Noun-Object NOG een Infinitiv ligt (het Noun hoort dan bij het dichtstbijgelegen Inifinitiv): '[4-8-07] iposVerderInfinitiv = InStr(iposInfinitiv + 1, Zin, "i") If iposVerderInfinitiv > 0 And iposVerderInfinitiv < iposObjvanIO Then iposInfinitiv = iposVerderInfinitiv GoTo 362 End If iposVerderInfinitiv = 0 ZinsdeelVoorObjvanIO = Left(Zin, iposObjvanIO - 1) TussenZinsdeel = Right(ZinsdeelVoorObjvanIO, Len(ZinsdeelVoorObjvanIO) - (iposInfinitiv - 1)) If NounAccSubHeaderInfinitiv(StrReverse(TussenZinsdeel), 0, 1) Then 'het is een echte Inf-Obj constructie, en tussen Infinitiv en Obj staan 1--3 woorden: WoordPositiesSVO(itrio, 1) = 9001 'IO (Infinitiv+Object) -signalering aan oproepend programma WoordPositiesSVO(itrio, 2) = LenVoorafgaandeZinnen + iposInfinitiv - nposmin 'Infinitiv in cel 2 van trio (iposInfinitiv is nu echt beginpositie van een Infinitiv met Object) 'nu nog correctie aanbrengen over Tussenzinsdeel: nposmin2 = 0 If ExtraTekensInVortSpecoString(1, TussenZinsdeel, nposmin2) Then 'tel accusatief- , meervouds- en evt. lees-tekens in VortSpecoString End If '[*alleen de uitvoerparameter nposmin2 doet hier terzake] WoordPositiesSVO(itrio, 3) = LenVoorafgaandeZinnen + iposObjvanIO - nposmin - nposmin2 'Object in cel 3 van trio GoTo 369 Else 'het is GEEN echte Inf-Obj constructie (althans niet volgens de hiervoor aangegeven varianten in Function NounAccSubHeaderInfinitiv): itrio = itrio - 1 GoTo 369 '(misschien is rechts van het laatstgevonden vermeende Object wel een goeie InfObj constructie) End If End If 369: 'nu verder zoeken naar NOG een Infinitiv-Object constructie (binnen dezelfde Zin-Prpozicio): iposInfinitiv = InStr(iposObjvanIO + 1, Zin, "i") itrio = itrio + 1 GoTo 361 End If 381: ''MsgBox "GEEN (verdere) Inf-Obj constructie gevonden" itrio = itrio - 1 ntrio = itrio If itrio = 0 Then GoTo 90 '[SyntaxSubjObjVerbPairs blijft in dat geval staan op 'False' (default)] GoTo 377 'Beeindiging Infinitiv-Obĵect constructie: ntrio = itrio 'aantal opgespoorde SVO-achtige trios vermeerderd met IO-(Infinitiv-Object)-paren '[3-8-07] 377: itrio = itrioVoorafAanInfObj 'zet itrio nu weer terug op het FiniteVerb-trio, ivm evt. toevoeging daaraan van Object/Subject in blok na label 510 '[5-8-07] If GeenFiniteVerb Then GoTo 900 '[3-8-07] GoTo 510 '============================================================================================== 'Opsporen van O B J E C T en/of S U B J E C T ter R E C H T E R Z I J D E van het Finite Verb: '============================================================================================== 510: ' A C H T E R W : If WoordPositiesSVO(itrio, 3) > 0 And WoordPositiesSVO(itrio, 1) > 0 Then 'SVO voor Finite Verb is reeds COMPLEET 'MsgBox "itrio " & itrio & ": SVO voor Finite Verb is reeds COMPLEET" 'in het ZinsdeelAchterW hoeft niets meer gezocht te worden GoTo 580 End If '[ATTENTIE: condities als bovenstaande ("SVO reeds compleet") en alle variaties daarvan in onderstaand codedeel (tot label 580) moeten ... '[ ... herzien worden indien dit macro wordt uitgebreid tot SYNTAKTISCHE SPELL CHECKER die ontbrekende of dubbele accusatieven ... '[ ... aan de kaak stelt ] 512: If LenZinsdeelAchterW = 0 Then GoTo 580 '[20-7-07] If LenZinsdeelAchterW = 1 Then If LenVoorafgaandeZinnenOngecorr + Len(Zin) = LenSamengesteldeZin Then 'indien alleen nog Leestekens resteren (aan het eind van de Samengestelde zin): If (AscW(ZinsdeelAchterW) < 64 And ZinsdeelAchterW <> "#") Or AscW(ZinsdeelAchterW) = 126 Then GoTo 580 '[11-8-07] End If End If 'Ga na WELKE rollen (Subj, Obj) nog NIET zijn ingevuld voor het current Finite Verb, ... '...oftewel: welke van de twee rollen zijn niet reeds ter linkerzijde van het Verb iaangetroffen '...[de bij het Finite Verb horende gegevens staan altijd in itrio=1]: SubjectAchterW = False ObjectAchterW = False 520: 'Methode 1 (body): 'Zoek eerst DIRECT achter het Finite Verb (Methode 1): If Mid(Zin, iposWOngecorr, 2) = "Wu" Then 'Tijdelijke bijstelling Verb-positie ivm Imperativ en aansluitende VortSpec-varianten: iposWOngecorr = iposWOngecorr + 1 '(VortSpec-marko voor Imperativ bestaat uit 2 tekens ipv 1) VerbImperativ = True End If If WoordPositiesSVO(itrio, 3) = 0 Then 'indien NOG GEEN OBJECT links van Verb aangetroffen: If Not (iposWOngecorr > Len(Zin) - 2) Then '(overspring onderstaand blok als rechts van Verb sowieso geen plaats is voor een ObjectAchterW) 'If Not Mid(Zin, iposWOngecorr + 1, 1) = "p" Then 'mits rechts naast Verb geen Prepozicio: '[8-8-07: verwijderd] If Mid(Zin, iposWOngecorr + 1, 2) = ChrW(349) & "4" Then 'PersonPronomo, direct achter Verb (bijv. "akceptis ĝin" ) iposObj = iposWOngecorr + 1 ElseIf Mid(Zin, iposWOngecorr + 1, 2) = "N4" Then: iposObj = iposWOngecorr + 1 'Noun, accusatief ElseIf Mid(Zin, iposWOngecorr + 1, 3) = "aN4" Then: iposObj = iposWOngecorr + 2 ElseIf Mid(Zin, iposWOngecorr + 1, 4) = "A4N4" Then: iposObj = iposWOngecorr + 3 ElseIf Mid(Zin, iposWOngecorr + 1, 4) = "M4N4" Then: iposObj = iposWOngecorr + 3 ElseIf Mid(Zin, iposWOngecorr + 1, 4) = "p" & ChrW(349) & "N4" Then: iposObj = iposWOngecorr + 3 'bijv. "demandis al mi informon..." ElseIf Mid(Zin, iposWOngecorr + 1, 5) = "aA4N4" Then: iposObj = iposWOngecorr + 4 ElseIf Mid(Zin, iposWOngecorr + 1, 5) = "p" & ChrW(349) & "aN4" Then: iposObj = iposWOngecorr + 4 'bijv. "demandis al mi la informon..." ElseIf Mid(Zin, iposWOngecorr + 1, 6) = "M4A4N4" Then: iposObj = iposWOngecorr + 5 '[VortSpecmarko PersonPronomoj: "ŝ" oftewel ChrW(349) ] ElseIf Mid(Zin, iposWOngecorr + 1, 6) = "p" & ChrW(349) & "A4N4" Then: iposObj = iposWOngecorr + 5 'bijv. "demandis al mi novan informon..." ElseIf Mid(Zin, iposWOngecorr + 1, 6) = "p" & ChrW(349) & "M4N4" Then: iposObj = iposWOngecorr + 5 'bijv. "demandis al mi tiun informon..." ElseIf Mid(Zin, iposWOngecorr + 1, 7) = "p" & ChrW(349) & "aA4N4" Then: iposObj = iposWOngecorr + 6 'bijv. "demandis al mi la novan informon..." ElseIf Mid(Zin, iposWOngecorr + 1, 8) = "p" & ChrW(349) & "M4A4N4" Then: iposObj = iposWOngecorr + 7 'bijv. "demandis al mi tiun novan informon..." ElseIf Mid(Zin, iposWOngecorr + 1, 3) = "N4j" Then: iposObj = iposWOngecorr + 1 'Noun, accusatief, meervoud ElseIf Mid(Zin, iposWOngecorr + 1, 4) = "aN4j" Then: iposObj = iposWOngecorr + 2 ElseIf Mid(Zin, iposWOngecorr + 1, 5) = "p" & ChrW(349) & "N4j" Then: iposObj = iposWOngecorr + 3 'bijv. "demandis al mi informojn..." ElseIf Mid(Zin, iposWOngecorr + 1, 6) = "A4jN4j" Then: iposObj = iposWOngecorr + 4 ElseIf Mid(Zin, iposWOngecorr + 1, 6) = "M4jN4j" Then: iposObj = iposWOngecorr + 4 ElseIf Mid(Zin, iposWOngecorr + 1, 6) = "p" & ChrW(349) & "aN4j" Then: iposObj = iposWOngecorr + 4 'bijv. "demandis al mi la informojn..." ElseIf Mid(Zin, iposWOngecorr + 1, 7) = "aA4jN4j" Then: iposObj = iposWOngecorr + 5 ElseIf Mid(Zin, iposWOngecorr + 1, 8) = "p" & ChrW(349) & "A4jN4j" Then: iposObj = iposWOngecorr + 6 'bijv. "demandis al mi novajn informojn..." ElseIf Mid(Zin, iposWOngecorr + 1, 8) = "p" & ChrW(349) & "M4jN4j" Then: iposObj = iposWOngecorr + 6 'bijv. "demandis al mi tiujn informojn..." ElseIf Mid(Zin, iposWOngecorr + 1, 9) = "M4jA4jN4j" Then: iposObj = iposWOngecorr + 7 ElseIf Mid(Zin, iposWOngecorr + 1, 9) = "p" & ChrW(349) & "aA4jN4j" Then: iposObj = iposWOngecorr + 7 'bijv. "demandis al mi la novajn informojn..." ElseIf Mid(Zin, iposWOngecorr + 1, 11) = "p" & ChrW(349) & "M4jA4jN4j" Then: iposObj = iposWOngecorr + 9 'bijv. "demandis al mi tiujn novajn informojn..." End If If iposObj > 0 Then 'MsgBox "itrio " & itrio & ": mankerend Object gevonden ACHTER het werkwoord (Methode 1)" ObjectAchterW = True iposSubjObj = iposObj '[7-8-07] GoTo 524 'Methode 1 spoort hooguit 1 van de twee (Object of Subject) op [de ander wordt dan via Methode 2 opgespoord] End If 'End If '[8-8-07: verwijderd] End If End If If WoordPositiesSVO(itrio, 1) = 0 Then 'indien NOG GEEN SUBJECT links van Verb aangetroffen: If Not (iposWOngecorr = Len(Zin)) Then '(overspring onderstaand blok als rechts van Verb sowieso geen plaats is voor een Subject) If Mid(Zin, iposWOngecorr + 1, 1) = ChrW(349) Then 'PersonPronomo, direct achter Verb (bijv. "venis ŝi" ) iposSubj = iposWOngecorr + 1 ElseIf Mid(Zin, iposWOngecorr + 1, 1) = "N" Then: iposSubj = iposWOngecorr + 1 'Noun, nominatief ElseIf Mid(Zin, iposWOngecorr + 1, 2) = "aN" Then: iposSubj = iposWOngecorr + 2 ElseIf Mid(Zin, iposWOngecorr + 1, 2) = "AN" Then: iposSubj = iposWOngecorr + 2 ElseIf Mid(Zin, iposWOngecorr + 1, 2) = "MN" Then: iposSubj = iposWOngecorr + 2 ElseIf Mid(Zin, iposWOngecorr + 1, 3) = "MAN" Then: iposSubj = iposWOngecorr + 3 ElseIf Mid(Zin, iposWOngecorr + 1, 3) = "aAN" Then: iposSubj = iposWOngecorr + 3 '[VortSpecmarko PersonPronomoj: "ŝ" oftewel ChrW(349) ] ElseIf Mid(Zin, iposWOngecorr + 1, 3) = "p" & ChrW(349) & "N" Then: iposSubj = iposWOngecorr + 3 'bijv. "naskiĝis ĉe li penso..." ElseIf Mid(Zin, iposWOngecorr + 1, 4) = "p" & ChrW(349) & "aN" Then: iposSubj = iposWOngecorr + 4 'bijv. "naskiĝis ĉe li la penso..." ElseIf Mid(Zin, iposWOngecorr + 1, 4) = "p" & ChrW(349) & "AN" Then: iposSubj = iposWOngecorr + 4 'bijv. "naskiĝis ĉe li bona penso..." ElseIf Mid(Zin, iposWOngecorr + 1, 4) = "p" & ChrW(349) & "MN" Then: iposSubj = iposWOngecorr + 4 'bijv. "naskiĝis ĉe li tiu penso..." ElseIf Mid(Zin, iposWOngecorr + 1, 5) = "p" & ChrW(349) & "aAN" Then: iposSubj = iposWOngecorr + 5 'bijv. "naskiĝis ĉe li la bona penso..." ElseIf Mid(Zin, iposWOngecorr + 1, 5) = "p" & ChrW(349) & "MAN" Then: iposSubj = iposWOngecorr + 5 'bijv. "naskiĝis ĉe li tiu bona penso..." ElseIf Mid(Zin, iposWOngecorr + 1, 2) = "Nj" Then: iposSubj = iposWOngecorr + 1 'Noun, nominatief, meervoud ElseIf Mid(Zin, iposWOngecorr + 1, 3) = "aNj" Then: iposSubj = iposWOngecorr + 2 ElseIf Mid(Zin, iposWOngecorr + 1, 4) = "AjNj" Then: iposSubj = iposWOngecorr + 3 ElseIf Mid(Zin, iposWOngecorr + 1, 4) = "MjNj" Then: iposSubj = iposWOngecorr + 3 ElseIf Mid(Zin, iposWOngecorr + 1, 6) = "MjAjNj" Then: iposSubj = iposWOngecorr + 5 ElseIf Mid(Zin, iposWOngecorr + 1, 5) = "aAjNj" Then: iposSubj = iposWOngecorr + 4 '[VortSpecmarko PersonPronomoj: "ŝ" oftewel ChrW(349) ] ElseIf Mid(Zin, iposWOngecorr + 1, 4) = "p" & ChrW(349) & "Nj" Then: iposSubj = iposWOngecorr + 3 'bijv. "naskiĝis ĉe li pensoj..." ElseIf Mid(Zin, iposWOngecorr + 1, 5) = "p" & ChrW(349) & "aNj" Then: iposSubj = iposWOngecorr + 4 'bijv. "naskiĝis ĉe li la pensoj..." ElseIf Mid(Zin, iposWOngecorr + 1, 6) = "p" & ChrW(349) & "AjNj" Then: iposSubj = iposWOngecorr + 5 'bijv. "naskiĝis ĉe li bonaj pensoj..." ElseIf Mid(Zin, iposWOngecorr + 1, 6) = "p" & ChrW(349) & "MjNj" Then: iposSubj = iposWOngecorr + 5 'bijv. "naskiĝis ĉe li tiuj pensoj..." ElseIf Mid(Zin, iposWOngecorr + 1, 7) = "p" & ChrW(349) & "aAjNj" Then: iposSubj = iposWOngecorr + 6 'bijv. "naskiĝis ĉe li la bonaj pensoj..." ElseIf Mid(Zin, iposWOngecorr + 1, 8) = "p" & ChrW(349) & "MjAjNj" Then: iposSubj = iposWOngecorr + 7 'bijv. "naskiĝis ĉe li tiuj bona pensoj..." End If If Mid(Zin, iposSubj + 1, 1) = "4" Then iposSubj = 0 '[bovenstaande varianten zonder "4" zijn verraderlijk!] If iposSubj > 0 Then 'MsgBox "itrio " & itrio & ": mankerend Subject gevonden ACHTER het werkwoord (Methode 1)" SubjectAchterW = True iposSubjObj = iposSubj '[7-8-07] GoTo 524 'Methode 1 spoort hooguit 1 van de twee (Subject of Object) op [de ander wordt dan via Methode 2 opgespoord] End If End If End If iposSubjObj = iposWOngecorr '[7-8-07] 524: If VerbImperativ Then iposWOngecorr = iposWOngecorr - 1 'Terugstelling Verb-positie ivm Imperativ en aansluitende VortSpec-varianten 525: 'Methode 1 (afronding): If (WoordPositiesSVO(itrio, 1) > 0 Or iposSubj > 0) And (WoordPositiesSVO(itrio, 3) > 0 Or iposObj > 0) Then '[19-7-07] If iposSubj > 0 And iposObj > 0 Then MsgBox "ERROR: Methode 1 heeft achter werkwoord zowel Subject als Object opgespoord" 'SVO voor Finite Verb is COMPLEET, en 1 van de twee (Subject of Object) staat ACHTER het werkwoord: GoTo 550 '[7-8-07] 5200: 'Methode 2 (body) - hieronder valt ook VSO of VOS (Subject en Object beiden ACHTER werkwoord): Else 'Subject/Object speurtocht is nog NIET compleet, zoek rechts van het Verb VERDER naar een zelfstandig Noun (Object of Subject): 'Methode 2, A L T E R N A T I E V E Methode (functioneert ook bij i n g e b e d d e NP's, bijv. "la de mia patro konstruitan domon"): If LenZinsdeelAchterW <> 0 Then 'Spoor het eerste zelfstandig Noun op rechts van het Finite Verb cq. ... ' ... rechts van het met Methode 1 reeds gevonden Object of Subject: TussenZinsdeel = Right(ZinsdeelAchterW, LenZinsdeelAchterW - (iposSubjObj - iposWOngecorr)) iposN1 = InStr(1, TussenZinsdeel, "N") If iposN1 = 0 Then GoTo 549 'GEEN zelfstandig Noun gevonden If (InStr(1, TussenZinsdeel, "p") <> 0 And InStr(1, TussenZinsdeel, "p") < iposN1) Or _ (InStr(1, TussenZinsdeel, "k") <> 0 And InStr(1, TussenZinsdeel, "k") < iposN1) Then '[29-8-07] iposN2 = InStr(iposN1 + 1, TussenZinsdeel, "N") '1 Prepositional Phrase of Konjunkcio (kaj, aŭ, ...) vooraf Else GoTo 545 End If If iposN2 = 0 Then GoTo 549 'GEEN zelfstandig Noun gevonden If (InStr(iposN1 + 1, TussenZinsdeel, "p") <> 0 And InStr(iposN1 + 1, TussenZinsdeel, "p") < iposN2) Or _ (InStr(iposN1 + 1, TussenZinsdeel, "k") <> 0 And InStr(iposN1 + 1, TussenZinsdeel, "k") < iposN2) Then '[29-8-07] iposN3 = InStr(iposN2 + 1, TussenZinsdeel, "N") '2 Prepositional Phrases en/of Konjunkcioj (kaj, aŭ, ...) vooraf Else iposN1 = iposN2 GoTo 545 End If If iposN3 = 0 Then GoTo 549 'GEEN zelfstandig Noun gevonden If (InStr(iposN2 + 1, TussenZinsdeel, "p") <> 0 And InStr(iposN2 + 1, TussenZinsdeel, "p") < iposN3) Or _ (InStr(iposN2 + 1, TussenZinsdeel, "k") <> 0 And InStr(iposN2 + 1, TussenZinsdeel, "k") < iposN3) Then GoTo 549 'bij 3 Prepositional Phrases en/of Konjunkcioj (kaj, aŭ, ...) vooraf wordt een zelfstandig Noun uitgesloten '[29-8-07] Else iposN1 = iposN3 GoTo 545 End If 545: 'Bekijk Noun (op positie iposN1): If Mid(TussenZinsdeel, iposN1 + 1, 1) = "4" Then N4 = 1 'N4 op zich impliceert nog geen Object (denk aan Richtings-Accusatief), maar hier komt 't zelfstandig, ZONDER Prepozicio, voor Else N4 = 0 End If 'Matcht het gevonden 'zelfstandig' Noun met de nog mankerende rol (Object of Subject): 'Evt. O B J E C T : If N4 = 1 Then ObjectAchterW = True If iposObj = 0 Then 'Meth1 had nog geen Object-Noun-ACHTER-het-werkwoord gevonden If WoordPositiesSVO(itrio, 3) = 0 Then 'er was GEEN Object-Noun-VOOR-het-werkwoord gevonden 'MsgBox "itrio " & itrio & ": mankerend Object-Noun gevonden ACHTER het werkwoord (Methode 2) ," & vbCr & _ "dit kan echter ook onderdeel van een InfObj-constructie blijken te zijn" 'straks (onder label 552) kan nog blijken dat dit Object niet hoort bij het Finite Verb, maar bij een reeds gevonden InfObj Else 'er was een Object-Noun-VOOR-het-werkwoord gevonden: 'ObjectAchterW = False '<=aktiveren als je voorrang zou willen geven aan het voor-het-werkwoord gevonden Object... 'MsgBox "itrio " & itrio & ": 2e Object van Verb gevonden ! (Methode 2)" '...(goede strategie is Object-ACHTER-Verb voorrang geven) End If iposObj = iposWOngecorr + (LenZinsdeelAchterW - Len(TussenZinsdeel)) + iposN1 'positie Object (alles ongecorrigeerd) '[7-8-07] GoTo 550 ElseIf iposObj > 0 And N4 = 1 Then 'door Meth1 was al Object-Noun-ACHTER-het-werkwoord gevonden (maar dit kan niet hetzelfde zijn [8-7-07]) 'MsgBox "itrio " & itrio & ": 2e Object-Noun-ACHTER-het-werkwoord gevonden (Methode 2)" End If End If 'Evt. S U B J E C T : If N4 = 0 Then SubjectAchterW = True If iposSubj = 0 Then 'Meth1 had nog geen Subject-Noun-ACHTER-het-werkwoord gevonden If WoordPositiesSVO(itrio, 1) = 0 Then 'er was GEEN Subject-Noun-VOOR-het-werkwoord gevonden 'MsgBox "itrio " & itrio & ": mankerend Subject-Noun gevonden ACHTER het werkwoord (Methode 2)" iposSubj = iposWOngecorr + (LenZinsdeelAchterW - Len(TussenZinsdeel)) + iposN1 'positie Subject (alles ongecorrigeerd) '[7-8-07] GoTo 550 Else 'er was een Subject-Noun-VOOR-het-werkwoord gevonden: SubjectAchterW = False '<=aktiveren als je voorrang wil geven aan het voor-het-werkwoord gevonden Subject... '...(goede strategie is Subject-VOOR-Verb voorrang geven) 'MsgBox "itrio " & itrio & ": 2e Subject van Verb gevonden (Methode 2) ," & vbCr & _ "dit kan echter een Substantiva Predikato zijn" End If ' "2e Subject kan ook zijn: Substantiva Predikato ("rozo estas floro") '[21-7-07] ElseIf iposSubj > 0 And N4 = 0 Then 'door Meth1 was al Subject-Noun-ACHTER-het-werkwoord gevonden (maar dit kan niet hetzelfde zijn [8-7-07]) 'MsgBox "itrio " & itrio & ": 2e Subject-Noun-ACHTER-het-werkwoord gevonden (Methode 2)" End If End If 'Er wordt met bovenstaande Methode 2 slechts een van de twee (Subject of Object) gevonden; de booleans Subject en Object ... ' ...zorgen ervoor dat alleen een MANKEREND Subject of Object aan het SVO-trio zal worden toegevoegd. GoTo 550 549: 'MsgBox "GEEN zelfstandig Noun gevonden rechts van het Finite Verb cq. ... ' ... rechts van het met Methode 1 reeds gevonden Object of Subject:: '[7-8-07] If Not ObjectAchterW And Not SubjectAchterW Then '[7-8-07] 'MsgBox "itrio " & itrio & ": ACHTER het Finite Verb GEEN Object of Subject gevonden" '[7-8-07] If EventualaSubj Then WoordPositiesSVO(itrio, 1) = WoordPosEventualaSubj '[9-8-07] betreft achter de hand gehouden Subj (Voor W, na "dum" og "ĝis") GoTo 580 End If 550: 'ga naar Methode 2 (afronding) Else 'LenZinsdeelAchterW = 0: GoTo 580 '[19-7-07] End If 'Methode 2 (afronding): 'Berekening van precieze (AZM-conforme) woordposities: If SubjectAchterW Then 'Subject door Meth 1 of door Meth 2 gevonden: nposmin = 0 TussenZinsdeel = Left(ZinsdeelAchterW, (iposSubj - iposWOngecorr)) If ExtraTekensInVortSpecoString(1, TussenZinsdeel, nposmin) Then 'tel accusatief- , meervouds- en evt. lees-tekens in VortSpecoString '[5-8-07: ivm verandering] End If iposSubj = iposSubj - iposWOngecorr - nposmin WoordPositiesSVO(itrio, 1) = LenVoorafgaandeZinnen + iposW + iposSubj Else 'Achter W is geen Subj gevonden: If EventualaSubj Then WoordPositiesSVO(itrio, 1) = WoordPosEventualaSubj 'betreft achter de hand gehouden Subj (Voor W, na "dum" og "ĝis") End If 552: If ObjectAchterW Then 'Object door Meth 1 of door Meth 2 gevonden: nposmin = 0 TussenZinsdeel = Left(ZinsdeelAchterW, (iposObj - iposWOngecorr)) If ExtraTekensInVortSpecoString(1, TussenZinsdeel, nposmin) Then 'tel accusatief- , meervouds- en evt. lees-tekens in VortSpecoString '[5-8-07: ivm verandering] End If iposObj = iposObj - iposWOngecorr - nposmin WoordPositiesSVO(itrio, 3) = LenVoorafgaandeZinnen + iposW + iposObj 'Check of het gevonden Object niet toevallig toebehoort aan een reeds gevonden InfObj (van itrio+1 of hoger trio): For i = itrio + 1 To ntrio If WoordPositiesSVO(itrio, 3) = WoordPositiesSVO(i, 3) Then WoordPositiesSVO(itrio, 3) = 0 ObjectAchterW = False 'GoTo 549 '[3-8-07] GoTo 570 '[15-8-07] End If Next i '[5-8-07] End If 570: 'Zonodig ook nog het bijbehorend Finite Verb zelf invullen: '[25-7-07] If (SubjectAchterW Or ObjectAchterW) And WoordPositiesSVO(itrio, 2) = 0 Then 'ivm geval via label 82 (Werkwoord aan begin Propozicio) WoordPositiesSVO(itrio, 2) = LenVoorafgaandeZinnen + iposW End If End If 580: itrio = ntrio '[5-8-07; van belang ivm evt. eerder toegevoegde InfObj'en] '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 'Naar V O L G E N D E P R O P O Z I C I O van K O M P L E K S A F R A Z O : '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 800: LenResterendeZinnen = LenSamengesteldeZin - (LenVoorafgaandeZinnenOngecorr + Len(Zin)) '[18-7-07] If LenResterendeZinnen = 0 Then GoTo 900 '(einde van hele zin) If LenResterendeZinnen < 0 Then MsgBox "Error: LenResterendeZinnen < 0" Zin = Right(SamengesteldeZin, LenResterendeZinnen) 'begin ( N I E U W E ) "Zin" schuift op naar R E C H T S van de zojuist behandelde LenVoorafgaandeZinnenOngecorr = LenSamengesteldeZin - LenResterendeZinnen VoorafgaandeZinnen = Left(SamengesteldeZin, LenVoorafgaandeZinnenOngecorr) nposmin = 0 If ExtraTekensInVortSpecoString(1, VoorafgaandeZinnen, nposmin) Then 'tel accusatief- , meervouds- en evt. lees-tekens in VortSpecoString End If '[*alleen de uitvoerparameter nposmin doet hier terzake] LenVoorafgaandeZinnen = LenVoorafgaandeZinnenOngecorr - nposmin '[*Let op: LenVoorafgaandeZinnen is nu gecorrigeerd: alleen te gebruiken voor AZM-woordposities] GoTo 2 'Next iPropozicio '[Einde Quasi-LOOP] 900: If ntrio = 0 Then SyntaxSubjObjVerbPairs = False Else SyntaxSubjObjVerbPairs = True '[5-8-07] End Function Function ExtraTekensInVortSpecoString(iposBegin As Integer, VortSpecoSubString As String, nposmin As Integer) As Boolean '16 Majo 2008 TW 'Deze functie telt de zgn. extra tekens in (een substring van) een zinsbouw-VortSpec-Markiloj-string. 'Doordat er tekens '4', 'j', 'u' voor resp. accusatief, meervoud, volitivo, en bovendien evt. leestekens in 'de zinsbouw-VortSpec-Markiloj-strings zitten, corresponderen de stringsposities niet met (AZM-)woordposities; 'daarom dient dmv deze Function een correctie plaats te vinden via telling van deze tekens. ' 'Invoerparameters: iposBegin, VortSpecoSubString 'Invoer- en uitvoerparameter: nposmin 'Uitvoerparameter: LeesTekensInVortSpecoString (Boolean) Dim ipos As Integer Dim ipos4ju As Integer Dim iposEBetc As Integer '[16-5-08] Dim iposetcBE As Integer '[16-5-08] Dim nposminAanvang As Integer ipos = iposBegin 'Beginpositie in ExtraTekensInVortSpecoString (van waar af de string doorzocht moet worden); nposminAanvang = nposmin 'dient alleen om vast te stellen of nposmin zal toenemen door deze Functie-aanroep: ExtraTekensInVortSpecoString = False '(default) 'Vortspec-Markilo-tekens "4" tellen: 50: ipos4ju = InStr(ipos, VortSpecoSubString, "4") '[ "4" = ACCUSATIEF-teken] If ipos4ju > 0 Then ipos = ipos4ju + 2 '(er kunnen namelijk geen twee "4"-en direct achter elkaar staan) nposmin = nposmin + 1 'tekens "4" tellen GoTo 50 Else ipos = iposBegin 'reset End If 'Vortspec-Markilo-tekens "j" tellen: 51: ipos4ju = InStr(ipos, VortSpecoSubString, "j") '[ "j" = MEERVOUDS-teken] If ipos4ju > 0 Then ipos = ipos4ju + 2 '(er kunnen namelijk geen twee "j"-s direct achter elkaar staan) nposmin = nposmin + 1 'tekens "j" erbij tellen GoTo 51 Else ipos = iposBegin 'reset End If 'Vortspec-Markilo-tekens "u" tellen: 52: ipos4ju = InStr(ipos, VortSpecoSubString, "u") '[ "u" = IMPERATIV-teken] If ipos4ju > 0 Then ipos = ipos4ju + 2 '(er kunnen namelijk geen twee "u"-s direct achter elkaar staan) nposmin = nposmin + 1 'tekens "u" erbij tellen GoTo 52 Else ipos = iposBegin 'reset End If 'Vortspec-Markilo-tekens "," tellen 531: ipos4ju = InStr(ipos, VortSpecoSubString, ",") 'KOMMA If ipos4ju > 0 Then ipos = ipos4ju + 2 '(er kunnen namelijk geen twee "," direct achter elkaar staan) nposmin = nposmin + 1 'tekens ";" erbij tellen GoTo 531 Else ipos = iposBegin 'reset End If 'Vortspec-Markilo-tekens ";" tellen [Let op: ";" representeert ook ellipsis (tripunkto) ] 53101: ipos4ju = InStr(ipos, VortSpecoSubString, ";") 'PUNT-KOMMA If ipos4ju > 0 Then ipos = ipos4ju + 2 '(er kunnen namelijk geen twee ";" direct achter elkaar staan) nposmin = nposmin + 1 'tekens ";" erbij tellen GoTo 53101 Else ipos = iposBegin 'reset End If 'Vortspec-Markilo-tekens ":" tellen: 53102: ipos4ju = InStr(ipos, VortSpecoSubString, ":") 'DUBBELE PUNT If ipos4ju > 0 Then ipos = ipos4ju + 2 '(er kunnen namelijk geen twee ":" direct achter elkaar staan) nposmin = nposmin + 1 'tekens ":" erbij tellen GoTo 53102 Else ipos = iposBegin 'reset End If 'Vortspec-Markilo-tekens "." tellen: 53103: ipos4ju = InStr(ipos, VortSpecoSubString, ".") 'PUNT '[deze komt in de VortSpecEnFrazo-string slechts zeer sporadisch voor; er verschijnen... If ipos4ju > 0 Then '[...daarin bijv. GEEN punten tussen voorletters van Eigennamen (alleen de Markilo "E") ] ipos = ipos4ju + 2 '(er kunnen namelijk geen twee "." direct achter elkaar staan [althans NIET in de VortSpecEnFrazo-string!] ) nposmin = nposmin + 1 'tekens "." erbij tellen GoTo 53103 Else ipos = iposBegin 'reset End If 'Vortspec-Markilo-tekens "?" tellen: 53104: ipos4ju = InStr(ipos, VortSpecoSubString, "?") 'VRAAGTEKEN If ipos4ju > 0 Then ipos = ipos4ju + 2 '(er kunnen namelijk geen twee "?" direct achter elkaar staan [althans NIET in de VortSpecEnFrazo-string!] ) nposmin = nposmin + 1 'tekens "?" erbij tellen GoTo 53104 Else ipos = iposBegin 'reset End If 'Vortspec-Markilo-tekens "!" tellen: 53105: ipos4ju = InStr(ipos, VortSpecoSubString, "!") 'UITROEPTEKEN If ipos4ju > 0 Then ipos = ipos4ju + 2 '(er kunnen namelijk geen twee "!" direct achter elkaar staan [althans NIET in de VortSpecEnFrazo-string!] ) nposmin = nposmin + 1 'tekens "!" erbij tellen GoTo 53105 Else ipos = iposBegin 'reset End If 'Vortspec-Markilo-tekens "-" tellen: 532: ipos4ju = InStr(ipos, VortSpecoSubString, "-") 'GEDACHTENSTREEP, HaltoStreko, en representant van alle vormen van ELLIPSIS If ipos4ju > 0 Then ipos = ipos4ju + 2 '(er kunnen namelijk geen twee "-" direct achter elkaar staan [althans NIET in de VortSpecEnFrazo-string!]) nposmin = nposmin + 1 'tekens "-" erbij tellen GoTo 532 Else '(het teken "-" in de VortSpecEnFrazo-string heeft NIETS te maken met de hyphen in samengestelde woorden) ipos = iposBegin 'reset End If 'Vortspec-Markilo-tekens "<" tellen: 541: ipos4ju = InStr(ipos, VortSpecoSubString, "<") 'CITILOJ (aanhalingstekens) If ipos4ju > 0 Then ipos = ipos4ju + 2 '(er kunnen namelijk geen twee "<" direct achter elkaar staan) nposmin = nposmin + 1 'tekens "<" erbij tellen GoTo 541 Else ipos = iposBegin 'reset End If 'Vortspec-Markilo-tekens ">" tellen: 542: ipos4ju = InStr(ipos, VortSpecoSubString, ">") If ipos4ju > 0 Then ipos = ipos4ju + 2 '(er kunnen namelijk geen twee ">" direct achter elkaar staan) nposmin = nposmin + 1 'tekens ">" erbij tellen GoTo 542 Else ipos = iposBegin 'reset End If 'Vortspec-Markilo-tekens "(" tellen: 543: ipos4ju = InStr(ipos, VortSpecoSubString, "(") 'HAKEN (ronde, vierkante, etc) If ipos4ju > 0 Then ipos = ipos4ju + 2 '(er kunnen namelijk geen twee "(" direct achter elkaar staan) nposmin = nposmin + 1 'tekens "(" erbij tellen GoTo 543 Else ipos = iposBegin 'reset End If 'Vortspec-Markilo-tekens ")" tellen: 544: ipos4ju = InStr(ipos, VortSpecoSubString, ")") If ipos4ju > 0 Then ipos = ipos4ju + 2 '(er kunnen namelijk geen twee ")" direct achter elkaar staan) nposmin = nposmin + 1 'tekens ")" erbij tellen GoTo 544 Else ipos = iposBegin 'reset End If 'Vortspec-Markilo-tekentrios "EB&" tellen [16-5-08]: 545: iposEBetc = InStr(ipos, VortSpecoSubString, "EB&") '[16-5-08] iposetcBE = InStr(ipos, VortSpecoSubString, "&BE") '[16-5-08] (ook voor de omgekeerde SubString) If iposEBetc > 0 Then '[16-5-08] ipos = iposEBetc + 4 '(er kunnen namelijk geen twee "EB&" direct achter elkaar staan) nposmin = nposmin + 3 'tekens "EB&" erbij tellen GoTo 545 ElseIf iposetcBE > 0 Then '[16-5-08] (ook voor de omgekeerde SubString) ipos = iposetcBE + 4 '(er kunnen namelijk geen twee "EB&" direct achter elkaar staan) nposmin = nposmin + 3 'tekens "EB&" erbij tellen GoTo 545 Else ipos = iposBegin 'reset '[16-5-08] End If If nposmin > nposminAanvang Then ExtraTekensInVortSpecoString = True End Function Function NounAccSubHeaderInfinitiv(OmgekeerdeZInsDeel As String, NounPos As Integer, N4 As Integer) As Boolean '20 Augusto 2007 TW Dim voorNounPos As Integer voorNounPos = NounPos + 1 If N4 = 0 Then GoTo 7 'betreft Infinitivo + Noun als Object 'Hieronder een aantal syntactische varianten van zo'n Infinitiv Phrase gespecificeerd: '[hier OmgekeerdeZInsDeel, dus lees de syntactische patronen van rechts naar links] If Mid(OmgekeerdeZInsDeel, voorNounPos, 1) = "i" Then GoTo 8 'Infinitiv voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 2) = "ai" Then GoTo 8 'Infinitiv + article voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 2) = "ti" Then GoTo 8 'Infinitiv + 'tuj'-woord voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 2) = "bi" Then GoTo 8 'Infinitiv + 'ankaŭ'-woord voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "ati" Then GoTo 8 'Infinitiv+ 'tuj'-woord + article voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "abi" Then GoTo 8 'Infinitiv + 'ankaŭ'-woord + article voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "4Ai" Then GoTo 8 'Infinitiv + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "4Mi" Then GoTo 8 'Infinitiv + 'tiu'-woord voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "4Aai" Then GoTo 8 'Infinitiv + article + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "4Abi" Then GoTo 8 'Infinitiv + Adverb + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "4Ati" Then GoTo 8 'Infinitiv + 'tre'-woord + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "4Abai" Then GoTo 8 'Infinitiv + article + Adverb + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "4Atai" Then GoTo 8 'Infinitiv + article + 'tre'-woord + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "4Aabi" Then GoTo 8 'Infinitiv + 'ankaŭ'-woord + article + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "4Aati" Then GoTo 8 'Infinitiv + 'tuj'-woord + article + 'Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "4A4Ai" Then GoTo 8 'Infinitiv + Adjectief + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "4A4Mi" Then GoTo 8 'Infinitiv + 'tiu'-woord + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "4A4Mbi" Then GoTo 8 'Infinitiv + 'ankaŭ'-woord + 'tiu'-woord + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "4A4Mti" Then GoTo 8 'Infinitiv + 'tuj'-woord + 'tiu'-woord + Adjectief voor Noun 'bovenstaande varianten, maar nu met meervoudsvormen: If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "j4Ai" Then GoTo 8 'Infinitiv + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "j4Mi" Then GoTo 8 'Infinitiv + 'tiu'-woord(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "j4Aai" Then GoTo 8 'Infinitiv + article + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "j4Abi" Then GoTo 8 'Infinitiv + Adverb + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "j4Ati" Then GoTo 8 'Infinitiv + 'tre'-woord + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "j4Abai" Then GoTo 8 'Infinitiv + article + Adverb + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "j4Atai" Then GoTo 8 'Infinitiv + article + 'tre'-woord + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "j4Abti" Then GoTo 8 'Infinitiv + 'tre'-woord + Adverb + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 7) = "j4Aj4Ai" Then GoTo 8 'Infinitiv + Adjectief(Meervoud) + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 7) = "j4Aj4Mi" Then GoTo 8 'Infinitiv + 'tiu'-woord(Meervoud) + Adjectief(Meervoud) voor Noun 'varianten met numeraloj (altijd met meervoudsvormen): If Mid(OmgekeerdeZInsDeel, voorNounPos, 2) = "#i" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "j4A#i" Then GoTo 8 'ekz. "forgesi du gravajn demandojn" If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "#ai" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "j4A#ai" Then GoTo 8 7: 'Indien GEEN Infinitiv voor Noun (of Noun niet in accusatief, dus geen Object van Infinitiv): NounAccSubHeaderInfinitiv = False GoTo 9 8: NounAccSubHeaderInfinitiv = True 9: End Function Function NounSubHeaderPP(OmgekeerdeZInsDeel As String, NounPos As Integer, N4 As Integer, DumGhis As Boolean) As Boolean '10 Augusto 2007 TW '[behandeling Konjunkcio toegevoegd] Dim voorNounPos As Integer Dim Konjunkcio As Integer Dim EblaEraroNovaBilancoj As Boolean Dim Meervoud As Boolean 'slaat op Noun van NounPos Konjunkcio = False 'default DumGhis = False 'DumGhis toegevoegd als uitgansparameter [9-8-07] voorNounPos = NounPos + 1 Meervoud = False 'default If NounPos > 1 Then If Mid(OmgekeerdeZInsDeel, voorNounPos - 2, 2) = "jN" Then Meervoud = True 'dit betreft het meervoud van het op de Konjunkcio RECHTS VOLGEND Noun, behorend bij ingansparameter NounPos End If ' '****************************************************************************************************************************************** If N4 = 0 Then 'alles in N O M I N A T I E F : '****************************************************************************************************************************************** 'Rekening houden met Coordinatie (Konjunkcio) direct naast Noun: '[10-8-07] Konjunkcio = True '(uitgangspunt, dat door onderstaande If en ElseIf's nagegaan wordt:) If Mid(OmgekeerdeZInsDeel, voorNounPos, 2) = "kN" Then 'Noun Rechts wordt voorafgegaan door Enkelvoud-Noun Links van de Konjunkcio ("kaj", "au", "nek"...); voorNounPos = voorNounPos + 2 'onderzoek de PP-afhankelijkheid van dit aan de Konjunkcio LINKS VOORAFGAAND Enkelvoud-Noun Konjunkcio = True ElseIf Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "kjN" Then 'Noun Rechts wordt voorafgegaan door Meervoud-Noun Links van de Konjunkcio ("kaj", "au", "nek"...) voorNounPos = voorNounPos + 3 'onderzoek de PP-afhankelijkheid van dit aan de Konjunkcio LINKS VOORAFGAAND Meervoud-Noun Konjunkcio = True GoTo 50 'Rekening houdend met 1 of meer woorden (adjectieven etc) tussen de Konjunkcio en het Noun Rechts daarvan: '[11-8-07] '(Enkelvoud aan BEIDE kanten van de Konjunkcio:) ElseIf Not Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "akN" Then: voorNounPos = voorNounPos + 3 ElseIf Not Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "AakN" Then: voorNounPos = voorNounPos + 4 ElseIf Not Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "AMkN" Then: voorNounPos = voorNounPos + 4 ElseIf Not Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "AtakN" Then: voorNounPos = voorNounPos + 5 ElseIf Not Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "AtMkN" Then: voorNounPos = voorNounPos + 5 ElseIf Not Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "AAakN" Then: voorNounPos = voorNounPos + 5 ElseIf Not Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "AAMkN" Then: voorNounPos = voorNounPos + 5 '(Enkelvoud aan de RECHTER en Meervoud aan de LINKER kant van de Konjunkcio is ook mogelijk:) ElseIf Not Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "akjN" Then: voorNounPos = voorNounPos + 4: GoTo 50 ElseIf Not Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "AakjN" Then: voorNounPos = voorNounPos + 5: GoTo 50 ElseIf Not Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "AMkjN" Then: voorNounPos = voorNounPos + 5: GoTo 50 ElseIf Not Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "AtakjN" Then: voorNounPos = voorNounPos + 6: GoTo 50 ElseIf Not Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "AtMkjN" Then: voorNounPos = voorNounPos + 6: GoTo 50 ElseIf Not Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "AAakjN" Then: voorNounPos = voorNounPos + 6: GoTo 50 ElseIf Not Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "AAMkjN" Then: voorNounPos = voorNounPos + 6: GoTo 50 '(Meervoud aan de RECHTER en Enkelvoud aan de LINKER kant van de Konjunkcio is ook mogelijk:) ElseIf Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "akN" Then: voorNounPos = voorNounPos + 3 ElseIf Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "jAakN" Then: voorNounPos = voorNounPos + 5 ElseIf Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "jAjMkN" Then: voorNounPos = voorNounPos + 6 ElseIf Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "jAtakN" Then: voorNounPos = voorNounPos + 6 ElseIf Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 7) = "jAtjMkN" Then: voorNounPos = voorNounPos + 7 ElseIf Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 7) = "jAjAakN" Then: voorNounPos = voorNounPos + 7 ElseIf Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 8) = "jAjAjMkN" Then: voorNounPos = voorNounPos + 8 '(Meervoud aan BEIDE kanten van de Konjunkcio:) ElseIf Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "akjN" Then: voorNounPos = voorNounPos + 4: GoTo 50 ElseIf Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "jAakjN" Then: voorNounPos = voorNounPos + 6: GoTo 50 ElseIf Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 7) = "jAjMkjN" Then: voorNounPos = voorNounPos + 7: GoTo 50 ElseIf Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 7) = "jAtakjN" Then: voorNounPos = voorNounPos + 7: GoTo 50 ElseIf Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 8) = "jAtjMkjN" Then: voorNounPos = voorNounPos + 8: GoTo 50 ElseIf Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 8) = "jAjAakjN" Then: voorNounPos = voorNounPos + 8: GoTo 50 ElseIf Meervoud And Mid(OmgekeerdeZInsDeel, voorNounPos, 9) = "jAjAjMkjN" Then: voorNounPos = voorNounPos + 9: GoTo 50 Else 'indien GEEN Konjunkcio vastgesteld: Konjunkcio = False If Meervoud Then GoTo 50 '[10-8-07] versnelling: bij Noun in Meervoudsvorm: skip Enkelvoud-codeblok; 'deze versnelling leidt niet tot NounSubHeaderPP = false bij ongelijk Enkel- en Meervoud tussen N, A en M '[10-8-07] End If 10: 'Hieronder worden bijna alle syntactische varianten van een PP [Prepositional Phrase] gespecificeerd: If Mid(OmgekeerdeZInsDeel, voorNounPos, 1) = "p" Then GoTo 8 'prepositie voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 2) = "ap" Then GoTo 8 'prepositie + article voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 2) = "Mp" Then GoTo 8 'prepositie + 'tiu'-woord voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 2) = "Ap" Then GoTo 8 'prepositie + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "Aap" Then GoTo 8 'prepositie + article + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "AMp" Then GoTo 8 'prepositie + 'tiu'-woord + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "AAp" Then GoTo 8 'prepositie + Adjectief + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "Atap" Then GoTo 8 'prepositie + article + ne-simetria-adverb + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "AtMp" Then GoTo 8 'prepositie + 'tiu'-woord + ne-simetria-adverb + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "AAap" Then GoTo 8 'prepositie + article + Adjectief + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "AAMp" Then GoTo 8 'prepositie + 'tiu'-woord + Adjectief + Adjectief voor Noun 'verdere varianten met (al dan niet ne-simetriaj) adverboj: If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "Atp" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "Abp" Then GoTo 8 'ekz. "per rapide riparita komputilo" If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "Attp" Then GoTo 8 'ekz. "per nun tre multekosta rimedo" If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "Abtp" Then GoTo 8 'ekz. "per tre rapide riparita komputilo" If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "Abap" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "Attap" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "Abtap" Then GoTo 8 'Alle bovenstaande groepen van varianten nu met de EVENTUALAJ Prepozicioj 'dum' en 'ĝis': '[VortSpecMarko voor 'dum' en 'ĝis' is: "ĝ" , oftewel ChrW(285) ] If Mid(OmgekeerdeZInsDeel, voorNounPos, 1) = ChrW(285) Then GoTo 87 'dum of ĝis voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 2) = "a" & ChrW(285) Then GoTo 87 'dum of ĝis + article voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 2) = "M" & ChrW(285) Then GoTo 87 'dum of ĝis + 'tiu'-woord voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 2) = "A" & ChrW(285) Then GoTo 87 'dum of ĝis + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "Aa" & ChrW(285) Then GoTo 87 'dum of ĝis + article + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "AM" & ChrW(285) Then GoTo 87 'dum of ĝis + 'tiu'-woord + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "AA" & ChrW(285) Then GoTo 87 'dum of ĝis + Adjectief + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "Ata" & ChrW(285) Then GoTo 87 'dum of ĝis + article + ne-simetria-adverb + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "AtM" & ChrW(285) Then GoTo 87 'dum of ĝis + 'tiu'-woord + ne-simetria-adverb + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "AAa" & ChrW(285) Then GoTo 87 'dum of ĝis + article + Adjectief + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "AAM" & ChrW(285) Then GoTo 87 'dum of ĝis + 'tiu'-woord + Adjectief + Adjectief voor Noun 'verdere varianten met (al dan niet ne-simetriaj) adverboj: If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "At" & ChrW(285) Then GoTo 87 If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "Ab" & ChrW(285) Then GoTo 87 'ekz. "per rapide riparita komputilo" If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "Att" & ChrW(285) Then GoTo 87 'ekz. "per nun tre multekosta rimedo" If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "Abt" & ChrW(285) Then GoTo 87 'ekz. "per tre rapide riparita komputilo" If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "Aba" & ChrW(285) Then GoTo 87 If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "Atta" & ChrW(285) Then GoTo 87 If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "Abta" & ChrW(285) Then GoTo 87 If Not EblaEraroNovaBilancoj Then EblaEraroNovaBilancoj = True GoTo 50 End If If Konjunkcio Then GoTo 120 'PP-afhankelijkheid van aan de Konjunkcio VOORAFGAAND Enkelvoud-Noun onderzocht '[10-8-07]; If Not Konjunkcio Then GoTo 120 'Noun in Enkelvoudsvorm: skip -Meervoud-codeblok '[10-8-07]; '(deze versnelling leidt wel tot NounSubHeaderPP = false bij ongelijk Enkel- en Meervoud tussen N, A en M ) 50: 'bovenstaande varianten, maar nu met MEERVOUDS-vormen: If Mid(OmgekeerdeZInsDeel, voorNounPos, 1) = "p" Then GoTo 8 'prepositie voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 2) = "ap" Then GoTo 8 'prepositie + article voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "jAp" Then GoTo 8 'prepositie + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "jMp" Then GoTo 8 'prepositie + 'tiu'-woord(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "jAap" Then GoTo 8 'prepositie + article + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "jAjMp" Then GoTo 8 'prepositie + 'tiu'-woord(Meervoud) + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "jAjAp" Then GoTo 8 'prepositie + Adjectief(Meervoud) + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "jAtap" Then GoTo 8 'prepositie + article + ne-simetria-adverb + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "jAtjMp" Then GoTo 8 'prepositie + 'tiu'-woord(Meervoud) + ne-simetria-adverb + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "jAjAap" Then GoTo 8 'prepositie + article + Adjectief(Meervoud) + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 7) = "jAjAjMp" Then GoTo 8 'prepositie + 'tiu'-woord(Meervoud) + Adjectief(Meervoud) + Adjectief(Meervoud) voor Noun 'verdere varianten, maar nu met meervoudsvormen: If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "jAtp" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "jAbp" Then GoTo 8 'ekz. "per rapide riparitaj komputiloj" If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "jAttp" Then GoTo 8 'ekz. "per nun tre multekostaj rimedoj" If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "jAbtp" Then GoTo 8 'ekz. "per tre rapide riparitaj komputiloj" If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "jAbap" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "jAttap" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "jAbtap" Then GoTo 8 'varianten met numeraloj (altijd met meervoudsvormen): If Mid(OmgekeerdeZInsDeel, voorNounPos, 2) = "#p" Then GoTo 8 'ekz. "kun du amikoj" If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "jA#p" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "jAt#p" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "jAjA#p" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "#ap" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "jA#ap" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "jAt#ap" Then GoTo 8 'ekz. "en la du tre plenaj aŭtobusoj" If Mid(OmgekeerdeZInsDeel, voorNounPos, 7) = "jAjA#ap" Then GoTo 8 'varianten met de EVENTUALAJ Prepozicioj 'dum' en 'ĝis', nu met meervoudsvormen: If Mid(OmgekeerdeZInsDeel, voorNounPos, 1) = ChrW(285) Then GoTo 87 'dum of ĝis + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 2) = "a" & ChrW(285) Then GoTo 87 'dum of ĝis + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "jA" & ChrW(285) Then GoTo 87 'dum of ĝis + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "jM" & ChrW(285) Then GoTo 87 'dum of ĝis + 'tiu'-woord(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "jAa" & ChrW(285) Then GoTo 87 'dum of ĝis + article + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "jAjM" & ChrW(285) Then GoTo 87 'dum of ĝis + 'tiu'-woord(Meervoud) + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "jAjA" & ChrW(285) Then GoTo 87 'dum of ĝis + Adjectief(Meervoud) + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "jAta" & ChrW(285) Then GoTo 87 'dum of ĝis + article + ne-simetria-adverb + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "jAtjM" & ChrW(285) Then GoTo 87 'dum of ĝis + 'tiu'-woord(Meervoud) + ne-simetria-adverb + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "jAjAa" & ChrW(285) Then GoTo 87 'dum of ĝis + article + Adjectief(Meervoud) + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 7) = "jAjAjM" & ChrW(285) Then GoTo 87 'dum of ĝis + 'tiu'-woord(Meervoud) + Adjectief(Meervoud) + Adjectief(Meervoud) voor Noun 'verdere varianten, nu met meervoudsvormen: If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "jAt" & ChrW(285) Then GoTo 87 If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "jAb" & ChrW(285) Then GoTo 87 'ekz. "per rapide riparitaj komputiloj" If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "jAtt" & ChrW(285) Then GoTo 87 'ekz. "per nun tre multekostaj rimedoj" If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "jAbt" & ChrW(285) Then GoTo 87 'ekz. "per tre rapide riparitaj komputiloj" If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "jAba" & ChrW(285) Then GoTo 87 If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "jAtta" & ChrW(285) Then GoTo 87 If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "jAbta" & ChrW(285) Then GoTo 87 'varianten met numeraloj (altijd met meervoudsvormen): If Mid(OmgekeerdeZInsDeel, voorNounPos, 2) = "#" & ChrW(285) Then GoTo 87 'ekz. "kun du amikoj" If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "jA#" & ChrW(285) Then GoTo 87 If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "jAt#" & ChrW(285) Then GoTo 87 If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "jAjA#" & ChrW(285) Then GoTo 87 If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "#a" & ChrW(285) Then GoTo 87 If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "jA#a" & ChrW(285) Then GoTo 87 If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "jAt#a" & ChrW(285) Then GoTo 87 'ekz. "en la du tre plenaj aŭtobusoj" If Mid(OmgekeerdeZInsDeel, voorNounPos, 7) = "jAjA#a" & ChrW(285) Then GoTo 87 If Not EblaEraroNovaBilancoj Then EblaEraroNovaBilancoj = True GoTo 10 End If 'If Konjunkcio Then: 'PP-afhankelijkheid van aan de Konjunkcio VOORAFGAAND Meervoud-Noun onderzocht '[10-8-07]; 120: 'Indien GEEN prepositie (ook geen dum of ĝis) voor Noun, dus een 'zelfstandig' Noun '[10-8-07]: NounSubHeaderPP = False 'If Konjunkcio Then NounSubHeaderPP = True '[10-8-07] Konjunkcio van het type "en la konferenco kaj wordt gerekend als "niet-onafhankelijk Noun" GoTo 9 '****************************************************************************************************************************************** Else ' alles in A C C U S A T I E F : '****************************************************************************************************************************************** 'If NounPos > 2 Then ' If Mid(OmgekeerdeZInsDeel, voorNounPos - 2, 3) = "j4N" Then GoTo 450 'Noun in Meervoudsvorm 'End If 'Hieronder worden bijna alle syntactische varianten van een PP [Prepositional Phrase] gespecificeerd: If Mid(OmgekeerdeZInsDeel, voorNounPos, 1) = "p" Then GoTo 8 'prepositie voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 2) = "ap" Then GoTo 8 'prepositie + article voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "4Mp" Then GoTo 8 'prepositie + 'tiu'-woord voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "4Ap" Then GoTo 8 'prepositie + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "4Aap" Then GoTo 8 'prepositie + article + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "4A4Mp" Then GoTo 8 'prepositie + 'tiu'-woord + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "4A4Ap" Then GoTo 8 'prepositie + Adjectief + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "4Atap" Then GoTo 8 'prepositie + article + ne-simetria-adverb + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "4At4Mp" Then GoTo 8 'prepositie + 'tiu'-woord + ne-simetria-adverb + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "4A4Aap" Then GoTo 8 'prepositie + article + Adjectief + Adjectief voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 7) = "4A4A4Mp" Then GoTo 8 'prepositie + 'tiu'-woord + Adjectief + Adjectief voor Noun 'bovenstaande varianten, maar nu met meervoudsvormen: If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "j4Ap" Then GoTo 8 'prepositie + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "j4Mp" Then GoTo 8 'prepositie + 'tiu'-woord(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "j4Aap" Then GoTo 8 'prepositie + article + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "j4Aj4Mp" Then GoTo 8 'prepositie + 'tiu'-woord(Meervoud) + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "j4Aj4Ap" Then GoTo 8 'prepositie + Adjectief(Meervoud) + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "j4Atap" Then GoTo 8 'prepositie + article + ne-simetria-adverb + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 8) = "j4Atj4Mp" Then GoTo 8 'prepositie + 'tiu'-woord(Meervoud) + ne-simetria-adverb + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 8) = "j4Aj4Aap" Then GoTo 8 'prepositie + article + Adjectief(Meervoud) + Adjectief(Meervoud) voor Noun If Mid(OmgekeerdeZInsDeel, voorNounPos, 10) = "j4Aj4Aj4Mp" Then GoTo 8 'prepositie + 'tiu'-woord(Meervoud) + Adjectief(Meervoud) + Adjectief(Meervoud) voor Noun 'verdere varianten met (al dan niet ne-simetriaj) adverboj: If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "4Atp" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 4) = "4Abp" Then GoTo 8 'ekz. "per rapide riparita komputilo" If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "4Attp" Then GoTo 8 'ekz. "per nun tre multekosta rimedo" If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "4Abtp" Then GoTo 8 'ekz. "per tre rapide riparita komputilo" If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "4Abap" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "4Attap" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "4Abtap" Then GoTo 8 'bovenstaande verdere varianten, maar nu met meervoudsvormen: If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "j4Atp" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "j4Abp" Then GoTo 8 'ekz. "per rapide riparitaj komputiloj" If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "j4Attp" Then GoTo 8 'ekz. "per nun tre multekostaj rimedoj" If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "j4Abtp" Then GoTo 8 'ekz. "per tre rapide riparitaj komputiloj" If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "j4Abap" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 7) = "j4Attap" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 7) = "j4Abtap" Then GoTo 8 'varianten met numeraloj (altijd met meervoudsvormen): If Mid(OmgekeerdeZInsDeel, voorNounPos, 2) = "#p" Then GoTo 8 'ekz. "kun du amikoj" If Mid(OmgekeerdeZInsDeel, voorNounPos, 5) = "j4A#p" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "j4At#p" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 8) = "j4Aj4A#p" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 3) = "#ap" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 6) = "j4A#ap" Then GoTo 8 If Mid(OmgekeerdeZInsDeel, voorNounPos, 7) = "j4At#ap" Then GoTo 8 'ekz. "en la du tre plenaj aŭtobusoj" If Mid(OmgekeerdeZInsDeel, voorNounPos, 9) = "j4Aj4A#ap" Then GoTo 8 'Indien GEEN prepositie voor Noun, dus een 'zelfstandig' Noun: NounSubHeaderPP = False GoTo 9 End If '****************************************************************************************************************************************** 8: NounSubHeaderPP = True 'if EblaEraroNovaBilancoj then: signaleer dit als Syntax-fout aan oproepende programma '[10-8-07] ### tzt AKTIVEREN ! GoTo 9 87: NounSubHeaderPP = True 'if EblaEraroNovaBilancoj then: signaleer dit als Syntax-fout aan oproepende programma '[10-8-07] ### tzt AKTIVEREN ! DumGhis = True GoTo 9 9: End Function Function ZelfstandigNounOpgespoord(OmgekZinsdeel As String, iposN As Integer) As Boolean '15 Augusto 2007 TW 'deze Function vormt een A L T E R N A T I E V E manier om vast te stellen of een noun Header is... '...van een Zelfstandige Noun Phrase, dan wel ondergeschikt is aan een PP (Prepositional Phrase); ... '...het voordeel van deze alternatieve manier tov de Function "NounSubHeaderPP" zit 'm daarin, ... '...dat Function "ZelfstandigNounOpgespoord" ook het goed functioneren bij ingebedde (recursieve) ... '...NP's mogelijk maakt ("la de mia patro konstruita domo") 'iposN1 = uitvoerparameter (krijgt waarde 0 indien GEEN Zelfstandig Noun gevonden wordt) Dim iposPrep1 As Integer Dim iposPrep2 As Integer Dim iposPrep3 As Integer Dim ongecorrDistPrep1N1 As Integer Dim iposN1 As Integer Dim iposN2 As Integer Dim iposN3 As Integer Dim iposPron As Integer Dim iZoeknoun As Integer 20: 'Begin te zoeken GEHEEL LINKS in OmgekZinsdeel, dus GEHEEL RECHTS in Zinsdeel '(bij ZinsdeelVoorW is dat: zoeken vanaf het Werkwoord waarin dit zinsdeel voorafgaat; ' bij ZinsdeelAchterW is dat: zoeken vanaf het rechtereinde van dat zinsdeel): iZoeknoun = 1 'beginpositie voor zoeken van Noun 21: iposN1 = InStr(iZoeknoun, OmgekZinsdeel, "N") 'test op Vortspec-Markilo 'N' 22: If iposN1 = 0 Then GoTo 9 'GEEN (verder) Noun gevonden bij het Werkwoord 'Zoek Eerste Prepozicio (Prep1) voorafgaand aan N1: iposPrep1 = InStr(iposN1 + 1, OmgekZinsdeel, "p") 'test op Vortspec-Markilo 'p' If iposPrep1 = 0 Then GoTo 7 'helemaal GEEN prepozicio voorafgaand aan N1: 'N1 is dus een Zelfstandig Noun 'Prepozicio (Prep1) gevonden: ongecorrDistPrep1N1 = iposPrep1 - iposN1 'woordafstand tussen Prep1 en N1 (ongecorrigeerd voor "j" en "4" in VortSpeco-string) If ongecorrDistPrep1N1 > 14 Then MsgBox "ongecorr woord-Afstand tussen Prepozicio en Noun groter dan 14" 'Check nu of deze Prepozicio wel echt bij N1 hoort (of bij een ingebed N2): iposN2 = InStr(iposN1 + 1, OmgekZinsdeel, "N") 'test op Vortspec-Markilo 'N' 'Check ook of deze Prepozicio niet bij een ingebed Personpronomo hoort): '[22-7-07] iposPron = InStr(iposN1 + 1, OmgekZinsdeel, ChrW(349)) 'test op Vortspec-Markilo 'ŝ' '[22-7-07] If iposN2 = 0 Then '[22-7-07] iposN2 = iposPron '[22-7-07] Else 'iposN2 >0: '[22-7-07] If iposPron <> 0 And iposPron < iposN2 Then iposN2 = iposPron '[22-7-07] End If '[22-7-07] If iposN2 = 0 Or (iposN2 > iposPrep1) Then 'GEEN tussenliggend Noun gevonden: 'Prep1 hoort dus bij N1 [Prep1 kan ook niet bij een Personpronomo horen, want de afwezigheid daarvan is reeds onder label 10 gebleken; ... '... Prep1 zou nog wel bij enkele andere woordsoorten kunnen horen, bijv. "pri tiu", "pri tio", "pri kelkaj", maar dat vergeten we: ... '... Voor betrouwbare SVO-registratie is het namelijk beter om een Zelfstandig Noun als PP-Header te beschouwen, dan omgekeerd... '... (beter een gemiste dan een verkeerde SVO-registratie). 'N1 is dus GEEN zelfstandig Noun 'zoek nu verder naar een zelfstandig Noun, links van deze PP: iposN1 = iposN2 '[we gebruiken hiervoor opnieuw de bovenstaande code, N2 heet nu weer N1, met evt. daaraan weer voorafgaand Prep1] GoTo 22 Else 'Prep1 hoort bij (ingebed) N2: 'Zoek nu Tweede Prepozicio (Prep2), verder verwijderd van N1: iposPrep2 = InStr(iposPrep1 + 1, OmgekZinsdeel, "p") 'test op Vortspec-Markilo 'p' If iposPrep2 = 0 Then GoTo 7 'GEEN verdere prepozicio voorafgaand aan N1: 'N1 is dus een Zelfstandig Noun Else 'Prepozicio (Prep2) gevonden: 'Check of deze Prepozicio hoort bij een N dat inlegt tussen Prep2 en Prep1: iposN3 = InStr(iposPrep1, OmgekZinsdeel, "N") 'test op Vortspec-Markilo 'N' If iposN3 = 0 Or (iposN3 > iposPrep2) Then 'Zo'n N is er niet 'Prep2 hoort dus bij N1. 'N1 is dus GEEN zelfstandig Noun 'zoek nu verder naar een zelfstandig Noun, links van deze PP: iposN1 = iposN3 '[we gebruiken hiervoor opnieuw de bovenstaande code, N3 heet nu weer N1, met evt. daaraan weer voorafgaand Prep1] GoTo 22 Else 'Prep2 hoort bij N3 'Zoek nu evt. Derde Prepozicio (Prep3), nog verder verwijderd van N1: iposPrep3 = InStr(iposPrep2 + 1, OmgekZinsdeel, "p") 'test op Vortspec-Markilo 'p' If iposPrep3 = 0 Then GoTo 7 'GEEN verdere prepozicio voorafgaand aan N1: 'N1 is dus een Zelfstandig Noun Else 'N1 is GEEN zelfstandig Noun [dit is een aanname; theoretisch zouden er 3 (of meer) ingebedde PP's kunnen voorkomen in... '... een NP waarvan N1 de Header is, bijv. "en periodo dum la milito de mia patro konstruita domo disfalis ... "] GoTo 9 'waarschijnlijk GEEN zelfstandig Noun voorafgaand aan het Werkwoord End If End If End If End If 7: 'Zelfstandig Noun, voorafgaand aan het Verb, gevonden (op ongecorrigeerde woordpositie iposN1): ZelfstandigNounOpgespoord = True iposN = iposN1 GoTo 10 9: 'voorafgaand aan het Verb is er GEEN zelfstandig Noun gevonden: iposN = 0 10: End Function Function TempoDauroAkuzativo(TekstWoord As String) As Boolean TempoDauroAkuzativo = False 'Shortcut: If Not (Right(TekstWoord, 3) = "ojn" Or Right(TekstWoord, 2) = "on") Then GoTo 9 'Tempaj Adjektoj (zie PAG blz 264-266): 'check eerst op meervoudsvormen: If _ (TekstWoord = "jarmilojn" Or _ TekstWoord = "jarcentojn" Or _ TekstWoord = "jardekojn" Or _ TekstWoord = "jarojn" Or _ TekstWoord = "monatojn" Or _ TekstWoord = "semajnojn" Or _ TekstWoord = "tagojn" Or _ TekstWoord = "horojn" Or _ TekstWoord = "minutojn" Or _ TekstWoord = "sekundojn" Or _ TekstWoord = "momentojn" Or _ TekstWoord = "fojojn" Or _ TekstWoord = "matenojn" Or _ TekstWoord = "tagmezojn" Or _ TekstWoord = "posttagmezojn" Or _ TekstWoord = "vesperojn" Or _ TekstWoord = "noktojn" Or _ TekstWoord = "finsemajnojn") Then TempoDauroAkuzativo = True Else 'check vervolgens op enkelvoudsvormen: If _ (TekstWoord = "jarmilon" Or _ TekstWoord = "jarcenton" Or _ TekstWoord = "jardekon" Or _ TekstWoord = "jaron" Or _ TekstWoord = "monaton" Or _ TekstWoord = "semajnon" Or _ TekstWoord = "tagon" Or _ TekstWoord = "horon" Or _ TekstWoord = "minuton" Or _ TekstWoord = "sekundon" Or _ TekstWoord = "momenton" Or _ TekstWoord = "fojon" Or _ TekstWoord = "matenon" Or _ TekstWoord = "tagmezon" Or _ TekstWoord = "posttagmezon" Or _ TekstWoord = "vesperon" Or _ TekstWoord = "nokton" Or _ TekstWoord = "someron" Or _ TekstWoord = "vintron" Or _ TekstWoord = "printempon" Or _ TekstWoord = "a" & ChrW(365) & "tunon" Or _ TekstWoord = "finsemajnon" Or _ TekstWoord = "tempon") Then TempoDauroAkuzativo = True End If End If 9: End Function Function SenSubjektaVerbo(TekstWoord As String) As Boolean '9 Augusto 2007 TW Dim VerbStam As String Dim Lengte As Integer SenSubjektaVerbo = False Lengte = Len(TekstWoord) If Right(TekstWoord, 2) = "as" Or Right(TekstWoord, 2) = "is" Then VerbStam = Left(TekstWoord, Lengte - 2) ElseIf Right(TekstWoord, 2) = "os" Or Right(TekstWoord, 2) = "us" Then VerbStam = Left(TekstWoord, Lengte - 2) ElseIf Right(TekstWoord, 1) = "u" Or Right(TekstWoord, 1) = "i" Then VerbStam = Left(TekstWoord, Lengte - 1) Else GoTo 9 'GEEN Verb-form End If 'Check tegen onderstaande lijst van SenSubjektaj Verboj: If _ (VerbStam = "pluv" Or _ VerbStam = "pluvet" Or _ VerbStam = "pluveg" Or _ VerbStam = "hajl" Or _ VerbStam = "tagi" & ChrW(285) Or _ VerbStam = "vent" Or _ VerbStam = "venteg" Or _ VerbStam = ChrW(349) & "torm" Or _ VerbStam = "ne" & ChrW(285)) Then SenSubjektaVerbo = True End If 9: End Function Function DistancMezuraAkuzativo(TekstWoord As String) As Boolean DistancMezuraAkuzativo = False 'Shortcut: If Not (Right(TekstWoord, 3) = "ojn" Or Right(TekstWoord, 2) = "on") Then GoTo 9 'Tempaj Adjektoj (zie PAG blz 264-266): 'check eerst op meervoudsvormen: If _ (TekstWoord = "metrojn" Or _ TekstWoord = "kilometrojn" Or _ TekstWoord = "decimetrojn" Or _ TekstWoord = "centimetrojn" Or _ TekstWoord = "milimetrojn" Or _ TekstWoord = "colojn" Or _ TekstWoord = "futojn" Or _ TekstWoord = "verstojn" Or _ TekstWoord = "pa" & ChrW(349) & "ojn") Then DistancMezuraAkuzativo = True Else 'check vervolgens op enkelvoudsvormen: If _ (TekstWoord = "metron" Or _ TekstWoord = "kilometron" Or _ TekstWoord = "decimetrojn" Or _ TekstWoord = "centimetron" Or _ TekstWoord = "milimetrojn" Or _ TekstWoord = "colon" Or _ TekstWoord = "futon" Or _ TekstWoord = "verston" Or _ TekstWoord = "pa" & ChrW(349) & "on") Then DistancMezuraAkuzativo = True End If End If 9: End Function