From 48dd6a918a0ef070819ef80d59b2553bc99e2964 Mon Sep 17 00:00:00 2001 From: Joe Mooring Date: Sun, 15 Dec 2024 17:21:05 -0800 Subject: [PATCH] parser/pageparser: Fix Org Mode summary delimiter assignment Closes #13152 --- parser/pageparser/pagelexer_intro.go | 4 +- parser/pageparser/pagelexer_intro_test.go | 46 +++++++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 parser/pageparser/pagelexer_intro_test.go diff --git a/parser/pageparser/pagelexer_intro.go b/parser/pageparser/pagelexer_intro.go index 925c61c9e58..334d9a79c15 100644 --- a/parser/pageparser/pagelexer_intro.go +++ b/parser/pageparser/pagelexer_intro.go @@ -91,14 +91,14 @@ func lexFrontMatterOrgMode(l *pageLexer) stateFunc { #+DESCRIPTION: Just another golang parser for org content! */ - l.summaryDivider = summaryDividerOrg - l.backup() if !l.hasPrefix(delimOrg) { return lexMainSection } + l.summaryDivider = summaryDividerOrg + // Read lines until we no longer see a #+ prefix LOOP: for { diff --git a/parser/pageparser/pagelexer_intro_test.go b/parser/pageparser/pagelexer_intro_test.go new file mode 100644 index 00000000000..c074e6f5050 --- /dev/null +++ b/parser/pageparser/pagelexer_intro_test.go @@ -0,0 +1,46 @@ +// Copyright 2024 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package pageparser + +import ( + "testing" + + qt "github.com/frankban/quicktest" +) + +func Test_lexIntroSection(t *testing.T) { + t.Parallel() + c := qt.New(t) + for i, tt := range []struct { + input string + expectItemType ItemType + expectSummaryDivider []byte + }{ + {"{\"title\": \"JSON\"}\n", TypeFrontMatterJSON, summaryDivider}, + {"#+TITLE: ORG\n", TypeFrontMatterORG, summaryDividerOrg}, + {"+++\ntitle = \"TOML\"\n+++\n", TypeFrontMatterTOML, summaryDivider}, + {"---\ntitle: YAML\n---\n", TypeFrontMatterYAML, summaryDivider}, + // Issue 13152 + {"# ATX Header Level 1\n", tText, summaryDivider}, + } { + errMsg := qt.Commentf("[%d] %v", i, tt.input) + + l := newPageLexer([]byte(tt.input), lexIntroSection, Config{}) + l.run() + + c.Assert(l.items[0].Type, qt.Equals, tt.expectItemType, errMsg) + c.Assert(l.summaryDivider, qt.DeepEquals, tt.expectSummaryDivider, errMsg) + + } +}