Explorar el Código

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

Jari Karppinen hace 10 años
padre
commit
cf90d22013
Se han modificado 2 ficheros con 22 adiciones y 9 borrados
  1. 6 4
      rmd_reader/Readme.md
  2. 16 5
      rmd_reader/rmd_reader.py

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 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()