the first subtoken of multitoken has position equal to 0 @note only word tokens can have suffixes
| 125 | //! the first subtoken of multitoken has position equal to 0 |
| 126 | //! @note only word tokens can have suffixes |
| 127 | void GetMultitoken(TWideToken& tok) const { |
| 128 | Y_ASSERT(!Tokens.empty()); |
| 129 | tok.SubTokens = Tokens; |
| 130 | TTokenStructure& subtokens = tok.SubTokens; |
| 131 | const TCharSpan& first = subtokens[0]; |
| 132 | TCharSpan& last = subtokens.back(); |
| 133 | tok.Token = Tok.Token + first.Pos; |
| 134 | if (last.Type == TOKEN_WORD) { |
| 135 | tok.Leng = last.EndPos() + last.SuffixLen - first.Pos; |
| 136 | if (!Finished() && Subtokens[First].PrefixLen) { |
| 137 | const ui16 suffixLen = GetAdditionalSuffixLen(); |
| 138 | tok.Leng += suffixLen; |
| 139 | last.SuffixLen += suffixLen; |
| 140 | } |
| 141 | } else { |
| 142 | tok.Leng = last.EndPos() - first.Pos; |
| 143 | last.SuffixLen = 0; |
| 144 | if (NlpType == NLP_INTEGER && !Finished() && Subtokens[First].PrefixLen) { |
| 145 | const ui16 suffixLen = GetIntegerSuffixLen(); |
| 146 | tok.Leng += suffixLen; |
| 147 | last.SuffixLen = suffixLen; |
| 148 | } |
| 149 | } |
| 150 | subtokens[0].PrefixLen = 0; |
| 151 | const size_t diff = first.Pos; |
| 152 | for (auto& subtoken : subtokens) |
| 153 | subtoken.Pos -= diff; |
| 154 | } |
| 155 | ui16 GetAdditionalSuffixLen() const { |
| 156 | const TCharSpan& origtok = Subtokens[First - 1]; |
| 157 | Y_ASSERT(origtok.Type == TOKEN_WORD && !Finished() && Subtokens[First].PrefixLen); |
no test coverage detected