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 9 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()