summaryrefslogtreecommitdiffstats
path: root/hugolib/page_content.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-11-01 10:39:44 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-11-01 21:06:35 +0100
commit33a7b36fd42ee31dd79115ec6639bed24247332f (patch)
tree95488b5d51a2a2f9375f812cd807df0e04034a84 /hugolib/page_content.go
parent6180c85fb8f95e01446b74c50cab3f0480305fe4 (diff)
hugolib: Add .Position to shortcode
To allow for better error logging in shortcodes. Note that this may be expensive to calculate, so this is primarily for error situations. See #5371
Diffstat (limited to 'hugolib/page_content.go')
-rw-r--r--hugolib/page_content.go25
1 files changed, 21 insertions, 4 deletions
diff --git a/hugolib/page_content.go b/hugolib/page_content.go
index 5a8258279..b3e8668ef 100644
--- a/hugolib/page_content.go
+++ b/hugolib/page_content.go
@@ -17,6 +17,8 @@ import (
"bytes"
"io"
+ "github.com/gohugoio/hugo/source"
+
errors "github.com/pkg/errors"
bp "github.com/gohugoio/hugo/bufferpool"
@@ -68,7 +70,7 @@ func (p *Page) mapContent() error {
iter := p.source.parsed.Iterator()
fail := func(err error, i pageparser.Item) error {
- return parseError(err, iter.Input(), i.Pos)
+ return p.parseError(err, iter.Input(), i.Pos)
}
// the parser is guaranteed to return items in proper order or fail, so …
@@ -194,15 +196,30 @@ func (p *Page) parse(reader io.Reader) error {
return nil
}
-func parseError(err error, input []byte, pos int) error {
+func (p *Page) parseError(err error, input []byte, offset int) error {
if herrors.UnwrapFileError(err) != nil {
// Use the most specific location.
return err
}
+ pos := p.posFromInput(input, offset)
+ return herrors.NewFileError("md", -1, pos.LineNumber, pos.ColumnNumber, err)
+
+}
+
+func (p *Page) posFromInput(input []byte, offset int) source.Position {
lf := []byte("\n")
- input = input[:pos]
+ input = input[:offset]
lineNumber := bytes.Count(input, lf) + 1
endOfLastLine := bytes.LastIndex(input, lf)
- return herrors.NewFileError("md", -1, lineNumber, pos-endOfLastLine, err)
+ return source.Position{
+ Filename: p.pathOrTitle(),
+ LineNumber: lineNumber,
+ ColumnNumber: offset - endOfLastLine,
+ Offset: offset,
+ }
+}
+
+func (p *Page) posFromPage(offset int) source.Position {
+ return p.posFromInput(p.source.parsed.Input(), offset)
}