Merge pull request #798 from bjornerik/fix/nestedshortcodes - hugo - [fork] hugo port for 9front
 (HTM) git clone git@git.drkhsh.at/hugo.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 3a9300ddc4f73bd4a3b29d16c0107b6bd1439632
 (DIR) parent 1cbdd3e59df6c4513ea8e83aadc969272420ca52
 (HTM) Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Fri, 16 Jan 2015 11:06:17 +0100
       
       Merge pull request #798 from bjornerik/fix/nestedshortcodes
       
       Fix issue with nested shortcodes
       Diffstat:
         M hugolib/shortcode.go                |      27 +++------------------------
         M hugolib/shortcode_test.go           |       6 +++---
       
       2 files changed, 6 insertions(+), 27 deletions(-)
       ---
 (DIR) diff --git a/hugolib/shortcode.go b/hugolib/shortcode.go
       @@ -163,26 +163,11 @@ func createShortcodePlaceholder(id int) string {
                return fmt.Sprintf("{@{@%s-%d@}@}", shortcodePlaceholderPrefix, id)
        }
        
       -func renderShortcodes(sc shortcode, p *Page, t tpl.Template) string {
       -
       -        tokenizedRenderedShortcodes := make(map[string](string))
       -        startCount := 0
       -
       -        shortcodes := renderShortcode(sc, tokenizedRenderedShortcodes, startCount, p, t)
       -
       -        // placeholders will be numbered from 1.. and top down
       -        for i := 1; i <= len(tokenizedRenderedShortcodes); i++ {
       -                placeHolder := createShortcodePlaceholder(i)
       -                shortcodes = strings.Replace(shortcodes, placeHolder, tokenizedRenderedShortcodes[placeHolder], 1)
       -        }
       -        return shortcodes
       -}
       -
        const innerNewlineRegexp = "\n"
        const innerCleanupRegexp = `\A<p>(.*)</p>\n\z`
        const innerCleanupExpand = "$1"
        
       -func renderShortcode(sc shortcode, tokenizedShortcodes map[string](string), cnt int, p *Page, t tpl.Template) string {
       +func renderShortcode(sc shortcode, p *Page, t tpl.Template) string {
                var data = &ShortcodeWithPage{Params: sc.params, Page: p}
                tmpl := GetTemplate(sc.name, t)
        
       @@ -198,12 +183,7 @@ func renderShortcode(sc shortcode, tokenizedShortcodes map[string](string), cnt 
                                case string:
                                        inner += innerData.(string)
                                case shortcode:
       -                                // nested shortcodes will be rendered individually, replace them with temporary numbered tokens
       -                                cnt++
       -                                placeHolder := createShortcodePlaceholder(cnt)
       -                                renderedContent := renderShortcode(innerData.(shortcode), tokenizedShortcodes, cnt, p, t)
       -                                tokenizedShortcodes[placeHolder] = renderedContent
       -                                inner += placeHolder
       +                                inner += renderShortcode(innerData.(shortcode), p, t)
                                default:
                                        jww.ERROR.Printf("Illegal state on shortcode rendering of '%s' in page %s. Illegal type in inner data: %s ",
                                                sc.name, p.BaseFileName(), reflect.TypeOf(innerData))
       @@ -265,7 +245,7 @@ func extractAndRenderShortcodes(stringToParse string, p *Page, t tpl.Template) (
                                // need to have something to replace with
                                renderedShortcodes[key] = ""
                        } else {
       -                        renderedShortcodes[key] = renderShortcodes(sc, p, t)
       +                        renderedShortcodes[key] = renderShortcode(sc, p, t)
                        }
                }
        
       @@ -418,7 +398,6 @@ Loop:
                                        currShortcode.params = make([]string, 0)
                                }
        
       -                        // wrap it in a block level element to let it be left alone by the markup engine
                                placeHolder := createShortcodePlaceholder(id)
                                result.WriteString(placeHolder)
                                shortCodes[placeHolder] = currShortcode
 (DIR) diff --git a/hugolib/shortcode_test.go b/hugolib/shortcode_test.go
       @@ -111,7 +111,7 @@ func TestNestedSC(t *testing.T) {
                tem.AddInternalShortcode("scn1.html", `<div>Outer, inner is {{ .Inner }}</div>`)
                tem.AddInternalShortcode("scn2.html", `<div>SC2</div>`)
        
       -        CheckShortCodeMatch(t, `{{% scn1 %}}{{% scn2 %}}{{% /scn1 %}}`, "<div>Outer, inner is <div>SC2</div></div>", tem)
       +        CheckShortCodeMatch(t, `{{% scn1 %}}{{% scn2 %}}{{% /scn1 %}}`, "<div>Outer, inner is <div>SC2</div>\n</div>", tem)
        
                CheckShortCodeMatch(t, `{{< scn1 >}}{{% scn2 %}}{{< /scn1 >}}`, "<div>Outer, inner is <div>SC2</div></div>", tem)
        }
       @@ -123,11 +123,11 @@ func TestNestedComplexSC(t *testing.T) {
                tem.AddInternalShortcode("aside.html", `-aside-{{    .Inner  }}-asideStop-`)
        
                CheckShortCodeMatch(t, `{{< row >}}1-s{{% column %}}2-**s**{{< aside >}}3-**s**{{< /aside >}}4-s{{% /column %}}5-s{{< /row >}}6-s`,
       -                "-row-1-s-col-2-<strong>s</strong>-aside-3-**s**-asideStop-4-s-colStop-5-s-rowStop-6-s", tem)
       +                "-row-1-s-col-2-<strong>s</strong>-aside-3-<strong>s</strong>-asideStop-4-s-colStop-5-s-rowStop-6-s", tem)
        
                // turn around the markup flag
                CheckShortCodeMatch(t, `{{% row %}}1-s{{< column >}}2-**s**{{% aside %}}3-**s**{{% /aside %}}4-s{{< /column >}}5-s{{% /row %}}6-s`,
       -                "-row-1-s-col-2-**s**-aside-3-<strong>s</strong>-asideStop-4-s-colStop-5-s-rowStop-6-s", tem)
       +                "-row-1-s-col-2-<strong>s</strong>-aside-3-<strong>s</strong>-asideStop-4-s-colStop-5-s-rowStop-6-s", tem)
        }
        
        func TestFigureImgWidth(t *testing.T) {