///| A source-shaped in-process port of Monaco's `ContiguousMultilineTokens`.
///
/// Source: `vscode/src/vs/editor/common/tokens/contiguousMultilineTokens.ts`
/// at checked-in oracle, consumed
/// closure lines 17 and 35-80. Serialization and incremental editing are not
/// part of the readonly Viewer boundary.
///|
/// Encoded tokens for one contiguous inclusive interval of one-based lines.
/// Each inner array contains `[endOffset, metadata]` pairs for one line.
/// Source: `contiguousMultilineTokens.ts:17,35-46`.
struct ContiguousMultilineTokens {
start_line_number_ : Int32
tokens : Array[Array[UInt32]]
}
///|
/// Retains the caller's line order and encoded token arrays.
/// Source: `contiguousMultilineTokens.ts:62-65`.
fn ContiguousMultilineTokens::ContiguousMultilineTokens(
start_line_number : Int32,
tokens : Array[Array[UInt32]],
) -> ContiguousMultilineTokens {
{ start_line_number_: start_line_number, tokens, }
}
///|
/// Inclusive first line of this batch.
/// Source: `contiguousMultilineTokens.ts:51-53`.
fn ContiguousMultilineTokens::start_line_number(
self : ContiguousMultilineTokens,
) -> Int32 {
self.start_line_number_
}
///|
/// Inclusive final line of this batch.
/// Source: `contiguousMultilineTokens.ts:58-60`.
fn ContiguousMultilineTokens::end_line_number(
self : ContiguousMultilineTokens,
) -> Int32 {
self.start_line_number_ + self.tokens.length() - 1
}
///|
/// Half-open line range covered by this batch.
/// Source: `contiguousMultilineTokens.ts:67-69`.
#warnings("-unused_value")
fn ContiguousMultilineTokens::get_line_range(
self : ContiguousMultilineTokens,
) -> @base_common.LineRange {
let range : @base_common.LineRange = {
start_line_number: self.start_line_number_,
end_line_number_exclusive: self.start_line_number_ + self.tokens.length(),
}
range
}
///|
/// Returns the encoded words for an included one-based line.
/// Source: `contiguousMultilineTokens.ts:74-76`.
fn ContiguousMultilineTokens::get_line_tokens(
self : ContiguousMultilineTokens,
line_number : Int32,
) -> Array[UInt32] {
self.tokens[line_number - self.start_line_number_]
}
///|
/// Extends the batch by exactly one final line.
/// Source: `contiguousMultilineTokens.ts:78-80`.
fn ContiguousMultilineTokens::append_line_tokens(
self : ContiguousMultilineTokens,
line_tokens : Array[UInt32],
) -> Unit {
self.tokens.push(line_tokens)
}