示例#1
0
 def toStringMorphForm(form: 'MorphForm') -> str:
     res = io.StringIO()
     if ((((form) & (MorphForm.SHORT))) != (MorphForm.UNDEFINED)):
         print("кратк.|", end="", file=res)
     if ((((form) & (MorphForm.SYNONYM))) != (MorphForm.UNDEFINED)):
         print("синонимич.|", end="", file=res)
     if (res.tell() > 0):
         Utils.setLengthStringIO(res, res.tell() - 1)
     return Utils.toStringStringIO(res)
示例#2
0
 def __str__(self) -> str:
     res = io.StringIO()
     if (self.coef > 0): 
         print("{0}: ".format(self.coef), end="", file=res, flush=True)
     for it in self.items: 
         if (it != self.items[0]): 
             print("; \r\n", end="", file=res)
         print(str(it), end="", file=res)
     return Utils.toStringStringIO(res)
示例#3
0
 def __str__(self) -> str:
     res = io.StringIO()
     i = 0
     while i < len(self.variants_key): 
         if (res.tell() > 0): 
             print(", ", end="", file=res)
         print("-{0}".format(self.variants_key[i]), end="", file=res, flush=True)
         i += 1
     return Utils.toStringStringIO(res)
示例#4
0
 def toStringMorphNumber(number: 'MorphNumber') -> str:
     res = io.StringIO()
     if ((((number) & (MorphNumber.SINGULAR))) != (MorphNumber.UNDEFINED)):
         print("единств.|", end="", file=res)
     if ((((number) & (MorphNumber.PLURAL))) != (MorphNumber.UNDEFINED)):
         print("множеств.|", end="", file=res)
     if (res.tell() > 0):
         Utils.setLengthStringIO(res, res.tell() - 1)
     return Utils.toStringStringIO(res)
示例#5
0
 def __mergeLetters(self) -> None:
     before_word = False
     tmp = io.StringIO()
     t = self.first_token
     first_pass2800 = True
     while True:
         if first_pass2800: first_pass2800 = False
         else: t = t.next0_
         if (not (t is not None)): break
         tt = Utils.asObjectOrNull(t, TextToken)
         if (not tt.chars.is_letter or tt.length_char != 1): 
             before_word = False
             continue
         i = t.whitespaces_before_count
         if (i > 2 or ((i == 2 and before_word))): 
             pass
         else: 
             before_word = False
             continue
         i = 0
         Utils.setLengthStringIO(tmp, 0)
         print(tt.getSourceText(), end="", file=tmp)
         t1 = t
         while t1.next0_ is not None: 
             tt = (Utils.asObjectOrNull(t1.next0_, TextToken))
             if (tt.length_char != 1 or tt.whitespaces_before_count != 1): 
                 break
             i += 1
             print(tt.getSourceText(), end="", file=tmp)
             t1 = t1.next0_
         if (i > 3 or ((i > 1 and before_word))): 
             pass
         else: 
             before_word = False
             continue
         before_word = False
         mt = Morphology.process(Utils.toStringStringIO(tmp), None, None)
         if (mt is None or len(mt) != 1): 
             t = t1
             continue
         for wf in mt[0].word_forms: 
             if (wf.is_in_dictionary): 
                 before_word = True
                 break
         if (not before_word): 
             t = t1
             continue
         tt = TextToken(mt[0], self)
         if (t == self.first_token): 
             self.first_token = (tt)
         else: 
             tt.previous = t.previous
         tt.next0_ = t1.next0_
         tt.begin_char = t.begin_char
         tt.end_char = t1.end_char
         t = (tt)
