diff --git a/project.clj b/project.clj
index c92f098..b753cd1 100644
--- a/project.clj
+++ b/project.clj
@@ -17,6 +17,7 @@
[hiccup "1.0.5"]
[im.chit/cronj "1.4.4"]
[image-resizer "0.1.10"]
+ [instaparse "1.4.10"]
[lib-noir "0.9.9" :exclusions [org.clojure/tools.reader]]
[markdown-clj "0.9.99" :exclusions [com.keminglabs/cljx]]
[me.raynes/fs "1.4.6"]
diff --git a/resources/config.edn b/resources/config.edn
index 35a85e4..059dfeb 100644
--- a/resources/config.edn
+++ b/resources/config.edn
@@ -36,7 +36,7 @@
"vis" smeagol.formatting/process-vega
"mermaid" smeagol.extensions.mermaid/process-mermaid
"backticks" smeagol.formatting/process-backticks
- "pswp" smeagol.formatting/process-photoswipe}
+ "pswp" smeagol.extensions.photoswipe/process-photoswipe}
:log-level :info ;; the minimum logging level; one of
;; :trace :debug :info :warn :error :fatal
:js-from :cdnjs ;; where to load JavaScript libraries
diff --git a/resources/public/content/Example gallery.md b/resources/public/content/Example gallery.md
index 8379206..a2fcd00 100644
--- a/resources/public/content/Example gallery.md
+++ b/resources/public/content/Example gallery.md
@@ -1,26 +1,3 @@
-## The Gallery
-
-This page holds an example Photoswipe gallery.
-
-```pswp
-{
- slides: [
- { src: 'content/uploads/g1.jpg', w: 2592, h:1944,
- title: 'Frost on a gate, Laurieston' },
- { src: 'content/uploads/g2.jpg', w: 2560, h:1920,
- title: 'Feathered crystals on snow surface, Taliesin' },
- { src: 'content/uploads/g3.jpg', w: 2560, h:1920,
- title: 'Feathered snow on log, Taliesin' },
- { src: 'content/uploads/g4.jpg', w: 2560, h:1920,
- title: 'Crystaline growth on seed head, Taliesin' }],
- options: {
- timeToIdle: 100
- },
- openImmediately: true
-}
-
-```
-
## How this works
The specification for this gallery is as follows:
@@ -57,3 +34,27 @@ Optional. The value of `options` is a JSON object [as documented here](https://p
### openImmediately
Optional. If the value of `openImmediately` is `true`, the gallery will open immediately, covering the whole page. If false, only a button with the label 'Open the gallery' will be shown. Selecting this button will cause the gallery to open.
+
+## The Gallery
+
+This page holds an example Photoswipe gallery.
+
+```pswp
+{
+ slides: [
+ { src: 'content/uploads/g1.jpg', w: 2592, h:1944,
+ title: 'Frost on a gate, Laurieston' },
+ { src: 'content/uploads/g2.jpg', w: 2560, h:1920,
+ title: 'Feathered crystals on snow surface, Taliesin' },
+ { src: 'content/uploads/g3.jpg', w: 2560, h:1920,
+ title: 'Feathered snow on log, Taliesin' },
+ { src: 'content/uploads/g4.jpg', w: 2560, h:1920,
+ title: 'Crystaline growth on seed head, Taliesin' }],
+ options: {
+ timeToIdle: 100
+ },
+ openImmediately: true
+}
+
+```
+
diff --git a/resources/public/content/Extensible Markup.md b/resources/public/content/Extensible Markup.md
index 3bc8301..41c9873 100644
--- a/resources/public/content/Extensible Markup.md
+++ b/resources/public/content/Extensible Markup.md
@@ -68,9 +68,8 @@ data/classes.mermaid
## Photoswipe galleries
-Not so much a formatter, this is an extension to allow you to embed image galleries in your markdown. To specify a gallery, use three backticks followed by `pswp`, followed on the following lines by a Photoswipe specification in [JSON](https://www.json.org/json-en.html)
-followed by three backticks on a line by themselves. There is an [[Example gallery]] so that you can see how this works.
-
+Not so much a formatter, this is an extension to allow you to embed image galleries in your markdown. To specify a gallery, use three backticks followed by `pswp`, followed on the following lines by a [Photoswipe](https://photoswipe.com/documentation/getting-started.html) specification in [JSON](https://www.json.org/json-en.html)
+followed by three backticks on a line by themselves. There is an [[Example gallery]] with the full PhotoSwipe configuration, and a [[Simplified example gallery]] using a much simpler syntax, so that you can see how this works.
## Writing your own custom formatters
diff --git a/resources/public/content/Simplified example gallery.md b/resources/public/content/Simplified example gallery.md
new file mode 100644
index 0000000..4cff2da
--- /dev/null
+++ b/resources/public/content/Simplified example gallery.md
@@ -0,0 +1,24 @@
+## How this works
+
+The specification for this gallery is as follows:
+
+```
+
+
+
+
+```
+
+That's all there is to it - a sequence of image links just as you'd write them anywhere else in the wiki.
+
+## The Gallery
+
+This page holds another example Photoswipe gallery, this time using a simpler, Markdown-based specification. Processing this specification takes more work than the full syntax used in the other [Example gallery], so the gallery may be slower to load; but it's much easier to configure.
+
+```pswp
+
+
+
+
+```
+
diff --git a/src/smeagol/extensions/mermaid.clj b/src/smeagol/extensions/mermaid.clj
index 9fe271b..6185b5d 100644
--- a/src/smeagol/extensions/mermaid.clj
+++ b/src/smeagol/extensions/mermaid.clj
@@ -1,4 +1,4 @@
-(ns ^{:doc "Format Semagol's extended markdown format."
+(ns ^{:doc "Mermaid formatter for Semagol's extendsible markdown format."
:author "Simon Brooke"}
smeagol.extensions.mermaid
(:require [smeagol.extensions.utils :refer :all]
diff --git a/src/smeagol/extensions/photoswipe.clj b/src/smeagol/extensions/photoswipe.clj
new file mode 100644
index 0000000..764a7a4
--- /dev/null
+++ b/src/smeagol/extensions/photoswipe.clj
@@ -0,0 +1,181 @@
+(ns ^{:doc "Photoswipe gallery formatter for Semagol's extendsible markdown
+ format."
+ :author "Simon Brooke"}
+ smeagol.extensions.photoswipe
+ (:require [clojure.data.json :as json]
+ [clojure.java.io :as cio]
+ [clojure.string :as cs]
+ [image-resizer.util :refer [buffered-image dimensions]]
+ [instaparse.core :as insta]
+ [me.raynes.fs :as fs]
+ [noir.io :as io]
+ [smeagol.configuration :refer [config]]
+ [smeagol.extensions.utils :refer :all]
+ [taoensso.timbre :as log]))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;
+;;;; Smeagol: a very simple Wiki engine.
+;;;;
+;;;; This program is free software; you can redistribute it and/or
+;;;; modify it under the terms of the GNU General Public License
+;;;; as published by the Free Software Foundation; either version 2
+;;;; of the License, or (at your option) any later version.
+;;;;
+;;;; This program is distributed in the hope that it will be useful,
+;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;;; GNU General Public License for more details.
+;;;;
+;;;; You should have received a copy of the GNU General Public License
+;;;; along with this program; if not, write to the Free Software
+;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+;;;; USA.
+;;;;
+;;;; Copyright (C) 2017 Simon Brooke
+;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defn process-full-photoswipe
+ "Process a specification for a photoswipe gallery, using a JSON
+ specification based on that documented on the Photoswipe website."
+ [^String spec ^Integer index]
+ (str
+ "