commit 2eaca76754a802cf353588babc462c582b592a4d Author: Tanmai Khanna Date: Mon Jul 20 11:08:50 2020 +0530 fix lword by getting last_lword in transfer | add test for single LU pattern match diff --git a/apertium/transfer.cc b/apertium/transfer.cc index 22172b1..ad6d8db 100644 --- a/apertium/transfer.cc +++ b/apertium/transfer.cc @@ -375,7 +375,7 @@ Transfer::evalString(xmlNode *element) case ti_clip_sl: if(checkIndex(element, ti.getPos(), lword)) { - if(gettingLemmaFromWord(ti.getContent()) && lword > 1) + if(gettingLemmaFromWord(ti.getContent()) && last_lword > 1) { if(in_lu) { @@ -394,7 +394,7 @@ Transfer::evalString(xmlNode *element) case ti_clip_tl: if(checkIndex(element, ti.getPos(), lword)) { - if(gettingLemmaFromWord(ti.getContent()) && lword > 1) + if(gettingLemmaFromWord(ti.getContent()) && last_lword > 1) { if(in_lu) { @@ -460,7 +460,7 @@ Transfer::evalString(xmlNode *element) break; case ti_var: - if(lword > 1) + if(last_lword > 1) { out_wblank = combineWblanks(out_wblank, var_out_wblank[ti.getContent()]); } @@ -678,7 +678,7 @@ Transfer::evalString(xmlNode *element) in_lu = false; - if(lword == 1) + if(last_lword == 1) { out_wblank = word[0]->blank(); } @@ -736,7 +736,7 @@ Transfer::evalString(xmlNode *element) } } - if(lword == 1) + if(last_lword == 1) { out_wblank = word[0]->blank(); } @@ -788,7 +788,7 @@ Transfer::processOut(xmlNode *localroot) in_lu = false; - if(lword == 1) + if(last_lword == 1) { out_wblank = word[0]->blank(); } @@ -843,7 +843,7 @@ Transfer::processOut(xmlNode *localroot) } } - if(lword == 1) + if(last_lword == 1) { out_wblank = word[0]->blank(); } @@ -959,7 +959,7 @@ Transfer::processChunk(xmlNode *localroot) in_lu = false; - if(lword == 1) + if(last_lword == 1) { out_wblank = word[0]->blank(); } @@ -1011,7 +1011,7 @@ Transfer::processChunk(xmlNode *localroot) myword.append(mylocalword); } - if(lword == 1) + if(last_lword == 1) { out_wblank = word[0]->blank(); } @@ -2530,6 +2530,7 @@ Transfer::transfer(FILE *in, FILE *out) lastrule = rule_map[val-1]; lastrule_id = val; last = input_buffer.getPos(); + last_lword = tmpword.size(); if(trace) { diff --git a/apertium/transfer.h b/apertium/transfer.h index ca3bfad..15b7400 100644 --- a/apertium/transfer.h +++ b/apertium/transfer.h @@ -57,6 +57,7 @@ private: TransferWord **word; string **blank; int lword, lblank; + int last_lword; string noblank = ""; Buffer input_buffer; vector tmpword; diff --git a/tests/data/apertium-nno-nob.nob-nno.t1x b/tests/data/apertium-nno-nob.nob-nno.t1x index ba6ab3d..1de6011 100644 --- a/tests/data/apertium-nno-nob.nob-nno.t1x +++ b/tests/data/apertium-nno-nob.nob-nno.t1x @@ -110,7 +110,6 @@ - @@ -118,5 +117,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/transfer/__init__.py b/tests/transfer/__init__.py index 4eda9c1..805b0f1 100644 --- a/tests/transfer/__init__.py +++ b/tests/transfer/__init__.py @@ -99,6 +99,11 @@ class WordboundBlankTest(TransferTest): inputs = ["[blank1] [[t:s:123456]]^worda/wordta$ ;[blank2]; [[t:b:xyz123; t:l:xyz347]]^wordb/wordtb$ [blank3]; [[t:i:abc123; t:s:abc123]]^hun/ho$"] expectedOutputs = ["[blank1] ^prn{[[t:i:abc123; t:s:abc123]]^ho$ [[t:b:xyz123; t:l:xyz347]]^wordtb$}$ ;[blank2]; ^det{[[t:s:123456; t:i:abc123; t:s:abc123]]^wordta+ho$}$ [blank3]; "] +class SingleLUWordboundBlankTest(TransferTest): + inputs = ["[blank1] [[t:s:123456]]^worda/wordta$ ;[blank2]; [[t:b:xyz123; t:l:xyz347]]^wordb/wordtb$ [blank3]; "] + expectedOutputs = ["[blank1] ^nacr{[[t:s:123456]]^test$ [[t:s:123456]]^wordta$}$ ^nacr2{[[t:s:123456]]^testlem$ [[t:s:123456]]^wordta+postp$}$ ;[blank2]; ^nacr{[[t:b:xyz123; t:l:xyz347]]^test$ [[t:b:xyz123; t:l:xyz347]]^wordtb$}$ ^nacr2{[[t:b:xyz123; t:l:xyz347]]^testlem$ [[t:b:xyz123; t:l:xyz347]]^wordtb+postp$}$ [blank3]; "] + + class BincompatTest(BasicTransferTest): bindata = "data/bincompat.t1x.bin"