summaryrefslogtreecommitdiffstats
path: root/token.go
diff options
context:
space:
mode:
Diffstat (limited to 'token.go')
-rw-r--r--token.go58
1 files changed, 58 insertions, 0 deletions
diff --git a/token.go b/token.go
new file mode 100644
index 0000000..a6b08b9
--- /dev/null
+++ b/token.go
@@ -0,0 +1,58 @@
+package cnm
+
+// Token represents a parsed line in a CNM document.
+type Token interface {
+ Indent() int
+ Raw() string
+ Line() int
+}
+
+// TokenLine represents an arbitrary CNM line.
+type TokenLine struct {
+ Indentation int
+ RawLine string
+ LineNo int
+}
+
+// Indent returns the indentation of the parsed line.
+func (t *TokenLine) Indent() int { return t.Indentation }
+
+// Raw returns the original unparsed line.
+func (t *TokenLine) Raw() string { return t.RawLine }
+
+// Line returns the line number in the document, starting from 1.
+func (t *TokenLine) Line() int { return t.LineNo }
+
+// TokenEmptyLine represents an empty line.
+//
+// A line is empty as long as it contains up to as many tab characters as the
+// line's indentation and nothing else.
+type TokenEmptyLine struct {
+ TokenLine
+}
+
+// TokenBlock represents a block header line.
+type TokenBlock struct {
+ TokenLine
+ // Parent is the parent block
+ Parent *TokenBlock
+ // Name is the block name.
+ Name string
+ // Args are the block arguments, split by whitespace and then parsed as
+ // simple text.
+ Args []string
+}
+
+// TokenSimpleText represents a line of simple text.
+type TokenSimpleText struct {
+ TokenLine
+ // Text is the line contents parsed as simple text.
+ Text string
+}
+
+// TokenRawText represents a non-empty line with unparsed contents.
+type TokenRawText struct {
+ TokenLine
+ // Text is the raw contents of the line with the indentation removed.
+ Text string
+}