pub struct TokenStream { /* private fields */ }Expand description
Parsed token stream.
Implementations§
Source§impl TokenStream
impl TokenStream
Sourcepub const fn line_count(&self) -> u32
pub const fn line_count(&self) -> u32
Returns the line count declared in the stream header.
§Returns
The number of source lines parse read from the leading u32 count,
which equals the number of Token::LineEnd tokens in the stream.
Examples found in repository?
218fn print_scripts(scripts: &[Script]) {
219 section(&format!("scripts ({})", scripts.len()));
220 for script in scripts {
221 println!(
222 " record #{} {}",
223 script.record_index(),
224 escape_inline(script.name())
225 );
226 subfield("kind", format!("{:?}", script.kind()));
227 subfield("bytes", script.bytes().len().to_string());
228 subfield(
229 "timestamps",
230 format!(
231 "created={} last_write={}",
232 script.creation_time(),
233 script.last_write_time()
234 ),
235 );
236 subfield(
237 "text encoding",
238 script.text().map_or_else(
239 || "none".to_string(),
240 |text| format!("{:?}", text.encoding()),
241 ),
242 );
243 subfield("decode error", opt_debug(script.decode_error()));
244 match script.token_stream() {
245 None => subfield("token stream", "none".to_string()),
246 Some(tokens) => subfield(
247 "token stream",
248 format!(
249 "line_count={} tokens={}",
250 tokens.line_count(),
251 tokens.tokens().len()
252 ),
253 ),
254 }
255 match script.source_text() {
256 None => subfield("source", "<unavailable>".to_string()),
257 Some(source) => {
258 println!(" source ({} chars):", source.chars().count());
259 print_block(source);
260 }
261 }
262 }
263}Sourcepub fn tokens(&self) -> &[Token]
pub fn tokens(&self) -> &[Token]
Returns the parsed tokens in stream order.
§Returns
A slice of every Token read from the input, including the
Token::LineEnd markers that terminate each source line.
Examples found in repository?
218fn print_scripts(scripts: &[Script]) {
219 section(&format!("scripts ({})", scripts.len()));
220 for script in scripts {
221 println!(
222 " record #{} {}",
223 script.record_index(),
224 escape_inline(script.name())
225 );
226 subfield("kind", format!("{:?}", script.kind()));
227 subfield("bytes", script.bytes().len().to_string());
228 subfield(
229 "timestamps",
230 format!(
231 "created={} last_write={}",
232 script.creation_time(),
233 script.last_write_time()
234 ),
235 );
236 subfield(
237 "text encoding",
238 script.text().map_or_else(
239 || "none".to_string(),
240 |text| format!("{:?}", text.encoding()),
241 ),
242 );
243 subfield("decode error", opt_debug(script.decode_error()));
244 match script.token_stream() {
245 None => subfield("token stream", "none".to_string()),
246 Some(tokens) => subfield(
247 "token stream",
248 format!(
249 "line_count={} tokens={}",
250 tokens.line_count(),
251 tokens.tokens().len()
252 ),
253 ),
254 }
255 match script.source_text() {
256 None => subfield("source", "<unavailable>".to_string()),
257 Some(source) => {
258 println!(" source ({} chars):", source.chars().count());
259 print_block(source);
260 }
261 }
262 }
263}Sourcepub fn render_source(&self) -> String
pub fn render_source(&self) -> String
Renders source-like AutoIt text from the token stream.
Accumulates tokens per line until a Token::LineEnd is reached, then
emits the line prefixed with tab indentation and terminated by \r\n.
Indentation is tracked across lines: line_indent computes the indent
to apply to the current line (dedenting block-closing keywords) and
next_indent computes the level for the following line (indenting
after block-opening keywords). Each non-LineEnd token contributes its
display_text, joined by render_line.
§Returns
The reconstructed script text with CRLF line endings and tab indentation.
Trait Implementations§
Source§impl Clone for TokenStream
impl Clone for TokenStream
Source§fn clone(&self) -> TokenStream
fn clone(&self) -> TokenStream
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more