From 992f77c17c4c86b7f4836767457094a3a20cdc65 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 5 Dec 2019 09:54:18 -0800 Subject: [PATCH] Roll back part of of `--shift-heading-level-by` change. With positive heading shifts, starting in 2.8 this option caused metadata titles to be removed and changed to regular headings. This behavior is incompatible with the old behavior of `--base-header-level` and breaks old workflows, so with this commit we are rolling back this change. Now, there is an asymmetry in positive and negative heading level shifts: + With positive shifts, the metadata title stays the same and does not get changed to a heading in the body. + With negative shifts, a heading can be converted into the metadata title. I think this is a desirable combination of features, despite the asymmetry. One might, e.g., want to have a document with level-1 section headigs, but render it to HTML with level-2 headings, retaining the metadata title (which pandoc will render as a level-1 heading with the default template). Closes #5957. Revises #5615. --- MANUAL.txt | 13 +++++++------ src/Text/Pandoc/Shared.hs | 6 ------ test/command/shift-heading-level-by.md | 5 ++--- 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/MANUAL.txt b/MANUAL.txt index b14796c74..af089caa5 100644 --- a/MANUAL.txt +++ b/MANUAL.txt @@ -493,14 +493,15 @@ header when requesting a document from a URL: headings become level 1 headings, and level 3 headings become level 2 headings. Headings cannot have a level less than 1, so a heading that would be shifted below level 1 - becomes a regular paragraph. Exception: with a shift of -1, - a level-1 heading at the beginning of the document - replaces the metadata title. Conversely, with a shift - of +1, a nonempty metadata title becomes a level-1 heading at - the beginning of the document. `--shift-heading-level-by=-1` + becomes a regular paragraph. Exception: with a shift of -N, + a level-N heading at the beginning of the document + replaces the metadata title. `--shift-heading-level-by=-1` is a good choice when converting HTML or Markdown documents that use an initial level-1 heading for the document title and - level-2+ headings for sections. + level-2+ headings for sections. `--shift-heading-level-by=1` + may be a good choice for converting Markdown documents that + use level-1 headings for sections to HTML, since pandoc uses + a level-1 heading to render the document title. `--base-header-level=`*NUMBER* diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs index efb2e56dd..0e195d3da 100644 --- a/src/Text/Pandoc/Shared.hs +++ b/src/Text/Pandoc/Shared.hs @@ -641,12 +641,6 @@ headerShift n (Pandoc meta (Header m _ ils : bs)) | n < 0 , m + n == 0 = headerShift n $ B.setTitle (B.fromList ils) $ Pandoc meta bs -headerShift n (Pandoc meta bs) - | n > 0 - , not (null (docTitle meta)) - = Pandoc meta' (Header n nullAttr (docTitle meta) : bs') - where - Pandoc meta' bs' = headerShift n $ B.deleteMeta "title" $ Pandoc meta bs headerShift n (Pandoc meta bs) = Pandoc meta (walk shift bs) where shift :: Block -> Block diff --git a/test/command/shift-heading-level-by.md b/test/command/shift-heading-level-by.md index 1d8b8bdd0..323783f24 100644 --- a/test/command/shift-heading-level-by.md +++ b/test/command/shift-heading-level-by.md @@ -8,9 +8,8 @@ title: My title ## Second ^D -Pandoc (Meta {unMeta = fromList []}) -[Header 1 ("",[],[]) [Str "My",Space,Str "title"] -,Header 2 ("first-heading",[],[]) [Str "First",Space,Str "heading"] +Pandoc (Meta {unMeta = fromList [("title",MetaInlines [Str "My",Space,Str "title"])]}) +[Header 2 ("first-heading",[],[]) [Str "First",Space,Str "heading"] ,Header 3 ("second",[],[]) [Str "Second"]] ```