示例#6
0
 def attach_mail_users(t1: 'Token') -> typing.List['UriItemToken']:
     if (t1 is None):
         return None
     if (t1.is_char('}')):
         res0 = UriItemToken.attach_mail_users(t1.previous)
         if (res0 is None):
             return None
         t1 = res0[0].begin_token.previous
         first_pass3415 = True
         while True:
             if first_pass3415: first_pass3415 = False
             else: t1 = t1.previous
             if (not (t1 is not None)): break
             if (t1.is_char('{')):
                 res0[0].begin_token = t1
                 return res0
             if (t1.is_char_of(";,")):
                 continue
             res1 = UriItemToken.attach_mail_users(t1)
             if (res1 is None):
                 return None
             res0.insert(0, res1[0])
             t1 = res1[0].begin_token
         return None
     txt = io.StringIO()
     t0 = t1
     t = t1
     first_pass3416 = True
     while True:
         if first_pass3416: first_pass3416 = False
         else: t = t.previous
         if (not (t is not None)): break
         if (t.is_whitespace_after):
             break
         if (isinstance(t, NumberToken)):
             nt = Utils.asObjectOrNull(t, NumberToken)
             Utils.insertStringIO(txt, 0, nt.get_source_text())
             t0 = t
             continue
         tt = Utils.asObjectOrNull(t, TextToken)
         if (tt is None):
             break
         src = tt.get_source_text()
         ch = src[0]
         if (not str.isalpha(ch)):
             if (".-_".find(ch) < 0):
                 break
         Utils.insertStringIO(txt, 0, src)
         t0 = t
     if (txt.tell() == 0):
         return None
     res = list()
     res.append(
         UriItemToken._new2706(t0, t1,
                               Utils.toStringStringIO(txt).lower()))
     return res
示例#7
0
 def __str__(self) -> str:
     if (len(self.items) == 1):
         return "{0}, {1}".format(str(self.items[0]), str(self.morph))
     tmp = io.StringIO()
     for it in self.items:
         if (tmp.tell() > 0):
             print(' ', end="", file=tmp)
         print(it, end="", file=tmp)
     print(", {0}".format(str(self.morph)), end="", file=tmp, flush=True)
     return Utils.toStringStringIO(tmp)
示例#8
0
 def __str__(self) -> str:
     tmp = io.StringIO()
     for it in self.items_from:
         print("{0}{1}; ".format(("(fr)" if self.is_diap else ""), str(it)),
               end="",
               file=tmp,
               flush=True)
     for it in self.items_to:
         print("(to){0}; ".format(str(it)), end="", file=tmp, flush=True)
     return Utils.toStringStringIO(tmp)
示例#9
0
 def __str__(self) -> str:
     tmp_str = io.StringIO()
     i = 0
     while i < len(MorphLang.__m_names):
         if (self.__getValue(i)):
             if (tmp_str.tell() > 0):
                 print(";", end="", file=tmp_str)
             print(MorphLang.__m_names[i], end="", file=tmp_str)
         i += 1
     return Utils.toStringStringIO(tmp_str)
示例#10
0
 def to_string_morph_aspect(aspect: 'MorphAspect') -> str:
     res = io.StringIO()
     if (((aspect) & (MorphAspect.IMPERFECTIVE)) !=
         (MorphAspect.UNDEFINED)):
         print("несоверш.|", end="", file=res)
     if (((aspect) & (MorphAspect.PERFECTIVE)) != (MorphAspect.UNDEFINED)):
         print("соверш.|", end="", file=res)
     if (res.tell() > 0):
         Utils.setLengthStringIO(res, res.tell() - 1)
     return Utils.toStringStringIO(res)
示例#11
0
 def __str__(self) -> str:
     tmp = io.StringIO()
     print("TransitiveCoef = {0} \r\n".format(self.transitive_coef), end="", file=tmp, flush=True)
     print("NextModel = {0} \r\n".format(self.next_model), end="", file=tmp, flush=True)
     print("NgLink = {0} \r\n".format(self.ng_link), end="", file=tmp, flush=True)
     print("List = {0} \r\n".format(self.list0_), end="", file=tmp, flush=True)
     print("VerbPlural = {0} \r\n".format(self.verb_plural), end="", file=tmp, flush=True)
     print("CaseAccord = {0} \r\n".format(self.case_accord), end="", file=tmp, flush=True)
     print("MorphAccord = {0} \r\n".format(self.morph_accord), end="", file=tmp, flush=True)
     return Utils.toStringStringIO(tmp)
