summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--handlers.go44
1 files changed, 32 insertions, 12 deletions
diff --git a/handlers.go b/handlers.go
index b4ce3f2..d89f27b 100644
--- a/handlers.go
+++ b/handlers.go
@@ -89,12 +89,21 @@ func parseGophermapDoc(body []byte, softWrap int) (string, []Link, error) {
return "", nil, err
}
+ links := 0
+ for _, item := range mapdoc {
+ if item.Type != gopher.InfoMessageType {
+ links += 1
+ }
+ }
+ width := numberWidth(links - 1)
+ infopad := string(bytes.Repeat([]byte{' '}, width + 3))
+
i := 0
for _, item := range mapdoc {
switch item.Type {
case gopher.InfoMessageType:
for _, line := range fold(item.Display, softWrap) {
- if _, err := b.WriteString(" " + line + "\n"); err != nil {
+ if _, err := b.WriteString(infopad + line + "\n"); err != nil {
return "", nil, err
}
}
@@ -103,7 +112,7 @@ func parseGophermapDoc(body []byte, softWrap int) (string, []Link, error) {
Text: item.Display,
Target: fmtGopherURL(item.Type, item.Selector, item.Hostname, item.Port),
})
- if _, err := b.WriteString(fmt.Sprintf("[%d]%s %s\n", i, linkSpaces(i), item.Display)); err != nil {
+ if _, err := b.WriteString(fmt.Sprintf("[%d]%s %s\n", i, padding(i, width), item.Display)); err != nil {
return "", nil, err
}
i += 1
@@ -121,6 +130,15 @@ func parseGemtextDoc(body []byte, softWrap int) (string, []Link, error) {
return "", nil, err
}
+ links := 0
+ for _, item := range gemdoc {
+ if item.Type() == gemtext.LineTypeLink {
+ links += 1
+ }
+ }
+ width := numberWidth(links - 1)
+ textpad := string(bytes.Repeat([]byte{' '}, width + 3))
+
i := 0
for _, item := range gemdoc {
isPrompt := false
@@ -143,13 +161,13 @@ func parseGemtextDoc(body []byte, softWrap int) (string, []Link, error) {
if len(label) == 0 {
label = ll.URL()
}
- if _, err := b.WriteString(fmt.Sprintf("[%d]%s %s\n", i, linkSpaces(i), label)); err != nil {
+ if _, err := b.WriteString(fmt.Sprintf("[%d]%s %s\n", i, padding(i, width), label)); err != nil {
return "", nil, err
}
i += 1
default:
for _, line := range fold(item.String(), softWrap) {
- if _, err := b.WriteString(" " + line + "\n"); err != nil {
+ if _, err := b.WriteString(textpad + line + "\n"); err != nil {
return "", nil, err
}
}
@@ -207,13 +225,15 @@ func fmtGopherURL(itemtype sliderule.Status, selector, hostname, port string) *u
}
}
-func linkSpaces(i int) string {
- switch {
- case i < 10:
- return " "
- case i < 100:
- return " "
- default:
- return ""
+func numberWidth(i int) int {
+ n := 1
+ for i > 9 {
+ i /= 10
+ n += 1
}
+ return n
+}
+
+func padding(num int, width int) string {
+ return string(bytes.Repeat([]byte{' '}, width - numberWidth(num)))
}