aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/libgemini/libgemini.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/libgemini/libgemini.go')
-rw-r--r--pkg/libgemini/libgemini.go64
1 files changed, 36 insertions, 28 deletions
diff --git a/pkg/libgemini/libgemini.go b/pkg/libgemini/libgemini.go
index 48a8ed0..5e37490 100644
--- a/pkg/libgemini/libgemini.go
+++ b/pkg/libgemini/libgemini.go
@@ -53,10 +53,10 @@ var (
53 HeaderPattern = regexp.MustCompile("^(\\d\\d)[ \\t]+(.*)$") 53 HeaderPattern = regexp.MustCompile("^(\\d\\d)[ \\t]+(.*)$")
54 LinkPattern = regexp.MustCompile("^=>[ \\t]*([^ \\t]+)(?:[ \\t]+(.*))?$") 54 LinkPattern = regexp.MustCompile("^=>[ \\t]*([^ \\t]+)(?:[ \\t]+(.*))?$")
55 ReflowModePattern = regexp.MustCompile("^```(.*)$") 55 ReflowModePattern = regexp.MustCompile("^```(.*)$")
56 Heading1Pattern = regexp.MustCompile("^#(.*)$") 56 Heading1Pattern = regexp.MustCompile("^# *(.*)$")
57 Heading2Pattern = regexp.MustCompile("^##(.*)$") 57 Heading2Pattern = regexp.MustCompile("^## *(.*)$")
58 Heading3Pattern = regexp.MustCompile("^###(.*)$") 58 Heading3Pattern = regexp.MustCompile("^### *(.*)$")
59 ListItemPattern = regexp.MustCompile("^\\*(.*)$") 59 ListItemPattern = regexp.MustCompile("^\\* *(.*)$")
60 TermEscapeSGRPattern = regexp.MustCompile("\\[\\d+(;\\d+)*m") 60 TermEscapeSGRPattern = regexp.MustCompile("\\[\\d+(;\\d+)*m")
61) 61)
62 62
@@ -82,6 +82,27 @@ const (
82 LIST = GeminiDocSectionType(6) 82 LIST = GeminiDocSectionType(6)
83) 83)
84 84
85func (it GeminiDocSectionType) String() string {
86 switch it {
87 case RAW_TEXT:
88 return "RAW_TEXT"
89 case REFLOW_TEXT:
90 return "REFLOW_TEXT"
91 case LINK:
92 return "LINK"
93 case HEADING_1:
94 return "HEADING_1"
95 case HEADING_2:
96 return "HEADING_2"
97 case HEADING_3:
98 return "HEADING_3"
99 case LIST:
100 return "LIST"
101 default:
102 return "???"
103 }
104}
105
85type GeminiDocSection struct { 106type GeminiDocSection struct {
86 Type GeminiDocSectionType 107 Type GeminiDocSectionType
87 Text string 108 Text string
@@ -191,20 +212,13 @@ func ParseGeminiDocument(body *bytes.Buffer) (sections []GeminiDocSection) {
191 212
192 if !reflow { 213 if !reflow {
193 if !ignoreSection { 214 if !ignoreSection {
194 if section.Type != RAW_TEXT { 215 sections = append(sections, section)
195 sections = append(sections, section)
196 section = GeminiDocSection{
197 Type: RAW_TEXT,
198 }
199 }
200 } else {
201 ignoreSection = false
202 section = GeminiDocSection{
203 Type: RAW_TEXT,
204 }
205 } 216 }
206 217
207 section.Text = section.Text + "\n" + line 218 section = GeminiDocSection{
219 Type: RAW_TEXT,
220 Text: line,
221 }
208 222
209 continue 223 continue
210 } 224 }
@@ -297,20 +311,14 @@ func ParseGeminiDocument(body *bytes.Buffer) (sections []GeminiDocSection) {
297 } 311 }
298 312
299 if !ignoreSection { 313 if !ignoreSection {
300 if section.Type != REFLOW_TEXT { 314 sections = append(sections, section)
301 sections = append(sections, section)
302 section = GeminiDocSection{
303 Type: REFLOW_TEXT,
304 }
305 }
306 } else {
307 ignoreSection = false
308 section = GeminiDocSection{
309 Type: REFLOW_TEXT,
310 }
311 } 315 }
312 316
313 section.Text = section.Text + "\n" + line 317 ignoreSection = false
318 section = GeminiDocSection{
319 Type: REFLOW_TEXT,
320 Text: line,
321 }
314 } 322 }
315 323
316 if !ignoreSection { 324 if !ignoreSection {