示例#12
0
 def __tryAttachSpeciality(t : 'Token', key_word_before : bool) -> 'TitleItemToken':
     if (t is None): 
         return None
     susp = False
     if (not key_word_before): 
         if (not t.is_newline_before): 
             susp = True
     val = None
     t0 = t
     dig_count = 0
     for i in range(3):
         nt = Utils.asObjectOrNull(t, NumberToken)
         if (nt is None): 
             break
         if (nt.typ != NumberSpellingType.DIGIT or nt.morph.class0_.is_adjective): 
             break
         if (val is None): 
             val = io.StringIO()
         if (susp and t.length_char != 2): 
             return None
         digs = nt.getSourceText()
         dig_count += len(digs)
         print(digs, end="", file=val)
         if (t.next0_ is None): 
             break
         t = t.next0_
         if (t.isCharOf(".,") or t.is_hiphen): 
             if (susp and (i < 2)): 
                 if (not t.isChar('.') or t.is_whitespace_after or t.is_whitespace_before): 
                     return None
             if (t.next0_ is not None): 
                 t = t.next0_
     if (val is None or (dig_count < 5)): 
         return None
     if (dig_count != 6): 
         if (not key_word_before): 
             return None
     else: 
         Utils.insertStringIO(val, 4, '.')
         Utils.insertStringIO(val, 2, '.')
     tt = t.next0_
     first_pass3126 = True
     while True:
         if first_pass3126: first_pass3126 = False
         else: tt = tt.next0_
         if (not (tt is not None)): break
         if (tt.is_newline_before): 
             break
         br = BracketHelper.tryParse(tt, BracketParseAttr.NO, 100)
         if (br is not None): 
             tt = br.end_token
             t = tt
             continue
         t = tt
     return TitleItemToken._new2501(t0, t, TitleItemToken.Types.SPECIALITY, Utils.toStringStringIO(val))
示例#13
0
 def __str__(self) -> str:
     tmp = io.StringIO()
     print("'{0}'".format(self.rus), end="", file=tmp, flush=True)
     if (self.rus_to_lat and self.lat_to_rus):
         print(" <-> ", end="", file=tmp)
     elif (self.rus_to_lat):
         print(" -> ", end="", file=tmp)
     elif (self.lat_to_rus):
         print(" <- ", end="", file=tmp)
     print("'{0}'".format(self.lat), end="", file=tmp, flush=True)
     return Utils.toStringStringIO(tmp)
示例#14
0
 def __str__(self) -> str:
     res = io.StringIO()
     t = self._m_begin_token
     while t is not None:
         if (res.tell() > 0 and t.is_whitespace_before):
             print(' ', end="", file=res)
         print(t.get_source_text(), end="", file=res)
         if (t == self._m_end_token):
             break
         t = t.next0_
     return Utils.toStringStringIO(res)
示例#15
0
 def __str__(self) -> str:
     res = io.StringIO()
     print("{0} = ".format(self.coef), end="", file=res, flush=True)
     for it in self.links: 
         if (it != self.links[0]): 
             print("; \r\n", end="", file=res)
         if (it is None): 
             print("<null>", end="", file=res)
         else: 
             print(str(it), end="", file=res)
     return Utils.toStringStringIO(res)
示例#16
0
 def __str__(self) -> str:
     tmp = io.StringIO()
     print("{0}: ".format(self.coef), end="", file=tmp, flush=True)
     for s in self.segs:
         if (s != self.segs[0]):
             print("; \r\n", end="", file=tmp)
         if (s is not None):
             print(str(s), end="", file=tmp)
         else:
             print("null", end="", file=tmp)
     return Utils.toStringStringIO(tmp)
示例#17
0
 def to_string_morph_voice(voice: 'MorphVoice') -> str:
     res = io.StringIO()
     if ((((voice) & (MorphVoice.ACTIVE))) != (MorphVoice.UNDEFINED)):
         print("действит.|", end="", file=res)
     if ((((voice) & (MorphVoice.PASSIVE))) != (MorphVoice.UNDEFINED)):
         print("страдат.|", end="", file=res)
     if ((((voice) & (MorphVoice.MIDDLE))) != (MorphVoice.UNDEFINED)):
         print("средн.|", end="", file=res)
     if (res.tell() > 0):
         Utils.setLengthStringIO(res, res.tell() - 1)
     return Utils.toStringStringIO(res)
示例#18
0
 def to_string_morph_mood(mood: 'MorphMood') -> str:
     res = io.StringIO()
     if ((((mood) & (MorphMood.INDICATIVE))) != (MorphMood.UNDEFINED)):
         print("изъявит.|", end="", file=res)
     if ((((mood) & (MorphMood.IMPERATIVE))) != (MorphMood.UNDEFINED)):
         print("повелит.|", end="", file=res)
     if ((((mood) & (MorphMood.SUBJUNCTIVE))) != (MorphMood.UNDEFINED)):
         print("условн.|", end="", file=res)
     if (res.tell() > 0):
         Utils.setLengthStringIO(res, res.tell() - 1)
     return Utils.toStringStringIO(res)
