mirror of
https://github.com/jgm/pandoc.git
synced 2026-08-28 17:20:47 +08:00
e0984a43a9
This deprecates the use of the external pandoc-citeproc
filter; citation processing is now built in to pandoc.
* Add dependency on citeproc library.
* Add Text.Pandoc.Citeproc module (and some associated unexported
modules under Text.Pandoc.Citeproc). Exports `processCitations`.
[API change]
* Add data files needed for Text.Pandoc.Citeproc: default.csl
in the data directory, and a citeproc directory that is just
used at compile-time. Note that we've added file-embed as a mandatory
rather than a conditional depedency, because of the biblatex
localization files. We might eventually want to use readDataFile
for this, but it would take some code reorganization.
* Text.Pandoc.Loging: Add `CiteprocWarning` to `LogMessage` and use it
in `processCitations`. [API change]
* Add tests from the pandoc-citeproc package as command tests (including
some tests pandoc-citeproc did not pass).
* Remove instructions for building pandoc-citeproc from CI and
release binary build instructions. We will no longer distribute
pandoc-citeproc.
* Markdown reader: tweak abbreviation support. Don't insert a
nonbreaking space after a potential abbreviation if it comes right before
a note or citation. This messes up several things, including citeproc's
moving of note citations.
* Add `csljson` as and input and output format. This allows pandoc
to convert between `csljson` and other bibliography formats,
and to generate formatted versions of CSL JSON bibliographies.
* Add module Text.Pandoc.Writers.CslJson, exporting `writeCslJson`. [API
change]
* Add module Text.Pandoc.Readers.CslJson, exporting `readCslJson`. [API
change]
* Added `bibtex`, `biblatex` as input formats. This allows pandoc
to convert between BibLaTeX and BibTeX and other bibliography formats,
and to generated formatted versions of BibTeX/BibLaTeX bibliographies.
* Add module Text.Pandoc.Readers.BibTeX, exporting `readBibTeX` and
`readBibLaTeX`. [API change]
* Make "standalone" implicit if output format is a bibliography format.
This is needed because pandoc readers for bibliography formats put
the bibliographic information in the `references` field of metadata;
and unless standalone is specified, metadata gets ignored.
(TODO: This needs improvement. We should trigger standalone for the
reader when the input format is bibliographic, and for the writer
when the output format is markdown.)
* Carry over `citationNoteNum` to `citationNoteNumber`. This was just
ignored in pandoc-citeproc.
* Text.Pandoc.Filter: Add `CiteprocFilter` constructor to Filter.
[API change] This runs the processCitations transformation.
We need to treat it like a filter so it can be placed
in the sequence of filter runs (after some, before others).
In FromYAML, this is parsed from `citeproc` or `{type: citeproc}`,
so this special filter may be specified either way in a defaults file
(or by `citeproc: true`, though this gives no control of positioning
relative to other filters). TODO: we need to add something to the
manual section on defaults files for this.
* Add deprecation warning if `upandoc-citeproc` filter is used.
* Add `--citeproc/-C` option to trigger citation processing.
This behaves like a filter and will be positioned
relative to filters as they appear on the command line.
* Rewrote the manual on citatations, adding a dedicated Citations
section which also includes some information formerly found in
the pandoc-citeproc man page.
* Look for CSL styles in the `csl` subdirectory of the pandoc user data
directory. This changes the old pandoc-citeproc behavior, which looked
in `~/.csl`. Users can simply symlink `~/.csl` to the `csl`
subdirectory of their pandoc user data directory if they want
the old behavior.
* Add support for CSL bibliography entry formatting to LaTeX, HTML,
Ms writers. Added CSL-related CSS to styles.html.
182 lines
6.4 KiB
Haskell
182 lines
6.4 KiB
Haskell
{-# LANGUAGE MonoLocalBinds #-}
|
|
{-# LANGUAGE ScopedTypeVariables #-}
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
{- |
|
|
Module : Text.Pandoc.Readers
|
|
Copyright : Copyright (C) 2006-2020 John MacFarlane
|
|
License : GNU GPL, version 2 or above
|
|
|
|
Maintainer : John MacFarlane <jgm@berkeley.edu>
|
|
Stability : alpha
|
|
Portability : portable
|
|
|
|
This helper module exports the readers.
|
|
|
|
Note: all of the readers assume that the input text has @'\n'@
|
|
line endings. So if you get your input text from a web form,
|
|
you should remove @'\r'@ characters using @filter (/='\r')@.
|
|
|
|
-}
|
|
|
|
module Text.Pandoc.Readers
|
|
(
|
|
-- * Readers: converting /to/ Pandoc format
|
|
Reader (..)
|
|
, readers
|
|
, readDocx
|
|
, readOdt
|
|
, readMarkdown
|
|
, readCommonMark
|
|
, readCreole
|
|
, readDokuWiki
|
|
, readMediaWiki
|
|
, readVimwiki
|
|
, readRST
|
|
, readOrg
|
|
, readLaTeX
|
|
, readHtml
|
|
, readJATS
|
|
, readJira
|
|
, readTextile
|
|
, readDocBook
|
|
, readOPML
|
|
, readHaddock
|
|
, readNative
|
|
, readJSON
|
|
, readTWiki
|
|
, readTikiWiki
|
|
, readTxt2Tags
|
|
, readEPUB
|
|
, readMuse
|
|
, readFB2
|
|
, readIpynb
|
|
, readCSV
|
|
, readCslJson
|
|
, readBibTeX
|
|
, readBibLaTeX
|
|
-- * Miscellaneous
|
|
, getReader
|
|
, getDefaultExtensions
|
|
) where
|
|
|
|
import Control.Monad (unless)
|
|
import Control.Monad.Except (throwError)
|
|
import Data.Aeson
|
|
import qualified Data.ByteString.Lazy as BL
|
|
import Data.Text (Text)
|
|
import qualified Data.Text as T
|
|
import Text.Pandoc.Class
|
|
import Text.Pandoc.Definition
|
|
import Text.Pandoc.Error
|
|
import Text.Pandoc.Extensions
|
|
import Text.Pandoc.Options
|
|
import Text.Pandoc.Readers.CommonMark
|
|
import Text.Pandoc.Readers.Creole
|
|
import Text.Pandoc.Readers.DocBook
|
|
import Text.Pandoc.Readers.Docx
|
|
import Text.Pandoc.Readers.DokuWiki
|
|
import Text.Pandoc.Readers.EPUB
|
|
import Text.Pandoc.Readers.FB2
|
|
import Text.Pandoc.Readers.Ipynb
|
|
import Text.Pandoc.Readers.Haddock
|
|
import Text.Pandoc.Readers.HTML (readHtml)
|
|
import Text.Pandoc.Readers.JATS (readJATS)
|
|
import Text.Pandoc.Readers.Jira (readJira)
|
|
import Text.Pandoc.Readers.LaTeX
|
|
import Text.Pandoc.Readers.Markdown
|
|
import Text.Pandoc.Readers.MediaWiki
|
|
import Text.Pandoc.Readers.Muse
|
|
import Text.Pandoc.Readers.Native
|
|
import Text.Pandoc.Readers.Odt
|
|
import Text.Pandoc.Readers.OPML
|
|
import Text.Pandoc.Readers.Org
|
|
import Text.Pandoc.Readers.RST
|
|
import Text.Pandoc.Readers.Textile
|
|
import Text.Pandoc.Readers.TikiWiki
|
|
import Text.Pandoc.Readers.TWiki
|
|
import Text.Pandoc.Readers.Txt2Tags
|
|
import Text.Pandoc.Readers.Vimwiki
|
|
import Text.Pandoc.Readers.Man
|
|
import Text.Pandoc.Readers.CSV
|
|
import Text.Pandoc.Readers.CslJson
|
|
import Text.Pandoc.Readers.BibTeX
|
|
import qualified Text.Pandoc.UTF8 as UTF8
|
|
import Text.Parsec.Error
|
|
|
|
data Reader m = TextReader (ReaderOptions -> Text -> m Pandoc)
|
|
| ByteStringReader (ReaderOptions -> BL.ByteString -> m Pandoc)
|
|
|
|
-- | Association list of formats and readers.
|
|
readers :: PandocMonad m => [(Text, Reader m)]
|
|
readers = [ ("native" , TextReader readNative)
|
|
,("json" , TextReader readJSON)
|
|
,("markdown" , TextReader readMarkdown)
|
|
,("markdown_strict" , TextReader readMarkdown)
|
|
,("markdown_phpextra" , TextReader readMarkdown)
|
|
,("markdown_github" , TextReader readMarkdown)
|
|
,("markdown_mmd", TextReader readMarkdown)
|
|
,("commonmark" , TextReader readCommonMark)
|
|
,("commonmark_x" , TextReader readCommonMark)
|
|
,("creole" , TextReader readCreole)
|
|
,("dokuwiki" , TextReader readDokuWiki)
|
|
,("gfm" , TextReader readCommonMark)
|
|
,("rst" , TextReader readRST)
|
|
,("mediawiki" , TextReader readMediaWiki)
|
|
,("vimwiki" , TextReader readVimwiki)
|
|
,("docbook" , TextReader readDocBook)
|
|
,("opml" , TextReader readOPML)
|
|
,("org" , TextReader readOrg)
|
|
,("textile" , TextReader readTextile) -- TODO : textile+lhs
|
|
,("html" , TextReader readHtml)
|
|
,("jats" , TextReader readJATS)
|
|
,("jira" , TextReader readJira)
|
|
,("latex" , TextReader readLaTeX)
|
|
,("haddock" , TextReader readHaddock)
|
|
,("twiki" , TextReader readTWiki)
|
|
,("tikiwiki" , TextReader readTikiWiki)
|
|
,("docx" , ByteStringReader readDocx)
|
|
,("odt" , ByteStringReader readOdt)
|
|
,("t2t" , TextReader readTxt2Tags)
|
|
,("epub" , ByteStringReader readEPUB)
|
|
,("muse" , TextReader readMuse)
|
|
,("man" , TextReader readMan)
|
|
,("fb2" , TextReader readFB2)
|
|
,("ipynb" , TextReader readIpynb)
|
|
,("csv" , TextReader readCSV)
|
|
,("csljson" , TextReader readCslJson)
|
|
,("bibtex" , TextReader readBibTeX)
|
|
,("biblatex" , TextReader readBibLaTeX)
|
|
]
|
|
|
|
-- | Retrieve reader, extensions based on formatSpec (format+extensions).
|
|
getReader :: PandocMonad m => Text -> m (Reader m, Extensions)
|
|
getReader s =
|
|
case parseFormatSpec s of
|
|
Left e -> throwError $ PandocAppError
|
|
$ T.intercalate "\n" [T.pack m | Message m <- errorMessages e]
|
|
Right (readerName, extsToEnable, extsToDisable) ->
|
|
case lookup readerName readers of
|
|
Nothing -> throwError $ PandocUnknownReaderError
|
|
readerName
|
|
Just r -> do
|
|
let allExts = getAllExtensions readerName
|
|
let exts = foldr disableExtension
|
|
(foldr enableExtension
|
|
(getDefaultExtensions readerName)
|
|
extsToEnable) extsToDisable
|
|
mapM_ (\ext ->
|
|
unless (extensionEnabled ext allExts) $
|
|
throwError $
|
|
PandocUnsupportedExtensionError
|
|
(T.drop 4 $ T.pack $ show ext) readerName)
|
|
(extsToEnable ++ extsToDisable)
|
|
return (r, exts)
|
|
|
|
-- | Read pandoc document from JSON format.
|
|
readJSON :: PandocMonad m
|
|
=> ReaderOptions -> Text -> m Pandoc
|
|
readJSON _ t =
|
|
case eitherDecode' . BL.fromStrict . UTF8.fromText $ t of
|
|
Right doc -> return doc
|
|
Left e -> throwError $ PandocParseError ("JSON parse error: " <> T.pack e)
|