///|
fn clean_gcode_line(raw : String) -> String {
let mut output = ""
let mut in_parentheses = false
for character in raw {
let code = character.to_int()
if code == 40 {
in_parentheses = true
} else if code == 41 {
in_parentheses = false
} else if code == 59 && !in_parentheses {
break
} else if !in_parentheses {
output = output + character.to_string()
}
}
output.trim().to_owned()
}
///|
fn tokenize_gcode_line(line : String) -> Array[String] {
let words : Array[String] = []
let mut current = ""
for character in line {
let code = character.to_int()
let is_letter = (code >= 65 && code <= 90) || (code >= 97 && code <= 122)
if is_letter {
if current != "" {
words.push(current)
}
current = character.to_string()
} else if code == 32 || code == 9 || code == 13 {
if current != "" {
words.push(current)
current = ""
}
} else {
current = current + character.to_string()
}
}
if current != "" {
words.push(current)
}
words
}