示例#19
0
 def to_string_morph_person(person: 'MorphPerson') -> str:
     res = io.StringIO()
     if ((((person) & (MorphPerson.FIRST))) != (MorphPerson.UNDEFINED)):
         print("1лицо|", end="", file=res)
     if ((((person) & (MorphPerson.SECOND))) != (MorphPerson.UNDEFINED)):
         print("2лицо|", end="", file=res)
     if ((((person) & (MorphPerson.THIRD))) != (MorphPerson.UNDEFINED)):
         print("3лицо|", end="", file=res)
     if (res.tell() > 0):
         Utils.setLengthStringIO(res, res.tell() - 1)
     return Utils.toStringStringIO(res)
示例#20
0
 def to_string_morph_gender(gender: 'MorphGender') -> str:
     res = io.StringIO()
     if ((((gender) & (MorphGender.MASCULINE))) != (MorphGender.UNDEFINED)):
         print("муж.|", end="", file=res)
     if ((((gender) & (MorphGender.FEMINIE))) != (MorphGender.UNDEFINED)):
         print("жен.|", end="", file=res)
     if ((((gender) & (MorphGender.NEUTER))) != (MorphGender.UNDEFINED)):
         print("средн.|", end="", file=res)
     if (res.tell() > 0):
         Utils.setLengthStringIO(res, res.tell() - 1)
     return Utils.toStringStringIO(res)
 def __str__(self) -> str:
     words_ = list(self.words.keys())
     tmp = io.StringIO()
     for w in words_: 
         if (tmp.tell() > 100): 
             print("...", end="", file=tmp)
             break
         if (tmp.tell() > 0): 
             print(" ", end="", file=tmp)
         print("{0}:{1}".format(self.words[w], w), end="", file=tmp, flush=True)
     return Utils.toStringStringIO(tmp)
示例#22
0
 def to_string_morph_tense(tense: 'MorphTense') -> str:
     res = io.StringIO()
     if ((((tense) & (MorphTense.PAST))) != (MorphTense.UNDEFINED)):
         print("прошедшее|", end="", file=res)
     if ((((tense) & (MorphTense.PRESENT))) != (MorphTense.UNDEFINED)):
         print("настоящее|", end="", file=res)
     if ((((tense) & (MorphTense.FUTURE))) != (MorphTense.UNDEFINED)):
         print("будущее|", end="", file=res)
     if (res.tell() > 0):
         Utils.setLengthStringIO(res, res.tell() - 1)
     return Utils.toStringStringIO(res)
示例#23
0
 def correct_word_by_morph(self, word: str) -> str:
     vars0_ = list()
     tmp = Utils.newStringIO(len(word))
     ch = 1
     while ch < len(word):
         Utils.setLengthStringIO(tmp, 0)
         print(word, end="", file=tmp)
         Utils.setCharAtStringIO(tmp, ch, '*')
         var = self.__check_corr_var(Utils.toStringStringIO(tmp),
                                     self.m_root, 0)
         if (var is not None):
             if (not var in vars0_):
                 vars0_.append(var)
         ch += 1
     if (len(vars0_) == 0):
         ch = 1
         while ch < len(word):
             Utils.setLengthStringIO(tmp, 0)
             print(word, end="", file=tmp)
             Utils.insertStringIO(tmp, ch, '*')
             var = self.__check_corr_var(Utils.toStringStringIO(tmp),
                                         self.m_root, 0)
             if (var is not None):
                 if (not var in vars0_):
                     vars0_.append(var)
             ch += 1
     if (len(vars0_) == 0):
         ch = 1
         while ch < (len(word) - 1):
             Utils.setLengthStringIO(tmp, 0)
             print(word, end="", file=tmp)
             Utils.removeStringIO(tmp, ch, 1)
             var = self.__check_corr_var(Utils.toStringStringIO(tmp),
                                         self.m_root, 0)
             if (var is not None):
                 if (not var in vars0_):
                     vars0_.append(var)
             ch += 1
     if (len(vars0_) != 1):
         return None
     return vars0_[0]
