From d3245db3688450e3b7b0e27303b82da89056fbeb Mon Sep 17 00:00:00 2001 From: sejo Date: Tue, 14 Dec 2021 14:09:25 -0600 Subject: [PATCH] support for images --- Makefile | 2 +- README.md | 33 ++++++++++++++---- example-gpub/book/chapter1.gmi | 2 ++ example-gpub/book/cover.gmi | 5 +++ example-gpub/book/img/screencap_uxn-pong.gif | Bin 0 -> 77531 bytes .../book/img/screenshot_uxn-pong-paddle.png | Bin 0 -> 892 bytes .../screenshot_uxn-pong-paddles-and-ball.png | Bin 0 -> 1077 bytes .../book/img/screenshot_uxn-pong-paddles.png | Bin 0 -> 963 bytes example-gpub/book/index.gmi | 1 + g2e.awk | 32 +++++++++++++++-- 10 files changed, 65 insertions(+), 10 deletions(-) create mode 100644 example-gpub/book/cover.gmi create mode 100644 example-gpub/book/img/screencap_uxn-pong.gif create mode 100644 example-gpub/book/img/screenshot_uxn-pong-paddle.png create mode 100644 example-gpub/book/img/screenshot_uxn-pong-paddles-and-ball.png create mode 100644 example-gpub/book/img/screenshot_uxn-pong-paddles.png diff --git a/Makefile b/Makefile index 6efa8b7..5c189d9 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ clean: - rm -r out/ + rm -r out/ out.epub example-gpub: cd example-gpub; zip -r ../example-book.gpub *; cd - diff --git a/README.md b/README.md index 71952f1..30967ce 100644 --- a/README.md +++ b/README.md @@ -26,15 +26,36 @@ awk -f g2e.awk example-gpub/ # notes -the converter works with gempub archives that have a flat file structure: all the `.gmi` files, including `index.gmi`, have to be in the same directory. see the provided `example-gpub/`. +## file structure + +the converter works with gempub archives that have a flat file structure: all the `.gmi` files, including `index.gmi`, have to be in the same directory. + +furthermore, the image assets for the book have to be inside that directory, within a directory called `img/`. + +for example, the structure for `example-gpub` is: + +``` +example-gpub/ + metadata.txt + book/ + index.gmi + cover.gmi + chapter1.gmi + chapter2.gmi + chapter3.gmi + img/ + screencap_uxn-pong.gif + screenshot_uxn-pong-paddle.png + screenshot_uxn-pong-paddles-and-ball.png + screenshot_uxn-pong-paddles.png +``` + +note that only `.gmi`, `.png`, `.jpg` and `.gif` files are handled. + +## raw html you can insert raw html using the corresponding `.gmo` syntax: the contents of a line that starts with `+` will be inserted as is. -# TODO - -* handle non-gmi files in the manifest -* handle links to images - # references * [EPUB - Wikipedia](https://en.wikipedia.org/wiki/EPUB#Implementation) diff --git a/example-gpub/book/chapter1.gmi b/example-gpub/book/chapter1.gmi index f6010bd..01403ba 100644 --- a/example-gpub/book/chapter1.gmi +++ b/example-gpub/book/chapter1.gmi @@ -2,6 +2,8 @@ hello! +=> img/screencap_uxn-pong.gif animated pong + > not everything ## this is a second-level heading diff --git a/example-gpub/book/cover.gmi b/example-gpub/book/cover.gmi new file mode 100644 index 0000000..cf4445e --- /dev/null +++ b/example-gpub/book/cover.gmi @@ -0,0 +1,5 @@ +# an example book + +a gpub archive that gets converted to an epub file + +=> img/screenshot_uxn-pong-paddles-and-ball.png screenshot of pong diff --git a/example-gpub/book/img/screencap_uxn-pong.gif b/example-gpub/book/img/screencap_uxn-pong.gif new file mode 100644 index 0000000000000000000000000000000000000000..410f914b3b17c648414aae7c97395c55011ea872 GIT binary patch literal 77531 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 literal 0 HcmV?d00001 diff --git a/example-gpub/book/img/screenshot_uxn-pong-paddle.png b/example-gpub/book/img/screenshot_uxn-pong-paddle.png new file mode 100644 index 0000000000000000000000000000000000000000..d7b011ef14b769fba2a3034578a2a1bf19fc76c8 GIT binary patch literal 892 zcmeAS@N?(olHy`uVBq!ia0y~yVB%n4VDw;N28tX{l3oa;SkfJR9T^xl_H+M9WCijS zl0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(mocC&U#u3)HvJRM2hA#wSvXJCG*KpT@3YNc)Ye?DnRc(`>#XyaW`C${sS*Pk!|EfkUn1Q+ zF{MoS8&Ka8wKwi3(mj1E>SSL<&H!7q)F)#4PG5=oEqbSQ=Pxx$thc$cc#GPZnD?)FK#IZ0z{pV7z*5)HAjH7P%E-*hz*5`5z{nC}Q!>*kach{o>na~m1B0ilpUXO@geCwaJSEZq literal 0 HcmV?d00001 diff --git a/example-gpub/book/img/screenshot_uxn-pong-paddles-and-ball.png b/example-gpub/book/img/screenshot_uxn-pong-paddles-and-ball.png new file mode 100644 index 0000000000000000000000000000000000000000..81257e5fa8e163aa781055b510f8f8f5eb40bc19 GIT binary patch literal 1077 zcmeAS@N?(olHy`uVBq!ia0y~yVB%n4VDw;N28tX{l3oa;SkfJR9T^xl_H+M9WCijS zl0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(mocC&U#GHM2moIVLm!ZQxAkjnf>zE+=(c6_#eSRWaE z)hzMe>;nDVL%%*>e;K5adFa=_edY@{ah_M3V)pQ6%PqAnYC6Wka=r|-bk9=X8Q&utt22f5PG4)&tSUY+yI|(>wTr}^ z?zO!2Oq_WrUiq=w9Xa!kH^2E44l$gZZQ#IWpg3O;7C`^<4psd!uADi?XNR1+&yneB znTI~NbpE)c;``#f=!!{`IoBtfUGko6vd}(ziPt%`lIL6@C&krLzB8~HD(+@C=-|9* z%b;eEC?eb^toF!T*fg=B_TV1QyY(HbpX3~3*vwQZ%r-+59Q`dN|4b5RX3Z{`V^G+y z?|Z4`@wW+aGuCj1ChLDn)BnUR+|`CJ%J3&2CmS-;7)aZrL}HWYL;KkarUb43#oM?0 zxPAu*V?QwasFt`!l%ynUftDnm{r-UW|LpOtg literal 0 HcmV?d00001 diff --git a/example-gpub/book/img/screenshot_uxn-pong-paddles.png b/example-gpub/book/img/screenshot_uxn-pong-paddles.png new file mode 100644 index 0000000000000000000000000000000000000000..717f80cb3cee838d2f1b1b510023c9f9dd2e53c5 GIT binary patch literal 963 zcmeAS@N?(olHy`uVBq!ia0y~yVB%n4VDw;N28tX{l3oa;SkfJR9T^xl_H+M9WCijS zl0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(mocC&U#+Q|cxrZHiSRJ+t>~1YtZx#3S&;2HF%0F-pn3Pd7Xyo)sU=p5jfQ3}%(?qhgfo%(rBh@w}M`E}5zd>SV zaP5qLp0>@L%Wr=Qs+)E0B#?Rf_;UgK);q>CHpHyYjjUS*7VJ;`xzbAgJCB;p^sCEX z&ADSd>%z3pJO702_4Tkd_nC42>GE4gTed!L;{*xrp0VNE9fOC}k+rL0eIlxj8aboY zw$ukP&zMlJnlBvW5BBSi zyDgPchg;-3`mB;Q5&Ja_RE?iSGB6;(aAd_qhUXK=LgqOza^; zoC!3D5}zNFIgd$vo}+I*XV2w;E{8wB#H?E48c~vxSdwa$T$Bo=7>o>z40R1Gbqx(d w42-NyEUXMIwG9lc3=D1zopr05rQsn*aa+ literal 0 HcmV?d00001 diff --git a/example-gpub/book/index.gmi b/example-gpub/book/index.gmi index a0afd33..75ca361 100644 --- a/example-gpub/book/index.gmi +++ b/example-gpub/book/index.gmi @@ -2,6 +2,7 @@ hello! +=> cover.gmi an example book => chapter1.gmi chapter 1: an example => chapter2.gmi chapter 2: another example => chapter3.gmi chapter 3: yet another diff --git a/g2e.awk b/g2e.awk index 100262e..d98642a 100644 --- a/g2e.awk +++ b/g2e.awk @@ -35,10 +35,13 @@ BEGIN{ # setup epub system( "mkdir -p " epubodir "META-INF" ) - system( "mkdir -p " epubodir indexdirname ) + system( "mkdir -p " epubodir indexdirname "img" ) system( "cp -u " tdir "container.xml " epubodir "META-INF/" ) system( "cp -u " tdir "mimetype " epubodir ) system( "cp -u " tdir "style.css " epubodir ) + # copy images +# system( "cp -u " gpubdir indexdirname "img/* " epubodir indexdirname "img/" ) + # read templates templatefiles = "find " tdir " -type f -not -name '.*'" @@ -94,6 +97,21 @@ ARGIND==1{ # skip other lines of the index # when finished reading the index: ARGIND==2 && FNR==1{ + line = $0 + # add images to manifest + while( "find " gpubdir indexdirname "img/ -type f -regextype awk -iregex \".+(png|jpg|gif)$\"" | getline){ + path = $0 + dest = path; sub(gpubdir, "", dest) + fortoc = dest + system( "cp -u " $0 " " epubodir dest) # copy images + mediatype = fortoc~/gif$/ ? "image/gif" : fortoc~/jpg$/ ? "image/jpeg" : "image/png" + id = fortoc + sub(/^.+\//,"",id) + content = content " \n" + } + $0 = line + + # finalize metadata files content = content " \n\n" spinetoc " \n\n" printf content > epubodir "content.opf" @@ -175,10 +193,18 @@ sub(/^>[[:space:]]*/,""){ # links? sub(/^=>[[:space:]]*/,""){ link = $1 - if(link~/gmi$/) sub(/gmi$/,"xhtml",link) text = $2 for(i=3;i<=NF;i++) text = text " " $i - append("

" text "

") + if(link~/gmi$/){ + sub(/gmi$/,"xhtml",link) + append("

" text "

") + } + else if(link~/(gif|jpg|png)$/){ + append("\""") + } + else{ + append("

" text "

") + } next }