///|
priv enum Token {
  Text(String, SourceSpan)
  Interpolation(String, SourceSpan)
  BlockIf(String, SourceSpan)
  BlockElse(SourceSpan)
  BlockEndIf(SourceSpan)
  BlockFor(String, String, SourceSpan)
  BlockEndFor(SourceSpan)
  BlockInclude(String, SourceSpan)
}

///|
fn token_span(token : Token) -> SourceSpan noraise {
  match token {
    Text(_, span) => span
    Interpolation(_, span) => span
    BlockIf(_, span) => span
    BlockElse(span) => span
    BlockEndIf(span) => span
    BlockFor(_, _, span) => span
    BlockEndFor(span) => span
    BlockInclude(_, span) => span
  }
}