pandoc-crossref 0.1.6.0 → 0.1.6.2
raw patch · 5 files changed
+197/−17 lines, 5 filesdep ~pandocdep ~pandoc-typesdep ~process
Dependency ranges changed: pandoc, pandoc-types, process
Files
- README.md +5/−7
- pandoc-crossref.cabal +9/−9
- src/Text/Pandoc/CrossRef/References/Blocks.hs +19/−0
- test/Native.hs +150/−1
- test/test-pandoc-crossref.hs +14/−0
README.md view
@@ -1,4 +1,4 @@-# pandoc-crossref filter +# pandoc-crossref filter [](https://travis-ci.org/lierdakil/pandoc-crossref) pandoc-crossref is a pandoc filter for numbering figures, equations, tables and cross-references to them. @@ -23,7 +23,7 @@ [lpdf]: http://lierdakil.github.io/pandoc-crossref/output-listings.pdf -Tested with pandoc 1.13.2 and 1.14.+Tested with Pandoc from 1.13.2 to 1.16.0. This work is inspired by [pandoc-fignos][1] and [pandoc-eqnos][2] by @tomduck. @@ -46,7 +46,7 @@ This only works on implicit figures, i.e. an image occurring by itself in a paragraph (which will be rendered as a figure with caption by pandoc) -Image block and label *can* be separated by one or more spaces.+Image block and label *can not* be separated by spaces. ### Equation labels @@ -56,8 +56,6 @@ To label a display equation, append `{#eq:label}` (with `label` being something unique to reference this equation by) immediately after math block. -This only works if display math and label specification are in a paragraph of its own.- Math block and label *can* be separated by one or more spaces. ### Table labels@@ -195,7 +193,7 @@ `pandoc --filter pandoc-crossref` -If you installed with cabal, it's most likely located in `$HOME/.cabal/bin` on \*NIX systems, or in `%AppData%\cabal\bin` on Windows.+If you installed with cabal, it's most likely located in `$HOME/.cabal/bin` on \*NIX systems, `$HOME/Library/Haskell/bin` on Macs, or in `%AppData%\cabal\bin` on Windows. ### Customization @@ -235,7 +233,7 @@ - "figs." ``` -Will result in all single-value references prefixed with "fig.", and all reference groups of two and more prefixed with "figs.":+Will result in all single-value references prefixed with "fig.", and all reference groups of two and more will be prefixed with "figs.": ```markdown [@fig:one] -> fig. 1
pandoc-crossref.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: pandoc-crossref-version: 0.1.6.0+version: 0.1.6.2 synopsis: Pandoc filter for cross-references description: pandoc-crossref is a pandoc filter for numbering figures, equations, tables and cross-references to them. license: GPL-2@@ -24,7 +24,7 @@ source-repository this type: git location: https://github.com/lierdakil/pandoc-crossref- tag: v0.1.6.0+ tag: v0.1.6.2 library exposed-modules: Text.Pandoc.CrossRef@@ -46,10 +46,10 @@ , Text.Pandoc.CrossRef.Util.Settings.Template , Text.Pandoc.CrossRef.Util.Gap build-depends: base >=4.2 && <5- , pandoc >= 1.13 && <1.16+ , pandoc >= 1.13 && <1.17 , mtl >= 1.1 && <2.3 , containers >= 0.1 && <0.6- , pandoc-types >= 1.12.4.1 && < 1.13+ , pandoc-types >= 1.12.4.1 && < 1.17 , yaml >= 0.8 && <0.9 , data-default >= 0.4 && <0.6 , bytestring >=0.9 && <0.11@@ -63,10 +63,10 @@ executable pandoc-crossref main-is: pandoc-crossref.hs build-depends: base >=4.2 && <5- , pandoc >= 1.13 && <1.16+ , pandoc >= 1.13 && <1.17 , mtl >= 1.1 && <2.3 , containers >= 0.1 && <0.6- , pandoc-types >= 1.12.4.1 && < 1.13+ , pandoc-types >= 1.12.4.1 && < 1.17 , yaml >= 0.8 && <0.9 , data-default >= 0.4 && <0.6 , bytestring >=0.9 && <0.11@@ -80,15 +80,15 @@ Main-Is: test-pandoc-crossref.hs hs-source-dirs: test, src Build-Depends: base >=4.2 && <5- , pandoc >= 1.13 && <1.16+ , pandoc >= 1.13 && <1.17 , mtl >= 1.1 && <2.3 , containers >= 0.1 && <0.6- , pandoc-types >= 1.12.4.1 && < 1.13+ , pandoc-types >= 1.12.4.1 && < 1.17 , yaml >= 0.8 && <0.9 , data-default >= 0.4 && <0.6 , bytestring >=0.9 && <0.11 , hspec- , process >=1 && <1.3+ , process >=1 && <1.5 , pandoc-crossref other-modules: Native Ghc-Options: -rtsopts -Wall -fno-warn-unused-do-bind -threaded
src/Text/Pandoc/CrossRef/References/Blocks.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} module Text.Pandoc.CrossRef.References.Blocks ( divBlocks , replaceBlocks@@ -37,6 +38,8 @@ in r{curChap=cc'} when ("sec:" `isPrefixOf` label') $ replaceAttrSec label' text' secRefs' return $ Header n (label', cls, attrs) text'+#if MIN_VERSION_pandoc(1,16,0)+#else replaceBlocks opts (Div (label,_,attrs) [Plain [Image alt img]]) | "fig:" `isPrefixOf` label = do@@ -46,6 +49,7 @@ RawInline (Format "tex") ("\\label{"++label++"}") : alt _ -> applyTemplate idxStr alt $ figureTemplate opts return $ Para [Image alt' img]+#endif replaceBlocks opts (Div (label,_,attrs) [Table title align widths header cells]) | not $ null title , "tbl:" `isPrefixOf` label@@ -119,12 +123,27 @@ idxStr <- replaceAttr opts label (lookup "label" attrs) [] eqnRefs' let eq' = eq++"\\qquad("++stringify idxStr++")" return $ Math DisplayMath eq' : ils'+#if MIN_VERSION_pandoc(1,16,0)+replaceInlines opts (Image attr@(label,_,attrs) alt img:ils')+ | "fig:" `isPrefixOf` label, "fig:" `isPrefixOf` snd img+ = do+ idxStr <- replaceAttr opts label (lookup "label" attrs) alt imgRefs'+ let alt' = case outFormat opts of+ f | isFormat "latex" f ->+ RawInline (Format "tex") ("\\label{"++label++"}") : alt+ _ -> applyTemplate idxStr alt $ figureTemplate opts+ return $ Image attr alt' img : ils'+#else+#endif replaceInlines _ x = return x divBlocks :: Block -> Block+#if MIN_VERSION_pandoc(1,16,0)+#else divBlocks (Para (Image alt (img, title):c)) | Just label <- getRefLabel "fig" c = Div (label,[],[]) [Plain [Image alt (img, "fig:" ++ title)]]+#endif divBlocks (Table title align widths header cells) | not $ null title , Just label <- getRefLabel "tbl" [last title]
test/Native.hs view
@@ -1,11 +1,160 @@+{-# LANGUAGE CPP #-} module Native where import Text.Pandoc.Definition demo :: [Block]+#if MIN_VERSION_pandoc(1,16,0) demo = [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "demo",Space,Str "file",Space,Str "for",Space,Str "pandoc-crossref.",Space,Str "With",Space,Str "this",Space,Str "filter,",Space,Str "you",Space,Str "can",Space,Str "cross-reference",Space,Str "figures",Space,Str "(see",Space,Str "figs.\160\&2-4",Str "),",Space,Str "display",Space,Str "equations",Space,Str "(see",Space,Str "eq.\160\&1",Str "),",Space,Str "tables",Space,Str "(see",Space,Str "tbl.\160\&1",Str ")",Space,Str "and",Space,Str "sections",Space,Str "(",Str "secs.\160\&1,",Space,Str "2,",Space,Str "4.1-4.3",Str ")"] ,Para [Str "For",Space,Str "immediate",Space,Str "example,",Space,Str "see",Space,Str "fig.\160\&1"]+ ,Para [Image ("fig:figure0",[],[]) [Str "Figure",Space,Str "#",Space,Str "1:",Space,Str "A",Space,Str "figure"] ("img1.jpg","fig:")]+ ,Para [Str "There",Space,Str "is",Space,Str "also",Space,Str "support",Space,Str "for",Space,Str "code",Space,Str "blocks,",Space,Str "for",Space,Str "example,",Space,Str "lsts.\160\&1-3"]+ ,Para [Str "It's",Space,Str "possible",Space,Str "to",Space,Str "capitalize",Space,Str "reference",Space,Str "prefixes,",Space,Str "like",Space,Str "this:",Space,Str "Fig.\160\&2",Str "."]+ ,Para [Str "In",Space,Str "case",Space,Str "of",Space,Str "multiple",Space,Str "references,",Space,Str "capitalization",Space,Str "is",Space,Str "determined",Space,Str "by",Space,Str "first",Space,Str "reference.",Space,Str "Figs.\160\&2,",Space,Str "3",Space,Str "is",Space,Str "capitalized,",Space,Str "while",Space,Str "figs.\160\&2,",Space,Str "3",Space,Str "is",Space,Str "not."]+ ,Para [Str "It",Space,Str "is",Space,Str "also",Space,Str "possible",Space,Str "to",Space,Str "mix",Space,Str "different",Space,Str "references,",Space,Str "like",Space,Str "fig.\160\&2",Str ",",Space,Str "tbl.\160\&1",Str ",",Space,Str "lsts.\160\&1,",Space,Str "2",Str ",",Space,Str "figs.\160\&3,",Space,Str "4",Str ",",Space,Str "which",Space,Str "will",Space,Str "be",Space,Str "grouped",Space,Str "in",Space,Str "order",Space,Str "they",Space,Str "are",Space,Str "specified.",Space,Str "You",Space,Str "can",Space,Str "even",Space,Str "intermix",Space,Str "this",Space,Str "with",Space,Str "regular",Space,Str "citations,",Space,Str "although",Space,Str "it's",Space,Str "not",Space,Str "recommended:",Space,Str "fig.\160\&2",Str ",",Space,Str "tbl.\160\&1",Str ",",Space,Cite [Citation {citationId = "unprocessedCitation", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@unprocessedCitation]"]]+ ,Para [Str "You",Space,Str "can",Space,Str "also",Space,Str "have",Space,Str "custom",Space,Str "chapter",Space,Str "reference",Space,Str "labels,",Space,Str "like",Space,Str "sec.\160AppA.CustLab"]+ ,Header 1 ("sec:sec1",[],[]) [Str "Chapter",Space,Str "1.",Space,Str "Figures"]+ ,Para [Image ("fig:figure1",[],[]) [Str "Figure",Space,Str "#",Space,Str "2:",Space,Str "First",Space,Str "figure"] ("img1.jpg","fig:")]+ ,Para [Image ("fig:figure2",[],[]) [Str "Figure",Space,Str "#",Space,Str "3:",Space,Str "Second",Space,Str "figure"] ("img2.jpg","fig:")]+ ,Para [Image ("fig:figure3",[],[]) [Str "Figure",Space,Str "#",Space,Str "4:",Space,Str "Third",Space,Str "figure"] ("img3.jpg","fig:")]+ ,Para [Image ("",[],[]) [Str "Unlabelled",Space,Str "image"] ("img1.jpg","fig:")]+ ,Header 1 ("sec:sec2",[],[]) [Str "Chapter",Space,Str "2.",Space,Str "Equations"]+ ,Para [Str "Display",Space,Str "equations",Space,Str "are",Space,Str "labelled",Space,Str "and",Space,Str "numbered"]+ ,Para [Math DisplayMath " P_i(x) = \\sum_i a_i x^i \\qquad(1)"]+ ,Para [Str "Since",Space,Str "0.1.6.0",Space,Str "those",Space,Str "can",Space,Str "also",Space,Str "appear",Space,Str "in",Space,Str "the",Space,Str "middle",Space,Str "of",Space,Str "paragraph",SoftBreak,Math DisplayMath "a x^2 + b x^2 + c = 0\\qquad(2)",Space,Str "like",Space,Str "this."]+ ,Header 1 ("sec:chapter-3.-tables",[],[]) [Str "Chapter",Space,Str "3.",Space,Str "Tables"]+ ,Table [Emph [Str "Table",Space,Str "1"],Str ":",Space,Str "Table",Space,Str "example"] [AlignLeft,AlignLeft] [0.0,0.0]+ [[Plain [Str "First",Space,Str "Header"]]+ ,[Plain [Str "Second",Space,Str "Header"]]]+ [[[Plain [Str "Content",Space,Str "Cell"]]+ ,[Plain [Str "Content",Space,Str "Cell"]]]+ ,[[Plain [Str "Content",Space,Str "Cell"]]+ ,[Plain [Str "Content",Space,Str "Cell"]]]]+ ,Para [Str "Table",Space,Str "without",Space,Str "caption:"]+ ,Table [] [AlignLeft,AlignLeft] [0.0,0.0]+ [[Plain [Str "First",Space,Str "Header"]]+ ,[Plain [Str "Second",Space,Str "Header"]]]+ [[[Plain [Str "Content",Space,Str "Cell"]]+ ,[Plain [Str "Content",Space,Str "Cell"]]]+ ,[[Plain [Str "Content",Space,Str "Cell"]]+ ,[Plain [Str "Content",Space,Str "Cell"]]]]+ ,Header 1 ("sec:chapter-4.-code-blocks",[],[]) [Str "Chapter",Space,Str "4.",Space,Str "Code",Space,Str "blocks"]+ ,Para [Str "There",Space,Str "are",Space,Str "a",Space,Str "couple",Space,Str "options",Space,Str "for",Space,Str "code",Space,Str "block",Space,Str "labels.",Space,Str "Those",Space,Str "work",Space,Str "only",Space,Str "if",Space,Str "code",Space,Str "block",Space,Str "id",Space,Str "starts",Space,Str "with",Space,Code ("",[],[]) "lst:",Str ",",Space,Str "e.g.",Space,Code ("",[],[]) "{#lst:label}"]+ ,Header 2 ("sec:caption-attr",[],[]) [Code ("",[],[]) "caption",Space,Str "attribute"]+ ,Para [Code ("",[],[]) "caption",Space,Str "attribute",Space,Str "will",Space,Str "be",Space,Str "treated",Space,Str "as",Space,Str "code",Space,Str "block",Space,Str "caption.",Space,Str "If",Space,Str "code",Space,Str "block",Space,Str "has",Space,Str "both",Space,Str "id",Space,Str "and",Space,Code ("",[],[]) "caption",Space,Str "attributes,",Space,Str "it",Space,Str "will",Space,Str "be",Space,Str "treated",Space,Str "as",Space,Str "numbered",Space,Str "code",Space,Str "block."]+ ,Div ("lst:captionAttr",["listing","haskell"],[])+ [Para [Str "Listing",Space,Str "1:",Space,Str "Listing",Space,Str "caption"]+ ,CodeBlock ("",["haskell"],[]) "main :: IO ()\nmain = putStrLn \"Hello World!\""]+ ,Para [RawInline (Format "tex") "\\pagebreak"]+ ,Header 2 ("sec:table-capts",[],[]) [Str "Table-style",Space,Str "captions"]+ ,Para [Str "Enabled",Space,Str "with",Space,Code ("",[],[]) "codeBlockCaptions",Space,Str "metadata",Space,Str "option.",Space,Str "If",Space,Str "code",Space,Str "block",Space,Str "is",Space,Str "immediately",SoftBreak,Str "adjacent",Space,Str "to",Space,Str "paragraph,",Space,Str "starting",Space,Str "with",Space,Code ("",[],[]) "Listing:",Space,Str "or",Space,Code ("",[],[]) ":",Str ",",Space,Str "said",Space,Str "paragraph",Space,Str "will",Space,Str "be",SoftBreak,Str "treated",Space,Str "as",Space,Str "code",Space,Str "block",Space,Str "caption."]+ ,Div ("lst:tableCaption",["listing","haskell"],[])+ [Para [Str "Listing",Space,Str "2:",Space,Str "Listing",Space,Str "caption"]+ ,CodeBlock ("",["haskell"],[]) "main :: IO ()\nmain = putStrLn \"Hello World!\""]+ ,Header 2 ("sec:wrapping-div",[],[]) [Str "Wrapping",Space,Str "div"]+ ,Para [Str "Wrapping",Space,Str "code",Space,Str "block",Space,Str "without",Space,Str "label",Space,Str "in",Space,Str "a",Space,Str "div",Space,Str "with",Space,Str "id",Space,Code ("",[],[]) "lst:...",Space,Str "and",Space,Str "class,",Space,Str "starting",Space,Str "with",Space,Code ("",[],[]) "listing",Str ",",Space,Str "and",Space,Str "adding",Space,Str "paragraph",Space,Str "before",Space,Str "code",Space,Str "block,",Space,Str "but",Space,Str "inside",Space,Str "div,",Space,Str "will",Space,Str "treat",Space,Str "said",Space,Str "paragraph",Space,Str "as",Space,Str "code",Space,Str "block",Space,Str "caption."]+ ,Div ("lst:wrappingDiv",["listing","haskell"],[])+ [Para [Str "Listing",Space,Str "3:",Space,Str "Listing",Space,Str "caption"]+ ,CodeBlock ("",["haskell"],[]) "main :: IO ()\nmain = putStrLn \"Hello World!\""]+ ,Header 1 ("sec:unnumbered-chapter.",["unnumbered"],[]) [Str "Unnumbered",Space,Str "chapter."]+ ,Para [Str "This",Space,Str "chapter",Space,Str "doesn't",Space,Str "change",Space,Str "chapter",Space,Str "prefix",Space,Str "of",Space,Str "referenced",Space,Str "elements,",Space,Str "instead",Space,Str "keeping",Space,Str "number",Space,Str "of",Space,Str "previous",Space,Str "chapter,",Space,Str "e.g.",SoftBreak,Math DisplayMath " S(x) = \\int_{x_1}^{x_2} a x+b \\ \\mathrm{d}x \\qquad(3)"]+ ,Header 1 ("sec:chapter-5.-reference-lists",[],[]) [Str "Chapter",Space,Str "5.",Space,Str "Reference",Space,Str "lists"]+ ,Para [Str "It's",Space,Str "also",Space,Str "possible",Space,Str "to",Space,Str "show",Space,Str "lists",Space,Str "of",Space,Str "figures",Space,Str "and",Space,Str "tables,",Space,Str "like",Space,Str "this:"]+ ,Header 2 ("list-of-figures",[],[]) [Str "List",Space,Str "of",Space,Str "Figures"]+ ,OrderedList (1,DefaultStyle,DefaultDelim)+ [[Plain [Str "A",Space,Str "figure"]]+ ,[Plain [Str "First",Space,Str "figure"]]+ ,[Plain [Str "Second",Space,Str "figure"]]+ ,[Plain [Str "Third",Space,Str "figure"]]]+ ,Header 2 ("list-of-tables",[],[]) [Str "List",Space,Str "of",Space,Str "Tables"]+ ,OrderedList (1,DefaultStyle,DefaultDelim)+ [[Plain [Str "Table",Space,Str "example"]]]+ ,Header 1 ("",[],[]) [Str "List",Space,Str "of",Space,Str "Listings"]+ ,OrderedList (1,DefaultStyle,DefaultDelim)+ [[Plain [Str "Listing",Space,Str "caption"]]+ ,[Plain [Str "Listing",Space,Str "caption"]]+ ,[Plain [Str "Listing",Space,Str "caption"]]]+ ,Header 1 ("sec:appendix-a.-custom-labels",[],[("label","AppA")]) [Str "Appendix",Space,Str "A.",Space,Str "Custom",Space,Str "labels"]+ ,Header 2 ("sec:custlabs",[],[("label","CustLab")]) [Str "This",Space,Str "section",Space,Str "will",Space,Str "have",Space,Str "custom",Space,Str "label"]]++demochapters :: [Block]+demochapters =+ [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "demo",Space,Str "file",Space,Str "for",Space,Str "pandoc-crossref.",Space,Str "With",Space,Str "this",Space,Str "filter,",Space,Str "you",Space,Str "can",Space,Str "cross-reference",Space,Str "figures",Space,Str "(see",Space,Str "figs.\160\&1.1-1.3",Str "),",Space,Str "display",Space,Str "equations",Space,Str "(see",Space,Str "eq.\160\&2.1",Str "),",Space,Str "tables",Space,Str "(see",Space,Str "tbl.\160\&3.1",Str ")",Space,Str "and",Space,Str "sections",Space,Str "(",Str "secs.\160\&1,",Space,Str "2,",Space,Str "4.1-4.3",Str ")"]+ ,Para [Str "For",Space,Str "immediate",Space,Str "example,",Space,Str "see",Space,Str "fig.\160\&1"]+ ,Para [Image ("fig:figure0",[],[]) [Str "Figure",Space,Str "#",Space,Str "1:",Space,Str "A",Space,Str "figure"] ("img1.jpg","fig:")]+ ,Para [Str "There",Space,Str "is",Space,Str "also",Space,Str "support",Space,Str "for",Space,Str "code",Space,Str "blocks,",Space,Str "for",Space,Str "example,",Space,Str "lsts.\160\&4.1-4.3"]+ ,Para [Str "It's",Space,Str "possible",Space,Str "to",Space,Str "capitalize",Space,Str "reference",Space,Str "prefixes,",Space,Str "like",Space,Str "this:",Space,Str "Fig.\160\&1.1",Str "."]+ ,Para [Str "In",Space,Str "case",Space,Str "of",Space,Str "multiple",Space,Str "references,",Space,Str "capitalization",Space,Str "is",Space,Str "determined",Space,Str "by",Space,Str "first",Space,Str "reference.",Space,Str "Figs.\160\&1.1,",Space,Str "1.2",Space,Str "is",Space,Str "capitalized,",Space,Str "while",Space,Str "figs.\160\&1.1,",Space,Str "1.2",Space,Str "is",Space,Str "not."]+ ,Para [Str "It",Space,Str "is",Space,Str "also",Space,Str "possible",Space,Str "to",Space,Str "mix",Space,Str "different",Space,Str "references,",Space,Str "like",Space,Str "fig.\160\&1.1",Str ",",Space,Str "tbl.\160\&3.1",Str ",",Space,Str "lsts.\160\&4.1,",Space,Str "4.2",Str ",",Space,Str "figs.\160\&1.2,",Space,Str "1.3",Str ",",Space,Str "which",Space,Str "will",Space,Str "be",Space,Str "grouped",Space,Str "in",Space,Str "order",Space,Str "they",Space,Str "are",Space,Str "specified.",Space,Str "You",Space,Str "can",Space,Str "even",Space,Str "intermix",Space,Str "this",Space,Str "with",Space,Str "regular",Space,Str "citations,",Space,Str "although",Space,Str "it's",Space,Str "not",Space,Str "recommended:",Space,Str "fig.\160\&1.1",Str ",",Space,Str "tbl.\160\&3.1",Str ",",Space,Cite [Citation {citationId = "unprocessedCitation", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@unprocessedCitation]"]]+ ,Para [Str "You",Space,Str "can",Space,Str "also",Space,Str "have",Space,Str "custom",Space,Str "chapter",Space,Str "reference",Space,Str "labels,",Space,Str "like",Space,Str "sec.\160AppA.CustLab"]+ ,Header 1 ("sec:sec1",[],[]) [Str "Chapter",Space,Str "1.",Space,Str "Figures"]+ ,Para [Image ("fig:figure1",[],[]) [Str "Figure",Space,Str "#",Space,Str "1.1:",Space,Str "First",Space,Str "figure"] ("img1.jpg","fig:")]+ ,Para [Image ("fig:figure2",[],[]) [Str "Figure",Space,Str "#",Space,Str "1.2:",Space,Str "Second",Space,Str "figure"] ("img2.jpg","fig:")]+ ,Para [Image ("fig:figure3",[],[]) [Str "Figure",Space,Str "#",Space,Str "1.3:",Space,Str "Third",Space,Str "figure"] ("img3.jpg","fig:")]+ ,Para [Image ("",[],[]) [Str "Unlabelled",Space,Str "image"] ("img1.jpg","fig:")]+ ,Header 1 ("sec:sec2",[],[]) [Str "Chapter",Space,Str "2.",Space,Str "Equations"]+ ,Para [Str "Display",Space,Str "equations",Space,Str "are",Space,Str "labelled",Space,Str "and",Space,Str "numbered"]+ ,Para [Math DisplayMath " P_i(x) = \\sum_i a_i x^i \\qquad(2.1)"]+ ,Para [Str "Since",Space,Str "0.1.6.0",Space,Str "those",Space,Str "can",Space,Str "also",Space,Str "appear",Space,Str "in",Space,Str "the",Space,Str "middle",Space,Str "of",Space,Str "paragraph",SoftBreak,Math DisplayMath "a x^2 + b x^2 + c = 0\\qquad(2.2)",Space,Str "like",Space,Str "this."]+ ,Header 1 ("sec:chapter-3.-tables",[],[]) [Str "Chapter",Space,Str "3.",Space,Str "Tables"]+ ,Table [Emph [Str "Table",Space,Str "3.1"],Str ":",Space,Str "Table",Space,Str "example"] [AlignLeft,AlignLeft] [0.0,0.0]+ [[Plain [Str "First",Space,Str "Header"]]+ ,[Plain [Str "Second",Space,Str "Header"]]]+ [[[Plain [Str "Content",Space,Str "Cell"]]+ ,[Plain [Str "Content",Space,Str "Cell"]]]+ ,[[Plain [Str "Content",Space,Str "Cell"]]+ ,[Plain [Str "Content",Space,Str "Cell"]]]]+ ,Para [Str "Table",Space,Str "without",Space,Str "caption:"]+ ,Table [] [AlignLeft,AlignLeft] [0.0,0.0]+ [[Plain [Str "First",Space,Str "Header"]]+ ,[Plain [Str "Second",Space,Str "Header"]]]+ [[[Plain [Str "Content",Space,Str "Cell"]]+ ,[Plain [Str "Content",Space,Str "Cell"]]]+ ,[[Plain [Str "Content",Space,Str "Cell"]]+ ,[Plain [Str "Content",Space,Str "Cell"]]]]+ ,Header 1 ("sec:chapter-4.-code-blocks",[],[]) [Str "Chapter",Space,Str "4.",Space,Str "Code",Space,Str "blocks"]+ ,Para [Str "There",Space,Str "are",Space,Str "a",Space,Str "couple",Space,Str "options",Space,Str "for",Space,Str "code",Space,Str "block",Space,Str "labels.",Space,Str "Those",Space,Str "work",Space,Str "only",Space,Str "if",Space,Str "code",Space,Str "block",Space,Str "id",Space,Str "starts",Space,Str "with",Space,Code ("",[],[]) "lst:",Str ",",Space,Str "e.g.",Space,Code ("",[],[]) "{#lst:label}"]+ ,Header 2 ("sec:caption-attr",[],[]) [Code ("",[],[]) "caption",Space,Str "attribute"]+ ,Para [Code ("",[],[]) "caption",Space,Str "attribute",Space,Str "will",Space,Str "be",Space,Str "treated",Space,Str "as",Space,Str "code",Space,Str "block",Space,Str "caption.",Space,Str "If",Space,Str "code",Space,Str "block",Space,Str "has",Space,Str "both",Space,Str "id",Space,Str "and",Space,Code ("",[],[]) "caption",Space,Str "attributes,",Space,Str "it",Space,Str "will",Space,Str "be",Space,Str "treated",Space,Str "as",Space,Str "numbered",Space,Str "code",Space,Str "block."]+ ,Div ("lst:captionAttr",["listing","haskell"],[])+ [Para [Str "Listing",Space,Str "4.1:",Space,Str "Listing",Space,Str "caption"]+ ,CodeBlock ("",["haskell"],[]) "main :: IO ()\nmain = putStrLn \"Hello World!\""]+ ,Para [RawInline (Format "tex") "\\pagebreak"]+ ,Header 2 ("sec:table-capts",[],[]) [Str "Table-style",Space,Str "captions"]+ ,Para [Str "Enabled",Space,Str "with",Space,Code ("",[],[]) "codeBlockCaptions",Space,Str "metadata",Space,Str "option.",Space,Str "If",Space,Str "code",Space,Str "block",Space,Str "is",Space,Str "immediately",SoftBreak,Str "adjacent",Space,Str "to",Space,Str "paragraph,",Space,Str "starting",Space,Str "with",Space,Code ("",[],[]) "Listing:",Space,Str "or",Space,Code ("",[],[]) ":",Str ",",Space,Str "said",Space,Str "paragraph",Space,Str "will",Space,Str "be",SoftBreak,Str "treated",Space,Str "as",Space,Str "code",Space,Str "block",Space,Str "caption."]+ ,Div ("lst:tableCaption",["listing","haskell"],[])+ [Para [Str "Listing",Space,Str "4.2:",Space,Str "Listing",Space,Str "caption"]+ ,CodeBlock ("",["haskell"],[]) "main :: IO ()\nmain = putStrLn \"Hello World!\""]+ ,Header 2 ("sec:wrapping-div",[],[]) [Str "Wrapping",Space,Str "div"]+ ,Para [Str "Wrapping",Space,Str "code",Space,Str "block",Space,Str "without",Space,Str "label",Space,Str "in",Space,Str "a",Space,Str "div",Space,Str "with",Space,Str "id",Space,Code ("",[],[]) "lst:...",Space,Str "and",Space,Str "class,",Space,Str "starting",Space,Str "with",Space,Code ("",[],[]) "listing",Str ",",Space,Str "and",Space,Str "adding",Space,Str "paragraph",Space,Str "before",Space,Str "code",Space,Str "block,",Space,Str "but",Space,Str "inside",Space,Str "div,",Space,Str "will",Space,Str "treat",Space,Str "said",Space,Str "paragraph",Space,Str "as",Space,Str "code",Space,Str "block",Space,Str "caption."]+ ,Div ("lst:wrappingDiv",["listing","haskell"],[])+ [Para [Str "Listing",Space,Str "4.3:",Space,Str "Listing",Space,Str "caption"]+ ,CodeBlock ("",["haskell"],[]) "main :: IO ()\nmain = putStrLn \"Hello World!\""]+ ,Header 1 ("sec:unnumbered-chapter.",["unnumbered"],[]) [Str "Unnumbered",Space,Str "chapter."]+ ,Para [Str "This",Space,Str "chapter",Space,Str "doesn't",Space,Str "change",Space,Str "chapter",Space,Str "prefix",Space,Str "of",Space,Str "referenced",Space,Str "elements,",Space,Str "instead",Space,Str "keeping",Space,Str "number",Space,Str "of",Space,Str "previous",Space,Str "chapter,",Space,Str "e.g.",SoftBreak,Math DisplayMath " S(x) = \\int_{x_1}^{x_2} a x+b \\ \\mathrm{d}x \\qquad(4.1)"]+ ,Header 1 ("sec:chapter-5.-reference-lists",[],[]) [Str "Chapter",Space,Str "5.",Space,Str "Reference",Space,Str "lists"]+ ,Para [Str "It's",Space,Str "also",Space,Str "possible",Space,Str "to",Space,Str "show",Space,Str "lists",Space,Str "of",Space,Str "figures",Space,Str "and",Space,Str "tables,",Space,Str "like",Space,Str "this:"]+ ,Header 2 ("list-of-figures",[],[]) [Str "List",Space,Str "of",Space,Str "Figures"]+ ,Div ("",["list"],[])+ [Para [Str "1",Space,Str "A",Space,Str "figure"]+ ,Para [Str "1",Str ".",Str "1",Space,Str "First",Space,Str "figure"]+ ,Para [Str "1",Str ".",Str "2",Space,Str "Second",Space,Str "figure"]+ ,Para [Str "1",Str ".",Str "3",Space,Str "Third",Space,Str "figure"]]+ ,Header 2 ("list-of-tables",[],[]) [Str "List",Space,Str "of",Space,Str "Tables"]+ ,Div ("",["list"],[])+ [Para [Str "3",Str ".",Str "1",Space,Str "Table",Space,Str "example"]]+ ,Header 1 ("",[],[]) [Str "List",Space,Str "of",Space,Str "Listings"]+ ,Div ("",["list"],[])+ [Para [Str "4",Str ".",Str "1",Space,Str "Listing",Space,Str "caption"]+ ,Para [Str "4",Str ".",Str "2",Space,Str "Listing",Space,Str "caption"]+ ,Para [Str "4",Str ".",Str "3",Space,Str "Listing",Space,Str "caption"]]+ ,Header 1 ("sec:appendix-a.-custom-labels",[],[("label","AppA")]) [Str "Appendix",Space,Str "A.",Space,Str "Custom",Space,Str "labels"]+ ,Header 2 ("sec:custlabs",[],[("label","CustLab")]) [Str "This",Space,Str "section",Space,Str "will",Space,Str "have",Space,Str "custom",Space,Str "label"]]+#else+demo =+ [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "demo",Space,Str "file",Space,Str "for",Space,Str "pandoc-crossref.",Space,Str "With",Space,Str "this",Space,Str "filter,",Space,Str "you",Space,Str "can",Space,Str "cross-reference",Space,Str "figures",Space,Str "(see",Space,Str "figs.\160\&2-4",Str "),",Space,Str "display",Space,Str "equations",Space,Str "(see",Space,Str "eq.\160\&1",Str "),",Space,Str "tables",Space,Str "(see",Space,Str "tbl.\160\&1",Str ")",Space,Str "and",Space,Str "sections",Space,Str "(",Str "secs.\160\&1,",Space,Str "2,",Space,Str "4.1-4.3",Str ")"]+ ,Para [Str "For",Space,Str "immediate",Space,Str "example,",Space,Str "see",Space,Str "fig.\160\&1"] ,Para [Image [Str "Figure",Space,Str "#",Space,Str "1:",Space,Str "A",Space,Str "figure"] ("img1.jpg","fig:")] ,Para [Str "There",Space,Str "is",Space,Str "also",Space,Str "support",Space,Str "for",Space,Str "code",Space,Str "blocks,",Space,Str "for",Space,Str "example,",Space,Str "lsts.\160\&1-3"] ,Para [Str "It's",Space,Str "possible",Space,Str "to",Space,Str "capitalize",Space,Str "reference",Space,Str "prefixes,",Space,Str "like",Space,Str "this:",Space,Str "Fig.\160\&2",Str "."]@@ -149,4 +298,4 @@ ,Para [Str "4",Str ".",Str "3",Space,Str "Listing",Space,Str "caption"]] ,Header 1 ("sec:appendix-a.-custom-labels",[],[("label","AppA")]) [Str "Appendix",Space,Str "A.",Space,Str "Custom",Space,Str "labels"] ,Header 2 ("sec:custlabs",[],[("label","CustLab")]) [Str "This",Space,Str "section",Space,Str "will",Space,Str "have",Space,Str "custom",Space,Str "label"]]-+#endif
test/test-pandoc-crossref.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} import Test.Hspec import Text.Pandoc hiding (readMarkdown) import Text.Pandoc.Builder@@ -26,6 +27,8 @@ import qualified Native import Paths_pandoc_crossref +import Prelude+ main :: IO () main = hspec $ do describe "References.Blocks.replaceInlines" $ do@@ -65,10 +68,17 @@ -- describe "References.Blocks.divBlocks" describe "References.Blocks.replaceBlocks" $ do+#if MIN_VERSION_pandoc(1,16,0) it "Labels images" $ testBlocks (figure "test.jpg" [] "Test figure" "figure")+ (figure "test.jpg" [] "Figure 1: Test figure" "figure",+ def{imgRefs=M.fromList $ refRec' "fig:figure" 1 "Test figure"})+#else+ it "Labels images" $+ testBlocks (figure "test.jpg" [] "Test figure" "figure") (figure "test.jpg" "fig:" "Figure 1: Test figure" [], def{imgRefs=M.fromList $ refRec' "fig:figure" 1 "Test figure"})+#endif it "Labels equations" $ testBlocks (equation "a^2+b^2=c^2" "equation") (equation "a^2+b^2=c^2\\qquad(1)" [],@@ -263,7 +273,11 @@ testList bs st res = runState (bottomUpM (References.List.listOf defaultOptions) (toList bs)) st `shouldBe` (toList res,st) figure :: String -> String -> String -> String -> Blocks+#if MIN_VERSION_pandoc(1,16,0)+figure src title alt ref = para (imageWith ("fig:" ++ ref, [], []) src ("fig:" ++ title) (text alt))+#else figure src title alt ref = para (image src title (text alt) <> ref' "fig" ref)+#endif section :: String -> Int -> String -> Blocks section text' level label = headerWith ("sec:" ++ label,[],[]) level (text text')