|
@@ -2,6 +2,9 @@
|
|
|
|
|
|
import os
|
|
|
import warnings
|
|
|
+import logging
|
|
|
+
|
|
|
+logger = logging.getLogger(__name__)
|
|
|
|
|
|
from pelican import readers
|
|
|
from pelican import signals
|
|
@@ -9,8 +12,6 @@ from pelican import settings
|
|
|
from pelican.utils import pelican_open
|
|
|
from markdown import Markdown
|
|
|
|
|
|
-#import pelicanconf
|
|
|
-
|
|
|
knitr = None
|
|
|
rmd = False
|
|
|
|
|
@@ -23,33 +24,46 @@ def initsignal(pelicanobj):
|
|
|
knitr = importr('knitr')
|
|
|
idx = knitr.opts_knit.names.index('set')
|
|
|
PATH = pelicanobj.settings.get('PATH','%s/content' % settings.DEFAULT_CONFIG.get('PATH'))
|
|
|
+ logger.debug("RMD_READER PATH = %s", PATH)
|
|
|
knitr.opts_knit[idx](**{'base.dir': PATH})
|
|
|
- idy = knitr.opts_chunk.names.index('set')
|
|
|
- knitroptschunk = pelicanobj.settings.get('KNITR_OPTS_CHUNK',None)
|
|
|
+ idx = knitr.opts_chunk.names.index('set')
|
|
|
+ knitroptschunk = pelicanobj.settings.get('RMD_READER_KNITR_OPTS_CHUNK', None)
|
|
|
if knitroptschunk is not None:
|
|
|
- knitr.opts_chunk[idy](**{str(k): v for k,v in knitroptschunk.iteritems()})
|
|
|
+ knitr.opts_chunk[idx](**{str(k): v for k,v in knitroptschunk.iteritems()})
|
|
|
rmd = True
|
|
|
- except ImportError:
|
|
|
+ except ImportError as ex:
|
|
|
rmd = False
|
|
|
|
|
|
class RmdReader(readers.BaseReader):
|
|
|
- enabled = rmd
|
|
|
file_extensions = ['Rmd', 'rmd']
|
|
|
+
|
|
|
+ @property
|
|
|
+ def enabled():
|
|
|
+ global rmd
|
|
|
+ return rmd
|
|
|
|
|
|
# You need to have a read method, which takes a filename and returns
|
|
|
# some content and the associated metadata.
|
|
|
def read(self, filename):
|
|
|
"""Parse content and metadata of markdown files"""
|
|
|
+ global knitr
|
|
|
+ QUIET = self.settings.get('RMD_READER_KNITR_QUIET', True)
|
|
|
+ ENCODING = self.settings.get('RMD_READER_KNITR_ENCODING', 'UTF-8')
|
|
|
+ CLEANUP = self.settings.get('RMD_READER_CLEANUP', True)
|
|
|
+ logger.debug("RMD_READER_KNITR_QUIET = %s", QUIET)
|
|
|
+ logger.debug("RMD_READER_KNITR_QUIET = %s", ENCODING)
|
|
|
+ logger.debug("RMD_READER_CLEANUP = %s", CLEANUP)
|
|
|
# replace single backslashes with double backslashes
|
|
|
filename = filename.replace('\\', '\\\\')
|
|
|
# parse Rmd file - generate md file
|
|
|
md_filename = filename.replace('.Rmd', '.aux').replace('.rmd', '.aux')
|
|
|
- knitr.knit(filename, md_filename, quiet=True, encoding='UTF-8')
|
|
|
+ knitr.knit(filename, md_filename, quiet=QUIET, encoding=ENCODING)
|
|
|
# read md file - create a MarkdownReader
|
|
|
md_reader = readers.MarkdownReader(self.settings)
|
|
|
content, metadata = md_reader.read(md_filename)
|
|
|
# remove md file
|
|
|
- os.remove(md_filename)
|
|
|
+ if CLEANUP:
|
|
|
+ os.remove(md_filename)
|
|
|
return content, metadata
|
|
|
|
|
|
def add_reader(readers):
|