diff options
author | tjpcc <tjp@ctrl-c.club> | 2023-01-17 16:41:04 -0700 |
---|---|---|
committer | tjpcc <tjp@ctrl-c.club> | 2023-01-17 16:41:04 -0700 |
commit | 6586db782ea6dcb5f2eb191a690ec7e7df51161f (patch) | |
tree | 36158a53a6d8aad9f5a873c6c43d598ce5647b97 /gemtext/parse_line.go | |
parent | 2ef530daa47b301a40c1ee93cd43b8f36fc68c0b (diff) |
Updates
* update README
* move "gemtext" to within "gemini"
Diffstat (limited to 'gemtext/parse_line.go')
-rw-r--r-- | gemtext/parse_line.go | 107 |
1 files changed, 0 insertions, 107 deletions
diff --git a/gemtext/parse_line.go b/gemtext/parse_line.go deleted file mode 100644 index 39187a8..0000000 --- a/gemtext/parse_line.go +++ /dev/null @@ -1,107 +0,0 @@ -package gemtext - -import "bytes" - -// ParseLine parses a single line (including the trailing \n) into a gemtext.Line. -func ParseLine(line []byte) Line { - if len(line) == 0 { - return nil - } - - switch line[0] { - case '=': - if len(line) == 1 || line[1] != '>' { - break - } - return parseLinkLine(line) - case '`': - if len(line) < 3 || line[1] != '`' || line[2] != '`' { - break - } - return parsePreformatToggleLine(line) - case '#': - level := 1 - if len(line) > 1 && line[1] == '#' { - level += 1 - if len(line) > 2 && line[2] == '#' { - level += 1 - } - } - return parseHeadingLine(level, line) - case '*': - if len(line) == 1 || line[1] != ' ' { - break - } - return parseListItemLine(line) - case '>': - return parseQuoteLine(line) - } - - return TextLine{raw: line} -} - -func parseLinkLine(raw []byte) LinkLine { - line := LinkLine{raw: raw} - - // move past =>[<whitespace>] - raw = bytes.TrimLeft(raw[2:], " \t") - - // find the next space or tab - spIdx := bytes.IndexByte(raw, ' ') - tbIdx := bytes.IndexByte(raw, '\t') - idx := spIdx - if idx == -1 { - idx = tbIdx - } - if tbIdx >= 0 && tbIdx < idx { - idx = tbIdx - } - - if idx < 0 { - line.url = bytes.TrimRight(raw, "\r\n") - return line - } - - line.url = raw[:idx] - raw = raw[idx+1:] - - label := bytes.TrimRight(bytes.TrimLeft(raw, " \t"), "\r\n") - if len(label) > 0 { - line.label = label - } - - return line -} - -func parsePreformatToggleLine(raw []byte) PreformatToggleLine { - line := PreformatToggleLine{raw: raw} - - raw = bytes.TrimRight(raw[3:], "\r\n") - if len(raw) > 0 { - line.altText = raw - } - - return line -} - -func parseHeadingLine(level int, raw []byte) HeadingLine { - return HeadingLine{ - raw: raw, - lineType: LineTypeHeading1 - 1 + LineType(level), - body: bytes.TrimRight(bytes.TrimLeft(raw[level:], " \t"), "\r\n"), - } -} - -func parseListItemLine(raw []byte) ListItemLine { - return ListItemLine{ - raw: raw, - body: bytes.TrimRight(raw[2:], "\r\n"), - } -} - -func parseQuoteLine(raw []byte) QuoteLine { - return QuoteLine{ - raw: raw, - body: bytes.TrimRight(raw[1:], "\r\n"), - } -} |