def process(self, kit: 'AnalysisKit') -> None: ad = kit.getAnalyzerData(self) models = TerminCollection() objs_by_model = dict() obj_by_names = TerminCollection() t = kit.first_token first_pass3158 = True while True: if first_pass3158: first_pass3158 = False else: t = t.next0_ if (not (t is not None)): break its = WeaponItemToken.tryParseList(t, 10) if (its is None): continue rts = self.__tryAttach(its, False) if (rts is not None): for rt in rts: rt.referent = ad.registerReferent(rt.referent) kit.embedToken(rt) t = (rt) for s in rt.referent.slots: if (s.type_name == WeaponReferent.ATTR_MODEL): mod = str(s.value) for k in range(2): if (not str.isdigit(mod[0])): li = [] wrapli2638 = RefOutArgWrapper(None) inoutres2639 = Utils.tryGetValue( objs_by_model, mod, wrapli2638) li = wrapli2638.value if (not inoutres2639): li = list() objs_by_model[mod] = li if (not rt.referent in li): li.append(rt.referent) models.addStr(mod, li, None, False) if (k > 0): break brand = rt.referent.getStringValue( WeaponReferent.ATTR_BRAND) if (brand is None): break mod = "{0} {1}".format(brand, mod) elif (s.type_name == WeaponReferent.ATTR_NAME): obj_by_names.add( Termin._new117(str(s.value), rt.referent)) if (len(objs_by_model) == 0 and len(obj_by_names.termins) == 0): return t = kit.first_token first_pass3159 = True while True: if first_pass3159: first_pass3159 = False else: t = t.next0_ if (not (t is not None)): break br = BracketHelper.tryParse(t, BracketParseAttr.NO, 10) if (br is not None): toks = obj_by_names.tryParse(t.next0_, TerminParseAttr.NO) if (toks is not None and toks.end_token.next0_ == br.end_token): rt0 = ReferentToken( Utils.asObjectOrNull(toks.termin.tag, Referent), br.begin_token, br.end_token) kit.embedToken(rt0) t = (rt0) continue if (not ((isinstance(t, TextToken)))): continue if (not t.chars.is_letter): continue tok = models.tryParse(t, TerminParseAttr.NO) if (tok is None): if (not t.chars.is_all_lower): tok = obj_by_names.tryParse(t, TerminParseAttr.NO) if (tok is None): continue if (not tok.is_whitespace_after): if (tok.end_token.next0_ is None or not tok.end_token.next0_.isCharOf(",.)")): if (not BracketHelper.isBracket(tok.end_token.next0_, False)): continue tr = None li = Utils.asObjectOrNull(tok.termin.tag, list) if (li is not None and len(li) == 1): tr = li[0] else: tr = (Utils.asObjectOrNull(tok.termin.tag, Referent)) if (tr is not None): tit = WeaponItemToken.tryParse(tok.begin_token.previous, None, False, True) if (tit is not None and tit.typ == WeaponItemToken.Typs.BRAND): tr.addSlot(WeaponReferent.ATTR_BRAND, tit.value, False, 0) tok.begin_token = tit.begin_token rt0 = ReferentToken(tr, tok.begin_token, tok.end_token) kit.embedToken(rt0) t = (rt0) continue
def tryAttachList(t: 'Token') -> typing.List['BlockTitleToken']: content = None intro = None lits = None tt = t first_pass2782 = True while True: if first_pass2782: first_pass2782 = False else: tt = tt.next0_ if (not (tt is not None)): break if (tt.is_newline_before): btt = BlockTitleToken.tryAttach(tt, False, None) if (btt is None): continue if (btt.typ == BlkTyps.INDEX): content = btt break if (btt.typ == BlkTyps.INTRO): tt2 = btt.end_token.next0_ for k in range(5): li = BlockLine.create(tt2, None) if (li is None): break if (li.has_content_item_tail or li.typ == BlkTyps.INDEXITEM): content = btt break if (li.has_verb): break if (li.typ != BlkTyps.UNDEFINED): if ((li.begin_char - btt.end_char) < 400): content = btt break tt2 = li.end_token.next0_ if (content is None): intro = btt break if (btt.typ == BlkTyps.LITERATURE): if (lits is None): lits = list() lits.append(btt) if (content is None and intro is None and ((lits is None or len(lits) != 1))): return None res = list() chapter_names = TerminCollection() t0 = None if (content is not None): res.append(content) cou = 0 err = 0 tt = content.end_token.next0_ first_pass2783 = True while True: if first_pass2783: first_pass2783 = False else: tt = tt.next0_ if (not (tt is not None)): break if (not tt.is_newline_before): continue li = BlockLine.create(tt, None) if (li is None): break if (li.has_verb): if (li.end_token.isChar('.')): break if (li.length_char > 100): break btt = BlockTitleToken.tryAttach(tt, True, None) if (btt is None): continue err = 0 if (btt.typ == BlkTyps.INTRO): if (content.typ == BlkTyps.INTRO or cou > 2): break cou += 1 content.end_token = btt.end_token tt = content.end_token if (btt.value is not None): chapter_names.addStr(btt.value, None, None, False) content.typ = BlkTyps.INDEX t0 = content.end_token.next0_ elif (intro is not None): t0 = intro.begin_token elif (lits is not None): t0 = t else: return None first = True tt = t0 first_pass2784 = True while True: if first_pass2784: first_pass2784 = False else: tt = tt.next0_ if (not (tt is not None)): break if (not tt.is_newline_before): continue if (tt.isValue("СЛАБОЕ", None)): pass btt = BlockTitleToken.tryAttach(tt, False, chapter_names) if (btt is None): continue if (len(res) == 104): pass tt = btt.end_token if (content is not None and btt.typ == BlkTyps.INDEX): continue if (len(res) > 0 and res[len(res) - 1].typ == BlkTyps.LITERATURE): if (btt.typ != BlkTyps.APPENDIX and btt.typ != BlkTyps.MISC and btt.typ != BlkTyps.LITERATURE): if (btt.typ == BlkTyps.CHAPTER and (res[len(res) - 1].end_char < (math.floor( (len(tt.kit.sofa.text) * 3) / 4)))): pass else: continue if (first): if ((tt.begin_char - t0.begin_char) > 300): btt0 = BlockTitleToken( t0, (t0 if t0.previous is None else t0.previous)) btt0.typ = BlkTyps.CHAPTER btt0.value = "Похоже на начало" res.append(btt0) res.append(btt) tt = btt.end_token first = False i = 0 while i < (len(res) - 1): if (res[i].typ == BlkTyps.LITERATURE and res[i + 1].typ == res[i].typ): del res[i + 1] i -= 1 i += 1 return res