diff options
| author | Feuerfuchs <git@feuerfuchs.dev> | 2020-05-18 18:02:20 +0200 |
|---|---|---|
| committer | Feuerfuchs <git@feuerfuchs.dev> | 2020-05-18 18:02:20 +0200 |
| commit | e58fabd89f9708aaeb10e52f731759712034833f (patch) | |
| tree | b845d41df1e91f01e4d66fb0a40fa9dc76c24dcd /pkg/libgemini | |
| parent | WIP: Refactoring (diff) | |
| download | gopherproxy-e58fabd89f9708aaeb10e52f731759712034833f.tar.gz gopherproxy-e58fabd89f9708aaeb10e52f731759712034833f.tar.bz2 gopherproxy-e58fabd89f9708aaeb10e52f731759712034833f.zip | |
WIP: Refactoring
Diffstat (limited to 'pkg/libgemini')
| -rw-r--r-- | pkg/libgemini/libgemini.go | 64 |
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 | ||
| 85 | func (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 | |||
| 85 | type GeminiDocSection struct { | 106 | type 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 { |
