diff options
| -rw-r--r-- | doc/org.md | 13 | ||||
| -rw-r--r-- | src/Text/Pandoc/Readers/Org/Meta.hs | 14 | ||||
| -rw-r--r-- | test/Tests/Readers/Org/Meta.hs | 78 | 
3 files changed, 65 insertions, 40 deletions
| diff --git a/doc/org.md b/doc/org.md index d117d09dc..17b994f19 100644 --- a/doc/org.md +++ b/doc/org.md @@ -53,9 +53,10 @@ occur.    the description. In contrast, the Org-mode HTML exporter treats    the description as plain text. -- LATEX_HEADER: arbitrary lines to add to the document's preamble. -  Contrary to Org-mode, these lines are not inserted before the -  hyperref settings, but close to the end of the preamble. +- LATEX\_HEADER and LATEX_HEADER_EXTRA: arbitrary lines to add to +  the document's preamble. Contrary to Org-mode, these lines are +  not inserted before the hyperref settings, but close to the end +  of the preamble.    The contents of this option are stored as a list of raw LaTeX    lines in the `header-includes` metadata field. @@ -77,10 +78,10 @@ occur.    The content of this option is stored as inlines in the    `subtitle` metadata field. -- HTML_HEAD: arbitrary lines to add to the HTML document's head; -  fully supported. +- HTML\_HEAD and HTML\_HEAD\_EXTRA: arbitrary lines to add to the +  HTML document's head; fully supported. -  The contents of this option are stored as a list of raw HTML +  The contents of these options are stored as a list of raw HTML    lines in the `header-includes` metadata field.  Pandoc-specific options diff --git a/src/Text/Pandoc/Readers/Org/Meta.hs b/src/Text/Pandoc/Readers/Org/Meta.hs index c922403df..ae323f189 100644 --- a/src/Text/Pandoc/Readers/Org/Meta.hs +++ b/src/Text/Pandoc/Readers/Org/Meta.hs @@ -82,14 +82,18 @@ exportSettingHandlers = Map.fromList    , ("subtitle"   , lineOfInlines `parseThen` collectLines "subtitle")    , ("title"      , lineOfInlines `parseThen` collectLines "title")      -- LaTeX -  , ("latex_class", fmap pure anyLine `parseThen` setField "documentclass") +  , ("latex_class"    , fmap pure anyLine `parseThen` setField "documentclass")    , ("latex_class_options", (pure . T.filter (`notElem` ("[]" :: String)) <$> anyLine)                              `parseThen` setField "classoption") -  , ("latex_header", metaExportSnippet "latex" `parseThen` -                     collectAsList "header-includes") +  , ("latex_header"   , metaExportSnippet "latex" `parseThen` +                        collectAsList "header-includes") +  , ("latex_header_extra", metaExportSnippet "latex" `parseThen` +                        collectAsList "header-includes")      -- HTML -  , ("html_head"  , metaExportSnippet "html" `parseThen` -                    collectAsList "header-includes") +  , ("html_head"      , metaExportSnippet "html" `parseThen` +                        collectAsList "header-includes") +  , ("html_head_extra", metaExportSnippet "html" `parseThen` +                        collectAsList "header-includes")      -- pandoc-specific    , ("nocite"         , lineOfInlines `parseThen` collectLines "nocite")    , ("header-includes", lineOfInlines `parseThen` collectLines "header-includes") diff --git a/test/Tests/Readers/Org/Meta.hs b/test/Tests/Readers/Org/Meta.hs index 89cd35b26..dd51cbd48 100644 --- a/test/Tests/Readers/Org/Meta.hs +++ b/test/Tests/Readers/Org/Meta.hs @@ -108,42 +108,62 @@ tests =            meta = setMeta "keywords" (MetaInlines keywords) nullMeta        in Pandoc meta mempty -    , "LaTeX_headers options are translated to header-includes" =: -      "#+LaTeX_header: \\usepackage{tikz}" =?> -      let latexInlines = rawInline "latex" "\\usepackage{tikz}" -          inclList = MetaList [MetaInlines (toList latexInlines)] -          meta = setMeta "header-includes" inclList nullMeta -      in Pandoc meta mempty +    , "Institute" =: +      "#+INSTITUTE: ACME Inc." =?> +      Pandoc (setMeta "institute" ("ACME Inc." :: Inlines) nullMeta) mempty -    , testGroup "LaTeX_CLASS" -      [ "LaTeX_class option is translated to documentclass" =: -        "#+LATEX_CLASS: article" =?> -        let meta = setMeta "documentclass" (MetaString "article") nullMeta +    , testGroup "LaTeX" +      [ "LaTeX_headers options are translated to header-includes" =: +        "#+LaTeX_header: \\usepackage{tikz}" =?> +        let latexInlines = rawInline "latex" "\\usepackage{tikz}" +            inclList = MetaList [MetaInlines (toList latexInlines)] +            meta = setMeta "header-includes" inclList nullMeta          in Pandoc meta mempty -      , "last definition takes precedence" =: -        T.unlines [ "#+LATEX_CLASS: this will not be used" -                  , "#+LATEX_CLASS: report" -                  ] =?> -        let meta = setMeta "documentclass" (MetaString "report") nullMeta +      , "LATEX_HEADER_EXTRA values are translated to header-includes" =: +        "#+LATEX_HEADER_EXTRA: \\usepackage{calc}" =?> +        let latexInlines = rawInline "latex" "\\usepackage{calc}" +            inclList = toMetaValue [latexInlines] +        in Pandoc (setMeta "header-includes" inclList nullMeta) mempty + +      , testGroup "LaTeX_CLASS" +        [ "LaTeX_class option is translated to documentclass" =: +          "#+LATEX_CLASS: article" =?> +          let meta = setMeta "documentclass" (MetaString "article") nullMeta +          in Pandoc meta mempty + +        , "last definition takes precedence" =: +          T.unlines [ "#+LATEX_CLASS: this will not be used" +                    , "#+LATEX_CLASS: report" +                    ] =?> +          let meta = setMeta "documentclass" (MetaString "report") nullMeta +          in Pandoc meta mempty +        ] + +      , "LaTeX_class_options is translated to classoption" =: +        "#+LATEX_CLASS_OPTIONS: [a4paper]" =?> +        let meta = setMeta "classoption" (MetaString "a4paper") nullMeta          in Pandoc meta mempty        ] -    , "LaTeX_class_options is translated to classoption" =: -      "#+LATEX_CLASS_OPTIONS: [a4paper]" =?> -      let meta = setMeta "classoption" (MetaString "a4paper") nullMeta -      in Pandoc meta mempty - -    , "LaTeX_class_options is translated to classoption" =: -      "#+html_head: <meta/>" =?> -      let html = rawInline "html" "<meta/>" -          inclList = MetaList [MetaInlines (toList html)] -          meta = setMeta "header-includes" inclList nullMeta -      in Pandoc meta mempty +    , testGroup "HTML" +      [ "HTML_HEAD values are added to header-includes" =: +        "#+html_head: <meta/>" =?> +        let html = rawInline "html" "<meta/>" +            inclList = MetaList [MetaInlines (toList html)] +            meta = setMeta "header-includes" inclList nullMeta +        in Pandoc meta mempty -    , "Institute" =: -      "#+INSTITUTE: ACME Inc." =?> -      Pandoc (setMeta "institute" ("ACME Inc." :: Inlines) nullMeta) mempty +      , "HTML_HEAD_EXTRA behaves like HTML_HEAD" =: +        T.unlines [ "#+HTML_HEAD: <meta name=\"generator\" content=\"pandoc\">" +                  , "#+HTML_HEAD_EXTRA: <meta charset=\"utf-8\">" +                  ] =?> +        let generator = rawInline "html" +                                  "<meta name=\"generator\" content=\"pandoc\">" +            charset = rawInline "html" "<meta charset=\"utf-8\">" +            inclList = toMetaValue [generator, charset] +        in Pandoc (setMeta "header-includes" inclList nullMeta) mempty +      ]      ]    , "Properties drawer" =: | 
