diff --git a/go.mod b/go.mod index 7e4d01e..1fde72b 100644 --- a/go.mod +++ b/go.mod @@ -5,12 +5,13 @@ go 1.14 require ( git.sr.ht/~adnano/go-gemini v0.1.13 github.com/adrg/xdg v0.2.2 + github.com/bouncepaw/mycomarkup v0.0.0-20210511092446-956f169b1499 github.com/go-ini/ini v1.62.0 github.com/gorilla/feeds v1.1.1 github.com/kr/pretty v0.2.1 // indirect github.com/mitchellh/go-homedir v1.1.0 github.com/smartystreets/goconvey v1.6.4 // indirect github.com/valyala/quicktemplate v1.6.3 - golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 + golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 gopkg.in/ini.v1 v1.62.0 // indirect ) diff --git a/go.sum b/go.sum index 16305f9..785a95f 100644 --- a/go.sum +++ b/go.sum @@ -3,6 +3,10 @@ git.sr.ht/~adnano/go-gemini v0.1.13/go.mod h1:If1VxEWcZDrRt5FeAFnGTcM2Ud1E3BXs3V github.com/adrg/xdg v0.2.2 h1:A7ZHKRz5KGOLJX/bg7IPzStryhvCzAE1wX+KWawPiAo= github.com/adrg/xdg v0.2.2/go.mod h1:7I2hH/IT30IsupOpKZ5ue7/qNi3CoKzD6tL3HwpaRMQ= github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/bouncepaw/mycomarkup v0.0.0-20210502065108-4ddae294864d h1:H20wX93QMeQhQbXYdhofRrsFwn8jJ41zmJk5jr/1VOA= +github.com/bouncepaw/mycomarkup v0.0.0-20210502065108-4ddae294864d/go.mod h1:fx0FBKaCaV1fofgCQOu2lNIVB/5EoDg/83i8BgBdgpc= +github.com/bouncepaw/mycomarkup v0.0.0-20210511092446-956f169b1499 h1:RLKVj992QuayqjpIJ7M2csRjfhAnu9EO2r1Bm4D/WlU= +github.com/bouncepaw/mycomarkup v0.0.0-20210511092446-956f169b1499/go.mod h1:fx0FBKaCaV1fofgCQOu2lNIVB/5EoDg/83i8BgBdgpc= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-ini/ini v1.62.0 h1:7VJT/ZXjzqSrvtraFp4ONq80hTcRQth1c9ZnQ3uNQvU= @@ -37,15 +41,36 @@ github.com/valyala/fasthttp v1.16.0/go.mod h1:YOKImeEosDdBPnxc0gy7INqi3m1zK6A+xl github.com/valyala/quicktemplate v1.6.3 h1:O7EuMwuH7Q94U2CXD6sOX8AYHqQqWtmIk690IhmpkKA= github.com/valyala/quicktemplate v1.6.3/go.mod h1:fwPzK2fHuYEODzJ9pkw0ipCPNHZ2tD5KW4lOuSdPKzY= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.1-0.20210319172145-bda8f5cee399/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= diff --git a/link/link.go b/link/link.go deleted file mode 100644 index 4e3103f..0000000 --- a/link/link.go +++ /dev/null @@ -1,138 +0,0 @@ -package link - -import ( - "fmt" - "path" - "strings" - - "github.com/bouncepaw/mycorrhiza/util" -) - -// LinkType tells what type the given link is. -type LinkType int - -const ( - LinkInvalid LinkType = iota - // LinkLocalRoot is a link like "/list", "/user-list", etc. - LinkLocalRoot - // LinkLocalHypha is a link like "test", "../test", etc. - LinkLocalHypha - // LinkExternal is an external link with specified protocol. - LinkExternal - // LinkInterwiki is currently unused. - LinkInterwiki -) - -// Link is an abstraction for universal representation of links, be they links in mycomarkup links or whatever. -type Link struct { - // Address is what the link points to. - Address string - // Display is what gets nested into the tag. - Display string - Kind LinkType - DestinationUnknown bool - - // #... - Anchor string - Protocol string - // How the link address looked originally in source text. - SrcAddress string - // How the link display text looked originally in source text. May be empty. - SrcDisplay string - // RelativeTo is hypha name to which the link is relative to. - RelativeTo string -} - -// DoubtExistence sets DestinationUnknown to true if the link is local hypha link. -func (l *Link) DoubtExistence() { - if l.Kind == LinkLocalHypha { - l.DestinationUnknown = true - } -} - -// Classes returns CSS class string for given link. -func (l *Link) Classes() string { - if l.Kind == LinkExternal { - return fmt.Sprintf("wikilink wikilink_external wikilink_%s", l.Protocol) - } - classes := "wikilink wikilink_internal" - if l.DestinationUnknown { - classes += " wikilink_new" - } - return classes -} - -// Href returns content for the href attrubite for hyperlink. You should always use it. -func (l *Link) Href() string { - switch l.Kind { - case LinkExternal, LinkLocalRoot: - return l.Address + l.Anchor - default: - return "/hypha/" + l.Address + l.Anchor - } -} - -// ImgSrc returns content for src attribute of img tag. Used with `img{}`. -func (l *Link) ImgSrc() string { - switch l.Kind { - case LinkExternal, LinkLocalRoot: - return l.Address - default: - return "/binary/" + l.Address - } -} - -// From returns a Link object given these `address` and `display` on relative to given `hyphaName`. -func From(address, display, hyphaName string) *Link { - address = strings.TrimSpace(address) - link := Link{ - SrcAddress: address, - SrcDisplay: display, - RelativeTo: hyphaName, - } - - if display == "" { - link.Display = address - } else { - link.Display = strings.TrimSpace(display) - } - - if pos := strings.IndexRune(address, '#'); pos != -1 && pos != 0 { - link.Anchor = address[pos:] - address = address[:pos] - } - - switch { - case strings.ContainsRune(address, ':'): - pos := strings.IndexRune(address, ':') - link.Protocol = address[:pos] - link.Kind = LinkExternal - - if display == "" { - link.Display = address[pos+1:] - if strings.HasPrefix(link.Display, "//") && len(link.Display) > 2 { - link.Display = link.Display[2:] - } - link.Display += link.Anchor - } - link.Address = address - case strings.HasPrefix(address, "#"): - link.Kind = LinkLocalHypha - link.Address = util.CanonicalName(hyphaName) - link.Anchor = address - case strings.HasPrefix(address, "/"): - link.Address = address - link.Kind = LinkLocalRoot - case strings.HasPrefix(address, "./"): - link.Kind = LinkLocalHypha - link.Address = util.CanonicalName(path.Join(hyphaName, address[2:])) - case strings.HasPrefix(address, "../"): - link.Kind = LinkLocalHypha - link.Address = util.CanonicalName(path.Join(path.Dir(hyphaName), address[3:])) - default: - link.Kind = LinkLocalHypha - link.Address = util.CanonicalName(address) - } - - return &link -} diff --git a/markup/img.go b/markup/img.go index b1a59c1..5c4b51b 100644 --- a/markup/img.go +++ b/markup/img.go @@ -5,7 +5,7 @@ import ( "regexp" "strings" - "github.com/bouncepaw/mycorrhiza/link" + "github.com/bouncepaw/mycomarkup/links" ) var imgRe = regexp.MustCompile(`^img\s+{`) @@ -33,8 +33,8 @@ type Img struct { func (img *Img) pushEntry() { if strings.TrimSpace(img.currEntry.path.String()) != "" { - img.currEntry.srclink = link.From(img.currEntry.path.String(), "", img.hyphaName) - img.currEntry.srclink.DoubtExistence() + img.currEntry.srclink = links.From(img.currEntry.path.String(), "", img.hyphaName) + // img.currEntry.srclink.DoubtExistence() img.entries = append(img.entries, img.currEntry) img.currEntry = imgEntry{} img.currEntry.path.Reset() @@ -164,7 +164,7 @@ func parseDimensions(dimensions string) (sizeW, sizeH string) { func (img *Img) markExistenceOfSrcLinks() { HyphaIterate(func(hn string) { for _, entry := range img.entries { - if hn == entry.srclink.Address { + if hn == entry.srclink.Address() { entry.srclink.DestinationUnknown = false } } diff --git a/markup/img_entry.go b/markup/img_entry.go index acba2fd..501f9f7 100644 --- a/markup/img_entry.go +++ b/markup/img_entry.go @@ -3,11 +3,11 @@ package markup import ( "strings" - "github.com/bouncepaw/mycorrhiza/link" + "github.com/bouncepaw/mycomarkup/links" ) type imgEntry struct { - srclink *link.Link + srclink *links.Link path strings.Builder sizeW strings.Builder sizeH strings.Builder diff --git a/markup/link.go b/markup/link.go index 9243fca..be8a148 100644 --- a/markup/link.go +++ b/markup/link.go @@ -3,7 +3,7 @@ package markup import ( "strings" - "github.com/bouncepaw/mycorrhiza/link" + "github.com/bouncepaw/mycomarkup/links" ) // LinkParts determines what href, text and class should resulting have based on mycomarkup's addr, display and hypha name. @@ -12,11 +12,11 @@ import ( // [[addr|display]] // TODO: deprecate func LinkParts(addr, display, hyphaName string) (href, text, class string) { - l := link.From(addr, display, hyphaName) - if l.Kind == link.LinkLocalHypha && !HyphaExists(l.Address) { + l := links.From(addr, display, hyphaName) + if l.OfKind(links.LinkLocalHypha) && !HyphaExists(l.Address()) { l.DestinationUnknown = true } - return l.Href(), l.Display, l.Classes() + return l.Href(), l.Display(), l.Classes() } // Parse markup line starting with "=>" according to wikilink rules. diff --git a/markup/mycomarkup.go b/markup/mycomarkup.go index ae8ddc3..f9c9215 100644 --- a/markup/mycomarkup.go +++ b/markup/mycomarkup.go @@ -3,12 +3,13 @@ package markup import ( "fmt" - "github.com/bouncepaw/mycorrhiza/cfg" "html" "regexp" "strings" - "github.com/bouncepaw/mycorrhiza/link" + "github.com/bouncepaw/mycorrhiza/cfg" + + "github.com/bouncepaw/mycomarkup/links" ) // A Mycomarkup-formatted document @@ -83,7 +84,7 @@ func (md *MycoDoc) ogFillVars() *MycoDoc { case Img: if !foundImg && len(v.entries) > 0 { md.firstImageURL = v.entries[0].srclink.ImgSrc() - if v.entries[0].srclink.Kind != link.LinkExternal { + if !v.entries[0].srclink.OfKind(links.LinkExternal) { md.firstImageURL = cfg.URL + md.firstImageURL } foundImg = true diff --git a/markup/outlink.go b/markup/outlink.go index 0f4203a..aef4847 100644 --- a/markup/outlink.go +++ b/markup/outlink.go @@ -4,7 +4,7 @@ import ( "regexp" "strings" - "github.com/bouncepaw/mycorrhiza/link" + "github.com/bouncepaw/mycomarkup/links" ) // OutLinks returns a channel of names of hyphae this mycodocument links. @@ -50,8 +50,8 @@ func extractLinks(html string, ch chan string) { func extractImageLinks(img Img, ch chan string) { for _, entry := range img.entries { - if entry.srclink.Kind == link.LinkLocalHypha { - ch <- entry.srclink.Address + if entry.srclink.OfKind(links.LinkLocalHypha) { + ch <- entry.srclink.Address() } } } diff --git a/markup/table.go b/markup/table.go index a4dca62..b1ddbff 100644 --- a/markup/table.go +++ b/markup/table.go @@ -5,7 +5,6 @@ import ( "regexp" "strings" "unicode" - // "github.com/bouncepaw/mycorrhiza/util" ) var tableRe = regexp.MustCompile(`^table\s+{`) diff --git a/views/stuff.qtpl b/views/stuff.qtpl index 73055cf..21c2f8a 100644 --- a/views/stuff.qtpl +++ b/views/stuff.qtpl @@ -18,7 +18,7 @@