示例#24
0
 def toString(self, short_variant : bool, lang : 'MorphLang'=None, lev : int=0) -> str:
     res = io.StringIO()
     if (self.number is not None): 
         print("[{0}] ".format(self.number), end="", file=res, flush=True)
     if (self.pages is not None): 
         print("{0} {1}; ".format(("pages" if lang is not None and lang.is_en else "стр."), self.pages), end="", file=res, flush=True)
     book_ = self.book
     if (book_ is None): 
         print("?", end="", file=res)
     else: 
         print(book_.toString(short_variant, lang, lev), end="", file=res)
     return Utils.toStringStringIO(res)
示例#25
0
 def _add_date(self, dt: object) -> bool:
     if (dt is None):
         return False
     if (isinstance(dt, DecreeToken)):
         if (isinstance(dt.ref, ReferentToken)):
             return self._add_date(dt.ref.referent)
         if (dt.value is not None):
             self.add_slot(InstrumentReferent.ATTR_DATE, dt.value, True, 0)
             return True
         return False
     if (isinstance(dt, ReferentToken)):
         return self._add_date(dt.referent)
     if (isinstance(dt, DateReferent)):
         dr = Utils.asObjectOrNull(dt, DateReferent)
         year = dr.year
         mon = dr.month
         day = dr.day
         if (year == 0):
             return dr.pointer == DatePointerType.UNDEFINED
         ex_date = self.date
         if (ex_date is not None and ex_date.year == year):
             if (mon == 0 and ex_date.month > 0):
                 return False
             if (day == 0 and ex_date.day > 0):
                 return False
             del_exist = False
             if (mon > 0 and ex_date.month == 0):
                 del_exist = True
             if (del_exist):
                 for s in self.slots:
                     if (s.type_name == InstrumentReferent.ATTR_DATE):
                         self.slots.remove(s)
                         break
         tmp = io.StringIO()
         print(year, end="", file=tmp)
         if (mon > 0):
             print(".{0}".format("{:02d}".format(mon)),
                   end="",
                   file=tmp,
                   flush=True)
         if (day > 0):
             print(".{0}".format("{:02d}".format(day)),
                   end="",
                   file=tmp,
                   flush=True)
         self.add_slot(DecreeReferent.ATTR_DATE,
                       Utils.toStringStringIO(tmp), False, 0)
         return True
     if (isinstance(dt, str)):
         self.add_slot(InstrumentReferent.ATTR_DATE,
                       Utils.asObjectOrNull(dt, str), True, 0)
         return True
     return False
示例#26
0
 def __str__(self) -> str:
     res = io.StringIO()
     if (self.not0_):
         print("НЕ ", end="", file=res)
     for a in self.attrs:
         print("{0} ".format(str(a).lower()), end="", file=res, flush=True)
     if (self.quantity is not None):
         print("{0} ".format(self.quantity), end="", file=res, flush=True)
     elif (self.morph.number == MorphNumber.PLURAL
           and self.typ == SemObjectType.NOUN):
         print("* ".format(), end="", file=res, flush=True)
     print(Utils.ifNotNull(self.morph.normal_case, "?"), end="", file=res)
     return Utils.toStringStringIO(res)
示例#27
0
 def to_string_morph_finite(finit: 'MorphFinite') -> str:
     res = io.StringIO()
     if ((((finit) & (MorphFinite.FINITE))) != (MorphFinite.UNDEFINED)):
         print("finite|", end="", file=res)
     if ((((finit) & (MorphFinite.GERUND))) != (MorphFinite.UNDEFINED)):
         print("gerund|", end="", file=res)
     if ((((finit) & (MorphFinite.INFINITIVE))) != (MorphFinite.UNDEFINED)):
         print("инфинитив|", end="", file=res)
     if ((((finit) & (MorphFinite.PARTICIPLE))) != (MorphFinite.UNDEFINED)):
         print("participle|", end="", file=res)
     if (res.tell() > 0):
         Utils.setLengthStringIO(res, res.tell() - 1)
     return Utils.toStringStringIO(res)
