From 2f292e5b74d215fdd6a5d2c476a126184f195f25 Mon Sep 17 00:00:00 2001 From: yuin Date: Mon, 2 Dec 2019 03:10:06 +0900 Subject: [PATCH] Fixes #44, Fixes #45 --- _test/extra.txt | 19 +++++++++++++++++++ extension/_test/footnote.txt | 15 +++++++++++++-- extension/_test/linkify.txt | 9 +++++++++ extension/footnote.go | 12 ++++++------ parser/blockquote.go | 2 +- parser/fcode_block.go | 2 +- parser/list.go | 4 ++-- parser/parser.go | 2 +- parser/thematic_break.go | 6 +++--- 9 files changed, 55 insertions(+), 16 deletions(-) diff --git a/_test/extra.txt b/_test/extra.txt index 11e3a12..178bb10 100644 --- a/_test/extra.txt +++ b/_test/extra.txt @@ -20,3 +20,22 @@ testtest
testtest
testtest

//= = = = = = = = = = = = = = = = = = = = = = = =// +3 +//- - - - - - - - -// +>* > +> 1 +> 2 +>3 +//- - - - - - - - -// +
+ +

1 +2 +3

+
+//= = = = = = = = = = = = = = = = = = = = = = = =// diff --git a/extension/_test/footnote.txt b/extension/_test/footnote.txt index ef1553a..7113be5 100644 --- a/extension/_test/footnote.txt +++ b/extension/_test/footnote.txt @@ -18,5 +18,16 @@ That's some text with a footnote.[^1] //= = = = = = = = = = = = = = = = = = = = = = = =// - - +3 +//- - - - - - - - -// +[^000]:0 [^]: +//- - - - - - - - -// +
+
+
    +
  1. +

    0 [^]:

    +
  2. +
+
+//= = = = = = = = = = = = = = = = = = = = = = = =// diff --git a/extension/_test/linkify.txt b/extension/_test/linkify.txt index d421934..8c3bbe7 100644 --- a/extension/_test/linkify.txt +++ b/extension/_test/linkify.txt @@ -112,3 +112,12 @@ a.b-c_d@a.b_

a.b-c_d@a.b-

a.b-c_d@a.b_

//= = = = = = = = = = = = = = = = = = = = = = = =// + + + +11 +//- - - - - - - - -// +Go to [http://www.example.com](www.example.com) +//- - - - - - - - -// +

Go to http://www.example.com

+//= = = = = = = = = = = = = = = = = = = = = = = =// diff --git a/extension/footnote.go b/extension/footnote.go index ccafdeb..cdab700 100644 --- a/extension/footnote.go +++ b/extension/footnote.go @@ -43,28 +43,28 @@ func (b *footnoteBlockParser) Open(parent gast.Node, reader text.Reader, pc pars open := pos + 1 closes := 0 closure := util.FindClosure(line[pos+1:], '[', ']', false, false) + closes = pos + 1 + closure + next := closes + 1 if closure > -1 { - closes = pos + 1 + closure - next := closes + 1 if next >= len(line) || line[next] != ':' { return nil, parser.NoChildren } } else { return nil, parser.NoChildren } - label := reader.Value(text.NewSegment(segment.Start+open, segment.Start+closes)) + padding := segment.Padding + label := reader.Value(text.NewSegment(segment.Start+open-padding, segment.Start+closes-padding)) if util.IsBlank(label) { return nil, parser.NoChildren } item := ast.NewFootnote(label) - pos = pos + 2 + closes - open + 2 + pos = next + 1 - padding if pos >= len(line) { reader.Advance(pos) return item, parser.NoChildren } - childpos, padding := util.IndentPosition(line[pos:], pos, 1) - reader.AdvanceAndSetPadding(pos+childpos, padding) + reader.AdvanceAndSetPadding(pos, padding) return item, parser.HasChildren } diff --git a/parser/blockquote.go b/parser/blockquote.go index 8ea5e2f..e7778dc 100644 --- a/parser/blockquote.go +++ b/parser/blockquote.go @@ -19,7 +19,7 @@ func NewBlockquoteParser() BlockParser { func (b *blockquoteParser) process(reader text.Reader) bool { line, _ := reader.PeekLine() - w, pos := util.IndentWidth(line, 0) + w, pos := util.IndentWidth(line, reader.LineOffset()) if w > 3 || pos >= len(line) || line[pos] != '>' { return false } diff --git a/parser/fcode_block.go b/parser/fcode_block.go index 7216335..f5b83ee 100644 --- a/parser/fcode_block.go +++ b/parser/fcode_block.go @@ -71,7 +71,7 @@ func (b *fencedCodeBlockParser) Open(parent ast.Node, reader text.Reader, pc Con func (b *fencedCodeBlockParser) Continue(node ast.Node, reader text.Reader, pc Context) State { line, segment := reader.PeekLine() fdata := pc.Get(fencedCodeBlockInfoKey).(*fenceData) - w, pos := util.IndentWidth(line, 0) + w, pos := util.IndentWidth(line, reader.LineOffset()) if w < 4 { i := pos for ; i < len(line) && line[i] == fdata.char; i++ { diff --git a/parser/list.go b/parser/list.go index 7eaa05a..b1d53bd 100644 --- a/parser/list.go +++ b/parser/list.go @@ -167,7 +167,7 @@ func (b *listParser) Continue(node ast.Node, reader text.Reader, pc Context) Sta return Continue | HasChildren } // Thematic Breaks take precedence over lists - if isThematicBreak(line) { + if isThematicBreak(line, reader.LineOffset()) { isHeading := false last := pc.LastOpenedBlock().Node if ast.IsParagraph(last) { @@ -190,7 +190,7 @@ func (b *listParser) Continue(node ast.Node, reader text.Reader, pc Context) Sta // - b <--- current line // it maybe a new child of the list. offset := lastOffset(node) - indent, _ := util.IndentWidth(line, 0) + indent, _ := util.IndentWidth(line, reader.LineOffset()) if indent < offset { if indent < 4 { diff --git a/parser/parser.go b/parser/parser.go index 9eb0b8a..3c752fa 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -874,7 +874,7 @@ func (p *parser) openBlocks(parent ast.Node, blankLine bool, reader text.Reader, retry: var bps []BlockParser line, _ := reader.PeekLine() - w, pos := util.IndentWidth(line, 0) + w, pos := util.IndentWidth(line, reader.LineOffset()) if w >= len(line) { pc.SetBlockOffset(-1) pc.SetBlockIndent(-1) diff --git a/parser/thematic_break.go b/parser/thematic_break.go index 2f5c9fa..c09406c 100644 --- a/parser/thematic_break.go +++ b/parser/thematic_break.go @@ -17,8 +17,8 @@ func NewThematicBreakParser() BlockParser { return defaultThematicBreakPraser } -func isThematicBreak(line []byte) bool { - w, pos := util.IndentWidth(line, 0) +func isThematicBreak(line []byte, offset int) bool { + w, pos := util.IndentWidth(line, offset) if w > 3 { return false } @@ -51,7 +51,7 @@ func (b *thematicBreakPraser) Trigger() []byte { func (b *thematicBreakPraser) Open(parent ast.Node, reader text.Reader, pc Context) (ast.Node, State) { line, segment := reader.PeekLine() - if isThematicBreak(line) { + if isThematicBreak(line, reader.LineOffset()) { reader.Advance(segment.Len() - 1) return ast.NewThematicBreak(), NoChildren }