pandoc_rb 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +45 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +24 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +48 -0
- data/LICENSE +30 -0
- data/LICENSE.txt +31 -0
- data/README.md +83 -0
- data/Rakefile +31 -0
- data/Setup.hs +2 -0
- data/bench/bench.rb +69 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/ext/pandoc_rb/extconf.rb +130 -0
- data/ext/pandoc_rb/pandoc-rb.cabal +74 -0
- data/ext/pandoc_rb/pandoc_rb.c +100 -0
- data/ext/pandoc_rb/src/PandocRb.hs +26 -0
- data/ext/pandoc_rb/src/Text/Pandoc/C.hs +147 -0
- data/ext/pandoc_rb/src/Text/Pandoc/C/Types.hs +73 -0
- data/ext/pandoc_rb/src/Text/Pandoc/C/Utils.hs +78 -0
- data/ext/pandoc_rb/stack.yaml +70 -0
- data/ext/pandoc_rb/test/DetailedSpec.hs +173 -0
- data/lib/pandoc_rb.rb +96 -0
- data/lib/pandoc_rb/error.rb +6 -0
- data/lib/pandoc_rb/parse_failure.rb +11 -0
- data/lib/pandoc_rb/parsec_error.rb +13 -0
- data/lib/pandoc_rb/readers.rb +27 -0
- data/lib/pandoc_rb/version.rb +5 -0
- data/lib/pandoc_rb/writers.rb +46 -0
- data/pandoc_rb.gemspec +37 -0
- data/src/Text/Pandoc/C.hs +217 -0
- data/src/Text/Pandoc/C_stub.h +9 -0
- metadata +206 -0
@@ -0,0 +1,70 @@
|
|
1
|
+
# This file was automatically generated by 'stack init'
|
2
|
+
#
|
3
|
+
# Some commonly used options have been documented as comments in this file.
|
4
|
+
# For advanced use and comprehensive documentation of the format, please see:
|
5
|
+
# http://docs.haskellstack.org/en/stable/yaml_configuration/
|
6
|
+
|
7
|
+
# Resolver to choose a 'specific' stackage snapshot or a compiler version.
|
8
|
+
# A snapshot resolver dictates the compiler version and the set of packages
|
9
|
+
# to be used for project dependencies. For example:
|
10
|
+
#
|
11
|
+
# resolver: lts-3.5
|
12
|
+
# resolver: nightly-2015-09-21
|
13
|
+
# resolver: ghc-7.10.2
|
14
|
+
# resolver: ghcjs-0.1.0_ghc-7.10.2
|
15
|
+
# resolver:
|
16
|
+
# name: custom-snapshot
|
17
|
+
# location: "./custom-snapshot.yaml"
|
18
|
+
resolver: lts-8.19
|
19
|
+
|
20
|
+
# User packages to be built.
|
21
|
+
# Various formats can be used as shown in the example below.
|
22
|
+
#
|
23
|
+
# packages:
|
24
|
+
# - some-directory
|
25
|
+
# - https://example.com/foo/bar/baz-0.0.2.tar.gz
|
26
|
+
# - location:
|
27
|
+
# git: https://github.com/commercialhaskell/stack.git
|
28
|
+
# commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a
|
29
|
+
# - location: https://github.com/commercialhaskell/stack/commit/e7b331f14bcffb8367cd58fbfc8b40ec7642100a
|
30
|
+
# extra-dep: true
|
31
|
+
# subdirs:
|
32
|
+
# - auto-update
|
33
|
+
# - wai
|
34
|
+
#
|
35
|
+
# A package marked 'extra-dep: true' will only be built if demanded by a
|
36
|
+
# non-dependency (i.e. a user package), and its test suites and benchmarks
|
37
|
+
# will not be run. This is useful for tweaking upstream packages.
|
38
|
+
packages:
|
39
|
+
- '.'
|
40
|
+
- location:
|
41
|
+
git: https://github.com/Authorea/pandoc.git
|
42
|
+
commit: 1303092cdfcc3b6f13ab8d2996b6d3c3465279f2
|
43
|
+
extra-dep: true
|
44
|
+
# Dependency packages to be pulled from upstream that are not in the resolver
|
45
|
+
# (e.g., acme-missiles-0.3)
|
46
|
+
extra-deps: []
|
47
|
+
|
48
|
+
# Override default flag values for local packages and extra-deps
|
49
|
+
flags: {}
|
50
|
+
|
51
|
+
# Extra package databases containing global packages
|
52
|
+
extra-package-dbs: []
|
53
|
+
|
54
|
+
# Control whether we use the GHC we find on the path
|
55
|
+
# system-ghc: true
|
56
|
+
#
|
57
|
+
# Require a specific version of stack, using version ranges
|
58
|
+
# require-stack-version: -any # Default
|
59
|
+
# require-stack-version: ">=1.3"
|
60
|
+
#
|
61
|
+
# Override the architecture used by stack, especially useful on Windows
|
62
|
+
# arch: i386
|
63
|
+
# arch: x86_64
|
64
|
+
#
|
65
|
+
# Extra directories used by stack for building
|
66
|
+
# extra-include-dirs: [/path/to/dir]
|
67
|
+
# extra-lib-dirs: [/path/to/dir]
|
68
|
+
#
|
69
|
+
# Allow a newer minor version of GHC than the snapshot specifies
|
70
|
+
# compiler-check: newer-minor
|
@@ -0,0 +1,173 @@
|
|
1
|
+
{-# LANGUAGE PackageImports, NamedFieldPuns #-}
|
2
|
+
{-# LANGUAGE FlexibleInstances #-}
|
3
|
+
|
4
|
+
module DetailedSpec (tests) where
|
5
|
+
|
6
|
+
import qualified Test.QuickCheck as Q
|
7
|
+
import Distribution.TestSuite as TS
|
8
|
+
|
9
|
+
import Control.Monad
|
10
|
+
import Control.Monad.Fix
|
11
|
+
import Control.Monad.Trans.Class
|
12
|
+
import Control.Monad.Trans.Either
|
13
|
+
import Data.Bifunctor
|
14
|
+
import Data.Either
|
15
|
+
import Distribution.TestSuite
|
16
|
+
import Foreign.C.String
|
17
|
+
import Foreign.Marshal.Alloc
|
18
|
+
import Foreign.Ptr
|
19
|
+
import Foreign.Storable
|
20
|
+
import Test.QuickCheck
|
21
|
+
import Text.Pandoc
|
22
|
+
import Text.Pandoc.C
|
23
|
+
import Text.Pandoc.C.Types
|
24
|
+
import Text.Pandoc.C.Utils
|
25
|
+
|
26
|
+
|
27
|
+
instance Show (Bool -> Maybe Int) where
|
28
|
+
show f = concat ["f False = ", show (f False), "; f True = ", show (f True)]
|
29
|
+
|
30
|
+
instance (Arbitrary a, Arbitrary b) => Arbitrary (EitherT a Maybe b) where
|
31
|
+
arbitrary = oneof [ return . EitherT $ Nothing
|
32
|
+
, (EitherT . Just . Left ) <$> arbitrary
|
33
|
+
, (EitherT . Just . Right) <$> arbitrary
|
34
|
+
]
|
35
|
+
|
36
|
+
|
37
|
+
|
38
|
+
testGotCReader :: String -> Property
|
39
|
+
testGotCReader readerStr = ioProperty $ withCStringLen readerStr (fmap isRight . runEitherT . getCReader)
|
40
|
+
|
41
|
+
testGotCWriter :: String -> Property
|
42
|
+
testGotCWriter writerStr = ioProperty $ withCStringLen writerStr (fmap isRight . runEitherT . getCWriter)
|
43
|
+
|
44
|
+
allProps :: (Functor t, Foldable t, Testable prop) => (a -> prop) -> t a -> Property
|
45
|
+
allProps f = foldr (.&&.) (property True) . fmap f
|
46
|
+
|
47
|
+
allPropsIO :: (Applicative t, Traversable t, Testable prop) => (a -> IO prop) -> t a -> Property
|
48
|
+
allPropsIO f = ioProperty . fmap (foldr (.&&.) (property True)) . mapM f
|
49
|
+
|
50
|
+
|
51
|
+
foreign import ccall "dynamic" freerFunc :: FunPtr (Ptr a -> IO ()) -> Ptr a -> IO ()
|
52
|
+
|
53
|
+
|
54
|
+
prop_mapMLIgnoresRight0 :: Bool
|
55
|
+
prop_mapMLIgnoresRight0 = mapML (const $ Just ()) (EitherT (Just (Right True))) == EitherT (Just (Right True))
|
56
|
+
|
57
|
+
prop_mapMLIgnoresRight1 :: Bool
|
58
|
+
prop_mapMLIgnoresRight1 = mapML (const $ Nothing) (EitherT (Just (Right True))) == (EitherT (Just (Right True)) :: EitherT () Maybe Bool)
|
59
|
+
|
60
|
+
prop_mapMLAppliesFunction0 :: Bool
|
61
|
+
prop_mapMLAppliesFunction0 = mapML (const $ Just ()) (EitherT (Just (Left 0))) == (EitherT (Just (Left ())) :: EitherT () Maybe Bool)
|
62
|
+
|
63
|
+
prop_mapMLAppliesFunction1 :: Bool
|
64
|
+
prop_mapMLAppliesFunction1 = mapML (const $ Nothing) (EitherT (Just (Left (0 :: Int)))) == (EitherT Nothing :: EitherT () Maybe Bool)
|
65
|
+
|
66
|
+
prop_mapMRIgnoresRight0 :: Bool
|
67
|
+
prop_mapMRIgnoresRight0 = mapMR (const $ Just ()) (EitherT (Just (Left True))) == EitherT (Just (Left True))
|
68
|
+
|
69
|
+
prop_mapMRIgnoresRight1 :: Bool
|
70
|
+
prop_mapMRIgnoresRight1 = mapMR (const $ Nothing) (EitherT (Just (Left True))) == (EitherT (Just (Left True)) :: EitherT Bool Maybe ())
|
71
|
+
|
72
|
+
prop_mapMRAppliesFunction0 :: Bool
|
73
|
+
prop_mapMRAppliesFunction0 = mapMR (const $ Just ()) (EitherT (Just (Right (0 :: Int)))) == (EitherT (Just (Right ())) :: EitherT Bool Maybe ())
|
74
|
+
|
75
|
+
prop_mapMRAppliesFunction1 :: Bool
|
76
|
+
prop_mapMRAppliesFunction1 = mapMR (const $ Nothing) (EitherT (Just (Right (0 :: Int)))) == (EitherT Nothing :: EitherT Bool Maybe ())
|
77
|
+
|
78
|
+
-- prop_mapMLisSwappedMapMR :: (Bool -> Maybe Int) -> EitherT Bool Maybe () -> Bool
|
79
|
+
-- prop_mapMLisSwappedMapMR f x = mapML f x == swapEitherT (mapMR f (swapEitherT x))
|
80
|
+
|
81
|
+
prop_getCReaderGetsReaders :: Property
|
82
|
+
prop_getCReaderGetsReaders = allProps testGotCReader (fst <$> readers)
|
83
|
+
|
84
|
+
prop_getCWriterGetsWriters :: Property
|
85
|
+
prop_getCWriterGetsWriters = allProps testGotCWriter (fst <$> writers)
|
86
|
+
|
87
|
+
-- prop_convert_hsWorks :: Property
|
88
|
+
-- prop_convert_hsWorks = ioProperty $ do
|
89
|
+
-- readerCStr <- newCStringLen "markdown"
|
90
|
+
-- writerCStr <- newCStringLen "latex"
|
91
|
+
-- inputCStr <- newCStringLen "hi there!"
|
92
|
+
-- readerRStr <- malloc
|
93
|
+
-- writerRStr <- malloc
|
94
|
+
-- inputRStr <- malloc
|
95
|
+
-- readerRStr `poke` second toEnum readerCStr
|
96
|
+
-- writerRStr `poke` second toEnum writerCStr
|
97
|
+
-- inputRStr `poke` second toEnum inputCStr
|
98
|
+
-- resultPtr <- convert_hs readerRStr writerRStr inputRStr
|
99
|
+
-- peek readerRStr >>= free . fst
|
100
|
+
-- peek writerRStr >>= free . fst
|
101
|
+
-- peek inputRStr >>= free . fst
|
102
|
+
-- free readerRStr
|
103
|
+
-- free writerRStr
|
104
|
+
-- free inputRStr
|
105
|
+
-- (success, freer, output) <- peek resultPtr
|
106
|
+
-- if success == 0
|
107
|
+
-- then return False
|
108
|
+
-- else do
|
109
|
+
-- (freerFunc freer) (castPtr resultPtr)
|
110
|
+
-- return True
|
111
|
+
|
112
|
+
|
113
|
+
testTimeoutEitherT :: Testable prop => Int -> (CStringLen -> IO prop) -> (a -> IO prop) -> EitherT CStringLen IO a -> Property
|
114
|
+
testTimeoutEitherT us ifLeft ifRight = ioProperty . eitherT ifLeft ifRight . timeoutEitherT us
|
115
|
+
|
116
|
+
|
117
|
+
prop_timeoutEitherT_times_out_on_0 :: Property
|
118
|
+
prop_timeoutEitherT_times_out_on_0 = testTimeoutEitherT 0 (\(ptr, _) -> free ptr >> return True) (\_->return False) $ return ()
|
119
|
+
|
120
|
+
prop_timeoutEitherT_times_out_on_loose_loop :: Property
|
121
|
+
prop_timeoutEitherT_times_out_on_loose_loop = testTimeoutEitherT 1 (\(ptr, _) -> free ptr >> return True) return $ lift $ mapM_ putStr (repeat "") >> return False
|
122
|
+
|
123
|
+
prop_timeoutEitherT_times_out_on_tight_loop :: Property
|
124
|
+
prop_timeoutEitherT_times_out_on_tight_loop = testTimeoutEitherT 1 (\(ptr, _) -> free ptr >> return True) (return . (== 0)) . lift . mfix $ (return $!)
|
125
|
+
|
126
|
+
prop_timeoutEitherT_does_not_time_out_on_result :: Property
|
127
|
+
prop_timeoutEitherT_does_not_time_out_on_result = testTimeoutEitherT 100 (\(ptr, _) -> free ptr >> return False) return $ return True
|
128
|
+
|
129
|
+
prop_timeoutEitherT_catches_exceptions :: Property
|
130
|
+
prop_timeoutEitherT_catches_exceptions = testTimeoutEitherT 100 (\(ptr, _) -> free ptr >> return True) (\_->return False) . lift . print $ (div 1 0 :: Int)
|
131
|
+
|
132
|
+
-- prop_timeoutEitherT_catches_errors :: Property
|
133
|
+
-- prop_timeoutEitherT_catches_errors = testTimeoutEitherT 100 (\(ptr, _) -> free ptr >> return True) (\_->return False) $ EitherT undefined
|
134
|
+
|
135
|
+
prop_timeoutEitherT_catches_lefts :: Property
|
136
|
+
prop_timeoutEitherT_catches_lefts = testTimeoutEitherT 100 (\(ptr, _) -> free ptr >> return True) (\_->return False) (EitherT $ Left <$> (newCStringLen ""))
|
137
|
+
|
138
|
+
|
139
|
+
toTSResult :: Q.Result -> TS.Result
|
140
|
+
toTSResult Q.Success {} = TS.Pass
|
141
|
+
toTSResult Q.GaveUp {} = TS.Fail "GaveUp"
|
142
|
+
toTSResult Q.Failure {Q.reason} = TS.Fail reason
|
143
|
+
|
144
|
+
runQuickCheck :: Q.Testable p => p -> IO TS.Progress
|
145
|
+
runQuickCheck prop = do
|
146
|
+
qres <- Q.quickCheckWithResult Q.stdArgs {Q.maxSuccess = 30,
|
147
|
+
Q.maxSize = 20} prop
|
148
|
+
return $ (Finished . toTSResult) qres
|
149
|
+
|
150
|
+
tests :: IO [Test]
|
151
|
+
tests = return [
|
152
|
+
Test $ TestInstance (runQuickCheck prop_mapMLIgnoresRight0) "prop_mapMLIgnoresRight0" ["tag"] [] undefined,
|
153
|
+
Test $ TestInstance (runQuickCheck prop_mapMLIgnoresRight1) "prop_mapMLIgnoresRight1" ["tag"] [] undefined,
|
154
|
+
Test $ TestInstance (runQuickCheck prop_mapMLAppliesFunction0) "prop_mapMLAppliesFunction0" ["tag"] [] undefined,
|
155
|
+
Test $ TestInstance (runQuickCheck prop_mapMLAppliesFunction1) "prop_mapMLAppliesFunction1" ["tag"] [] undefined,
|
156
|
+
Test $ TestInstance (runQuickCheck prop_mapMRIgnoresRight0) "prop_mapMRIgnoresRight0" ["tag"] [] undefined,
|
157
|
+
Test $ TestInstance (runQuickCheck prop_mapMRIgnoresRight1) "prop_mapMRIgnoresRight1" ["tag"] [] undefined,
|
158
|
+
Test $ TestInstance (runQuickCheck prop_mapMRAppliesFunction0) "prop_mapMRAppliesFunction0" ["tag"] [] undefined,
|
159
|
+
Test $ TestInstance (runQuickCheck prop_mapMRAppliesFunction1) "prop_mapMRAppliesFunction1" ["tag"] [] undefined,
|
160
|
+
Test $ TestInstance (runQuickCheck prop_getCReaderGetsReaders) "prop_getCReaderGetsReaders" ["tag"] [] undefined,
|
161
|
+
Test $ TestInstance (runQuickCheck prop_getCWriterGetsWriters) "prop_getCWriterGetsWriters" ["tag"] [] undefined,
|
162
|
+
Test $ TestInstance (runQuickCheck prop_timeoutEitherT_times_out_on_0) "prop_timeoutEitherT_times_out_on_0" ["tag"] [] undefined,
|
163
|
+
Test $ TestInstance (runQuickCheck prop_timeoutEitherT_does_not_time_out_on_result) "prop_timeoutEitherT_does_not_time_out_on_result" ["tag"] [] undefined,
|
164
|
+
Test $ TestInstance (runQuickCheck prop_timeoutEitherT_catches_exceptions) "prop_timeoutEitherT_catches_exceptions" ["tag"] [] undefined,
|
165
|
+
-- Test $ TestInstance (runQuickCheck prop_timeoutEitherT_catches_errors) "prop_timeoutEitherT_catches_errors" ["tag"] [] undefined,
|
166
|
+
Test $ TestInstance (runQuickCheck prop_timeoutEitherT_catches_lefts) "prop_timeoutEitherT_catches_lefts" ["tag"] [] undefined,
|
167
|
+
Test $ TestInstance (runQuickCheck prop_timeoutEitherT_times_out_on_loose_loop) "prop_timeoutEitherT_times_out_on_loose_loop" ["tag"] [] undefined,
|
168
|
+
Test $ TestInstance (runQuickCheck prop_timeoutEitherT_times_out_on_tight_loop) "prop_timeoutEitherT_times_out_on_tight_loop" ["tag"] [] undefined
|
169
|
+
]
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
|
data/lib/pandoc_rb.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'pandoc_rb/pandoc_rb'
|
2
|
+
require 'json'
|
3
|
+
require 'pandoc_rb/error'
|
4
|
+
require 'pandoc_rb/parse_failure'
|
5
|
+
require 'pandoc_rb/parsec_error'
|
6
|
+
require 'pandoc_rb/readers'
|
7
|
+
require 'pandoc_rb/version'
|
8
|
+
require 'pandoc_rb/writers'
|
9
|
+
require 'timeout'
|
10
|
+
|
11
|
+
|
12
|
+
module PandocRb
|
13
|
+
def self.raise_exception(result)
|
14
|
+
if /^Unknown reader: / === result
|
15
|
+
raise ArgumentError, result
|
16
|
+
elsif /^Unknown writer: / === result
|
17
|
+
raise ArgumentError, result
|
18
|
+
elsif /^Pandoc timed out/ === result
|
19
|
+
raise Timeout::Error
|
20
|
+
elsif /^Pandoc internal / === result
|
21
|
+
raise PandocRb::Error, result.sub(/^Pandoc internal error: /, '')
|
22
|
+
end
|
23
|
+
result = JSON.parse result
|
24
|
+
if result['tag'] == 'ParseFailure'
|
25
|
+
raise PandocRb::ParseFailure.new(result['contents'])
|
26
|
+
elsif result['tag'] == 'ParsecError'
|
27
|
+
raise PandocRb::ParsecError.new( result['contents'])
|
28
|
+
else
|
29
|
+
raise "Unknown error type returned from pandoc: #{result}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.convert(in_format_str, out_format_str, input_str, extract_media_path='')
|
34
|
+
unless @PandocRb_loaded
|
35
|
+
self.convert_init
|
36
|
+
Kernel.at_exit do
|
37
|
+
PandocRb.convert_exit
|
38
|
+
end
|
39
|
+
@PandocRb_loaded = true
|
40
|
+
end
|
41
|
+
|
42
|
+
if in_format_str.to_s == 'docx'
|
43
|
+
input_str.force_encoding "UTF-8"
|
44
|
+
end
|
45
|
+
|
46
|
+
begin
|
47
|
+
in_format = in_format_str.to_s.encode "UTF-8"
|
48
|
+
out_format = out_format_str.to_s.encode "UTF-8"
|
49
|
+
input = input_str.to_s.encode "UTF-8"
|
50
|
+
extract_media_path = extract_media_path.to_s.encode "UTF-8"
|
51
|
+
success, result = PandocRb.convert_raw in_format, out_format, input, extract_media_path
|
52
|
+
self.raise_exception result if (success == false)
|
53
|
+
result
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.reader_from_ext(extension)
|
58
|
+
{
|
59
|
+
"" => "markdown",
|
60
|
+
".tex" => "latex",
|
61
|
+
".latex" => "latex",
|
62
|
+
".ltx" => "latex",
|
63
|
+
".context" => "context",
|
64
|
+
".ctx" => "context",
|
65
|
+
".rtf" => "rtf",
|
66
|
+
".rst" => "rst",
|
67
|
+
".s5" => "s5",
|
68
|
+
".native" => "native",
|
69
|
+
".json" => "json",
|
70
|
+
".txt" => "markdown",
|
71
|
+
".text" => "markdown",
|
72
|
+
".md" => "markdown",
|
73
|
+
".markdown" => "markdown",
|
74
|
+
".textile" => "textile",
|
75
|
+
".lhs" => "markdown+lhs",
|
76
|
+
".texi" => "texinfo",
|
77
|
+
".texinfo" => "texinfo",
|
78
|
+
".db" => "docbook",
|
79
|
+
".odt" => "odt",
|
80
|
+
".docx" => "docx",
|
81
|
+
".epub" => "epub",
|
82
|
+
".org" => "org",
|
83
|
+
".asciidoc" => "asciidoc",
|
84
|
+
".adoc" => "asciidoc",
|
85
|
+
".pdf" => "latex",
|
86
|
+
".fb2" => "fb2",
|
87
|
+
".opml" => "opml",
|
88
|
+
".icml" => "icml",
|
89
|
+
".tei.xml" => "tei",
|
90
|
+
".tei" => "tei",
|
91
|
+
}[extension&.downcase] || !!extension&.downcase&.match(/\.\d$/)
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
end
|
96
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
module PandocRb
|
3
|
+
class ParsecError < PandocRb::Error
|
4
|
+
attr_accessor :input, :source_name, :line, :column, :messages
|
5
|
+
|
6
|
+
def initialize(json)
|
7
|
+
self.input, parse_error = json
|
8
|
+
source_pos, self.messages = parse_error
|
9
|
+
self.source_name, self.line, self.column = source_pos
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
module PandocRb
|
3
|
+
Readers = [ "commonmark",
|
4
|
+
"docbook",
|
5
|
+
"docx",
|
6
|
+
"epub",
|
7
|
+
"haddock",
|
8
|
+
"html",
|
9
|
+
"json",
|
10
|
+
"latex",
|
11
|
+
"markdown",
|
12
|
+
"markdown_github",
|
13
|
+
"markdown_mmd",
|
14
|
+
"markdown_phpextra",
|
15
|
+
"markdown_strict",
|
16
|
+
"mediawiki",
|
17
|
+
"native",
|
18
|
+
"odt",
|
19
|
+
"opml",
|
20
|
+
"org",
|
21
|
+
"rst",
|
22
|
+
"t2t",
|
23
|
+
"textile",
|
24
|
+
"twiki"
|
25
|
+
]
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
|
2
|
+
module PandocRb
|
3
|
+
Writers = [ "asciidoc",
|
4
|
+
"beamer",
|
5
|
+
"commonmark",
|
6
|
+
"context",
|
7
|
+
"docbook",
|
8
|
+
"docbook5",
|
9
|
+
"docx",
|
10
|
+
"dokuwiki",
|
11
|
+
"dzslides",
|
12
|
+
"epub",
|
13
|
+
"epub3",
|
14
|
+
"fb2",
|
15
|
+
"haddock",
|
16
|
+
"html",
|
17
|
+
"html5",
|
18
|
+
"icml",
|
19
|
+
"json",
|
20
|
+
"latex",
|
21
|
+
"man",
|
22
|
+
"markdown",
|
23
|
+
"markdown_github",
|
24
|
+
"markdown_mmd",
|
25
|
+
"markdown_phpextra",
|
26
|
+
"markdown_strict",
|
27
|
+
"mediawiki",
|
28
|
+
"native",
|
29
|
+
"odt",
|
30
|
+
"opendocument",
|
31
|
+
"opml",
|
32
|
+
"org",
|
33
|
+
"plain",
|
34
|
+
"revealjs",
|
35
|
+
"rst",
|
36
|
+
"rtf",
|
37
|
+
"s5",
|
38
|
+
"slideous",
|
39
|
+
"slidy",
|
40
|
+
"tei",
|
41
|
+
"texinfo",
|
42
|
+
"textile",
|
43
|
+
"zimwiki"
|
44
|
+
]
|
45
|
+
end
|
46
|
+
|