示例#28
0
 def get_normal_case_text_without_adjective(self, adj_index : int) -> str:
     res = io.StringIO()
     i = 0
     while i < len(self.adjectives): 
         if (i != adj_index): 
             s = self.adjectives[i].get_normal_case_text((MorphClass.ADJECTIVE) | MorphClass.PRONOUN, MorphNumber.UNDEFINED, MorphGender.UNDEFINED, False)
             print("{0} ".format(Utils.ifNotNull(s, "?")), end="", file=res, flush=True)
         i += 1
     r = self.noun.get_normal_case_text((MorphClass.NOUN) | MorphClass.PRONOUN, MorphNumber.UNDEFINED, MorphGender.UNDEFINED, False)
     if (r is None): 
         r = self.noun.get_normal_case_text(None, MorphNumber.UNDEFINED, MorphGender.UNDEFINED, False)
     print(Utils.ifNotNull(r, str(self.noun)), end="", file=res)
     return Utils.toStringStringIO(res)
示例#29
0
 def attachisbn(t0: 'Token') -> 'UriItemToken':
     txt = io.StringIO()
     t1 = t0
     digs = 0
     t = t0
     first_pass3417 = True
     while True:
         if first_pass3417: first_pass3417 = False
         else: t = t.next0_
         if (not (t is not None)): break
         if (t.is_table_control_char):
             break
         if (t.is_newline_before and t != t0):
             if (t.previous is not None and t.previous.is_hiphen):
                 pass
             else:
                 break
         if (isinstance(t, NumberToken)):
             nt = Utils.asObjectOrNull(t, NumberToken)
             if (nt.typ != NumberSpellingType.DIGIT
                     or not nt.morph.class0_.is_undefined):
                 break
             d = nt.get_source_text()
             print(d, end="", file=txt)
             digs += len(d)
             t1 = t
             if (digs > 13):
                 break
             continue
         tt = Utils.asObjectOrNull(t, TextToken)
         if (tt is None):
             break
         s = tt.term
         if (s != "-" and s != "Х" and s != "X"):
             break
         if (s == "Х"):
             s = "X"
         print(s, end="", file=txt)
         t1 = t
         if (s != "-"):
             break
     i = 0
     dig = 0
     i = 0
     while i < txt.tell():
         if (str.isdigit(Utils.getCharAtStringIO(txt, i))):
             dig += 1
         i += 1
     if (dig < 7):
         return None
     return UriItemToken._new2706(t0, t1, Utils.toStringStringIO(txt))
示例#30
0
 def attachUrl(t0: 'Token') -> 'UriItemToken':
     srv = UriItemToken.attachDomainName(t0, True, False)
     if (srv is None):
         return None
     txt = Utils.newStringIO(srv.value)
     t1 = srv.end_token
     if (t1.next0_ is not None and t1.next0_.isChar(':')
             and (isinstance(t1.next0_.next0_, NumberToken))):
         t1 = t1.next0_.next0_
         print(":{0}".format((t1).value), end="", file=txt, flush=True)
     t = t1.next0_
     while t is not None:
         if (t.is_whitespace_before):
             break
         if (not t.isChar('/')):
             break
         if (t.is_whitespace_after):
             t1 = t
             break
         dat = UriItemToken.__AttachUriContent(t.next0_, ".-_+%", False)
         if (dat is None):
             t1 = t
             break
         t1 = dat.end_token
         t = t1
         print("/{0}".format(dat.value), end="", file=txt, flush=True)
         t = t.next0_
     if ((t1.next0_ is not None and t1.next0_.isChar('?')
          and not t1.next0_.is_whitespace_after)
             and not t1.is_whitespace_after):
         dat = UriItemToken.__AttachUriContent(t1.next0_.next0_, ".-_+%=&",
                                               False)
         if (dat is not None):
             t1 = dat.end_token
             print("?{0}".format(dat.value), end="", file=txt, flush=True)
     if ((t1.next0_ is not None and t1.next0_.isChar('#')
          and not t1.next0_.is_whitespace_after)
             and not t1.is_whitespace_after):
         dat = UriItemToken.__AttachUriContent(t1.next0_.next0_, ".-_+%",
                                               False)
         if (dat is not None):
             t1 = dat.end_token
             print("#{0}".format(dat.value), end="", file=txt, flush=True)
     i = 0
     while i < txt.tell():
         if (str.isalpha(Utils.getCharAtStringIO(txt, i))):
             break
         i += 1
     if (i >= txt.tell()):
         return None
     return UriItemToken._new2550(t0, t1, Utils.toStringStringIO(txt))