Преглед на файлове

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

Jari Karppinen преди 10 години
родител
ревизия
cf90d22013
променени са 2 файла, в които са добавени 22 реда и са изтрити 9 реда
  1. 6 4
      rmd_reader/Readme.md
  2. 16 5
      rmd_reader/rmd_reader.py

Файловите разлики са ограничени, защото са твърде много
+ 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()