Sfoglia il codice sorgente

Use relpath sans ext of markdown source as prefix for figures to avoid overwriting figures with same chunk name.

Jari Karppinen 10 anni fa
parent
commit
cf90d22013
2 ha cambiato i file con 22 aggiunte e 9 eliminazioni
  1. 6 4
      rmd_reader/Readme.md
  2. 16 5
      rmd_reader/rmd_reader.py

File diff suppressed because it is too large
+ 6 - 4
rmd_reader/Readme.md


+ 16 - 5
rmd_reader/rmd_reader.py

@@ -12,9 +12,10 @@ from pelican import settings
 
 knitr = None
 rmd = False
+fig_path = None
 
 def initsignal(pelicanobj):
-    global knitr, rmd, robjects
+    global knitr, rmd, fig_path, robjects
     try:
         with warnings.catch_warnings():
             warnings.simplefilter("ignore")
@@ -31,6 +32,7 @@ def initsignal(pelicanobj):
         idx = knitr.opts_chunk.names.index('set')
         knitroptschunk = pelicanobj.settings.get('RMD_READER_KNITR_OPTS_CHUNK', None)
         if knitroptschunk:
+            fig_path = knitroptschunk['fig.path'] if knitroptschunk.has_key('fig.path') else 'figure/'
             knitr.opts_chunk[idx](**{str(k): v for k,v in knitroptschunk.items()})
         rmd = True
     except ImportError as ex:
@@ -50,7 +52,7 @@ class RmdReader(readers.BaseReader):
         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)
-        RENAME_PLOT = self.settings.get('RMD_READER_RENAME_PLOT', True)
+        RENAME_PLOT = self.settings.get('RMD_READER_RENAME_PLOT', 'chunklabel')
         logger.debug("RMD_READER_KNITR_QUIET = %s", QUIET)
         logger.debug("RMD_READER_KNITR_ENCODING = %s", ENCODING)
         logger.debug("RMD_READER_CLEANUP = %s", CLEANUP)
@@ -59,9 +61,18 @@ class RmdReader(readers.BaseReader):
         filename = filename.replace('\\', '\\\\')
         # parse Rmd file - generate md file
         md_filename = filename.replace('.Rmd', '.aux').replace('.rmd', '.aux')
-        if RENAME_PLOT:
-            chunk_label = os.path.splitext(os.path.basename(filename))[0]
-            logger.debug('Chunk label: %s', chunk_label)
+        if RENAME_PLOT == 'chunklabel' or RENAME_PLOT == 'directory':
+            if RENAME_PLOT == 'chunklabel':
+                chunk_label = os.path.splitext(os.path.basename(filename))[0]
+                logger.debug('Chunk label: %s', chunk_label)
+            elif RENAME_PLOT == 'directory':
+                chunk_label = 'unnamed_chunk'
+                PATH = self.settings.get('PATH','%s/content' % settings.DEFAULT_CONFIG.get('PATH'))
+                src_name = os.path.splitext(os.path.relpath(filename, PATH))[0]
+                idx = knitr.opts_chunk.names.index('set')
+                knitroptschunk = { 'fig.path': os.path.join(fig_path, src_name) }
+                knitr.opts_chunk[idx](**{str(k): v for k,v in knitroptschunk.items()})
+                logger.debug('Figures path: %s, chunk label: %s', knitroptschunk['fig.path'], chunk_label)
             robjects.r('''
 opts_knit$set(unnamed.chunk.label="{unnamed_chunk_label}")
 render_markdown()