From f0dd0e2cbee4158cfcc01a5570379cbf60b5ddbf Mon Sep 17 00:00:00 2001 From: Kaushal Modi Date: Mon, 23 Apr 2018 11:44:49 -0400 Subject: [PATCH] Support image copying for the homepage branch bundle case This is the case when both `HUGO_SECTION` and `HUGO_BUNDLE` are `/`. Fixes https://github.com/kaushalmodi/ox-hugo/issues/155. --- ox-hugo.el | 18 +++++++++---- test/site/content-org/all-posts.org | 25 +++++++++++++----- .../images-in-content/images-in-content.org | 9 +++++++ .../images/_home/org-copy-3.png | Bin 0 -> 7511 bytes test/site/content/_index.md | 9 +++++++ .../content/bundles/page-bundle-a/index.md | 17 +++++++++++- test/site/content/org-copy-3.png | Bin 0 -> 7511 bytes 7 files changed, 66 insertions(+), 12 deletions(-) create mode 100644 test/site/content-org/images-in-content/images/_home/org-copy-3.png create mode 100644 test/site/content/_index.md create mode 100644 test/site/content/org-copy-3.png diff --git a/ox-hugo.el b/ox-hugo.el index a9b1fbd..f8b991b 100644 --- a/ox-hugo.el +++ b/ox-hugo.el @@ -1907,11 +1907,18 @@ INFO is a plist used as a communication channel." (exportables org-hugo-external-file-extensions-allowed-for-copying) (bundle-dir (and (plist-get info :hugo-bundle) (org-hugo--get-pub-dir info))) - (bundle-name (and bundle-dir ;`bundle-dir'="/foo/bar/" -> `bundle-name'="bar" - (file-name-base - (if (string-match (concat "\\(?:/\\)\\'") bundle-dir) - (replace-match "" nil nil bundle-dir) - bundle-dir)))) + (bundle-name (when bundle-dir + (let* ((content-dir (file-truename + (file-name-as-directory (expand-file-name + "content" + (file-name-as-directory + (plist-get info :hugo-base-dir)))))) + (is-home-branch-bundle (string= bundle-dir content-dir))) + (cond + (is-home-branch-bundle + "_home") + (t ;`bundle-dir'="/foo/bar/" -> `bundle-name'="bar" + (file-name-base (directory-file-name bundle-dir))))))) (static-dir (file-truename (concat (file-name-as-directory (plist-get info :hugo-base-dir)) @@ -1924,6 +1931,7 @@ INFO is a plist used as a communication channel." ;; (message "[ox-hugo DBG attch rewrite] path: %s" path) ;; (message "[ox-hugo DBG attch rewrite] path-true: %s" path-true) ;; (message "[ox-hugo DBG attch rewrite] bundle-dir: %s" bundle-dir) + ;; (message "[ox-hugo DBG attch rewrite] bundle-name: %s" bundle-name) ;; (message "[ox-hugo DBG attch rewrite] default-dir: %s" default-directory) ;; (message "[ox-hugo DBG attch rewrite] dest-dir: %s" dest-dir) (if (and (file-exists-p path-true) diff --git a/test/site/content-org/all-posts.org b/test/site/content-org/all-posts.org index 42f56f3..41acd80 100644 --- a/test/site/content-org/all-posts.org +++ b/test/site/content-org/all-posts.org @@ -2033,12 +2033,25 @@ same as those for non-bundle cases. [[../files-to-be-copied-to-static/static/images/copy-of-unicorn-logo-page-bundle.png]] ***** Source path contains the *bundle name* -|-------------------------------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------| -| Inside == | Copied-to location inside BUNDLE | Explanation | -|-------------------------------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------| -| =/bar//baz/foo.png= | =/content/
//baz/foo.png= | If the file directory path contains ="//"=, the directory structure following that ="//"= is preserved. | -|-------------------------------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------| -See [[/images-in-content/page-bundle-images-in-same-dir/][this other test]] for an example. +See [[/images-in-content/page-bundle-images-in-same-dir/][this other test]] for examples. +|-------------------------------------------+----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------| +| Inside == | Copied-to location inside BUNDLE | Explanation | +|-------------------------------------------+----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------| +| =/bar//baz/foo.png= | =/content/
//baz/foo.png= | If the file directory path contains ="//"=, the directory structure following that ="//"= is preserved. | +|-------------------------------------------+----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------| +****** Special case: Home page branch bundle +In this case, both =HUGO_SECTION= and =HUGO_BUNDLE= values will be +=/=. + +So the images to be copied to the *home page branch bundle* i.e. the +=content/= dir must be placed in a special =_home/= directory. Here +are some examples: +|----------------------------------------+---------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Inside == | Copied-to location inside BUNDLE | Explanation | +|----------------------------------------+---------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| =/bar/_home/baz/foo.png= | =/content/baz/foo.png= | If the page is the home page branch bundle, and the file directory path contains ~"/_home/"~, the directory structure following that ~"/_home/"~ is preserved. | +| =/bar/_home/foo.png= | =/content/foo.png= | | +|----------------------------------------+---------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------| ***** Source path contains neither =/static/= nor the *bundle name* [[../files-to-be-copied-to-static/foo/copy-2-of-unicorn-logo.png]] |----------------------------------+--------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------| diff --git a/test/site/content-org/images-in-content/images-in-content.org b/test/site/content-org/images-in-content/images-in-content.org index dadec6e..26e7809 100644 --- a/test/site/content-org/images-in-content/images-in-content.org +++ b/test/site/content-org/images-in-content/images-in-content.org @@ -67,6 +67,15 @@ source Org file of this post. [[file:images/page-bundle-images-in-same-dir/org-copy-2.png][file:images/page-bundle-images-in-same-dir/org-copy-2.png]] ** Link to an image in a subdir in the same dir as this Org file [[file:images/org-copy-1.png][file:images/org-copy-1.png]] +* Home page Branch Bundle with image :homepage:branch:image:bundle: +:PROPERTIES: +:EXPORT_HUGO_SECTION: / +:EXPORT_HUGO_BUNDLE: / +:EXPORT_FILE_NAME: _index +:END: +Image in homepage branch bundle: + +[[file:images/_home/org-copy-3.png][file:images/_home/org-copy-3.png]] * Footnotes * COMMENT Local Variables :ARCHIVE: # Local Variables: diff --git a/test/site/content-org/images-in-content/images/_home/org-copy-3.png b/test/site/content-org/images-in-content/images/_home/org-copy-3.png new file mode 100644 index 0000000000000000000000000000000000000000..e76f136b78cef7f88578443ecc1ef20b1ae1717d GIT binary patch literal 7511 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 rV%Wm}l7;_a3;#}} diff --git a/test/site/content/bundles/page-bundle-a/index.md b/test/site/content/bundles/page-bundle-a/index.md index 92f5d48..e7456d8 100644 --- a/test/site/content/bundles/page-bundle-a/index.md +++ b/test/site/content/bundles/page-bundle-a/index.md @@ -28,11 +28,26 @@ same as those for non-bundle cases. ### Source path contains the **bundle name** {#source-path-contains-the-bundle-name} +See [this other test](/images-in-content/page-bundle-images-in-same-dir/) for examples. + | Inside `` | Copied-to location inside BUNDLE | Explanation | |-------------------------------------------|----------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------| | `/bar//baz/foo.png` | `/content/
//baz/foo.png` | If the file directory path contains `"//"`, the directory structure following that `"//"` is preserved. | -See [this other test](/images-in-content/page-bundle-images-in-same-dir/) for an example. + +#### Special case: Home page branch bundle {#special-case-home-page-branch-bundle} + +In this case, both `HUGO_SECTION` and `HUGO_BUNDLE` values will be +`/`. + +So the images to be copied to the **home page branch bundle** i.e. the +`content/` dir must be placed in a special `_home/` directory. Here +are some examples: + +| Inside `` | Copied-to location inside BUNDLE | Explanation | +|----------------------------------------|---------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `/bar/_home/baz/foo.png` | `/content/baz/foo.png` | If the page is the home page branch bundle, and the file directory path contains `"/_home/"`, the directory structure following that `"/_home/"` is preserved. | +| `/bar/_home/foo.png` | `/content/foo.png` | | ### Source path contains neither `/static/` nor the **bundle name** {#source-path-contains-neither-static-nor-the-bundle-name} diff --git a/test/site/content/org-copy-3.png b/test/site/content/org-copy-3.png new file mode 100644 index 0000000000000000000000000000000000000000..e76f136b78cef7f88578443ecc1ef20b1ae1717d GIT binary patch literal 7511 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 rV%Wm}l7;_a3;#