classifiedstring

Types

ClassifiedString = object
  data*: string                ## String data
  indices*: seq[int]           ## Position indices
  

位置を保持する文字列。 半角文字はその文字自体と、その文字が行文字列におけるどのような位置を持つ 文字列であると、ここでは考える。 日本語のような全角文字列は、2つの位置を持つもの、としてここでは扱う。

例:

  • a == data: a, indices: 0
  • あ == data: あ, indices: 0, 1

Procs

proc toClassifiedString(s: string): seq[ClassifiedString] {...}{.raises: [], tags: [].}

Converts to ClassifiedString.

文字列をClassifiedStringのシーケンスに変換する。

Examples:

doAssert "abc".toClassifiedString ==
    @[ClassifiedString(data: "a", indices: @[0]),
      ClassifiedString(data: "b", indices: @[1]),
      ClassifiedString(data: "c", indices: @[2])]
doAssert "あc".toClassifiedString ==
    @[ClassifiedString(data: "あ", indices: @[0, 1]),
      ClassifiedString(data: "c", indices: @[2])]
proc pad(dst, src: string; x = 0): array[2, string] {...}{.raises: [], tags: [].}

srcをxの値の分だけ左に半角スペースを追加する。

FIXME: dstが不要

Examples:

discard
proc split3(self: openArray[ClassifiedString]; minIndex, maxIndex: int): array[3,
    seq[ClassifiedString]] {...}{.raises: [], tags: [].}
ClassifiedStringを`minIndex`未満、`minIndex`以上`maxIndex`以下、それ以外の3つの文字列を含む配列に変換する。

Examples:

let data = @[ClassifiedString(indices: @[0, 1]), ClassifiedString(indices: @[2, 3]),
          ClassifiedString(indices: @[4, 5])]
doAssert data.split3(2, 3) ==
    [@[ClassifiedString(indices: @[0, 1])],
     @[ClassifiedString(indices: @[2, 3])], @[ClassifiedString(indices: @[4, 5])]]
doAssert data.split3(2, 4) ==
    [@[ClassifiedString(indices: @[0, 1])], @[ClassifiedString(indices: @[2, 3]),
    ClassifiedString(indices: @[4, 5])], @[]]
doAssert data.split3(1, 3) ==
    [@[], @[ClassifiedString(indices: @[0, 1]), ClassifiedString(indices: @[2, 3])],
     @[ClassifiedString(indices: @[4, 5])]]
doAssert data.split3(0, 4) ==
    [@[], @[ClassifiedString(indices: @[0, 1]), ClassifiedString(indices: @[2, 3]),
           ClassifiedString(indices: @[4, 5])], @[]]
doAssert data.split3(0, 5) ==
    [@[], @[ClassifiedString(indices: @[0, 1]), ClassifiedString(indices: @[2, 3]),
           ClassifiedString(indices: @[4, 5])], @[]]
proc first(self: openArray[ClassifiedString]): int {...}{.raises: [], tags: [].}

Returns a first index of ClassifiedString.

ClassifiedStringが保持する最初のインデックスを返す。

Examples:

doAssert [ClassifiedString(indices: @[1, 2]), ClassifiedString(indices: @[3, 4])].first ==
    1
doAssert [ClassifiedString(indices: @[3, 2]), ClassifiedString(indices: @[3, 4])].first ==
    3
proc last(self: openArray[ClassifiedString]): int {...}{.raises: [], tags: [].}

Returns a last index of ClassifiedString.

ClassifiedStringの最後のインデックスを返す。

Examples:

doAssert [ClassifiedString(indices: @[1, 2]), ClassifiedString(indices: @[3, 4])].last ==
    4
doAssert [ClassifiedString(indices: @[3, 2]), ClassifiedString(indices: @[3, 1])].last ==
    1