diff options
20 files changed, 2758 insertions, 1 deletions
@@ -66,7 +66,6 @@ x11-toolkits/hs-wxcore||2018-10-23|Has expired: Doesn't build with recent GHC ve devel/hs-TypeCompose||2018-10-23|Has expired: Doesn't build with recent GHC version devel/hs-PSQueue||2018-10-23|Has expired: Doesn't build with recent GHC version devel/hs-blaze-builder-enumerator||2018-10-23|Has expired: Doesn't build with recent GHC version -www/hs-gitit||2018-10-23|Has expired: Doesn't build with newest packages cad/kicad-library||2018-10-25|Has expired: KiCad has been upgraded to 5.0.0 devel/linux-kernel||2018-10-29|Has expired: no longer useful audio/py-musicbrainz2||2018-10-29|Has expired: Musicbrainz Web Service 1.0 support ended 2018-08-01 diff --git a/www/Makefile b/www/Makefile index 8447e307aa86..fce00506ceff 100644 --- a/www/Makefile +++ b/www/Makefile @@ -252,6 +252,7 @@ SUBDIR += hiawatha-monitor SUBDIR += hotcrp SUBDIR += hs-DAV + SUBDIR += hs-gitit SUBDIR += hs-hjsmin SUBDIR += hs-postgrest SUBDIR += hs-wai-app-static diff --git a/www/hs-gitit/Makefile b/www/hs-gitit/Makefile new file mode 100644 index 000000000000..d2aa255c5174 --- /dev/null +++ b/www/hs-gitit/Makefile @@ -0,0 +1,244 @@ +PORTNAME= gitit +PORTVERSION= 0.15.1.1 +CATEGORIES= www haskell + +MAINTAINER= joemann@beefree.free.de +COMMENT= Wiki using happstack and pandoc, and git or darcs or mercurial +WWW= https://github.com/jgm/gitit + +LICENSE= GPLv2 + +USES= cabal + +OPTIONS_DEFINE= PLUGINS EXPORTS +OPTIONS_DEFAULT= PLUGINS + +# "Plugin support makes the gitit executable considerably larger +# and more memory-hungry". (jgm) +PLUGINS_DESC= Enable support for plugins +PLUGINS_CABAL_FLAGS= plugins + +# "This feature is a security risk; it provided multiple +# vectors by which contents of files could be exposed". (jgm) +EXPORTS_DESC= Enable page exports to many formats (insecure!) +# This is the commit which removed the export options: +# https://github.com/jgm/gitit/commit/eed32638f4f6e3b2f4b8a9a04c4b72001acf9ad8 +# To re-enable exports in gitit we have to revert it: +# git diff --no-prefix eed3263 735096f > extra-patch-exports +EXPORTS_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-exports \ + ${PATCHDIR}/extra-patch-data_default.conf \ + ${PATCHDIR}/extra-patch-src_Network_Gitit_Config.hs \ + ${PATCHDIR}/extra-patch-src_Network_Gitit_Export.hs \ + ${PATCHDIR}/extra-patch-src_Network_Gitit_Layout.hs \ + ${PATCHDIR}/extra-patch-src_Network_Gitit_Types.hs +# Besides applying the above patches one also has to set "exports: yes" +# in a gitit instance's config file to enable exports for that instance. + +USE_CABAL= ConfigFile-1.1.4_1 \ + Diff-0.4.1 \ + Glob-0.10.2_3 \ + HStringTemplate-0.8.8_5 \ + HTTP-4000.4.1_2 \ + JuicyPixels-3.3.8 \ + MissingH-1.6.0.0 \ + OneTuple-0.4.1.1 \ + Only-0.1_1 \ + QuickCheck-2.14.3 \ + SHA-1.6.4.4 \ + StateVar-1.2.2 \ + aeson-2.1.2.1_3 \ + aeson-pretty-0.8.10 \ + ansi-terminal-1.0 \ + ansi-terminal-types-0.11.5_1 \ + appar-0.1.8 \ + asn1-encoding-0.9.6_2 \ + asn1-parse-0.9.5 \ + asn1-types-0.3.4 \ + assoc-1.1 \ + async-2.2.4_3 \ + attoparsec-0.14.4_3 \ + base-compat-0.12.2 \ + base-compat-batteries-0.12.2 \ + base-orphans-0.9.0 \ + base16-bytestring-1.0.2.0 \ + base64-0.4.2.4_3 \ + base64-bytestring-1.2.1.0 \ + basement-0.0.16 \ + bifunctors-5.6.1 \ + bitvec-1.1.4.0 \ + blaze-builder-0.4.2.2_1 \ + blaze-html-0.9.1.2_2 \ + blaze-markup-0.8.2.8_4 \ + byteorder-1.0.4 \ + cabal-doctest-1.0.9_3 \ + case-insensitive-1.2.1.0 \ + cassava-0.5.3.0_1 \ + cereal-0.5.8.3 \ + citeproc-0.8.1 \ + colour-2.3.6 \ + commonmark-0.2.3 \ + commonmark-extensions-0.2.3.4 \ + commonmark-pandoc-0.2.1.3 \ + comonad-5.0.8_1 \ + conduit-1.3.5 \ + conduit-extra-1.3.6 \ + contravariant-1.5.5 \ + cookie-0.4.6 \ + cryptohash-md5-0.11.101.0_2 \ + cryptohash-sha1-0.11.101.0_2 \ + crypton-0.33 \ + crypton-connection-0.3.1 \ + crypton-x509-1.7.6_1 \ + crypton-x509-store-1.6.9 \ + crypton-x509-system-1.6.7 \ + crypton-x509-validation-1.6.12 \ + cryptonite-0.30 \ + css-text-0.1.3.0 \ + data-default-0.7.1.1 \ + data-default-class-0.1.2.0 \ + data-default-instances-containers-0.0.1 \ + data-default-instances-dlist-0.0.1 \ + data-default-instances-old-locale-0.0.1 \ + data-fix-0.3.2_4 \ + digest-0.0.1.7 \ + distributive-0.6.2.1_1 \ + dlist-1.0 \ + doclayout-0.4.0.1 \ + doctemplates-0.11 \ + emojis-0.1.2 \ + entropy-0.4.1.10_1 \ + extensible-exceptions-0.1.1.4 \ + feed-1.3.2.1_1 \ + file-embed-0.0.15.0 \ + filestore-0.6.5_1 \ + foldable1-classes-compat-0.1_2 \ + generically-0.1.1_1 \ + ghc-paths-0.1.0.12_5 \ + gridtables-0.1.0.0 \ + haddock-library-1.11.0_2 \ + happstack-server-7.8.0.2 \ + happy-1.20.1.1 \ + hashable-1.4.2.0_1 \ + haskell-lexer-1.1.1 \ + hoauth2-2.8.0 \ + hourglass-0.2.12 \ + hsc2hs-0.68.9 \ + hslogger-1.3.1.0_7 \ + html-1.0.1.2 \ + http-client-0.7.13.1_1 \ + http-client-tls-0.3.6.2 \ + http-conduit-2.3.8.2 \ + http-types-0.12.3 \ + indexed-traversable-0.1.2.1 \ + indexed-traversable-instances-0.1.1.2_1 \ + integer-logarithms-1.0.3.1_4 \ + iproute-1.7.12 \ + ipynb-0.2_1 \ + jira-wiki-markup-1.5.1 \ + json-0.10_1 \ + libyaml-0.1.2_1 \ + memory-0.18.0 \ + microlens-0.4.13.1 \ + mime-types-0.1.1.0 \ + monad-control-1.0.3.1 \ + mono-traversable-1.0.15.3 \ + network-3.1.4.0 \ + network-bsd-2.8.1.0_4 \ + network-info-0.2.1 \ + network-uri-2.6.4.2 \ + old-locale-1.0.0.7_2 \ + old-time-1.1.0.3_2 \ + ordered-containers-0.2.3 \ + pandoc-3.1.4 \ + pandoc-types-1.23 \ + pem-0.2.4 \ + pretty-show-1.10 \ + primitive-0.8.0.0 \ + random-1.2.1.1 \ + recaptcha-0.1.0.4 \ + regex-base-0.94.0.2_1 \ + regex-compat-0.95.2.1_2 \ + regex-posix-0.96.0.1_1 \ + regex-tdfa-1.3.2.1 \ + resourcet-1.3.0 \ + safe-0.3.19 \ + scientific-0.3.7.0_5 \ + semialign-1.3 \ + semigroupoids-6.0.0.1 \ + semigroups-0.20 \ + sendfile-0.7.11.4 \ + skylighting-0.13.3 \ + skylighting-core-0.13.3 \ + skylighting-format-ansi-0.1 \ + skylighting-format-blaze-html-0.1.1 \ + skylighting-format-context-0.1.0.2 \ + skylighting-format-latex-0.1 \ + socks-0.6.1 \ + split-0.2.3.5 \ + splitmix-0.1.0.4_2 \ + streaming-commons-0.2.2.6 \ + strict-0.5 \ + syb-0.7.2.3 \ + system-filepath-0.4.14_1 \ + tagged-0.8.7 \ + tagsoup-0.14.8 \ + temporary-1.3 \ + texmath-0.12.8 \ + text-conversions-0.3.1.1 \ + text-short-0.1.5_2 \ + th-abstraction-0.5.0.0 \ + th-compat-0.1.4_2 \ + th-lift-0.8.3 \ + th-lift-instances-0.1.20 \ + these-1.2 \ + threads-0.5.1.7_1 \ + time-compat-1.9.6.1_5 \ + time-locale-compat-0.1.1.5 \ + tls-1.7.0 \ + transformers-base-0.4.6 \ + transformers-compat-0.7.2 \ + typed-process-0.2.11.0 \ + typst-0.1.0.0 \ + typst-symbols-0.1.2 \ + unicode-collation-0.1.3.4 \ + unicode-data-0.4.0.1_1 \ + unicode-transforms-0.4.0.1_3 \ + uniplate-1.6.13_1 \ + unix-time-0.4.10 \ + unliftio-core-0.2.1.0_2 \ + unordered-containers-0.2.19.1_2 \ + uri-bytestring-0.3.3.1 \ + uri-bytestring-aeson-0.1.0.8 \ + url-2.1.3 \ + utf8-string-1.0.2 \ + uuid-1.3.15_2 \ + uuid-types-1.0.5_4 \ + vector-0.13.0.0_3 \ + vector-algorithms-0.9.0.1_2 \ + vector-stream-0.1.0.0_2 \ + void-0.7.3 \ + witherable-0.4.2_4 \ + xml-1.3.14_2 \ + xml-conduit-1.9.1.3 \ + xml-types-0.3.8 \ + xss-sanitize-0.3.7.2 \ + yaml-0.11.11.2_2 \ + zip-archive-0.4.3 \ + zlib-0.6.3.0_1 + +# Switch off idle GC using -with_rtsopts=-I0 in gitit.cabal +CABAL_FLAGS= with_rtsopts + +CABAL_EXECUTABLES= gitit expireGititCache +CABAL_WRAPPER_SCRIPTS= gitit + +USE_RC_SUBR= gitit + +post-install: + cd ${WRKSRC} && \ + ${COPYTREE_SHARE} README.markdown ${STAGEDIR}${DATADIR} && \ + ${COPYTREE_SHARE} data ${STAGEDIR}${DATADIR} + cd ${STAGEDIR}${DATADIR} && \ + ${FIND} data -name '*.orig' -exec ${RM} {} ";" + +.include <bsd.port.mk> diff --git a/www/hs-gitit/distinfo b/www/hs-gitit/distinfo new file mode 100644 index 000000000000..61e515f67cdf --- /dev/null +++ b/www/hs-gitit/distinfo @@ -0,0 +1,513 @@ +TIMESTAMP = 1688557589 +SHA256 (cabal/gitit-0.15.1.1/gitit-0.15.1.1.tar.gz) = 90bc0d30386be90f11e4a6e67963738580327da0646a4c79ea45e16eda02d55d +SIZE (cabal/gitit-0.15.1.1/gitit-0.15.1.1.tar.gz) = 275402 +SHA256 (cabal/ConfigFile-1.1.4/ConfigFile-1.1.4.tar.gz) = ae087b359ff2945a62b671449227e0a811d143ee651179f4e7e9c66548e0f514 +SIZE (cabal/ConfigFile-1.1.4/ConfigFile-1.1.4.tar.gz) = 28969 +SHA256 (cabal/ConfigFile-1.1.4/revision/1.cabal) = 4cb481f88bbbbba5a61d2c1aa76fda01ae3d8ba9d11439a6cf56a86bfa791883 +SIZE (cabal/ConfigFile-1.1.4/revision/1.cabal) = 2097 +SHA256 (cabal/Diff-0.4.1/Diff-0.4.1.tar.gz) = fd5e4aaac7219bcbb14834fb8580ebe0aae905958d0ad74f5338ea290b372670 +SIZE (cabal/Diff-0.4.1/Diff-0.4.1.tar.gz) = 8759 +SHA256 (cabal/Glob-0.10.2/Glob-0.10.2.tar.gz) = 6af672ac8427d35cbd42d64142dc288feab266f0be92dae3c696e8860d8173c0 +SIZE (cabal/Glob-0.10.2/Glob-0.10.2.tar.gz) = 30226 +SHA256 (cabal/Glob-0.10.2/revision/3.cabal) = dd2ddbecae8f84e8f4cacb5b856901a19c25ceaa11f2525d3ee88d034acb0081 +SIZE (cabal/Glob-0.10.2/revision/3.cabal) = 2938 +SHA256 (cabal/HStringTemplate-0.8.8/HStringTemplate-0.8.8.tar.gz) = 717df416550bdc62f2070c1a86238efe535b0fa41c5fd708c4f631f927880cd9 +SIZE (cabal/HStringTemplate-0.8.8/HStringTemplate-0.8.8.tar.gz) = 18043 +SHA256 (cabal/HStringTemplate-0.8.8/revision/5.cabal) = 8cf2c140b0f7c6357dc21d0a9c218233309220278e836208f4b8e911be1d1492 +SIZE (cabal/HStringTemplate-0.8.8/revision/5.cabal) = 1985 +SHA256 (cabal/HTTP-4000.4.1/HTTP-4000.4.1.tar.gz) = df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453 +SIZE (cabal/HTTP-4000.4.1/HTTP-4000.4.1.tar.gz) = 74330 +SHA256 (cabal/HTTP-4000.4.1/revision/2.cabal) = d9220cc1b8c1f287248d650910710b96e62e54530772e3bcd19dbdec6547f8ae +SIZE (cabal/HTTP-4000.4.1/revision/2.cabal) = 5862 +SHA256 (cabal/JuicyPixels-3.3.8/JuicyPixels-3.3.8.tar.gz) = d3a0f6ca3515a1b3d526cbf79f2e0b0aab57f208ab216f9c26437bbcd86fb63e +SIZE (cabal/JuicyPixels-3.3.8/JuicyPixels-3.3.8.tar.gz) = 132479 +SHA256 (cabal/MissingH-1.6.0.0/MissingH-1.6.0.0.tar.gz) = fc3b9684a0a14fc9a0afdd9c8ffb1ae93db122c7150b1eea1769065658092d4f +SIZE (cabal/MissingH-1.6.0.0/MissingH-1.6.0.0.tar.gz) = 109652 +SHA256 (cabal/OneTuple-0.4.1.1/OneTuple-0.4.1.1.tar.gz) = c9e764d4ee1e57cad8341bd5d0de33ba3a52b6793fc1309679f2bf60c030bb2b +SIZE (cabal/OneTuple-0.4.1.1/OneTuple-0.4.1.1.tar.gz) = 5601 +SHA256 (cabal/Only-0.1/Only-0.1.tar.gz) = ab7aa193e8c257d3bda6b0b3c1cbcf74cdaa85ab08cb20c2dd62ba248c1ab265 +SIZE (cabal/Only-0.1/Only-0.1.tar.gz) = 1960 +SHA256 (cabal/Only-0.1/revision/1.cabal) = f92f5da97e647451f1ee7f5bf44914fb75062d08ccd3f36b2000d649c63d13aa +SIZE (cabal/Only-0.1/revision/1.cabal) = 1373 +SHA256 (cabal/QuickCheck-2.14.3/QuickCheck-2.14.3.tar.gz) = 5c0f22b36b28a1a8fa110b3819818d3f29494a3b0dedbae299f064123ca70501 +SIZE (cabal/QuickCheck-2.14.3/QuickCheck-2.14.3.tar.gz) = 76849 +SHA256 (cabal/SHA-1.6.4.4/SHA-1.6.4.4.tar.gz) = 6bd950df6b11a3998bb1452d875d2da043ee43385459afc5f16d471d25178b44 +SIZE (cabal/SHA-1.6.4.4/SHA-1.6.4.4.tar.gz) = 2715144 +SHA256 (cabal/StateVar-1.2.2/StateVar-1.2.2.tar.gz) = 5e4b39da395656a59827b0280508aafdc70335798b50e5d6fd52596026251825 +SIZE (cabal/StateVar-1.2.2/StateVar-1.2.2.tar.gz) = 5048 +SHA256 (cabal/aeson-2.1.2.1/aeson-2.1.2.1.tar.gz) = 5d4042b903ce181ee023bbf908f37a3f55e820c5f0df102683b87f963e3522c6 +SIZE (cabal/aeson-2.1.2.1/aeson-2.1.2.1.tar.gz) = 335908 +SHA256 (cabal/aeson-2.1.2.1/revision/3.cabal) = 5b8d62a60963a925c4d123a46e42a8e235a32188522c9f119f64ac228c2612a7 +SIZE (cabal/aeson-2.1.2.1/revision/3.cabal) = 6359 +SHA256 (cabal/aeson-pretty-0.8.10/aeson-pretty-0.8.10.tar.gz) = 2a21f2cd78adcb149ceba770239ed664519552911e7680172b18ff695cfa7ae5 +SIZE (cabal/aeson-pretty-0.8.10/aeson-pretty-0.8.10.tar.gz) = 5894 +SHA256 (cabal/ansi-terminal-1.0/ansi-terminal-1.0.tar.gz) = 0798a98f79189e62b5ff0aa247ba95fc3845f0f6f1e14ecceb37facfbdd5cfc9 +SIZE (cabal/ansi-terminal-1.0/ansi-terminal-1.0.tar.gz) = 31745 +SHA256 (cabal/ansi-terminal-types-0.11.5/ansi-terminal-types-0.11.5.tar.gz) = bf7b230389f43105100a6d5740822598a88b38eaaf7d042de595ccf72db4fdd1 +SIZE (cabal/ansi-terminal-types-0.11.5/ansi-terminal-types-0.11.5.tar.gz) = 4660 +SHA256 (cabal/ansi-terminal-types-0.11.5/revision/1.cabal) = f78440dfd95c4509e88855ac7cc2d9566ddf956a92c1290404cac93ad1a1b00a +SIZE (cabal/ansi-terminal-types-0.11.5/revision/1.cabal) = 1482 +SHA256 (cabal/appar-0.1.8/appar-0.1.8.tar.gz) = c4ceeddc26525b58d82c41b6d3e32141371a200a6794aae185b6266ccc81631f +SIZE (cabal/appar-0.1.8/appar-0.1.8.tar.gz) = 4037 +SHA256 (cabal/asn1-encoding-0.9.6/asn1-encoding-0.9.6.tar.gz) = d9f8deabd3b908e5cf83c0d813c08dc0143b3ec1c0d97f660d2cfa02c1c8da0a +SIZE (cabal/asn1-encoding-0.9.6/asn1-encoding-0.9.6.tar.gz) = 17343 +SHA256 (cabal/asn1-encoding-0.9.6/revision/2.cabal) = 27ed8f6043aed79630313bb931f7c8e2b510f0b4586cd55c16ae040c7d1ea098 +SIZE (cabal/asn1-encoding-0.9.6/revision/2.cabal) = 2060 +SHA256 (cabal/asn1-parse-0.9.5/asn1-parse-0.9.5.tar.gz) = 8f1fe1344d30b39dc594d74df2c55209577722af1497204b4c2b6d6e8747f39e +SIZE (cabal/asn1-parse-0.9.5/asn1-parse-0.9.5.tar.gz) = 2951 +SHA256 (cabal/asn1-types-0.3.4/asn1-types-0.3.4.tar.gz) = 78ee92a251379298ca820fa53edbf4b33c539b9fcd887c86f520c30e3b4e21a8 +SIZE (cabal/asn1-types-0.3.4/asn1-types-0.3.4.tar.gz) = 6472 +SHA256 (cabal/assoc-1.1/assoc-1.1.tar.gz) = 7aa2e6548b3d9d49a286ac20639479aaf6c47a1446113ed784d98737c5f60df4 +SIZE (cabal/assoc-1.1/assoc-1.1.tar.gz) = 3193 +SHA256 (cabal/async-2.2.4/async-2.2.4.tar.gz) = 484df85be0e76c4fed9376451e48e1d0c6e97952ce79735b72d54297e7e0a725 +SIZE (cabal/async-2.2.4/async-2.2.4.tar.gz) = 14148 +SHA256 (cabal/async-2.2.4/revision/3.cabal) = 46367dc0c8326dcbeb7b93f200b567491c2f6029bccf822b8bb26ee660397e08 +SIZE (cabal/async-2.2.4/revision/3.cabal) = 3112 +SHA256 (cabal/attoparsec-0.14.4/attoparsec-0.14.4.tar.gz) = 3f337fe58624565de12426f607c23e60c7b09c86b4e3adfc827ca188c9979e6c +SIZE (cabal/attoparsec-0.14.4/attoparsec-0.14.4.tar.gz) = 160701 +SHA256 (cabal/attoparsec-0.14.4/revision/3.cabal) = 50475b722305175f57a3ee3dbaee10aa4b91f61c9717b85b718a7df37c223fb2 +SIZE (cabal/attoparsec-0.14.4/revision/3.cabal) = 5679 +SHA256 (cabal/base-compat-0.12.2/base-compat-0.12.2.tar.gz) = a62adc883a5ac436f80e4ae02c3c56111cf1007492f267c291139a668d2150bd +SIZE (cabal/base-compat-0.12.2/base-compat-0.12.2.tar.gz) = 36393 +SHA256 (cabal/base-compat-batteries-0.12.2/base-compat-batteries-0.12.2.tar.gz) = ede9092e07f904e0759160bf1ecd3fb7eb043bae6dc89a37c3dc94829ec5eb99 +SIZE (cabal/base-compat-batteries-0.12.2/base-compat-batteries-0.12.2.tar.gz) = 17645 +SHA256 (cabal/base-orphans-0.9.0/base-orphans-0.9.0.tar.gz) = 613ed4d8241ed5a648a59ae6569a6962990bb545711d020d49fb83fa12d16e62 +SIZE (cabal/base-orphans-0.9.0/base-orphans-0.9.0.tar.gz) = 26025 +SHA256 (cabal/base16-bytestring-1.0.2.0/base16-bytestring-1.0.2.0.tar.gz) = 1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784 +SIZE (cabal/base16-bytestring-1.0.2.0/base16-bytestring-1.0.2.0.tar.gz) = 7219 +SHA256 (cabal/base64-0.4.2.4/base64-0.4.2.4.tar.gz) = 640a2d0afcb07e1de2e0a13a5e942b0265781c5942bd642a8793e7b019be3585 +SIZE (cabal/base64-0.4.2.4/base64-0.4.2.4.tar.gz) = 22065 +SHA256 (cabal/base64-0.4.2.4/revision/3.cabal) = 10103a0b30d5028b8e1ee9811b76b946ca7713bf8234549191b69f55ee0599d5 +SIZE (cabal/base64-0.4.2.4/revision/3.cabal) = 2862 +SHA256 (cabal/base64-bytestring-1.2.1.0/base64-bytestring-1.2.1.0.tar.gz) = fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9 +SIZE (cabal/base64-bytestring-1.2.1.0/base64-bytestring-1.2.1.0.tar.gz) = 13743 +SHA256 (cabal/basement-0.0.16/basement-0.0.16.tar.gz) = 7fb77e249aef76ba5aed3059d556800ce02b614597c488ba01f0a16449146300 +SIZE (cabal/basement-0.0.16/basement-0.0.16.tar.gz) = 134837 +SHA256 (cabal/bifunctors-5.6.1/bifunctors-5.6.1.tar.gz) = 06381471b5be16516a1b2c4b21a5101a3d991038bface8e0cad144c0044d57fc +SIZE (cabal/bifunctors-5.6.1/bifunctors-5.6.1.tar.gz) = 38170 +SHA256 (cabal/bitvec-1.1.4.0/bitvec-1.1.4.0.tar.gz) = 68f0b1e01604ca8bdeaef47b3621faec456d6f76d6820a321eccd4d3749454a8 +SIZE (cabal/bitvec-1.1.4.0/bitvec-1.1.4.0.tar.gz) = 35559 +SHA256 (cabal/blaze-builder-0.4.2.2/blaze-builder-0.4.2.2.tar.gz) = 2cdc998c021d3a5f2a66a95138b93386271c26a117e7676d78264a90e536af67 +SIZE (cabal/blaze-builder-0.4.2.2/blaze-builder-0.4.2.2.tar.gz) = 60707 +SHA256 (cabal/blaze-builder-0.4.2.2/revision/1.cabal) = f0017df374c330de0ebe0eb15eae8c48427bddefa1d81a3cb31c0a4812ecdb08 +SIZE (cabal/blaze-builder-0.4.2.2/revision/1.cabal) = 3685 +SHA256 (cabal/blaze-html-0.9.1.2/blaze-html-0.9.1.2.tar.gz) = 60503f42546c6c1b954014d188ea137e43d74dcffd2bf6157c113fd91a0c394c +SIZE (cabal/blaze-html-0.9.1.2/blaze-html-0.9.1.2.tar.gz) = 81617 +SHA256 (cabal/blaze-html-0.9.1.2/revision/2.cabal) = 74b89ffa665891f528f571ce9e3c2dce24f698563f14b6f5e9e0512eccdf5dc2 +SIZE (cabal/blaze-html-0.9.1.2/revision/2.cabal) = 3062 +SHA256 (cabal/blaze-markup-0.8.2.8/blaze-markup-0.8.2.8.tar.gz) = 43fc3f6872dc8d1be8d0fe091bd4775139b42179987f33d6490a7c5f1e07a349 +SIZE (cabal/blaze-markup-0.8.2.8/blaze-markup-0.8.2.8.tar.gz) = 14519 +SHA256 (cabal/blaze-markup-0.8.2.8/revision/4.cabal) = a8fe050fb93397df36c3f5b19c22628e0e54446382e0f6775e2b45c1ad999eee +SIZE (cabal/blaze-markup-0.8.2.8/revision/4.cabal) = 2271 +SHA256 (cabal/byteorder-1.0.4/byteorder-1.0.4.tar.gz) = bd20bbb586947f99c38a4c93d9d0266f49f6fc581767b51ba568f6d5d52d2919 +SIZE (cabal/byteorder-1.0.4/byteorder-1.0.4.tar.gz) = 2030 +SHA256 (cabal/cabal-doctest-1.0.9/cabal-doctest-1.0.9.tar.gz) = 5556088496111d33810c4ae6c4a065bb37fa3315e9e8891e8000b1ab6707ba73 +SIZE (cabal/cabal-doctest-1.0.9/cabal-doctest-1.0.9.tar.gz) = 10770 +SHA256 (cabal/cabal-doctest-1.0.9/revision/3.cabal) = 6dea0dbd1457f43d96ce1cfb1bab8b9f55d4fb82940e2bfa5aad78e6e2260656 +SIZE (cabal/cabal-doctest-1.0.9/revision/3.cabal) = 1517 +SHA256 (cabal/case-insensitive-1.2.1.0/case-insensitive-1.2.1.0.tar.gz) = 296dc17e0c5f3dfb3d82ced83e4c9c44c338ecde749b278b6eae512f1d04e406 +SIZE (cabal/case-insensitive-1.2.1.0/case-insensitive-1.2.1.0.tar.gz) = 53609 +SHA256 (cabal/cassava-0.5.3.0/cassava-0.5.3.0.tar.gz) = b4c8451f433ad7725cb8b9f7a7efe598ba103b16584713c91f48ae023829e9be +SIZE (cabal/cassava-0.5.3.0/cassava-0.5.3.0.tar.gz) = 38224 +SHA256 (cabal/cassava-0.5.3.0/revision/1.cabal) = 3e5a702f0194968ddf2ef38343318334e7c7de44b90c7822e9e20a7e98685bd1 +SIZE (cabal/cassava-0.5.3.0/revision/1.cabal) = 6121 +SHA256 (cabal/cereal-0.5.8.3/cereal-0.5.8.3.tar.gz) = 99905220661b26e5bd91130bd9772554938608a5b1d717240a6eb331121e0f6a +SIZE (cabal/cereal-0.5.8.3/cereal-0.5.8.3.tar.gz) = 20166 +SHA256 (cabal/citeproc-0.8.1/citeproc-0.8.1.tar.gz) = 33523bbd8c38f72c6d606e02d11b93254171f801be4f2a0cb4d34d6626426400 +SIZE (cabal/citeproc-0.8.1/citeproc-0.8.1.tar.gz) = 549947 +SHA256 (cabal/colour-2.3.6/colour-2.3.6.tar.gz) = 2cd35dcd6944a5abc9f108a5eb5ee564b6b1fa98a9ec79cefcc20b588991f871 +SIZE (cabal/colour-2.3.6/colour-2.3.6.tar.gz) = 20675 +SHA256 (cabal/commonmark-0.2.3/commonmark-0.2.3.tar.gz) = 745ade908c7cd8a61538d9c3e60363d5e1175fd7f544f557ff52517c8408d905 +SIZE (cabal/commonmark-0.2.3/commonmark-0.2.3.tar.gz) = 102342 +SHA256 (cabal/commonmark-extensions-0.2.3.4/commonmark-extensions-0.2.3.4.tar.gz) = a084efe90311f8a0d83d8622ef76f17dfdb974a84b74df454cf906b0ee64665e +SIZE (cabal/commonmark-extensions-0.2.3.4/commonmark-extensions-0.2.3.4.tar.gz) = 37768 +SHA256 (cabal/commonmark-pandoc-0.2.1.3/commonmark-pandoc-0.2.1.3.tar.gz) = 77adcf9074299a5b318901d057ebf49a7f032245f2aee783ef475539b0897f21 +SIZE (cabal/commonmark-pandoc-0.2.1.3/commonmark-pandoc-0.2.1.3.tar.gz) = 4907 +SHA256 (cabal/comonad-5.0.8/comonad-5.0.8.tar.gz) = ef6cdf2cc292cc43ee6aa96c581b235fdea8ab44a0bffb24dc79ae2b2ef33d13 +SIZE (cabal/comonad-5.0.8/comonad-5.0.8.tar.gz) = 15227 +SHA256 (cabal/comonad-5.0.8/revision/1.cabal) = 1f1aabd73ec7f80f20cf078a748a60cd48d8e57277802fdf6a9ab3601a9b8f7e +SIZE (cabal/comonad-5.0.8/revision/1.cabal) = 3631 +SHA256 (cabal/conduit-1.3.5/conduit-1.3.5.tar.gz) = 2bb0d3e0eecc43e3d1d8cfc2125914f9175cde752be2d5908a1e120f321c782d +SIZE (cabal/conduit-1.3.5/conduit-1.3.5.tar.gz) = 88893 +SHA256 (cabal/conduit-extra-1.3.6/conduit-extra-1.3.6.tar.gz) = 8950c38049d892c38590d389bed49ecf880671f58ec63dd4709d9fe3d4b8f153 +SIZE (cabal/conduit-extra-1.3.6/conduit-extra-1.3.6.tar.gz) = 33321 +SHA256 (cabal/contravariant-1.5.5/contravariant-1.5.5.tar.gz) = 062fd66580d7aad0b5ba93e644ffa7feee69276ef50f20d4ed9f1deb7642dffa +SIZE (cabal/contravariant-1.5.5/contravariant-1.5.5.tar.gz) = 13815 +SHA256 (cabal/cookie-0.4.6/cookie-0.4.6.tar.gz) = 8c41a956c32b9733d525a53d43b0338a236a34d36658ecc4364c8249a6664baa +SIZE (cabal/cookie-0.4.6/cookie-0.4.6.tar.gz) = 6219 +SHA256 (cabal/cryptohash-md5-0.11.101.0/cryptohash-md5-0.11.101.0.tar.gz) = 3b08db0ae39df2b44e83053ad30d7546a4c6200a852c22a240a7e03ae1080f05 +SIZE (cabal/cryptohash-md5-0.11.101.0/cryptohash-md5-0.11.101.0.tar.gz) = 11872 +SHA256 (cabal/cryptohash-md5-0.11.101.0/revision/2.cabal) = 8d8172dfca073406d6d50a122a8a8caa53a0ea8f3827232a40b3fd7c4de85484 +SIZE (cabal/cryptohash-md5-0.11.101.0/revision/2.cabal) = 3104 +SHA256 (cabal/cryptohash-sha1-0.11.101.0/cryptohash-sha1-0.11.101.0.tar.gz) = a4042c97ad02eb68e766577ca35c01970c33e96cfd74ccb4dd403e3476a23241 +SIZE (cabal/cryptohash-sha1-0.11.101.0/cryptohash-sha1-0.11.101.0.tar.gz) = 11563 +SHA256 (cabal/cryptohash-sha1-0.11.101.0/revision/2.cabal) = 25be9e5bb979c1b96d7695d9cbb6a40ec345025e7a100b2d71d499812c2e89ec +SIZE (cabal/cryptohash-sha1-0.11.101.0/revision/2.cabal) = 3094 +SHA256 (cabal/crypton-0.33/crypton-0.33.tar.gz) = e66fa0a75c2afe149205df9f496f05d31fa94d8116551632d39e37e58fe60520 +SIZE (cabal/crypton-0.33/crypton-0.33.tar.gz) = 618064 +SHA256 (cabal/crypton-connection-0.3.1/crypton-connection-0.3.1.tar.gz) = 03073694f6525f975db78dbc67c34e89bb27b95cf863d4a3a77dc6ef49d81dcc +SIZE (cabal/crypton-connection-0.3.1/crypton-connection-0.3.1.tar.gz) = 9112 +SHA256 (cabal/crypton-x509-1.7.6/crypton-x509-1.7.6.tar.gz) = ebb74aca2d00261e2fb4927d211ba1a174e190e5257f309e190f019727f8caff +SIZE (cabal/crypton-x509-1.7.6/crypton-x509-1.7.6.tar.gz) = 21557 +SHA256 (cabal/crypton-x509-1.7.6/revision/1.cabal) = c567657a705b6d6521f9dd2de999bf530d618ec00f3b939df76a41fb0fe94281 +SIZE (cabal/crypton-x509-1.7.6/revision/1.cabal) = 2339 +SHA256 (cabal/crypton-x509-store-1.6.9/crypton-x509-store-1.6.9.tar.gz) = 3e6218af12e039cc291d19792db044df1647b5cf0bbc60b909a027e7595a256f +SIZE (cabal/crypton-x509-store-1.6.9/crypton-x509-store-1.6.9.tar.gz) = 12735 +SHA256 (cabal/crypton-x509-system-1.6.7/crypton-x509-system-1.6.7.tar.gz) = a436261e5f5e83d85080f57a5509c8224c9e75a6e56d0c43a7d2967052b634ca +SIZE (cabal/crypton-x509-system-1.6.7/crypton-x509-system-1.6.7.tar.gz) = 3496 +SHA256 (cabal/crypton-x509-validation-1.6.12/crypton-x509-validation-1.6.12.tar.gz) = 0e60b7e237a4fd5e7e6e7200018c7947314292ef63751cbb51877836ebe650f6 +SIZE (cabal/crypton-x509-validation-1.6.12/crypton-x509-validation-1.6.12.tar.gz) = 19573 +SHA256 (cabal/cryptonite-0.30/cryptonite-0.30.tar.gz) = 56099c8a8aa01d2ee914b670c97c1f818186dbb886e2025b73d9c2afe3496b1d +SIZE (cabal/cryptonite-0.30/cryptonite-0.30.tar.gz) = 621062 +SHA256 (cabal/css-text-0.1.3.0/css-text-0.1.3.0.tar.gz) = 5ff507bf3863219f41e7f2d215e5511fe15ee13d1e28bd3ee64e0b0b894bcd7a +SIZE (cabal/css-text-0.1.3.0/css-text-0.1.3.0.tar.gz) = 4594 +SHA256 (cabal/data-default-0.7.1.1/data-default-0.7.1.1.tar.gz) = b0f95d279cd75cacaa8152a01590dc3460f7134f6840b37052abb3ba3cb2a511 +SIZE (cabal/data-default-0.7.1.1/data-default-0.7.1.1.tar.gz) = 1627 +SHA256 (cabal/data-default-class-0.1.2.0/data-default-class-0.1.2.0.tar.gz) = 4f01b423f000c3e069aaf52a348564a6536797f31498bb85c3db4bd2d0973e56 +SIZE (cabal/data-default-class-0.1.2.0/data-default-class-0.1.2.0.tar.gz) = 2522 +SHA256 (cabal/data-default-instances-containers-0.0.1/data-default-instances-containers-0.0.1.tar.gz) = a55e07af005c9815d82f3fc95e125db82994377c9f4a769428878701d4ec081a +SIZE (cabal/data-default-instances-containers-0.0.1/data-default-instances-containers-0.0.1.tar.gz) = 1659 +SHA256 (cabal/data-default-instances-dlist-0.0.1/data-default-instances-dlist-0.0.1.tar.gz) = 7d683711cbf08abd7adcd5ac2be825381308d220397315a5570fe61b719b5959 +SIZE (cabal/data-default-instances-dlist-0.0.1/data-default-instances-dlist-0.0.1.tar.gz) = 1503 +SHA256 (cabal/data-default-instances-old-locale-0.0.1/data-default-instances-old-locale-0.0.1.tar.gz) = 60d3b02922958c4908d7bf2b24ddf61511665745f784227d206745784b0c0802 +SIZE (cabal/data-default-instances-old-locale-0.0.1/data-default-instances-old-locale-0.0.1.tar.gz) = 1519 +SHA256 (cabal/data-fix-0.3.2/data-fix-0.3.2.tar.gz) = 3a172d3bc0639c327345e965f9d9023e099425814b28dcdb7b60ff66d66219cc +SIZE (cabal/data-fix-0.3.2/data-fix-0.3.2.tar.gz) = 5842 +SHA256 (cabal/data-fix-0.3.2/revision/4.cabal) = c27b354476175581925217323e0f559d35ceff26907ceaa03cb65c6df38e3de9 +SIZE (cabal/data-fix-0.3.2/revision/4.cabal) = 1720 +SHA256 (cabal/digest-0.0.1.7/digest-0.0.1.7.tar.gz) = b23d6c804e6fed0ac9bb0d35b7aed5785330d63efebe296cf0073dab17e05f0a +SIZE (cabal/digest-0.0.1.7/digest-0.0.1.7.tar.gz) = 4067 +SHA256 (cabal/distributive-0.6.2.1/distributive-0.6.2.1.tar.gz) = d7351392e078f58caa46630a4b9c643e1e2e9dddee45848c5c8358e7b1316b91 +SIZE (cabal/distributive-0.6.2.1/distributive-0.6.2.1.tar.gz) = 8140 +SHA256 (cabal/distributive-0.6.2.1/revision/1.cabal) = 0f99f5541cca04acf89b64432b03422b6408e830a8dff30e6c4334ef1a48680c +SIZE (cabal/distributive-0.6.2.1/revision/1.cabal) = 2996 +SHA256 (cabal/dlist-1.0/dlist-1.0.tar.gz) = 173d637328bb173fcc365f30d29ff4a94292a1e0e5558aeb3dfc11de81510115 +SIZE (cabal/dlist-1.0/dlist-1.0.tar.gz) = 18667 +SHA256 (cabal/doclayout-0.4.0.1/doclayout-0.4.0.1.tar.gz) = f7d3515d41abdfd7a5b69f28bf9520f591881364262698fd49686506b570b30b +SIZE (cabal/doclayout-0.4.0.1/doclayout-0.4.0.1.tar.gz) = 38465 +SHA256 (cabal/doctemplates-0.11/doctemplates-0.11.tar.gz) = e0080c7f030e98ce6156fd31e77df4c83b8f3ee049beee5006ce923a0169546b +SIZE (cabal/doctemplates-0.11/doctemplates-0.11.tar.gz) = 25255 +SHA256 (cabal/emojis-0.1.2/emojis-0.1.2.tar.gz) = 3cfe9c2ea3efbbdb9b7fc24ee6707a839d272c1deee7e39319f17a7e6feea227 +SIZE (cabal/emojis-0.1.2/emojis-0.1.2.tar.gz) = 49333 +SHA256 (cabal/entropy-0.4.1.10/entropy-0.4.1.10.tar.gz) = 85ac1d53f1d1c095aedd23fdb20c8e3ada04a7fd8aa6d7e6445ae6a59a277de5 +SIZE (cabal/entropy-0.4.1.10/entropy-0.4.1.10.tar.gz) = 9060 +SHA256 (cabal/entropy-0.4.1.10/revision/1.cabal) = 82bd7b600fb8df540dd292ed91dc781f4523eecef3bb588b14787b4851722cb1 +SIZE (cabal/entropy-0.4.1.10/revision/1.cabal) = 2952 +SHA256 (cabal/extensible-exceptions-0.1.1.4/extensible-exceptions-0.1.1.4.tar.gz) = 6ce5e8801760385a408dab71b53550f87629e661b260bdc2cd41c6a439b6e388 +SIZE (cabal/extensible-exceptions-0.1.1.4/extensible-exceptions-0.1.1.4.tar.gz) = 8531 +SHA256 (cabal/feed-1.3.2.1/feed-1.3.2.1.tar.gz) = a8f54072edaaf7e978062b9de94733e8cc43e31b2dda3446f901bf57f1815955 +SIZE (cabal/feed-1.3.2.1/feed-1.3.2.1.tar.gz) = 107015 +SHA256 (cabal/feed-1.3.2.1/revision/1.cabal) = 193ed27062b2fd9bc0c9967748b9dd1e657196f922d955573cecd086193a450c +SIZE (cabal/feed-1.3.2.1/revision/1.cabal) = 4651 +SHA256 (cabal/file-embed-0.0.15.0/file-embed-0.0.15.0.tar.gz) = f066b85d537a20252faa59489f6a854e4e8f39080f08730c9e195e418cec5bdd +SIZE (cabal/file-embed-0.0.15.0/file-embed-0.0.15.0.tar.gz) = 7119 +SHA256 (cabal/filestore-0.6.5/filestore-0.6.5.tar.gz) = b0052e1149e582d55078f8fd84ffb4e97111dab90ff8b589cc5ae2b6c711497c +SIZE (cabal/filestore-0.6.5/filestore-0.6.5.tar.gz) = 32338 +SHA256 (cabal/filestore-0.6.5/revision/1.cabal) = c7926f679e7f31af247f52c13e2060b9d94641180e17a0bed9768a1040c53ded +SIZE (cabal/filestore-0.6.5/revision/1.cabal) = 3247 +SHA256 (cabal/foldable1-classes-compat-0.1/foldable1-classes-compat-0.1.tar.gz) = d057c3f358e1a6b72c73519bc64ba6aa959f066c08fed69f73258555ef95ff12 +SIZE (cabal/foldable1-classes-compat-0.1/foldable1-classes-compat-0.1.tar.gz) = 10484 +SHA256 (cabal/foldable1-classes-compat-0.1/revision/2.cabal) = 851225c0d4ccf6ca5e4df17347490945c9928548e431f15e7e7d80c240bc4d17 +SIZE (cabal/foldable1-classes-compat-0.1/revision/2.cabal) = 3782 +SHA256 (cabal/generically-0.1.1/generically-0.1.1.tar.gz) = 04c5a436bec4b041f71a733f56a1bd7f435f63dde8d3eb5c1f48d55b4dbc43cf +SIZE (cabal/generically-0.1.1/generically-0.1.1.tar.gz) = 2870 +SHA256 (cabal/generically-0.1.1/revision/1.cabal) = 2b9b5efb6eea2fb65377565d53d85b0ccc5b37404fba4bef1d60277caa877e5e +SIZE (cabal/generically-0.1.1/revision/1.cabal) = 1155 +SHA256 (cabal/ghc-paths-0.1.0.12/ghc-paths-0.1.0.12.tar.gz) = 6ecbe676d073cb07989c61ce4c5709c4e67cbefdd2d55a4095f9388b6fe2c484 +SIZE (cabal/ghc-paths-0.1.0.12/ghc-paths-0.1.0.12.tar.gz) = 2565 +SHA256 (cabal/ghc-paths-0.1.0.12/revision/5.cabal) = 2cedd51fe0e85bd7c7edee768c229db74e071a15a1dfb9bf94bd4b0f3a0ec78b +SIZE (cabal/ghc-paths-0.1.0.12/revision/5.cabal) = 699 +SHA256 (cabal/gridtables-0.1.0.0/gridtables-0.1.0.0.tar.gz) = d6ac341bc7997d39a3b1f6cd811f70ab69689d9c3117ce3bc44bfb2ec55ab0ea +SIZE (cabal/gridtables-0.1.0.0/gridtables-0.1.0.0.tar.gz) = 12279 +SHA256 (cabal/haddock-library-1.11.0/haddock-library-1.11.0.tar.gz) = 7c075ec9a378b0a2d9d605e72135201e6c7ff316564f2c974113582f43bea20a +SIZE (cabal/haddock-library-1.11.0/haddock-library-1.11.0.tar.gz) = 32833 +SHA256 (cabal/haddock-library-1.11.0/revision/2.cabal) = debbb2e62f4af08a116e6f95497a478bc3034c50ddd9e9c32f47a22e70991b12 +SIZE (cabal/haddock-library-1.11.0/revision/2.cabal) = 4023 +SHA256 (cabal/happstack-server-7.8.0.2/happstack-server-7.8.0.2.tar.gz) = 3a5653b2e2fea383eb3c3bfecbd60348a0913c682eec9c9e133b17d80b379795 +SIZE (cabal/happstack-server-7.8.0.2/happstack-server-7.8.0.2.tar.gz) = 86256 +SHA256 (cabal/happy-1.20.1.1/happy-1.20.1.1.tar.gz) = 8b4e7dc5a6c5fd666f8f7163232931ab28746d0d17da8fa1cbd68be9e878881b +SIZE (cabal/happy-1.20.1.1/happy-1.20.1.1.tar.gz) = 183409 +SHA256 (cabal/hashable-1.4.2.0/hashable-1.4.2.0.tar.gz) = 1b4000ea82b81f69d46d0af4152c10c6303873510738e24cfc4767760d30e3f8 +SIZE (cabal/hashable-1.4.2.0/hashable-1.4.2.0.tar.gz) = 25094 +SHA256 (cabal/hashable-1.4.2.0/revision/1.cabal) = 585792335d5541dba78fa8dfcb291a89cd5812a281825ff7a44afa296ab5d58a +SIZE (cabal/hashable-1.4.2.0/revision/1.cabal) = 4520 +SHA256 (cabal/haskell-lexer-1.1.1/haskell-lexer-1.1.1.tar.gz) = c8eeda569a30f115244c17920247ba2c45d11b3e30805f648a878f7855d8f349 +SIZE (cabal/haskell-lexer-1.1.1/haskell-lexer-1.1.1.tar.gz) = 14499 +SHA256 (cabal/hoauth2-2.8.0/hoauth2-2.8.0.tar.gz) = f73ad909ea4571f5958cee5cfb1ff87427ed333b37cb4751b035484059a2cdf6 +SIZE (cabal/hoauth2-2.8.0/hoauth2-2.8.0.tar.gz) = 16225 +SHA256 (cabal/hourglass-0.2.12/hourglass-0.2.12.tar.gz) = 44335b5c402e80c60f1db6a74462be4ea29d1a9043aa994334ffee1164f1ca4a +SIZE (cabal/hourglass-0.2.12/hourglass-0.2.12.tar.gz) = 25797 +SHA256 (cabal/hsc2hs-0.68.9/hsc2hs-0.68.9.tar.gz) = c95b10ce0b2c881480e35118d738dcc9cefc435ec72baa0031af81d0d4d3bc0a +SIZE (cabal/hsc2hs-0.68.9/hsc2hs-0.68.9.tar.gz) = 40442 +SHA256 (cabal/hslogger-1.3.1.0/hslogger-1.3.1.0.tar.gz) = 7f2364f6c0b9c5b85a257267a335816126ef2471c817a42797a5d3c57acaca5b +SIZE (cabal/hslogger-1.3.1.0/hslogger-1.3.1.0.tar.gz) = 37468 +SHA256 (cabal/hslogger-1.3.1.0/revision/7.cabal) = 53e421418634df83ac5a0143b8d7da0fa865875b09df55d039c40a05f43f70cb +SIZE (cabal/hslogger-1.3.1.0/revision/7.cabal) = 2978 +SHA256 (cabal/html-1.0.1.2/html-1.0.1.2.tar.gz) = 0c35495ea33d65e69c69bc7441ec8e1af69fbb43433c2aa3406c0a13a3ab3061 +SIZE (cabal/html-1.0.1.2/html-1.0.1.2.tar.gz) = 11021 +SHA256 (cabal/http-client-0.7.13.1/http-client-0.7.13.1.tar.gz) = c98e86a0382fa877e320d83dbbd173c41c966a60a32c9bc597058929a7aa0e27 +SIZE (cabal/http-client-0.7.13.1/http-client-0.7.13.1.tar.gz) = 95306 +SHA256 (cabal/http-client-0.7.13.1/revision/1.cabal) = 6480749144f27919547733262f06a6ae3c759b57b692af53f9beb309d05a1699 +SIZE (cabal/http-client-0.7.13.1/revision/1.cabal) = 5777 +SHA256 (cabal/http-client-tls-0.3.6.2/http-client-tls-0.3.6.2.tar.gz) = 28438ebeee2b97b2354c9cf6d3cb1fb73ac7ebc6cb1f4d54aedf10980394aba6 +SIZE (cabal/http-client-tls-0.3.6.2/http-client-tls-0.3.6.2.tar.gz) = 7852 +SHA256 (cabal/http-conduit-2.3.8.2/http-conduit-2.3.8.2.tar.gz) = ed457713884ced61a905b48db29f73f710ae894cb8060a07d3736ac20aa23a05 +SIZE (cabal/http-conduit-2.3.8.2/http-conduit-2.3.8.2.tar.gz) = 29007 +SHA256 (cabal/http-types-0.12.3/http-types-0.12.3.tar.gz) = 4e8a4a66477459fa436a331c75e46857ec8026283df984d54f90576cd3024016 +SIZE (cabal/http-types-0.12.3/http-types-0.12.3.tar.gz) = 13547 +SHA256 (cabal/indexed-traversable-0.1.2.1/indexed-traversable-0.1.2.1.tar.gz) = fe854c10285debc7d6fe3e09da0928a740ebc091ad2911ae695bb007e6f746a4 +SIZE (cabal/indexed-traversable-0.1.2.1/indexed-traversable-0.1.2.1.tar.gz) = 8905 +SHA256 (cabal/indexed-traversable-instances-0.1.1.2/indexed-traversable-instances-0.1.1.2.tar.gz) = 0f9b4e895ccc819f74d15f913c93613cc74cab74dbb05d7e305aa387bdbe374a +SIZE (cabal/indexed-traversable-instances-0.1.1.2/indexed-traversable-instances-0.1.1.2.tar.gz) = 3769 +SHA256 (cabal/indexed-traversable-instances-0.1.1.2/revision/1.cabal) = b493ed83623a7cba498d31a9d36beec233406f20377f1be3bb51d4ce3bd2ceef +SIZE (cabal/indexed-traversable-instances-0.1.1.2/revision/1.cabal) = 2536 +SHA256 (cabal/integer-logarithms-1.0.3.1/integer-logarithms-1.0.3.1.tar.gz) = 9b0a9f9fab609b15cd015865721fb05f744a1bc77ae92fd133872de528bbea7f +SIZE (cabal/integer-logarithms-1.0.3.1/integer-logarithms-1.0.3.1.tar.gz) = 9023 +SHA256 (cabal/integer-logarithms-1.0.3.1/revision/4.cabal) = 336fb40c3af19a59dbeb4e5b7bffe4b4c7fa04ab06006a8d4b70b1febc1bb4ca +SIZE (cabal/integer-logarithms-1.0.3.1/revision/4.cabal) = 3262 +SHA256 (cabal/iproute-1.7.12/iproute-1.7.12.tar.gz) = f1751d1579fcbc1d9f86d9d1c9ede48cb71cbeb1d7b2043491c6216e4f236b63 +SIZE (cabal/iproute-1.7.12/iproute-1.7.12.tar.gz) = 17864 +SHA256 (cabal/ipynb-0.2/ipynb-0.2.tar.gz) = 9a743d74e95ccccfadca4a734f44c7b3e2a5b838da3f9044231590d7355191c7 +SIZE (cabal/ipynb-0.2/ipynb-0.2.tar.gz) = 632962 +SHA256 (cabal/ipynb-0.2/revision/1.cabal) = d3ec93f44fac7ddeb06e5419d0577321831cc903ecb176ca6be5015c55e9893a +SIZE (cabal/ipynb-0.2/revision/1.cabal) = 1906 +SHA256 (cabal/jira-wiki-markup-1.5.1/jira-wiki-markup-1.5.1.tar.gz) = 9ca23d369c3ccf1b3ffb209dda8e6288a5f5901fb8235113825fa48d3ae8e520 +SIZE (cabal/jira-wiki-markup-1.5.1/jira-wiki-markup-1.5.1.tar.gz) = 25459 +SHA256 (cabal/json-0.10/json-0.10.tar.gz) = 0c046a3c03c9332816d3c9e50319b1d1eb3c2c1baba1123a7650d047b26856ba +SIZE (cabal/json-0.10/json-0.10.tar.gz) = 22622 +SHA256 (cabal/json-0.10/revision/1.cabal) = d9fc6b07ce92b8894825a17d2cf14799856767eb30c8bf55962baa579207d799 +SIZE (cabal/json-0.10/revision/1.cabal) = 3210 +SHA256 (cabal/libyaml-0.1.2/libyaml-0.1.2.tar.gz) = 8f42d66f199fcaee255326f8f770d88b0670df56b5eb78002d6058f3a45e97b5 +SIZE (cabal/libyaml-0.1.2/libyaml-0.1.2.tar.gz) = 63635 +SHA256 (cabal/libyaml-0.1.2/revision/1.cabal) = 7fb663b11fcdb86503c14aa81763106ea79b1048fc29a1fe44ec346d9ecac101 +SIZE (cabal/libyaml-0.1.2/revision/1.cabal) = 2222 +SHA256 (cabal/memory-0.18.0/memory-0.18.0.tar.gz) = fd4eb6f638e24b81b4e6cdd68772a531726f2f67686c8969d3407d82f7862e3e +SIZE (cabal/memory-0.18.0/memory-0.18.0.tar.gz) = 41957 +SHA256 (cabal/microlens-0.4.13.1/microlens-0.4.13.1.tar.gz) = 0a54abee8ff4f6aeb4bea0783409a3dbd28a4e7a892bac916b0fb6a71382d7fc +SIZE (cabal/microlens-0.4.13.1/microlens-0.4.13.1.tar.gz) = 27436 +SHA256 (cabal/mime-types-0.1.1.0/mime-types-0.1.1.0.tar.gz) = ebd01ed4e37142cb3233d4ffe55fe879b64d4a0b5802c8bc6afa1c7670f9e11b +SIZE (cabal/mime-types-0.1.1.0/mime-types-0.1.1.0.tar.gz) = 11818 +SHA256 (cabal/monad-control-1.0.3.1/monad-control-1.0.3.1.tar.gz) = ae0baea04d99375ef788140367179994a7178d400a8ce0d9026846546772713c +SIZE (cabal/monad-control-1.0.3.1/monad-control-1.0.3.1.tar.gz) = 13985 +SHA256 (cabal/mono-traversable-1.0.15.3/mono-traversable-1.0.15.3.tar.gz) = 98b220f3313d74227a4249210c8818e839678343e62b3ebb1b8c867cf2b974b7 +SIZE (cabal/mono-traversable-1.0.15.3/mono-traversable-1.0.15.3.tar.gz) = 40461 +SHA256 (cabal/network-3.1.4.0/network-3.1.4.0.tar.gz) = b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e +SIZE (cabal/network-3.1.4.0/network-3.1.4.0.tar.gz) = 139988 +SHA256 (cabal/network-bsd-2.8.1.0/network-bsd-2.8.1.0.tar.gz) = d94961ca15c42c798d19cde540ec12b25cc43435fb95e682399d6c1a02022d4e +SIZE (cabal/network-bsd-2.8.1.0/network-bsd-2.8.1.0.tar.gz) = 8584 +SHA256 (cabal/network-bsd-2.8.1.0/revision/4.cabal) = cd945ea08818281e4a8fa6f0a0640a1502aad3748546a3c197e071772452a9bd +SIZE (cabal/network-bsd-2.8.1.0/revision/4.cabal) = 3738 +SHA256 (cabal/network-info-0.2.1/network-info-0.2.1.tar.gz) = 9b2d88312fc8280351d5003200cc07decbb865f85d3aa7b1094b238bd6a8b404 +SIZE (cabal/network-info-0.2.1/network-info-0.2.1.tar.gz) = 6387 +SHA256 (cabal/network-uri-2.6.4.2/network-uri-2.6.4.2.tar.gz) = 9c188973126e893250b881f20e8811dca06c223c23402b06f7a1f2e995797228 +SIZE (cabal/network-uri-2.6.4.2/network-uri-2.6.4.2.tar.gz) = 31309 +SHA256 (cabal/old-locale-1.0.0.7/old-locale-1.0.0.7.tar.gz) = dbaf8bf6b888fb98845705079296a23c3f40ee2f449df7312f7f7f1de18d7b50 +SIZE (cabal/old-locale-1.0.0.7/old-locale-1.0.0.7.tar.gz) = 3384 +SHA256 (cabal/old-locale-1.0.0.7/revision/2.cabal) = fa998be2c7e00cd26a6e9075bea790caaf3932caa3e9497ad69bc20380dd6911 +SIZE (cabal/old-locale-1.0.0.7/revision/2.cabal) = 1071 +SHA256 (cabal/old-time-1.1.0.3/old-time-1.1.0.3.tar.gz) = 1ccb158b0f7851715d36b757c523b026ca1541e2030d02239802ba39b4112bc1 +SIZE (cabal/old-time-1.1.0.3/old-time-1.1.0.3.tar.gz) = 74219 +SHA256 (cabal/old-time-1.1.0.3/revision/2.cabal) = c91fbb3ee73d20ccd015842b30f1f29a304893ebe0ae3128b7bbc13d5bb0d4c8 +SIZE (cabal/old-time-1.1.0.3/revision/2.cabal) = 1328 +SHA256 (cabal/ordered-containers-0.2.3/ordered-containers-0.2.3.tar.gz) = 36849705752f3bc367fa1d172e1ec57375418341e9d74de572ae1b6fb56a81a3 +SIZE (cabal/ordered-containers-0.2.3/ordered-containers-0.2.3.tar.gz) = 7404 +SHA256 (cabal/pandoc-3.1.4/pandoc-3.1.4.tar.gz) = 15b67fad7e7b9bf72b1c9dfea0010326cf8b115c009783b406db954fdb0b7997 +SIZE (cabal/pandoc-3.1.4/pandoc-3.1.4.tar.gz) = 7266894 +SHA256 (cabal/pandoc-types-1.23/pandoc-types-1.23.tar.gz) = 5e6721410219c0a39b05fc732de9864745592fffa8287ad6e87c66138a51162d +SIZE (cabal/pandoc-types-1.23/pandoc-types-1.23.tar.gz) = 35901 +SHA256 (cabal/pem-0.2.4/pem-0.2.4.tar.gz) = 770c4c1b9cd24b3db7f511f8a48404a0d098999e28573c3743a8a296bb96f8d4 +SIZE (cabal/pem-0.2.4/pem-0.2.4.tar.gz) = 4717 +SHA256 (cabal/pretty-show-1.10/pretty-show-1.10.tar.gz) = 307f9086e0b063d439dc4f513e36a145e8a57f23de448aefae2a6c00f6da6fd2 +SIZE (cabal/pretty-show-1.10/pretty-show-1.10.tar.gz) = 42233 +SHA256 (cabal/primitive-0.8.0.0/primitive-0.8.0.0.tar.gz) = 5553c21b4a789f9b591eed69e598cc58484c274af29250e517b5a8bcc62b995f +SIZE (cabal/primitive-0.8.0.0/primitive-0.8.0.0.tar.gz) = 57222 +SHA256 (cabal/random-1.2.1.1/random-1.2.1.1.tar.gz) = 3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76 +SIZE (cabal/random-1.2.1.1/random-1.2.1.1.tar.gz) = 47109 +SHA256 (cabal/recaptcha-0.1.0.4/recaptcha-0.1.0.4.tar.gz) = a26172c3f5797e402de95b92edcb56a828cb791849b92b4238683446c970430d +SIZE (cabal/recaptcha-0.1.0.4/recaptcha-0.1.0.4.tar.gz) = 2724 +SHA256 (cabal/regex-base-0.94.0.2/regex-base-0.94.0.2.tar.gz) = 7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1 +SIZE (cabal/regex-base-0.94.0.2/regex-base-0.94.0.2.tar.gz) = 10488 +SHA256 (cabal/regex-base-0.94.0.2/revision/1.cabal) = 4ff4425c710cddf440dfbac6cd52310bb6b23e17902390ff71c9fc7eaafc4fcc +SIZE (cabal/regex-base-0.94.0.2/revision/1.cabal) = 2643 +SHA256 (cabal/regex-compat-0.95.2.1/regex-compat-0.95.2.1.tar.gz) = 8f7b386c72fd605a292edfb809b8620245b4a3ab7af192ad79e36778596e7947 +SIZE (cabal/regex-compat-0.95.2.1/regex-compat-0.95.2.1.tar.gz) = 4285 +SHA256 (cabal/regex-compat-0.95.2.1/revision/2.cabal) = 96c83b06280ebfb6fef01864b2af9eb9e136a9832c563773f327d4197bbbb851 +SIZE (cabal/regex-compat-0.95.2.1/revision/2.cabal) = 1705 +SHA256 (cabal/regex-posix-0.96.0.1/regex-posix-0.96.0.1.tar.gz) = c7827c391919227711e1cff0a762b1678fd8739f9c902fc183041ff34f59259c +SIZE (cabal/regex-posix-0.96.0.1/regex-posix-0.96.0.1.tar.gz) = 12853 +SHA256 (cabal/regex-posix-0.96.0.1/revision/1.cabal) = 9dbba4b65a3bb6975d9740814be5593c6b2d2d6a0b3febc8ec940edb9a9bbdf4 +SIZE (cabal/regex-posix-0.96.0.1/revision/1.cabal) = 2954 +SHA256 (cabal/regex-tdfa-1.3.2.1/regex-tdfa-1.3.2.1.tar.gz) = 5c8bf8b5274dd45a9afa72bb4f51602df429b4dfd2a05275da5d78c00e7b8295 +SIZE (cabal/regex-tdfa-1.3.2.1/regex-tdfa-1.3.2.1.tar.gz) = 82890 +SHA256 (cabal/resourcet-1.3.0/resourcet-1.3.0.tar.gz) = ec601785ee42a201f32adb205b8685c983f18757b1bd33d2e806d571e0f9996b +SIZE (cabal/resourcet-1.3.0/resourcet-1.3.0.tar.gz) = 17620 +SHA256 (cabal/safe-0.3.19/safe-0.3.19.tar.gz) = 25043442c8f8aa95955bb17467d023630632b961aaa61e807e325d9b2c33f7a2 +SIZE (cabal/safe-0.3.19/safe-0.3.19.tar.gz) = 11267 +SHA256 (cabal/scientific-0.3.7.0/scientific-0.3.7.0.tar.gz) = a3a121c4b3d68fb8b9f8c709ab012e48f090ed553609247a805ad070d6b343a9 +SIZE (cabal/scientific-0.3.7.0/scientific-0.3.7.0.tar.gz) = 24723 +SHA256 (cabal/scientific-0.3.7.0/revision/5.cabal) = 26d8109106963a345368011081453d25ee1dfa6afae2b1f57b426b4bcd392d91 +SIZE (cabal/scientific-0.3.7.0/revision/5.cabal) = 4854 +SHA256 (cabal/semialign-1.3/semialign-1.3.tar.gz) = 628e43319f584a8dd46c124ee0685cac586e0f6f877c5ceff37c3dbb2e3cc56c +SIZE (cabal/semialign-1.3/semialign-1.3.tar.gz) = 10543 +SHA256 (cabal/semigroupoids-6.0.0.1/semigroupoids-6.0.0.1.tar.gz) = 7da38a9891bdf8205fd6522cdb712956b8c0bf5c52983da60295c8e057d77934 +SIZE (cabal/semigroupoids-6.0.0.1/semigroupoids-6.0.0.1.tar.gz) = 36222 +SHA256 (cabal/semigroups-0.20/semigroups-0.20.tar.gz) = 902d2e33c96b40a89de5957f2a9e097197afcc35e257e45b32ebe770993673e1 +SIZE (cabal/semigroups-0.20/semigroups-0.20.tar.gz) = 18788 +SHA256 (cabal/sendfile-0.7.11.4/sendfile-0.7.11.4.tar.gz) = 73b0be7cd6e29e859ffae741cb398eb129e0bf1c6953ef5755da0b8a020751c4 +SIZE (cabal/sendfile-0.7.11.4/sendfile-0.7.11.4.tar.gz) = 10721 +SHA256 (cabal/skylighting-0.13.3/skylighting-0.13.3.tar.gz) = b25c63cf342aff3c00742e08f4c80d641ebe5fd20eb7a4970450b8e0576e9b95 +SIZE (cabal/skylighting-0.13.3/skylighting-0.13.3.tar.gz) = 1367538 +SHA256 (cabal/skylighting-core-0.13.3/skylighting-core-0.13.3.tar.gz) = 6c6d0fae4aaa80f4dfca2b516ad8a864a6e8b5be7fdba039bd6fb00cb68c63d5 +SIZE (cabal/skylighting-core-0.13.3/skylighting-core-0.13.3.tar.gz) = 854171 +SHA256 (cabal/skylighting-format-ansi-0.1/skylighting-format-ansi-0.1.tar.gz) = 23dfa86c2ecd2601a2efed4967eb2ec0505a52c14776054ce4d89707c2de0a9b +SIZE (cabal/skylighting-format-ansi-0.1/skylighting-format-ansi-0.1.tar.gz) = 5350 +SHA256 (cabal/skylighting-format-blaze-html-0.1.1/skylighting-format-blaze-html-0.1.1.tar.gz) = b1139b4df369de93d1ec6d8a2ed02bf11d559f9eaf71c31434fb5b19ba48ef13 +SIZE (cabal/skylighting-format-blaze-html-0.1.1/skylighting-format-blaze-html-0.1.1.tar.gz) = 4769 +SHA256 (cabal/skylighting-format-context-0.1.0.2/skylighting-format-context-0.1.0.2.tar.gz) = 004213e13d89b692ea0912d7ffa6ee98c93146d1a7962a849ad7860697bc88bd +SIZE (cabal/skylighting-format-context-0.1.0.2/skylighting-format-context-0.1.0.2.tar.gz) = 3249 +SHA256 (cabal/skylighting-format-latex-0.1/skylighting-format-latex-0.1.tar.gz) = 97b66c9ab60451e41a94aa80a684e792fbe69816835f735224222beea22afb78 +SIZE (cabal/skylighting-format-latex-0.1/skylighting-format-latex-0.1.tar.gz) = 3777 +SHA256 (cabal/socks-0.6.1/socks-0.6.1.tar.gz) = 734447558bb061ce768f53a0df1f2401902c6bee396cc96ce627edd986ef6a73 +SIZE (cabal/socks-0.6.1/socks-0.6.1.tar.gz) = 9759 +SHA256 (cabal/split-0.2.3.5/split-0.2.3.5.tar.gz) = bf8aa8d610354a2b576946a6c838251ec5988c8374100638e6b2604513b93159 +SIZE (cabal/split-0.2.3.5/split-0.2.3.5.tar.gz) = 15746 +SHA256 (cabal/splitmix-0.1.0.4/splitmix-0.1.0.4.tar.gz) = 6d065402394e7a9117093dbb4530a21342c9b1e2ec509516c8a8d0ffed98ecaa +SIZE (cabal/splitmix-0.1.0.4/splitmix-0.1.0.4.tar.gz) = 22382 +SHA256 (cabal/splitmix-0.1.0.4/revision/2.cabal) = db25c2e17967aa6b6046ab8b1b96ba3f344ca59a62b60fb6113d51ea305a3d8e +SIZE (cabal/splitmix-0.1.0.4/revision/2.cabal) = 6537 +SHA256 (cabal/streaming-commons-0.2.2.6/streaming-commons-0.2.2.6.tar.gz) = 0180958a882eb0f6262b812fe886c2b1b8285474b5b958f814ae4f05409fbf79 +SIZE (cabal/streaming-commons-0.2.2.6/streaming-commons-0.2.2.6.tar.gz) = 37959 +SHA256 (cabal/strict-0.5/strict-0.5.tar.gz) = 3f4f0995dec2d520d0e321542f71412dac023658fdab603db04364d75269a0fd +SIZE (cabal/strict-0.5/strict-0.5.tar.gz) = 12564 +SHA256 (cabal/syb-0.7.2.3/syb-0.7.2.3.tar.gz) = d0b72daf16a947c4d9cb2d5774072f2153433224a04fd60fad60be9ffac8d91a +SIZE (cabal/syb-0.7.2.3/syb-0.7.2.3.tar.gz) = 40018 +SHA256 (cabal/system-filepath-0.4.14/system-filepath-0.4.14.tar.gz) = 1656ce3c0d585650784ceb3f794748286e19fb635f557e7b29b0897f8956d993 +SIZE (cabal/system-filepath-0.4.14/system-filepath-0.4.14.tar.gz) = 16663 +SHA256 (cabal/system-filepath-0.4.14/revision/1.cabal) = e8ce7d24d7008a825e5d03aa672950a0e8178ac54c3de7134f36c3a7e37694a2 +SIZE (cabal/system-filepath-0.4.14/revision/1.cabal) = 1631 +SHA256 (cabal/tagged-0.8.7/tagged-0.8.7.tar.gz) = 6414eeac27a1633f49e2f78199ced99ce8ce3d70b658cf6d55b1d81ff60cb961 +SIZE (cabal/tagged-0.8.7/tagged-0.8.7.tar.gz) = 10082 +SHA256 (cabal/tagsoup-0.14.8/tagsoup-0.14.8.tar.gz) = ba7e5500d853d29f0675b90655b7fdd032a4a7eee82a56e7ee3ef9949fe93ad5 +SIZE (cabal/tagsoup-0.14.8/tagsoup-0.14.8.tar.gz) = 43894 +SHA256 (cabal/temporary-1.3/temporary-1.3.tar.gz) = 8c442993694b5ffca823ce864af95bd2841fb5264ee511c61cf48cc71d879890 +SIZE (cabal/temporary-1.3/temporary-1.3.tar.gz) = 5686 +SHA256 (cabal/texmath-0.12.8/texmath-0.12.8.tar.gz) = 034ff00671d9b8ac4c983df59ccfb4f39fc7d8c2d19f1f39cc00ac5d3f8625c4 +SIZE (cabal/texmath-0.12.8/texmath-0.12.8.tar.gz) = 1479868 +SHA256 (cabal/text-conversions-0.3.1.1/text-conversions-0.3.1.1.tar.gz) = c8770fba789ce80334cae628285103c49abec0fa074773cbb5a88e26f5a7725d +SIZE (cabal/text-conversions-0.3.1.1/text-conversions-0.3.1.1.tar.gz) = 5258 +SHA256 (cabal/text-short-0.1.5/text-short-0.1.5.tar.gz) = a35ec6cde2ada084c1a050dc5885be5ab01f851b93d744cf0facbc1c18002dda +SIZE (cabal/text-short-0.1.5/text-short-0.1.5.tar.gz) = 25113 +SHA256 (cabal/text-short-0.1.5/revision/2.cabal) = c296eb2289dc5bf39912989c295cb82ef05ae5f84ee83ea5dc21f48da80e7052 +SIZE (cabal/text-short-0.1.5/revision/2.cabal) = 3202 +SHA256 (cabal/th-abstraction-0.5.0.0/th-abstraction-0.5.0.0.tar.gz) = 8258dc3ab7188af5826e2467032b52a931a3af4d8a93d4a094210e240a8a9964 +SIZE (cabal/th-abstraction-0.5.0.0/th-abstraction-0.5.0.0.tar.gz) = 40093 +SHA256 (cabal/th-compat-0.1.4/th-compat-0.1.4.tar.gz) = d8f97ac14ab47b6b8a7b0fdb4ff95426322ec56badd01652ac15da4a44d4bab8 +SIZE (cabal/th-compat-0.1.4/th-compat-0.1.4.tar.gz) = 14838 +SHA256 (cabal/th-compat-0.1.4/revision/2.cabal) = e5ae7c083ef3a22248558f8451669bb1c55ea8090f5908b86b9033743c161730 +SIZE (cabal/th-compat-0.1.4/revision/2.cabal) = 3224 +SHA256 (cabal/th-lift-0.8.3/th-lift-0.8.3.tar.gz) = 25d57bf5f8e7deefeb4ace0539805ae1e90b1ba5a034ebcc36141846408c6b75 +SIZE (cabal/th-lift-0.8.3/th-lift-0.8.3.tar.gz) = 14643 +SHA256 (cabal/th-lift-instances-0.1.20/th-lift-instances-0.1.20.tar.gz) = f533c3f95addcca461a0ccd1aafef75dd801bfa6599c0d1184d54bfffb61d870 +SIZE (cabal/th-lift-instances-0.1.20/th-lift-instances-0.1.20.tar.gz) = 6721 +SHA256 (cabal/these-1.2/these-1.2.tar.gz) = a8ed7174b7f790764360f48aab72fea382a6093ed369c7bc6881fae1abacd4b8 +SIZE (cabal/these-1.2/these-1.2.tar.gz) = 10606 +SHA256 (cabal/threads-0.5.1.7/threads-0.5.1.7.tar.gz) = e0f6fea09b99a2f84c98089c27c011077bf43f1e1977a5c43997e226d23142d0 +SIZE (cabal/threads-0.5.1.7/threads-0.5.1.7.tar.gz) = 7459 +SHA256 (cabal/threads-0.5.1.7/revision/1.cabal) = 97132b14f194d7ce0b15e25498545462a42ad1017b072641622653d4c1aabda3 +SIZE (cabal/threads-0.5.1.7/revision/1.cabal) = 2877 +SHA256 (cabal/time-compat-1.9.6.1/time-compat-1.9.6.1.tar.gz) = ad07bb00eb9678c2136d3680752b00acc4cbc522654bb3199bf31c61ef1e6b80 +SIZE (cabal/time-compat-1.9.6.1/time-compat-1.9.6.1.tar.gz) = 59964 +SHA256 (cabal/time-compat-1.9.6.1/revision/5.cabal) = dd4de1fa0d6b7108982efc7ac41938569e4c9b06230bb87d34aae007c52ddb67 +SIZE (cabal/time-compat-1.9.6.1/revision/5.cabal) = 5062 +SHA256 (cabal/time-locale-compat-0.1.1.5/time-locale-compat-0.1.1.5.tar.gz) = 07ff1566de7d851423a843b2de385442319348c621d4f779b3d365ce91ac502c +SIZE (cabal/time-locale-compat-0.1.1.5/time-locale-compat-0.1.1.5.tar.gz) = 1956 +SHA256 (cabal/tls-1.7.0/tls-1.7.0.tar.gz) = 3c2a50c902d26864f6af113e59045f049f6c54fb46239ed2d1d4a82bc8524078 +SIZE (cabal/tls-1.7.0/tls-1.7.0.tar.gz) = 158630 +SHA256 (cabal/transformers-base-0.4.6/transformers-base-0.4.6.tar.gz) = 323bf8689eb691b122661cffa41a25e00fea7a768433fe2dde35d3da7d32cf90 +SIZE (cabal/transformers-base-0.4.6/transformers-base-0.4.6.tar.gz) = 2902 +SHA256 (cabal/transformers-compat-0.7.2/transformers-compat-0.7.2.tar.gz) = b62c7304c9f3cbc9463d0739aa85cb9489f217ea092b9d625d417514fbcc9d6a +SIZE (cabal/transformers-compat-0.7.2/transformers-compat-0.7.2.tar.gz) = 46485 +SHA256 (cabal/typed-process-0.2.11.0/typed-process-0.2.11.0.tar.gz) = 948c59540675d85f35c99e285cdb8686713ec1689f530d5d21813239ea91f625 +SIZE (cabal/typed-process-0.2.11.0/typed-process-0.2.11.0.tar.gz) = 18309 +SHA256 (cabal/typst-0.1.0.0/typst-0.1.0.0.tar.gz) = a40a94476357580cd5197e1a2cd65bfdd29d8bad293667beca01741969a24eef +SIZE (cabal/typst-0.1.0.0/typst-0.1.0.0.tar.gz) = 6402077 +SHA256 (cabal/typst-symbols-0.1.2/typst-symbols-0.1.2.tar.gz) = c2e6c71e71cff33d464d6dc50276886d616626772d5f57260b2f668c4bcba0ab +SIZE (cabal/typst-symbols-0.1.2/typst-symbols-0.1.2.tar.gz) = 18076 +SHA256 (cabal/unicode-collation-0.1.3.4/unicode-collation-0.1.3.4.tar.gz) = b08dbe9bb269d6eda2639cdfc63caee136794f46c16a1ad51b5305dd2ea6d429 +SIZE (cabal/unicode-collation-0.1.3.4/unicode-collation-0.1.3.4.tar.gz) = 2056084 +SHA256 (cabal/unicode-data-0.4.0.1/unicode-data-0.4.0.1.tar.gz) = 37a5dea6801940beb65c4ac4b9d0f7e653a686cf773507f0ca61c210e0b06080 +SIZE (cabal/unicode-data-0.4.0.1/unicode-data-0.4.0.1.tar.gz) = 187381 +SHA256 (cabal/unicode-data-0.4.0.1/revision/1.cabal) = 081e269b48f2d8511579a6dd1aa5f5c2f940e63d9bafec5fb911c11e32b27ad3 +SIZE (cabal/unicode-data-0.4.0.1/revision/1.cabal) = 5624 +SHA256 (cabal/unicode-transforms-0.4.0.1/unicode-transforms-0.4.0.1.tar.gz) = 3278e1e1d648da4bcd7368658ae091a89080e88a2f44db9df5136711e99649fc +SIZE (cabal/unicode-transforms-0.4.0.1/unicode-transforms-0.4.0.1.tar.gz) = 648836 +SHA256 (cabal/unicode-transforms-0.4.0.1/revision/3.cabal) = adffd08a043cbf633e9574c35e206315bb07e73ed3886a91472d3cf208d8a6c3 +SIZE (cabal/unicode-transforms-0.4.0.1/revision/3.cabal) = 5923 +SHA256 (cabal/uniplate-1.6.13/uniplate-1.6.13.tar.gz) = e777c94628445556a71f135a42cf72d2cfbaccba5849cc42fbfec8b2182e3ad2 +SIZE (cabal/uniplate-1.6.13/uniplate-1.6.13.tar.gz) = 29787 +SHA256 (cabal/uniplate-1.6.13/revision/1.cabal) = c8b715570d0b4baa72512e677552dd3f98372a64bf9de000e779bd4162fd7be7 +SIZE (cabal/uniplate-1.6.13/revision/1.cabal) = 3320 +SHA256 (cabal/unix-time-0.4.10/unix-time-0.4.10.tar.gz) = 7e4a4bf8cba87bc7b1e3a1a7c68a44d7780360d6f52628cd84154829a03629bc +SIZE (cabal/unix-time-0.4.10/unix-time-0.4.10.tar.gz) = 52393 +SHA256 (cabal/unliftio-core-0.2.1.0/unliftio-core-0.2.1.0.tar.gz) = 99384cba8d56d9d61b85e38a313a93ebcdb78be6566367f0930ef580597fe3e3 +SIZE (cabal/unliftio-core-0.2.1.0/unliftio-core-0.2.1.0.tar.gz) = 3865 +SHA256 (cabal/unliftio-core-0.2.1.0/revision/2.cabal) = cb78a95718f9cb2579a8a1208d4a148ea358f0774321c8cb905bfb0b96a2813c +SIZE (cabal/unliftio-core-0.2.1.0/revision/2.cabal) = 1004 +SHA256 (cabal/unordered-containers-0.2.19.1/unordered-containers-0.2.19.1.tar.gz) = 1b27bec5e0d522b27a6029ebf4c4a6d40acbc083c787008e32fb55c4b1d128d2 +SIZE (cabal/unordered-containers-0.2.19.1/unordered-containers-0.2.19.1.tar.gz) = 58030 +SHA256 (cabal/unordered-containers-0.2.19.1/revision/2.cabal) = 9ad8972c2e913c37b1d4f0e1261517fd7a1b8c8a58077e057be69837e3dbaa00 +SIZE (cabal/unordered-containers-0.2.19.1/revision/2.cabal) = 3822 +SHA256 (cabal/uri-bytestring-0.3.3.1/uri-bytestring-0.3.3.1.tar.gz) = f3e7a0ac26111c426727fed11624efe9ce36ee2e74ca79570ec0985eb6111368 +SIZE (cabal/uri-bytestring-0.3.3.1/uri-bytestring-0.3.3.1.tar.gz) = 23052 +SHA256 (cabal/uri-bytestring-aeson-0.1.0.8/uri-bytestring-aeson-0.1.0.8.tar.gz) = 612accdae921dd7a5d00fedaa377d994be5ab585ae75b1f9f0dcaa10412e7509 +SIZE (cabal/uri-bytestring-aeson-0.1.0.8/uri-bytestring-aeson-0.1.0.8.tar.gz) = 2047 +SHA256 (cabal/url-2.1.3/url-2.1.3.tar.gz) = 5af27e3f8c0a27e52d0dcb98ef06a0fdd01efe8bb21242c29432e1bc380a4f61 +SIZE (cabal/url-2.1.3/url-2.1.3.tar.gz) = 4180 +SHA256 (cabal/utf8-string-1.0.2/utf8-string-1.0.2.tar.gz) = ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a +SIZE (cabal/utf8-string-1.0.2/utf8-string-1.0.2.tar.gz) = 10726 +SHA256 (cabal/uuid-1.3.15/uuid-1.3.15.tar.gz) = f885958d8934930b7c0f9b91f980722f7f992c9383fc98f075cf9df64c800564 +SIZE (cabal/uuid-1.3.15/uuid-1.3.15.tar.gz) = 8815 +SHA256 (cabal/uuid-1.3.15/revision/2.cabal) = a3d79c5a5e58035e7dc5a08c5910c44a6719aaa38697b249e3f67aaac884411a +SIZE (cabal/uuid-1.3.15/revision/2.cabal) = 2642 +SHA256 (cabal/uuid-types-1.0.5/uuid-types-1.0.5.tar.gz) = ad68b89b7a64c07dd5c250a11be2033ee929318ff51ec7b4e4b54e1b4deba7dd +SIZE (cabal/uuid-types-1.0.5/uuid-types-1.0.5.tar.gz) = 11922 +SHA256 (cabal/uuid-types-1.0.5/revision/4.cabal) = e4662609522f093b86c5ae86aa9781afc69338cf102d42e5b5c196c320d95621 +SIZE (cabal/uuid-types-1.0.5/revision/4.cabal) = 2636 +SHA256 (cabal/vector-0.13.0.0/vector-0.13.0.0.tar.gz) = c5d3167d15e12f52e00879ddf304a591672a74e369cc47bc5c7fa1d5a8d15b4f +SIZE (cabal/vector-0.13.0.0/vector-0.13.0.0.tar.gz) = 154509 +SHA256 (cabal/vector-0.13.0.0/revision/3.cabal) = fa5cac81a17a5af388716792e8b99c24b3b66770086756d0d8b23f8272a0244c +SIZE (cabal/vector-0.13.0.0/revision/3.cabal) = 9112 +SHA256 (cabal/vector-algorithms-0.9.0.1/vector-algorithms-0.9.0.1.tar.gz) = 2ba7c0d3a8f26ef3ada24ff4abe81609225ecbab3b5754f048f8a0a3ecc33841 +SIZE (cabal/vector-algorithms-0.9.0.1/vector-algorithms-0.9.0.1.tar.gz) = 29149 +SHA256 (cabal/vector-algorithms-0.9.0.1/revision/2.cabal) = f3e5c6695529a94edf762117cafd91c989cb642ad3f8ca4014dbb13c8f6c2a20 +SIZE (cabal/vector-algorithms-0.9.0.1/revision/2.cabal) = 3826 +SHA256 (cabal/vector-stream-0.1.0.0/vector-stream-0.1.0.0.tar.gz) = a888210f6467f155090653734be5cc920406a07227e0d3adb59096716fdb806c +SIZE (cabal/vector-stream-0.1.0.0/vector-stream-0.1.0.0.tar.gz) = 12377 +SHA256 (cabal/vector-stream-0.1.0.0/revision/2.cabal) = f5d6d5291cd1b5f2f063403593f1f5c8127d692c888eedeb3e1eb40497a88dca +SIZE (cabal/vector-stream-0.1.0.0/revision/2.cabal) = 1404 +SHA256 (cabal/void-0.7.3/void-0.7.3.tar.gz) = 53af758ddc37dc63981671e503438d02c6f64a2d8744e9bec557a894431f7317 +SIZE (cabal/void-0.7.3/void-0.7.3.tar.gz) = 6741 +SHA256 (cabal/witherable-0.4.2/witherable-0.4.2.tar.gz) = 790d2bb274283419173bd89104439860675a9410f70f21912973ecd9098b4104 +SIZE (cabal/witherable-0.4.2/witherable-0.4.2.tar.gz) = 11876 +SHA256 (cabal/witherable-0.4.2/revision/4.cabal) = cec516b35df0ff53ab0068e70a912a0ba7b65c672fbc554727183faa195ad3b8 +SIZE (cabal/witherable-0.4.2/revision/4.cabal) = 2342 +SHA256 (cabal/xml-1.3.14/xml-1.3.14.tar.gz) = 32d1a1a9f21a59176d84697f96ae3a13a0198420e3e4f1c48abbab7d2425013d +SIZE (cabal/xml-1.3.14/xml-1.3.14.tar.gz) = 12048 +SHA256 (cabal/xml-1.3.14/revision/2.cabal) = c7a33d37c968c769723931a33e4e795f0aadda6cb62e7073ded8a2db52509d95 +SIZE (cabal/xml-1.3.14/revision/2.cabal) = 952 +SHA256 (cabal/xml-conduit-1.9.1.3/xml-conduit-1.9.1.3.tar.gz) = d8e9169562c71c9e6bc616f15832f521a68c362aa4fc03682748a809755f1bf4 +SIZE (cabal/xml-conduit-1.9.1.3/xml-conduit-1.9.1.3.tar.gz) = 44653 +SHA256 (cabal/xml-types-0.3.8/xml-types-0.3.8.tar.gz) = dad5e4ce602b7d1f4be37c0cfd99a261a4573746bfd80d917dc955b72da84c80 +SIZE (cabal/xml-types-0.3.8/xml-types-0.3.8.tar.gz) = 4054 +SHA256 (cabal/xss-sanitize-0.3.7.2/xss-sanitize-0.3.7.2.tar.gz) = 1bbb7f5be1f4590124c76458fb798bfd9bf8114dce338d5881ad89188a9dc946 +SIZE (cabal/xss-sanitize-0.3.7.2/xss-sanitize-0.3.7.2.tar.gz) = 12002 +SHA256 (cabal/yaml-0.11.11.2/yaml-0.11.11.2.tar.gz) = ee74923ee5b0fef74413c58aaa20ea59baf5d29d256a62fb47cc279570d9dc2f +SIZE (cabal/yaml-0.11.11.2/yaml-0.11.11.2.tar.gz) = 31926 +SHA256 (cabal/yaml-0.11.11.2/revision/2.cabal) = 6f0a1859e0fb3068e50dbc7fe9bf9a26847741bc24344e35e16a03711a18f88d +SIZE (cabal/yaml-0.11.11.2/revision/2.cabal) = 5178 +SHA256 (cabal/zip-archive-0.4.3/zip-archive-0.4.3.tar.gz) = 68050fa0f139848db0ea422ea9af1a65b652abf5168db7dafaf1bded5b045d05 +SIZE (cabal/zip-archive-0.4.3/zip-archive-0.4.3.tar.gz) = 22161 +SHA256 (cabal/zlib-0.6.3.0/zlib-0.6.3.0.tar.gz) = 9eaa989ad4534438b5beb51c1d3a4c8f6a088fdff0b259a5394fbf39aaee04da +SIZE (cabal/zlib-0.6.3.0/zlib-0.6.3.0.tar.gz) = 369595 +SHA256 (cabal/zlib-0.6.3.0/revision/1.cabal) = 9adce39e4ca0b7a87d45df0a243134816c57059a08e28cff5469c98ae1f54dfc +SIZE (cabal/zlib-0.6.3.0/revision/1.cabal) = 5367 diff --git a/www/hs-gitit/files/extra-patch-data_default.conf b/www/hs-gitit/files/extra-patch-data_default.conf new file mode 100644 index 000000000000..96e71c4b5458 --- /dev/null +++ b/www/hs-gitit/files/extra-patch-data_default.conf @@ -0,0 +1,22 @@ +--- data/default.conf.orig 2023-07-10 14:38:47 UTC ++++ data/default.conf +@@ -266,10 +266,19 @@ feed-days: 14 + feed-refresh-time: 60 + # number of minutes to cache feeds before refreshing + ++exports: no ++# if yes, export options will be enabled. Beware, this might disclose ++# any file contents readable by the gitit process by maliciously ++# crafting pages that include files! ++ + pdf-export: no + # if yes, PDF will appear in export options. PDF will be created using + # pdflatex, which must be installed and in the path. Note that PDF + # exports create significant additional server load. ++ ++pdf-engine: pdflatex ++# change this to have pandoc use a different engine for PDF creation, ++# like xelatex, wkhtmltopdf, pdfroff, etc. + + pandoc-user-data: + # if a directory is specified, this will be searched for pandoc diff --git a/www/hs-gitit/files/extra-patch-exports b/www/hs-gitit/files/extra-patch-exports new file mode 100644 index 000000000000..7b2cb45ac0c3 --- /dev/null +++ b/www/hs-gitit/files/extra-patch-exports @@ -0,0 +1,612 @@ +diff --git README.markdown README.markdown +index d49e0cc..c5a4ada 100644 +--- README.markdown ++++ README.markdown +@@ -7,9 +7,10 @@ files are stored in a [git], [darcs], or [mercurial] repository + and may be modified either by using the VCS's command-line tools or + through the wiki's web interface. By default, pandoc's extended version + of markdown is used as a markup language, but reStructuredText, LaTeX, HTML, +-DocBook, or Emacs Org-mode markup can also be used. Gitit can +-be configured to display TeX math (using [texmath]) and +-highlighted source code (using [highlighting-kate]). ++DocBook, or Emacs Org-mode markup can also be used. Pages can be exported in a ++number of different formats, including LaTeX, RTF, OpenOffice ODT, and ++MediaWiki markup. Gitit can be configured to display TeX math (using ++[texmath]) and highlighted source code (using [highlighting-kate]). + + Other features include + +@@ -410,7 +411,7 @@ Caching + By default, gitit does not cache content. If your wiki receives a lot of + traffic or contains pages that are slow to render, you may want to activate + caching. To do this, set the configuration option `use-cache` to `yes`. +-By default, rendered pages, and highlighted source files ++By default, rendered pages, highlighted source files, and exported PDFs + will be cached in the `cache` directory. (Another directory can be + specified by setting the `cache-dir` configuration option.) + +diff --git data/default.conf data/default.conf +index cd528f9..567bf8f 100644 +--- data/default.conf ++++ data/default.conf +@@ -266,9 +266,16 @@ feed-days: 14 + feed-refresh-time: 60 + # number of minutes to cache feeds before refreshing + ++pdf-export: no ++# if yes, PDF will appear in export options. PDF will be created using ++# pdflatex, which must be installed and in the path. Note that PDF ++# exports create significant additional server load. ++ + pandoc-user-data: + # if a directory is specified, this will be searched for pandoc +-# customizations. If no directory is ++# customizations. These can include a templates/ directory for custom ++# templates for various export formats, an S5 directory for custom ++# S5 styles, and a reference.odt for ODT exports. If no directory is + # specified, $HOME/.pandoc will be searched. See pandoc's README for + # more information. + +diff --git data/templates/pagetools.st data/templates/pagetools.st +index a5178f4..2d01dfa 100644 +--- data/templates/pagetools.st ++++ data/templates/pagetools.st +@@ -9,5 +9,6 @@ + <li><a href="$base$/_feed$pageUrl$" type="application/atom+xml" rel="alternate" title="This page's ATOM Feed">Atom feed</a> <img alt="feed icon" src="$base$/img/icons/feed.png"/></li> + $endif$ + </ul> ++ $exportbox$ + </fieldset> + </div> +diff --git gitit.cabal gitit.cabal +index 3d0d695..361415d 100644 +--- gitit.cabal ++++ gitit.cabal +@@ -115,6 +115,7 @@ Library + Network.Gitit.Authentication.Github, + Network.Gitit.Util, Network.Gitit.Server + Network.Gitit.Cache, Network.Gitit.State, ++ Network.Gitit.Export, + Network.Gitit.Handlers, + Network.Gitit.Plugins, Network.Gitit.Rpxnow, + Network.Gitit.Page, Network.Gitit.Feed, +diff --git src/Network/Gitit.hs src/Network/Gitit.hs +index 3ad25f8..032cc9d 100644 +--- src/Network/Gitit.hs ++++ src/Network/Gitit.hs +@@ -199,6 +199,7 @@ wikiHandlers = + authenticate ForModify (unlessNoDelete deletePage showPage) ] + , dir "_preview" preview + , guardIndex >> indexPage ++ , guardCommand "export" >> exportPage + , method POST >> guardCommand "cancel" >> showPage + , method POST >> guardCommand "update" >> + authenticate ForModify (unlessNoEdit updatePage showPage) +diff --git src/Network/Gitit/Cache.hs src/Network/Gitit/Cache.hs +index 3334d07..91b6c0a 100644 +--- src/Network/Gitit/Cache.hs ++++ src/Network/Gitit/Cache.hs +@@ -41,13 +41,23 @@ import Control.Monad.Trans (liftIO) + import Text.Pandoc.UTF8 (encodePath) + + -- | Expire a cached file, identified by its filename in the filestore. ++-- If there is an associated exported PDF, expire it too. + -- Returns () after deleting a file from the cache, fails if no cached file. + expireCachedFile :: String -> GititServerPart () + expireCachedFile file = do + cfg <- getConfig + let target = encodePath $ cacheDir cfg </> file + exists <- liftIO $ doesFileExist target +- when exists $ liftIO $ liftIO $ removeFile target ++ when exists $ liftIO $ do ++ liftIO $ removeFile target ++ expireCachedPDF target (defaultExtension cfg) ++ ++expireCachedPDF :: String -> String -> IO () ++expireCachedPDF file ext = ++ when (takeExtension file == "." ++ ext) $ do ++ let pdfname = file ++ ".export.pdf" ++ exists <- doesFileExist pdfname ++ when exists $ removeFile pdfname + + lookupCache :: String -> GititServerPart (Maybe (UTCTime, B.ByteString)) + lookupCache file = do +@@ -74,3 +84,4 @@ cacheContents file contents = do + liftIO $ do + createDirectoryIfMissing True targetDir + B.writeFile target contents ++ expireCachedPDF target (defaultExtension cfg) +diff --git src/Network/Gitit/Config.hs src/Network/Gitit/Config.hs +index d39d8cf..1bfbc47 100644 +--- src/Network/Gitit/Config.hs ++++ src/Network/Gitit/Config.hs +@@ -130,6 +130,7 @@ extractConfig cp = do + cfWikiTitle <- get cp "DEFAULT" "wiki-title" + cfFeedDays <- get cp "DEFAULT" "feed-days" + cfFeedRefreshTime <- get cp "DEFAULT" "feed-refresh-time" ++ cfPDFExport <- get cp "DEFAULT" "pdf-export" + cfPandocUserData <- get cp "DEFAULT" "pandoc-user-data" + cfXssSanitize <- get cp "DEFAULT" "xss-sanitize" + cfRecentActivityDays <- get cp "DEFAULT" "recent-activity-days" +@@ -231,6 +232,7 @@ extractConfig cp = do + , wikiTitle = cfWikiTitle + , feedDays = readNumber "feed-days" cfFeedDays + , feedRefreshTime = readNumber "feed-refresh-time" cfFeedRefreshTime ++ , pdfExport = cfPDFExport + , pandocUserData = if null cfPandocUserData + then Nothing + else Just cfPandocUserData +diff --git src/Network/Gitit/ContentTransformer.hs src/Network/Gitit/ContentTransformer.hs +index 12e450a..fa82604 100644 +--- src/Network/Gitit/ContentTransformer.hs ++++ src/Network/Gitit/ContentTransformer.hs +@@ -31,6 +31,7 @@ module Network.Gitit.ContentTransformer + , showRawPage + , showFileAsText + , showPage ++ , exportPage + , showHighlightedSource + , showFile + , preview +@@ -44,6 +45,7 @@ module Network.Gitit.ContentTransformer + , textResponse + , mimeFileResponse + , mimeResponse ++ , exportPandoc + , applyWikiTemplate + -- * Content-type transformation combinators + , pageToWikiPandoc +@@ -77,6 +79,7 @@ import Data.List (stripPrefix) + import Data.Maybe (isNothing, mapMaybe) + import Data.Semigroup ((<>)) + import Network.Gitit.Cache (lookupCache, cacheContents) ++import Network.Gitit.Export (exportFormats) + import Network.Gitit.Framework hiding (uriPath) + import Network.Gitit.Layout + import Network.Gitit.Page (stringToPage) +@@ -183,6 +186,10 @@ showFileAsText = runFileTransformer rawTextResponse + showPage :: Handler + showPage = runPageTransformer htmlViaPandoc + ++-- | Responds with page exported into selected format. ++exportPage :: Handler ++exportPage = runPageTransformer exportViaPandoc ++ + -- | Responds with highlighted source code. + showHighlightedSource :: Handler + showHighlightedSource = runFileTransformer highlightRawSource +@@ -213,6 +220,15 @@ applyPreCommitPlugins = runPageTransformer . applyPreCommitTransforms + rawTextResponse :: ContentTransformer Response + rawTextResponse = rawContents >>= textResponse + ++-- | Responds with a wiki page in the format specified ++-- by the @format@ parameter. ++exportViaPandoc :: ContentTransformer Response ++exportViaPandoc = rawContents >>= ++ maybe mzero return >>= ++ contentsToPage >>= ++ pageToWikiPandoc >>= ++ exportPandoc ++ + -- | Responds with a wiki page. Uses the cache when + -- possible and caches the rendered page when appropriate. + htmlViaPandoc :: ContentTransformer Response +@@ -306,6 +322,17 @@ mimeResponse :: Monad m + mimeResponse c mimeType = + return . setContentType mimeType . toResponse $ c + ++-- | Converts Pandoc to response using format specified in parameters. ++exportPandoc :: Pandoc -> ContentTransformer Response ++exportPandoc doc = do ++ params <- getParams ++ page <- getPageName ++ cfg <- lift getConfig ++ let format = pFormat params ++ case lookup format (exportFormats cfg) of ++ Nothing -> error $ "Unknown export format: " ++ format ++ Just writer -> lift (writer page doc) ++ + -- | Adds the sidebar, page tabs, and other elements of the wiki page + -- layout to the raw content. + applyWikiTemplate :: Html -> ContentTransformer Response +diff --git src/Network/Gitit/Export.hs src/Network/Gitit/Export.hs +new file mode 100644 +index 0000000..0842a8c +--- /dev/null ++++ src/Network/Gitit/Export.hs +@@ -0,0 +1,307 @@ ++{-# LANGUAGE OverloadedStrings #-} ++{-# LANGUAGE FlexibleContexts #-} ++{- ++Copyright (C) 2009 John MacFarlane <jgm@berkeley.edu> ++ ++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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++-} ++ ++{- Functions for exporting wiki pages in various formats. ++-} ++ ++module Network.Gitit.Export ( exportFormats ) where ++import Control.Exception (throwIO) ++import Text.Pandoc hiding (HTMLMathMethod(..), getDataFileName) ++import qualified Text.Pandoc as Pandoc ++import Text.Pandoc.PDF (makePDF) ++import Text.Pandoc.SelfContained as SelfContained ++import qualified Text.Pandoc.UTF8 as UTF8 ++import qualified Data.Map as M ++import Network.Gitit.Server ++import Network.Gitit.Framework (pathForPage) ++import Network.Gitit.State (getConfig) ++import Network.Gitit.Types ++import Network.Gitit.Cache (cacheContents, lookupCache) ++import Text.DocTemplates as DT ++import Control.Monad.Trans (liftIO) ++import Control.Monad (unless) ++import Text.XHtml (noHtml) ++import qualified Data.ByteString as B ++import qualified Data.ByteString.Lazy as L ++import System.FilePath ((</>), takeDirectory) ++import System.Environment (setEnv) ++import System.Directory (doesFileExist) ++import Text.HTML.SanitizeXSS ++import Data.ByteString.Lazy (fromStrict) ++import Data.Text (Text) ++import qualified Data.Text as T ++import Data.Text.Encoding (encodeUtf8) ++import Data.List (isPrefixOf) ++import Skylighting (styleToCss, pygments) ++import System.IO.Temp (withSystemTempDirectory) ++import Paths_gitit (getDataFileName) ++ ++defaultRespOptions :: WriterOptions ++defaultRespOptions = def { writerHighlightStyle = Just pygments } ++ ++respondX :: String -> String -> String ++ -> (WriterOptions -> Pandoc -> PandocIO L.ByteString) ++ -> WriterOptions -> String -> Pandoc -> Handler ++respondX templ mimetype ext fn opts page doc = do ++ cfg <- getConfig ++ doc' <- if ext `elem` ["odt","pdf","beamer","epub","docx","rtf"] ++ then fixURLs page doc ++ else return doc ++ doc'' <- liftIO $ runIO $ do ++ setUserDataDir $ pandocUserData cfg ++ compiledTemplate <- compileDefaultTemplate (T.pack templ) ++ fn opts{ writerTemplate = Just compiledTemplate } doc' ++ either (liftIO . throwIO) ++ (ok . setContentType mimetype . ++ (if null ext then id else setFilename (page ++ "." ++ ext)) . ++ toResponseBS B.empty) ++ doc'' ++ ++respondS :: String -> String -> String -> (WriterOptions -> Pandoc -> PandocIO Text) ++ -> WriterOptions -> String -> Pandoc -> Handler ++respondS templ mimetype ext fn = ++ respondX templ mimetype ext (\o d -> fromStrict . encodeUtf8 <$> fn o d) ++ ++respondSlides :: String -> (WriterOptions -> Pandoc -> PandocIO Text) -> String -> Pandoc -> Handler ++respondSlides templ fn page doc = do ++ cfg <- getConfig ++ let math = case mathMethod cfg of ++ MathML -> Pandoc.MathML ++ WebTeX u -> Pandoc.WebTeX $ T.pack u ++ _ -> Pandoc.PlainMath ++ let opts' = defaultRespOptions { writerIncremental = True ++ , writerHTMLMathMethod = math} ++ -- We sanitize the body only, to protect against XSS attacks. ++ -- (Sanitizing the whole HTML page would strip out javascript ++ -- needed for the slides.) We then pass the body into the ++ -- slide template using the 'body' variable. ++ Pandoc meta blocks <- fixURLs page doc ++ docOrError <- liftIO $ runIO $ do ++ setUserDataDir $ pandocUserData cfg ++ body' <- writeHtml5String opts' (Pandoc meta blocks) -- just body ++ let body'' = T.unpack ++ $ (if xssSanitize cfg then sanitizeBalance else id) ++ $ body' ++ let setVariable key val (DT.Context ctx) = ++ DT.Context $ M.insert (T.pack key) (toVal (T.pack val)) ctx ++ variables' <- if mathMethod cfg == MathML ++ then do ++ s <- readDataFile "MathMLinHTML.js" ++ return $ setVariable "mathml-script" ++ (UTF8.toString s) mempty ++ else return mempty ++ compiledTemplate <- compileDefaultTemplate (T.pack templ) ++ dzcore <- if templ == "dzslides" ++ then do ++ dztempl <- readDataFile $ "dzslides" </> "template.html" ++ return $ unlines ++ $ dropWhile (not . isPrefixOf "<!-- {{{{ dzslides core") ++ $ lines $ UTF8.toString dztempl ++ else return "" ++ let opts'' = opts'{ ++ writerVariables = ++ setVariable "body" body'' $ ++ setVariable "dzslides-core" dzcore $ ++ setVariable "highlighting-css" pygmentsCss ++ $ variables' ++ ,writerTemplate = Just compiledTemplate } ++ h <- fn opts'' (Pandoc meta []) ++ makeSelfContained h ++ either (liftIO . throwIO) ++ (ok . setContentType "text/html;charset=UTF-8" . ++ (setFilename (page ++ ".html")) . ++ toResponseBS B.empty . L.fromStrict . UTF8.fromText) ++ docOrError ++ ++respondLaTeX :: String -> Pandoc -> Handler ++respondLaTeX = respondS "latex" "application/x-latex" "tex" ++ writeLaTeX defaultRespOptions ++ ++respondConTeXt :: String -> Pandoc -> Handler ++respondConTeXt = respondS "context" "application/x-context" "tex" ++ writeConTeXt defaultRespOptions ++ ++ ++respondRTF :: String -> Pandoc -> Handler ++respondRTF = respondX "rtf" "application/rtf" "rtf" ++ (\o d -> L.fromStrict . UTF8.fromText <$> writeRTF o d) defaultRespOptions ++ ++respondRST :: String -> Pandoc -> Handler ++respondRST = respondS "rst" "text/plain; charset=utf-8" "" ++ writeRST defaultRespOptions{writerReferenceLinks = True} ++ ++respondMarkdown :: String -> Pandoc -> Handler ++respondMarkdown = respondS "markdown" "text/plain; charset=utf-8" "" ++ writeMarkdown defaultRespOptions{writerReferenceLinks = True} ++ ++respondCommonMark :: String -> Pandoc -> Handler ++respondCommonMark = respondS "commonmark" "text/plain; charset=utf-8" "" ++ writeCommonMark defaultRespOptions{writerReferenceLinks = True} ++ ++respondPlain :: String -> Pandoc -> Handler ++respondPlain = respondS "plain" "text/plain; charset=utf-8" "" ++ writePlain defaultRespOptions ++ ++respondMan :: String -> Pandoc -> Handler ++respondMan = respondS "man" "text/plain; charset=utf-8" "" ++ writeMan defaultRespOptions ++ ++respondTexinfo :: String -> Pandoc -> Handler ++respondTexinfo = respondS "texinfo" "application/x-texinfo" "texi" ++ writeTexinfo defaultRespOptions ++ ++respondDocbook :: String -> Pandoc -> Handler ++respondDocbook = respondS "docbook" "application/docbook+xml" "xml" ++ writeDocbook5 defaultRespOptions ++ ++respondOrg :: String -> Pandoc -> Handler ++respondOrg = respondS "org" "text/plain; charset=utf-8" "" ++ writeOrg defaultRespOptions ++ ++respondICML :: String -> Pandoc -> Handler ++respondICML = respondX "icml" "application/xml; charset=utf-8" "" ++ (\o d -> L.fromStrict . UTF8.fromText <$> writeICML o d) ++ defaultRespOptions ++ ++respondTextile :: String -> Pandoc -> Handler ++respondTextile = respondS "textile" "text/plain; charset=utf-8" "" ++ writeTextile defaultRespOptions ++ ++respondAsciiDoc :: String -> Pandoc -> Handler ++respondAsciiDoc = respondS "asciidoc" "text/plain; charset=utf-8" "" ++ writeAsciiDoc defaultRespOptions ++ ++respondMediaWiki :: String -> Pandoc -> Handler ++respondMediaWiki = respondS "mediawiki" "text/plain; charset=utf-8" "" ++ writeMediaWiki defaultRespOptions ++ ++respondODT :: String -> Pandoc -> Handler ++respondODT = respondX "opendocument" "application/vnd.oasis.opendocument.text" ++ "odt" writeODT defaultRespOptions ++ ++respondEPUB :: String -> Pandoc -> Handler ++respondEPUB = respondX "html" "application/epub+zip" "epub" writeEPUB3 ++ defaultRespOptions ++ ++respondDocx :: String -> Pandoc -> Handler ++respondDocx = respondX "native" ++ "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ++ "docx" writeDocx defaultRespOptions ++ ++respondPDF :: Bool -> String -> Pandoc -> Handler ++respondPDF useBeamer page old_pndc = fixURLs page old_pndc >>= \pndc -> do ++ cfg <- getConfig ++ unless (pdfExport cfg) $ error "PDF export disabled" ++ let cacheName = pathForPage page (defaultExtension cfg) ++ ".export.pdf" ++ cached <- if useCache cfg ++ then lookupCache cacheName ++ else return Nothing ++ pdf' <- case cached of ++ Just (_modtime, bs) -> return $ Right $ L.fromChunks [bs] ++ Nothing -> liftIO $ ++ withSystemTempDirectory "gitit" $ \tmpdir -> do ++ let toc = tableOfContents cfg ++ -- ensure that LaTeX \include commands can't include ++ -- files outside the working directory, e.g. /etc/passwd: ++ writeFile (tmpdir </> "texmf.cnf") ++ "openout_any = p\nopenin_any = p\n" ++ setEnv "TEXMFCNF" (tmpdir ++ ":") ++ res <- runIO $ do ++ setUserDataDir $ pandocUserData cfg ++ setInputFiles [baseUrl cfg] ++ let templ = if useBeamer then "beamer" else "latex" ++ compiledTemplate <- compileDefaultTemplate templ ++ makePDF "pdflatex" [] (if useBeamer then writeBeamer else writeLaTeX) ++ defaultRespOptions{ writerTemplate = Just compiledTemplate ++ , writerTableOfContents = toc } pndc ++ either (liftIO . throwIO) return res ++ ++ case pdf' of ++ Left logOutput' -> simpleErrorHandler ("PDF creation failed:\n" ++ ++ UTF8.toStringLazy logOutput') ++ Right pdfBS -> do ++ case cached of ++ Nothing -> ++ cacheContents cacheName $ B.concat . L.toChunks $ pdfBS ++ _ -> return () ++ ok $ setContentType "application/pdf" $ setFilename (page ++ ".pdf") $ ++ (toResponse noHtml) {rsBody = pdfBS} ++ ++-- | When we create a PDF or ODT from a Gitit page, we need to fix the URLs of any ++-- images on the page. Those URLs will often be relative to the staticDir, but the ++-- PDF or ODT processor only understands paths relative to the working directory. ++-- ++-- Because the working directory will not in general be the root of the gitit instance ++-- at the time the Pandoc is fed to e.g. pdflatex, this function replaces the URLs of ++-- images in the staticDir with their correct absolute file path. ++fixURLs :: String -> Pandoc -> GititServerPart Pandoc ++fixURLs page pndc = do ++ cfg <- getConfig ++ defaultStatic <- liftIO $ getDataFileName $ "data" </> "static" ++ ++ let static = staticDir cfg ++ let repoPath = repositoryPath cfg ++ ++ let go (Image attr ils (url, title)) = do ++ fixedURL <- fixURL $ T.unpack url ++ return $ Image attr ils (T.pack fixedURL, title) ++ go x = return x ++ ++ fixURL ('/':url) = resolve url ++ fixURL url = resolve $ takeDirectory page </> url ++ ++ resolve p = do ++ sp <- doesFileExist $ static </> p ++ dsp <- doesFileExist $ defaultStatic </> p ++ return (if sp then static </> p ++ else (if dsp then defaultStatic </> p ++ else repoPath </> p)) ++ liftIO $ bottomUpM go pndc ++ ++exportFormats :: Config -> [(String, String -> Pandoc -> Handler)] ++exportFormats cfg = if pdfExport cfg ++ then ("PDF", respondPDF False) : ++ ("Beamer", respondPDF True) : ++ rest ++ else rest ++ where rest = [ ("LaTeX", respondLaTeX) -- (description, writer) ++ , ("ConTeXt", respondConTeXt) ++ , ("Texinfo", respondTexinfo) ++ , ("reST", respondRST) ++ , ("Markdown", respondMarkdown) ++ , ("CommonMark",respondCommonMark) ++ , ("Plain text",respondPlain) ++ , ("MediaWiki", respondMediaWiki) ++ , ("Org-mode", respondOrg) ++ , ("ICML", respondICML) ++ , ("Textile", respondTextile) ++ , ("AsciiDoc", respondAsciiDoc) ++ , ("Man page", respondMan) ++ , ("DocBook", respondDocbook) ++ , ("DZSlides", respondSlides "dzslides" writeDZSlides) ++ , ("Slidy", respondSlides "slidy" writeSlidy) ++ , ("S5", respondSlides "s5" writeS5) ++ , ("EPUB", respondEPUB) ++ , ("ODT", respondODT) ++ , ("DOCX", respondDocx) ++ , ("RTF", respondRTF) ] ++ ++pygmentsCss :: String ++pygmentsCss = styleToCss pygments +diff --git src/Network/Gitit/Handlers.hs src/Network/Gitit/Handlers.hs +index 44b19fe..d9f894f 100644 +--- src/Network/Gitit/Handlers.hs ++++ src/Network/Gitit/Handlers.hs +@@ -42,6 +42,7 @@ module Network.Gitit.Handlers ( + , showPage + , showPageDiff + , showFileDiff ++ , exportPage + , updatePage + , editPage + , deletePage +@@ -60,7 +61,7 @@ import Network.Gitit.Feed (filestoreToXmlFeed, FeedConfig(..)) + import Network.Gitit.Util (orIfNull) + import Network.Gitit.Cache (expireCachedFile, lookupCache, cacheContents) + import Network.Gitit.ContentTransformer (showRawPage, showFileAsText, showPage, +- showHighlightedSource, preview, applyPreCommitPlugins) ++ exportPage, showHighlightedSource, preview, applyPreCommitPlugins) + import Network.Gitit.Page (readCategories) + import qualified Control.Exception as E + import System.FilePath +diff --git src/Network/Gitit/Layout.hs src/Network/Gitit/Layout.hs +index f835d42..fd307c7 100644 +--- src/Network/Gitit/Layout.hs ++++ src/Network/Gitit/Layout.hs +@@ -31,11 +31,12 @@ import Network.Gitit.Server + import Network.Gitit.Framework + import Network.Gitit.State + import Network.Gitit.Types ++import Network.Gitit.Export (exportFormats) + import Network.HTTP (urlEncodeVars) + import qualified Text.StringTemplate as T + import Text.XHtml hiding ( (</>), dir, method, password, rev ) + import Text.XHtml.Strict ( stringToHtmlString ) +-import Data.Maybe (isNothing) ++import Data.Maybe (isNothing, isJust, fromJust) + + defaultPageLayout :: PageLayout + defaultPageLayout = PageLayout +@@ -110,6 +111,8 @@ filledPageTemplate base' cfg layout htmlContents templ = + maybe id (T.setAttribute "markuphelp") (pgMarkupHelp layout) . + setBoolAttr "printable" (pgPrintable layout) . + maybe id (T.setAttribute "revision") rev . ++ T.setAttribute "exportbox" ++ (renderHtmlFragment $ exportBox base' cfg page rev) . + (if null (pgTabs layout) then id else T.setAttribute "tabs" + (renderHtmlFragment tabs)) . + (\f x xs -> if null xs then x else f xs) (T.setAttribute "messages") id (pgMessages layout) . +@@ -119,6 +122,17 @@ filledPageTemplate base' cfg layout htmlContents templ = + templ + + ++exportBox :: String -> Config -> String -> Maybe String -> Html ++exportBox base' cfg page rev | not (isSourceCode page) = ++ gui (base' ++ urlForPage page) ! [identifier "exportbox"] << ++ ([ textfield "revision" ! [thestyle "display: none;", ++ value (fromJust rev)] | isJust rev ] ++ ++ [ select ! [name "format"] << ++ map ((\f -> option ! [value f] << f) . fst) (exportFormats cfg) ++ , primHtmlChar "nbsp" ++ , submit "export" "Export" ]) ++exportBox _ _ _ _ = noHtml ++ + -- auxiliary functions: + + linkForTab :: (Tab -> Html -> Html) -> String -> String -> Maybe String -> Tab -> Html +diff --git src/Network/Gitit/Types.hs src/Network/Gitit/Types.hs +index aa23ec1..8f037b9 100644 +--- src/Network/Gitit/Types.hs ++++ src/Network/Gitit/Types.hs +@@ -204,6 +204,8 @@ data Config = Config { + feedDays :: Integer, + -- | Number of minutes to cache feeds before refreshing + feedRefreshTime :: Integer, ++ -- | Allow PDF export? ++ pdfExport :: Bool, + -- | Directory to search for pandoc customizations + pandocUserData :: Maybe FilePath, + -- | Filter HTML through xss-sanitize +@@ -465,7 +467,7 @@ instance FromData Command where + return $ case map fst pairs `intersect` commandList of + [] -> Command Nothing + (c:_) -> Command $ Just c +- where commandList = ["update", "cancel"] ++ where commandList = ["update", "cancel", "export"] + + -- | State for a single wiki. + data WikiState = WikiState { diff --git a/www/hs-gitit/files/extra-patch-src_Network_Gitit_Config.hs b/www/hs-gitit/files/extra-patch-src_Network_Gitit_Config.hs new file mode 100644 index 000000000000..0e977d0e92cf --- /dev/null +++ b/www/hs-gitit/files/extra-patch-src_Network_Gitit_Config.hs @@ -0,0 +1,22 @@ +--- src/Network/Gitit/Config.hs.orig 2023-07-10 14:38:47 UTC ++++ src/Network/Gitit/Config.hs +@@ -130,7 +130,9 @@ extractConfig cp = do + cfWikiTitle <- get cp "DEFAULT" "wiki-title" + cfFeedDays <- get cp "DEFAULT" "feed-days" + cfFeedRefreshTime <- get cp "DEFAULT" "feed-refresh-time" ++ cfExports <- get cp "DEFAULT" "exports" + cfPDFExport <- get cp "DEFAULT" "pdf-export" ++ cfPDFEngine <- get cp "DEFAULT" "pdf-engine" + cfPandocUserData <- get cp "DEFAULT" "pandoc-user-data" + cfXssSanitize <- get cp "DEFAULT" "xss-sanitize" + cfRecentActivityDays <- get cp "DEFAULT" "recent-activity-days" +@@ -232,7 +234,9 @@ extractConfig cp = do + , wikiTitle = cfWikiTitle + , feedDays = readNumber "feed-days" cfFeedDays + , feedRefreshTime = readNumber "feed-refresh-time" cfFeedRefreshTime ++ , exports = cfExports + , pdfExport = cfPDFExport ++ , pdfEngine = cfPDFEngine + , pandocUserData = if null cfPandocUserData + then Nothing + else Just cfPandocUserData diff --git a/www/hs-gitit/files/extra-patch-src_Network_Gitit_Export.hs b/www/hs-gitit/files/extra-patch-src_Network_Gitit_Export.hs new file mode 100644 index 000000000000..67bad2b51db6 --- /dev/null +++ b/www/hs-gitit/files/extra-patch-src_Network_Gitit_Export.hs @@ -0,0 +1,31 @@ +--- src/Network/Gitit/Export.hs.orig 2023-07-10 14:38:47 UTC ++++ src/Network/Gitit/Export.hs +@@ -61,6 +61,7 @@ respondX :: String -> String -> String + -> WriterOptions -> String -> Pandoc -> Handler + respondX templ mimetype ext fn opts page doc = do + cfg <- getConfig ++ unless (exports cfg) $ error "exports are disabled" + doc' <- if ext `elem` ["odt","pdf","beamer","epub","docx","rtf"] + then fixURLs page doc + else return doc +@@ -169,7 +170,11 @@ respondTexinfo = respondS "texinfo" "application/x-tex + + respondDocbook :: String -> Pandoc -> Handler + respondDocbook = respondS "docbook" "application/docbook+xml" "xml" ++#if MIN_VERSION_pandoc(3,0,0) ++ writeDocBook5 defaultRespOptions ++#else + writeDocbook5 defaultRespOptions ++#endif + + respondOrg :: String -> Pandoc -> Handler + respondOrg = respondS "org" "text/plain; charset=utf-8" "" +@@ -228,7 +233,7 @@ respondPDF useBeamer page old_pndc = fixURLs page old_ + setInputFiles [baseUrl cfg] + let templ = if useBeamer then "beamer" else "latex" + compiledTemplate <- compileDefaultTemplate templ +- makePDF "pdflatex" [] (if useBeamer then writeBeamer else writeLaTeX) ++ makePDF (pdfEngine cfg) [] (if useBeamer then writeBeamer else writeLaTeX) + defaultRespOptions{ writerTemplate = Just compiledTemplate + , writerTableOfContents = toc } pndc + either (liftIO . throwIO) return res diff --git a/www/hs-gitit/files/extra-patch-src_Network_Gitit_Layout.hs b/www/hs-gitit/files/extra-patch-src_Network_Gitit_Layout.hs new file mode 100644 index 000000000000..f671c768b173 --- /dev/null +++ b/www/hs-gitit/files/extra-patch-src_Network_Gitit_Layout.hs @@ -0,0 +1,11 @@ +--- src/Network/Gitit/Layout.hs.orig 2023-07-10 14:38:47 UTC ++++ src/Network/Gitit/Layout.hs +@@ -123,7 +123,7 @@ filledPageTemplate base' cfg layout htmlContents templ + + + exportBox :: String -> Config -> String -> Maybe String -> Html +-exportBox base' cfg page rev | not (isSourceCode page) = ++exportBox base' cfg page rev | exports cfg && not (isSourceCode page) = + gui (base' ++ urlForPage page) ! [identifier "exportbox"] << + ([ textfield "revision" ! [thestyle "display: none;", + value (fromJust rev)] | isJust rev ] ++ diff --git a/www/hs-gitit/files/extra-patch-src_Network_Gitit_Types.hs b/www/hs-gitit/files/extra-patch-src_Network_Gitit_Types.hs new file mode 100644 index 000000000000..c9e8f4624175 --- /dev/null +++ b/www/hs-gitit/files/extra-patch-src_Network_Gitit_Types.hs @@ -0,0 +1,15 @@ +--- src/Network/Gitit/Types.hs.orig 2023-07-10 14:38:47 UTC ++++ src/Network/Gitit/Types.hs +@@ -204,8 +204,12 @@ data Config = Config { + feedDays :: Integer, + -- | Number of minutes to cache feeds before refreshing + feedRefreshTime :: Integer, ++ -- | Allow exports? ++ exports :: Bool, + -- | Allow PDF export? + pdfExport :: Bool, ++ -- | Which PDF engine to use? ++ pdfEngine :: String, + -- | Directory to search for pandoc customizations + pandocUserData :: Maybe FilePath, + -- | Filter HTML through xss-sanitize diff --git a/www/hs-gitit/files/gitit.in b/www/hs-gitit/files/gitit.in new file mode 100755 index 000000000000..6f984047406e --- /dev/null +++ b/www/hs-gitit/files/gitit.in @@ -0,0 +1,236 @@ +#!/bin/sh +# +# $FreeBSD$ +# +# PROVIDE: gitit +# REQUIRE: LOGIN +# KEYWORD: shutdown +# +# Add the following lines to /etc/rc.conf.local or /etc/rc.conf +# to enable this service: +# +# gitit_enable (bool): Set to NO by default. +# Set it to YES to enable gitit. +# gitit_cfg (str): Set this to the list of all gitit instance +# names, if you want to run more than one. +# If set, then the gitit_* variables are used as +# defaults for the corresponding instance +# specific variables gitit_<instance>_*. +# gitit_chdir (path): Directory in which to start gitit. +# gitit_dir (path): Directory in which to start gitit. When set and +# when multiple gitit instances are used via +# gitit_cfg, then their default gitit_..._chdir +# is $gitit_dir/<instance>. +# gitit_supervise (bool): +# Whether daemon process should restart +# gitit on exit. (Might cause looping restarts!) +# gitit_runuser (user): User id that runs this gitit instance. +# gitit_config (path): Config file (possibly relative to gitit_chdir). +# gitit_port (number): TCP port number to listen for HTTP requests. +# gitit_flags (str): Defaults to "+RTS -I0 -RTS". That avoids CPU +# usage by ghc's idle garbage collector, but +# only if the gitit port was built using +# CONFIGURE_ARGS+= "--ghc-option=-rtsopts". +# gitit_locale (str): UTF-8 required! +# gitit_timezone (str): gitit 0.11.1 requires UTC +# + +. /etc/rc.subr + +name=gitit +desc="run gitit Wiki webserver process(es)" +rcvar=gitit_enable + +load_rc_config $name + +: ${gitit_enable:=NO} +: ${gitit_program=%%PREFIX%%/bin/gitit} +: ${gitit_pidfile=/var/run/${name}.pid} +: ${gitit_dir=/var/gitit} +: ${gitit_supervise=NO} +: ${gitit_runuser=gitit} +: ${gitit_config=${name}.conf} +: ${gitit_port=5001} +: ${gitit_flags="+RTS -I0 -RTS"} +: ${gitit_locale=en_US.UTF-8} +: ${gitit_timezone=UTC} + +start_cmd="gitit_start $*" +stop_cmd="gitit_stop $*" +restart_cmd="gitit_restart $*" +status_cmd="gitit_status $*" +cmd=$1 + +gitit_setdefaults() +{ + [ -n "${gitit_cfg}" ] || return + eval gitit_enable_default=\$${name}_enable + #eval gitit_chdir_default=\$${name}_chdir + eval gitit_supervise_default=\$${name}_supervise + eval gitit_runuser_default=\$${name}_runuser + eval gitit_config_default=\$${name}_config + eval gitit_port_default=\$${name}_port + eval gitit_flags_default=\$${name}_flags + eval gitit_locale_default=\$${name}_locale + eval gitit_timezone_default=\$${name}_timezone +} + +gitit_setinstancevars() +{ + local instance gitit_supervise_instance gitit_config_instance gitit_runuser_instance gitit_port_instance gitit_flags_instance gitit_locale_instance gitit_timezone_instance + instance=$1 + eval gitit_enable_instance=\$${name}_${instance}_enable + [ -z "${gitit_enable_instance}" ] || gitit_enable="${gitit_enable_instance}" + [ -n "${gitit_enable_instance}" ] || gitit_enable="${gitit_enable_default}" + eval gitit_chdir=\$${name}_${instance}_chdir + [ -n "${gitit_chdir}" ] || [ -z "${gitit_dir} " ] || gitit_chdir="${gitit_dir}/${instance}" + eval gitit_supervise_instance=\$${name}_${instance}_supervise + [ -z "${gitit_supervise_instance}" ] || gitit_supervise="${gitit_supervise_instance}" + [ -n "${gitit_supervise_instance}" ] || gitit_supervise="${gitit_supervise_default}" + eval gitit_runuser_instance=\$${name}_${instance}_runuser + [ -z "${gitit_runuser_instance}" ] || gitit_runuser="${gitit_runuser_instance}" + [ -n "${gitit_runuser_instance}" ] || gitit_runuser="${gitit_runuser_default}" + eval gitit_config_instance=\$${name}_${instance}_config + [ -z "${gitit_config_instance}" ] || gitit_config="${gitit_config_instance}" + [ -n "${gitit_config_instance}" ] || gitit_config="${gitit_config_default}" + eval gitit_port_instance=\$${name}_${instance}_port + [ -z "${gitit_port_instance}" ] || gitit_port="${gitit_port_instance}" + [ -n "${gitit_port_instance}" ] || gitit_port="${gitit_port_default}" + eval gitit_flags_instance=\$${name}_${instance}_flags + [ -z "${gitit_flags_instance}" ] || gitit_flags="${gitit_flags_instance}" + [ -n "${gitit_flags_instance}" ] || gitit_flags="${gitit_flags_default}" + eval gitit_locale_instance=\$${name}_${instance}_locale + [ -z "${gitit_locale_instance}" ] || gitit_locale="${gitit_locale_instance}" + [ -n "${gitit_locale_instance}" ] || gitit_locale="${gitit_locale_default}" + eval gitit_timezone_instance=\$${name}_${instance}_timezone + [ -z "${gitit_timezone_instance}" ] || gitit_timezone="${gitit_timezone_instance}" + + gitit_pidfile=/var/run/${name}-${instance}.pid + pidfile=`if checkyesno gitit_supervise ; then echo /var/run/${name}-${instance}-daemon.pid ; else echo ${gitit_pidfile} ; fi` +} + +gitit_runonecmd() +{ + local real_gitit_program + command_args= + [ -z "$gitit_config" ] || command_args="$command_args -f $gitit_config" + [ -z "$gitit_port" ] || command_args="$command_args -p $gitit_port" + [ -z "$gitit_flags" ] || command_args="$command_args $gitit_flags" + [ -z "$gitit_locale" ] || export LANG=$gitit_locale + [ -z "$gitit_locale" ] || export LC_ALL=$gitit_locale + [ -z "$gitit_timezone" ] || export TZ=$gitit_timezone + daemonflags= + if checkyesno gitit_supervise + then + daemonflags="-r -P $pidfile " + fi + daemonflags="$daemonflags-p $gitit_pidfile" + + command=/usr/sbin/daemon + command_args="-f $daemonflags -u $gitit_runuser $gitit_program $command_args" + real_gitit_program=${gitit_program} + gitit_program=${command} + gitit_flags= + rc_flags= + + run_rc_command "${cmd}" + + case ${cmd} in + *start) + # make pidfile readable for $gitit_runuser + chgrp $gitit_runuser $gitit_pidfile && \ + chmod 640 $gitit_pidfile + ;; + esac + + gitit_program=${real_gitit_program} + unset LANG LC_ALL +} + +gitit_cmd() +{ + local instance prefixchar runinstances i argi + if [ -z "${gitit_cfg}" ] + then + gitit_pidfile=/var/run/${name}.pid + pidfile=`if checkyesno gitit_supervise ; then echo /var/run/${name}-daemon.pid ; else echo ${gitit_pidfile} ; fi` + gitit_runonecmd + else + case $cmd in + *restart) + prefixchar="-+" + ;; + *start) + prefixchar="+" + ;; + *stop) + prefixchar="-" + ;; + *status) + prefixchar="?" + ;; + esac + # rc_extra_args is always empty at this point, so we + # extract additional parameters from $*. Positional + # parameters have to be passed down to this function. + runinstances= + i=2 + if [ $# -ge 2 ] + then + while [ $i -le $# ] + do + eval argi=\$$i + if echo "${gitit_cfg}" | grep -q -w "${argi}" + then + runinstances="${runinstances} ${argi}" + else + echo "Skipping ${argi}"' - not in ${gitit_cfg}.' + fi + i=$(($i + 1)) + done + else + runinstances=${gitit_cfg} + fi + for instance in ${runinstances} + do + echo -n "${prefixchar}${instance}: " + gitit_setinstancevars ${instance} + gitit_runonecmd + done + fi +} + +gitit_start() +{ + unset start_cmd + gitit_setdefaults + gitit_cmd $* +} + +gitit_stop() +{ + unset stop_cmd + gitit_setdefaults + gitit_cmd $* +} + +gitit_restart() +{ + unset restart_cmd + unset stop_cmd + unset start_cmd + gitit_setdefaults + cmd=stop + gitit_cmd $* + cmd=start + gitit_cmd $* +} + +gitit_status() +{ + unset status_cmd + gitit_setdefaults + gitit_cmd $* +} + +run_rc_command "$1" diff --git a/www/hs-gitit/files/patch-__cabal__deps_filestore-0.6.5_Data_FileStore_Darcs.hs b/www/hs-gitit/files/patch-__cabal__deps_filestore-0.6.5_Data_FileStore_Darcs.hs new file mode 100644 index 000000000000..47b58eba3d5d --- /dev/null +++ b/www/hs-gitit/files/patch-__cabal__deps_filestore-0.6.5_Data_FileStore_Darcs.hs @@ -0,0 +1,22 @@ +--- _cabal_deps/filestore-0.6.5/Data/FileStore/Darcs.hs.orig 2001-09-09 01:46:40 UTC ++++ _cabal_deps/filestore-0.6.5/Data/FileStore/Darcs.hs +@@ -205,7 +205,7 @@ getNames = map (drop 2) . lines . toString + -- | Get a list of all known files inside and managed by a repository. + darcsIndex :: FilePath ->IO [FilePath] + darcsIndex repo = withVerifyDir repo $ do +- (status, _errOutput, output) <- runDarcsCommand repo "query" ["files","--no-directories"] ++ (status, _errOutput, output) <- runDarcsCommand repo "show" ["files","--no-directories"] + if status == ExitSuccess + then return . getNames $ output + else return [] -- return empty list if invalid path (see gitIndex) +@@ -214,8 +214,8 @@ darcsIndex repo = withVerifyDir repo $ do + darcsDirectory :: FilePath -> FilePath -> IO [Resource] + darcsDirectory repo dir = withVerifyDir (repo </> dir) $ do + let dir' = if null dir then "" else addTrailingPathSeparator dir +- (status1, _errOutput1, output1) <- runDarcsCommand repo "query" ["files","--no-directories"] +- (status2, _errOutput2, output2) <- runDarcsCommand repo "query" ["files","--no-files"] ++ (status1, _errOutput1, output1) <- runDarcsCommand repo "show" ["files","--no-directories"] ++ (status2, _errOutput2, output2) <- runDarcsCommand repo "show" ["files","--no-files"] + if status1 == ExitSuccess && status2 == ExitSuccess + then do + let files = adhocParsing dir' . lines . toString $ output1 diff --git a/www/hs-gitit/files/patch-__cabal__deps_pandoc-3.1.4_pandoc.cabal b/www/hs-gitit/files/patch-__cabal__deps_pandoc-3.1.4_pandoc.cabal new file mode 100644 index 000000000000..48d02aa85116 --- /dev/null +++ b/www/hs-gitit/files/patch-__cabal__deps_pandoc-3.1.4_pandoc.cabal @@ -0,0 +1,11 @@ +--- _cabal_deps/pandoc-3.1.4/pandoc.cabal.orig 2001-09-09 01:46:40 UTC ++++ _cabal_deps/pandoc-3.1.4/pandoc.cabal +@@ -415,7 +415,7 @@ source-repository head + + flag embed_data_files + Description: Embed data files in binary for relocatable executable. +- Default: False ++ Default: True + + common common-options + default-language: Haskell2010 diff --git a/www/hs-gitit/files/patch-data_markup.DocBook b/www/hs-gitit/files/patch-data_markup.DocBook new file mode 100644 index 000000000000..823421ff0e3b --- /dev/null +++ b/www/hs-gitit/files/patch-data_markup.DocBook @@ -0,0 +1,748 @@ +--- data/markup.DocBook.orig 2001-09-09 01:46:40 UTC ++++ data/markup.DocBook +@@ -1,347 +1,411 @@ +-<sect1 id="markdown"> +- <title>Markdown</title> ++# Markdown ++ ++The usual way to write pages for this wiki is [pandoc]'s extended form ++of [markdown]. You can start using markdown and later switch to ++DocBook by using `pandoc` to convert your markdown page to DocBook for ++more sophisticated formatting. To do so use the wiki's export option ++(if enabled) or `pandoc -f markdown -t docbook -o page.xml page.md`. ++Further down on this page there is some information about the DocBook ++format. Here we continue with an introduction to markdown. ++If you're not familiar with markdown, you should start by looking ++at the [markdown "basics" page] and the [markdown syntax description]. ++Consult the [pandoc User's Guide] for information about pandoc's syntax ++for footnotes, tables, description lists, and other elements not present ++in standard markdown. ++ ++[pandoc]: http://pandoc.org ++[pandoc User's Guide]: http://pandoc.org/README.html ++[markdown]: http://daringfireball.net/projects/markdown ++[markdown "basics" page]: http://daringfireball.net/projects/markdown/basics ++[markdown syntax description]: http://daringfireball.net/projects/markdown/syntax ++ ++Markdown is pretty intuitive, since it is based on email conventions. ++Here are some examples to get you started: ++ +++--------------------------------------------------------+------------------------------------------------------------+ ++| Markdown code | Result | +++========================================================+============================================================+ ++| `*emphasized text*` | *emphasized text* | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `**strong emphasis**` | **strong emphasis** | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `` `literal text` `` | `literal text` | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `\*escaped special characters\*` | \*escaped special characters\* | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `[external link](http://google.com)` | [external link](http://google.com) | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `![folder](/img/icons/folder.png)` | ![folder](/img/icons/folder.png) | +++--------------------------------------------------------+------------------------------------------------------------+ ++| Wikilink: `[Front Page]()` | Wikilink: [Front Page]() | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `H~2~O` | H~2~O | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `10^100^` | 10^100^ | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `~~strikeout~~` | ~~strikeout~~ | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `$x = \frac{{ - b \pm \sqrt {b^2 - 4ac} }}{{2a}}$` | $x = \frac{{ - b \pm \sqrt {b^2 - 4ac} }}{{2a}}$[^1] | ++| | | ++| | [^1]: If this looks like code, it\'s because MathJax is | ++| | not installed on your system. Contact your administrator | ++| | to request it. | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `A simple footnote.^[Or is it so simple?]` | A simple footnote.^[Or is it so simple?] | +++--------------------------------------------------------+------------------------------------------------------------+ ++| \> an indented paragraph\ \ | > an indented paragraph, usually used for quotations | ++| \> usually used for quotations | | +++--------------------------------------------------------+------------------------------------------------------------+ ++| #!/bin/sh -e | #!/bin/sh -e | ++| # code, indented four spaces | # code, indented four spaces | ++| echo "Hello world" | echo "Hello world" | +++--------------------------------------------------------+------------------------------------------------------------+ ++| * a bulleted list | - a bulleted list | ++| * second item | - second item | ++| - sublist | - sublist | ++| - and more | - and more | ++| * back to main list | - back to main list | ++| 1. this item has an ordered | 1. this item has an ordered | ++| 2. sublist | 2. sublist | ++| a) you can also use letters | a. you can also use letters | ++| b) another item | b. another item | +++--------------------------------------------------------+------------------------------------------------------------+ ++| Fruit Quantity | Fruit Quantity | ++| ------- --------- | ------- ---------- | ++| apples 30,200 | apples 30,200 | ++| oranges 1,998 | oranges 1,998 | ++| pears 42 | pears 42 | ++| | | ++| Table: Our fruit inventory | : Our fruit inventory | +++--------------------------------------------------------+------------------------------------------------------------+ ++ ++## Headings ++ ++For headings, prefix a line with one or more `#` signs: one for a major heading, ++two for a subheading, three for a subsubheading. Be sure to leave space before ++and after the heading. ++ ++ # Markdown ++ ++ Text... ++ ++ ## Some examples... ++ ++ Text... ++ ++## Wiki links ++ ++Links to other wiki pages are formed this way: `[Page Name]()`. ++(Gitit converts markdown links with empty targets into wikilinks.) ++ ++To link to a wiki page using something else as the link text: ++`[something else](Page Name)`. ++ ++Note that page names may contain spaces and some special characters. ++They need not be CamelCase. CamelCase words are *not* automatically ++converted to wiki links. ++ ++Wiki pages may be organized into directories. So, if you have ++several pages on wine, you may wish to organize them like so: ++ ++ Wine/Pinot Noir ++ Wine/Burgundy ++ Wine/Cabernet Sauvignon ++ ++Note that a wiki link `[Burgundy]()` that occurs inside the `Wine` ++directory will link to `Wine/Burgundy`, and not to `Burgundy`. ++To link to a top-level page called `Burgundy`, you'd have to use ++`[Burgundy](/Burgundy)`. ++ ++To link to a directory listing for a subdirectory, use a trailing ++slash: `[Wine/]()` will link to a listing of the `Wine` subdirectory. ++ ++# DocBook ++ ++As DocBook is an XML format, opening and closing tags must match ++(`<tag>...</tag>`). ++ +++--------------------------------------------------------+------------------------------------------------------------+ ++| DocBook code | Result | +++========================================================+============================================================+ ++| `<emphasis>emphasized text</emphasis>` | *emphasized text* | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `<emphasis role="strong">strong emphasis</emphasis>` | **strong emphasis** | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `<literal>literal text</literal>` | `literal text` | +++--------------------------------------------------------+------------------------------------------------------------+ ++| XML character entities: `< > "` | `< > "` | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `<ulink url="https://en.wikipedia.org/wiki/DocBook"> | [external link](https://en.wikipedia.org/wikiDocBook) | ++| external link</ulink>` | | +++--------------------------------------------------------+------------------------------------------------------------+ ++| Inserting an image: | ![folder](/img/icons/folder.png) | ++| | | ++| <inlinemediaobject> | | ++| <alt>folder</alt> | | ++| <imageobject> | | ++| <imagedata fileref="/img/icons/folder.png" /> | | ++| </imageobject> | | ++| </inlinemediaobject> | | +++--------------------------------------------------------+------------------------------------------------------------+ ++| Wikilink: `<ulink url="Front Page">Front Page</ulink>` | Wikilink: [Front Page]() | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `H<subscript>2</subscript>O` | H~2~O | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `10<superscript>100</superscript>` | 10^100^ | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `<emphasis role="strikethrough">strikeout</emphasis>` | ~~strikeout~~ | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `$x = \frac{{ - b \pm \sqrt {b^2 - 4ac} }}{{2a}}$` | $x = \frac{{ - b \pm \sqrt {b^2 - 4ac} }}{{2a}}$[^1] | ++| | | ++| | (Use pandoc's `--mathml` option to convert TeX math code.) | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `A simple footnote.<footnote>Or | A simple footnote.^[Or is it so simple?] | ++| is it so simple?</footnote>` | | +++--------------------------------------------------------+------------------------------------------------------------+ ++| `<blockquote>an indented paragraph, usually used | > an indented paragraph, usually used for quotations | ++| for quotations</blockquote>` | | +++--------------------------------------------------------+------------------------------------------------------------+ ++| <programlisting> | #!/bin/sh -e | ++| #!/bin/sh -e` | echo "Hello world" | ++| echo "Hello world" | | ++| </programlisting> | | +++--------------------------------------------------------+------------------------------------------------------------+ ++| <itemizedlist spacing="compact"> | - a bulleted list | ++| <listitem> | - second item | ++| <simpara>a bulleted list</simpara> | - sublist | ++| </listitem> | - and more | ++| <listitem> | - back to main list | ++| <simpara>second item</simpara> | 1. this item has an ordered | ++| <itemizedlist spacing="compact"> | 2. sublist | ++| <listitem> | a. you can also use letters | ++| <simpara>sublist</simpara> | b. another item | ++| </listitem> | | ++| <listitem> | | ++| <simpara>and more</simpara> | | ++| </listitem> | | ++| </itemizedlist> | | ++| </listitem> | | ++| <listitem> | | ++| <simpara>back to main list</simpara> | | ++| <orderedlist spacing="compact"> | | ++| <listitem> | | ++| <simpara>this item has an ordered</simpara> | | ++| </listitem> | | ++| <listitem> | | ++| <simpara>sublist</simpara> | | ++| <orderedlist spacing="compact" | | ++| numeration="loweralpha"> | | ++| <listitem> | | ++| <simpara>you can also use letters</simpara> | | ++| </listitem> | | ++| <listitem> | | ++| <simpara>another item</simpara> | | ++| </listitem> | | ++| </orderedlist> | | ++| </listitem> | | ++| </orderedlist> | | ++| </listitem> | | ++| </itemizedlist> | | +++--------------------------------------------------------+------------------------------------------------------------+ ++| <table> | Fruit Quantity | ++| <title>Our fruit inventory</title> | ------- ---------- | ++| <tgroup cols="2"> | apples 30,200 | ++| <colspec align="left" /> | oranges 1,998 | ++| <colspec align="right" /> | pears 42 | ++| <thead> | | ++| <row> | : Our fruit inventory | ++| <entry>Fruit</entry> | | ++| <entry>Quantity</entry> | | ++| </row> | | ++| </thead> | | ++| <tbody> | | ++| <row> | | ++| <entry>apples</entry> | | ++| <entry>30,200</entry> | | ++| </row> | | ++| <row> | | ++| <entry>oranges</entry> | | ++| <entry>1,998</entry> | | ++| </row> | | ++| <row> | | ++| <entry>pears</entry> | | ++| <entry>42</entry> | | ++| </row> | | ++| </tbody> | | ++| </tgroup> | | ++| </table> | | +++--------------------------------------------------------+------------------------------------------------------------+ ++ ++## Headings ++ ++A heading is given as the `<title>` element of a `<section>`: ++ ++<pre> ++<section> ++ <title>Heading</title> ++ <simpara>This is a top level section.</simpara> ++ <section> ++ <title>Subheading</title> ++ <simpara>This is a second level section.</simpara> ++ </section> ++</section> ++</pre> ++ ++## Wiki links ++ ++Links to other wiki pages are formed this way: ++`<ulink url="Page Name">Page Name</ulink>` ++ ++To link to a wiki page using something else as the link text: ++`<ulink url="Page Name">something else</ulink>`. ++ ++Note that page names may contain spaces and some special characters. ++They need not be CamelCase. CamelCase words are *not* automatically ++converted to wiki links. ++ ++Wiki pages may be organized into directories. So, if you have ++several pages on wine, you may wish to organize them like so: ++ ++ Wine/Pinot Noir ++ Wine/Burgundy ++ Wine/Cabernet Sauvignon ++ ++Note that a wiki link `<ulink url="Burgundy">Burgundy</ulink>` ++that occurs inside the `Wine` directory will link to `Wine/Burgundy`, ++and not to `Burgundy`. To link to a top-level page called `Burgundy`, ++you'd have to use `<ulink url="/Burgundy">Burgundy</ulink>`. ++ ++To link to a directory listing for a subdirectory, use a trailing ++slash: `<ulink url="Wine/">Wine</ulink>` will link to a listing of ++the `Wine` subdirectory. ++ ++## Reference material ++ ++Further reading: [DocBook 5: The Definitive Guide], which includes the ++[List of DocBook elements]. ++ ++[DocBook 5: The Definitive Guide]: https://tdg.docbook.org/tdg/5.0/docbook.html ++[List of DocBook elements]: https://tdg.docbook.org/tdg/5.0/chunk-part-d64e8789.html ++ ++## A sample document ++ ++You might want to use the following document as a resource of DocBook ++snippets (copy/paste). ++ ++~~~~~~~~ ++ ++<section id="docbook"> ++ <title>Using DocBook</title> ++ <simpara> ++ As DocBook is an XML format, opening and closing tags ++ must match (<tag>...</tag>). ++ </simpara> ++ <section id="inline"> ++ <title>Text Formatting</title> ++ <simpara> ++ A simple paragraph. ++ </simpara> + <para> +- This wiki's pages are written in +- <ulink url="http://pandoc.org">pandoc</ulink>'s +- extended form of +- <ulink url="http://daringfireball.net/projects/markdown">markdown</ulink>. +- If you're not familiar with markdown, you should start by looking at +- the +- <ulink url="http://daringfireball.net/projects/markdown/basics">markdown +- "basics" page</ulink> and the +- <ulink url="http://daringfireball.net/projects/markdown/syntax">markdown +- syntax description</ulink>. Consult the +- <ulink url="http://pandoc.org/README.html">pandoc +- User's Guide</ulink> for information about pandoc's syntax for +- footnotes, tables, description lists, and other elements not present +- in standard markdown. ++ A complex paragraph may contain blocks. + </para> +- <para> +- Markdown is pretty intuitive, since it is based on email +- conventions. Here are some examples to get you started: +- </para> +- <table> +- <tr> +- <td> +- <literal>*emphasized text*</literal> +- </td> +- <td> +- <emphasis>emphasized text</emphasis> +- </td> +- </tr> +- <tr> +- <td> +- <literal>**strong emphasis**</literal> +- </td> +- <td> +- <emphasis role="strong">strong emphasis</emphasis> +- </td> +- </tr> +- <tr> +- <td> +- <literal>`literal text`</literal> +- </td> +- <td> +- <literal>literal text</literal> +- </td> +- </tr> +- <tr> +- <td> +- <literal>\*escaped special characters\*</literal> +- </td> +- <td> +- *escaped special characters* +- </td> +- </tr> +- <tr> +- <td> +- <literal>[external link](http://google.com)</literal> +- </td> +- <td> +- <ulink url="http://google.com">external link</ulink> +- </td> +- </tr> +- <tr> +- <td> +- <literal>![folder](/img/icons/folder.png)</literal> +- </td> +- <td> +- <inlinemediaobject> ++ <simpara> ++ italics: <emphasis>italics</emphasis>, ++ bold: <emphasis role="strong">bold</emphasis>, ++ strikeout: <emphasis role="strikethrough">strikeout</emphasis>, ++ inline code snippets: <literal>inline code</literal>. ++ </simpara> ++ <simpara> ++ Links: ++ <ulink url="http://foo.bar/baz">external</ulink>, ++ <ulink url="Pagename">internal Wiki Link</ulink>. ++ </simpara> ++ <simpara> ++ Inserting an image: ++ <inlinemediaobject> + <imageobject> +- <imagedata fileref="/img/icons/folder.png" /> ++ <imagedata fileref="/img/icons/folder.png" /> + </imageobject> +- </inlinemediaobject> +- </td> +- </tr> +- <tr> +- <td> +- Wikilink: <literal>[Front Page]()</literal> +- </td> +- <td> +- Wikilink: <ulink url="">Front Page</ulink> +- </td> +- </tr> +- <tr> +- <td> +- <literal>H~2~O</literal> +- </td> +- <td> +- H<subscript>2</subscript>O +- </td> +- </tr> +- <tr> +- <td> +- <literal>10^100^</literal> +- </td> +- <td> +- 10<superscript>100</superscript> +- </td> +- </tr> +- <tr> +- <td> +- <literal>~~strikeout~~</literal> +- </td> +- <td> +- <emphasis role="strikethrough">strikeout</emphasis> +- </td> +- </tr> +- <tr> +- <td> +- <literal>$x = \frac{{ - b \pm \sqrt {b^2 - 4ac} }}{{2a}}$</literal> +- </td> +- <td> +- $x = \frac{{ - b \pm \sqrt {b^2 - 4ac} }}{{2a}}$<footnote> +- <para> +- If this looks like code, it's because MathJax is not installed on +- your system. Contact your administrator to request it. +- </para> +- </footnote> +- </td> +- </tr> +- <tr> +- <td> +- <literal>A simple footnote.^[Or is it so simple?]</literal> +- </td> +- <td> +- A simple footnote.<footnote> +- <para> +- Or is it so simple? +- </para> +- </footnote> +- </td> +- </tr> +- <tr> +- <td> +- <pre> +- > an indented paragraph, +- > usually used for quotations +- </pre> +- </td> +- <td> +- <blockquote> +- <para> +- an indented paragraph, usually used for quotations +- </para> +- </blockquote> +- </td> +- <tr> +- <td> +- <pre> +- #!/bin/sh -e +- # code, indented four spaces +- echo "Hello world" +- </pre> +- </td> +- <td> +- <programlisting> ++ </inlinemediaobject> ++ </simpara> ++ </section> ++ <section id="blocks"> ++ <title>Text Blocks</title> ++ <para> ++ Quotation: ++ <blockquote> ++ <simpara> ++ A quotation set off from the main text. ++ </simpara> ++ </blockquote> ++ </para> ++ <para> ++ Code listing: ++ <programlisting> + #!/bin/sh -e +-# code, indented four spaces + echo "Hello world" +-</programlisting> +- </td> +- </tr> +- <tr> +- <td> +- <pre> +- * a bulleted list +- * second item +- - sublist +- - and more +- * back to main list +- 1. this item has an ordered +- 2. sublist +- a) you can also use letters +- b) another item +- </pre> +- </td> +- <td> +- <itemizedlist spacing="compact"> ++ </programlisting> ++ </para> ++ </section> ++ <section id="lists"> ++ <title>Lists</title> ++ <para> ++ Simple list: ++ <itemizedlist spacing="compact"> + <listitem> +- <para> +- a bulleted list +- </para> ++ <simpara> ++ first ++ </simpara> + </listitem> + <listitem> +- <para> +- second item +- </para> +- <itemizedlist spacing="compact"> +- <listitem> +- <para> +- sublist +- </para> +- </listitem> +- <listitem> +- <para> +- and more +- </para> +- </listitem> +- </itemizedlist> +- </listitem> ++ <simpara> ++ second ++ </simpara> ++ </listitem> ++ </itemizedlist> ++ Numbered list: ++ <orderedlist spacing="compact"> + <listitem> +- <para> +- back to main list +- </para> +- <orderedlist numeration="arabic" spacing="compact"> +- <listitem> +- <para> +- this item has an ordered +- </para> +- </listitem> +- <listitem> +- <para> +- sublist +- </para> +- <orderedlist numeration="loweralpha" spacing="compact"> +- <listitem> +- <para> +- you can also use letters +- </para> +- </listitem> +- <listitem> +- <para> +- another item +- </para> +- </listitem> +- </orderedlist> +- </listitem> +- </orderedlist> ++ <simpara> ++ first ++ </simpara> + </listitem> +- </itemizedlist> +- </td> +- </tr> +- <tr> +- <td> +- <pre> +- Fruit Quantity +- -------- ----------- +- apples 30,200 +- oranges 1,998 +- pears 42 +- +- Table: Our fruit inventory +- </pre> +- </td> +- <td> +- <table> +- <title> +- Our fruit inventory +- </title> +- <tgroup cols="2"> +- <colspec align="left" /> +- <colspec align="right" /> +- <thead> +- <row> +- <entry> +- Fruit +- </entry> +- <entry> +- Quantity +- </entry> +- </row> +- </thead> +- <tbody> +- <row> +- <entry> +- apples +- </entry> +- <entry> +- 30,200 +- </entry> +- </row> +- <row> +- <entry> +- oranges +- </entry> +- <entry> +- 1,998 +- </entry> +- </row> +- <row> +- <entry> +- pears +- </entry> +- <entry> +- 42 +- </entry> +- </row> +- </tbody> +- </tgroup> +- </table> +- </td> +- </tr> +- </table> +- <para> +- For headings, prefix a line with one or more <literal>#</literal> +- signs: one for a major heading, two for a subheading, three for a +- subsubheading. Be sure to leave space before and after the heading. ++ <listitem> ++ <simpara> ++ second ++ </simpara> ++ </listitem> ++ </orderedlist> ++ Definition list: ++ <variablelist> ++ <varlistentry> ++ <term> ++ DocBook ++ </term> ++ <listitem> ++ <simpara> ++ A sophisticated XML format. ++ </simpara> ++ </listitem> ++ </varlistentry> ++ <varlistentry> ++ <term> ++ orange ++ </term> ++ <listitem> ++ <simpara> ++ A healthy fruit. ++ </simpara> ++ </listitem> ++ <listitem> ++ <simpara> ++ A warm colour. ++ </simpara> ++ </listitem> ++ </varlistentry> ++ </variablelist> + </para> +- <programlisting> +-# Markdown ++ </section> ++</section> + +-Text... +- +-## Some examples... +- +-Text... +-</programlisting> +- <sect2 id="wiki-links"> +- <title>Wiki links</title> +- <para> +- Links to other wiki pages are formed this way: +- <literal>[Page Name]()</literal>. (Gitit converts markdown links +- with empty targets into wikilinks.) +- </para> +- <para> +- To link to a wiki page using something else as the link text: +- <literal>[something else](Page Name)</literal>. +- </para> +- <para> +- Note that page names may contain spaces and some special +- characters. They need not be CamelCase. CamelCase words are +- <emphasis>not</emphasis> automatically converted to wiki links. +- </para> +- <para> +- Wiki pages may be organized into directories. So, if you have +- several pages on wine, you may wish to organize them like so: +- </para> +- <programlisting> +-Wine/Pinot Noir +-Wine/Burgundy +-Wine/Cabernet Sauvignon +-</programlisting> +- <para> +- Note that a wiki link <literal>[Burgundy]()</literal> that occurs +- inside the <literal>Wine</literal> directory will link to +- <literal>Wine/Burgundy</literal>, and not to +- <literal>Burgundy</literal>. To link to a top-level page called +- <literal>Burgundy</literal>, you'd have to use +- <literal>[Burgundy](/Burgundy)</literal>. +- </para> +- <para> +- To link to a directory listing for a subdirectory, use a trailing +- slash: <literal>[Wine/]()</literal> will link to a listing of the +- <literal>Wine</literal> subdirectory. +- </para> +- </sect2> +-</sect1> ++~~~~~~~~ diff --git a/www/hs-gitit/files/patch-data_markupHelp_DocBook b/www/hs-gitit/files/patch-data_markupHelp_DocBook new file mode 100644 index 000000000000..d246b8f7f45d --- /dev/null +++ b/www/hs-gitit/files/patch-data_markupHelp_DocBook @@ -0,0 +1,125 @@ +--- data/markupHelp/DocBook.orig 2023-07-10 15:44:20 UTC ++++ data/markupHelp/DocBook +@@ -0,0 +1,122 @@ ++~~~~~~~~ ++ ++<section id="docbook"> ++ <title>Using DocBook</title> ++ <simpara> ++ As DocBook is an XML format, opening and closing tags ++ must match (<tag>...</tag>). ++ </simpara> ++ <section id="inline"> ++ <title>Text Formatting</title> ++ <simpara> ++ A simple paragraph. ++ </simpara> ++ <para> ++ A complex paragraph may contain blocks. ++ </para> ++ <simpara> ++ italics: <emphasis>italics</emphasis>, ++ bold: <emphasis role="strong">bold</emphasis>, ++ strikeout: <emphasis role="strikethrough">strikeout</emphasis>, ++ inline code snippets: <literal>inline code</literal>. ++ </simpara> ++ <simpara> ++ Links: ++ <ulink url="http://foo.bar/baz">external</ulink>, ++ <ulink url="Pagename">internal Wiki Link</ulink>. ++ </simpara> ++ <simpara> ++ Inserting an image: ++ <inlinemediaobject> ++ <alt>folder</alt> ++ <imageobject> ++ <imagedata fileref="/img/icons/folder.png" /> ++ </imageobject> ++ </inlinemediaobject> ++ </simpara> ++ </section> ++ <section id="blocks"> ++ <title>Text Blocks</title> ++ <para> ++ Quotation: ++ <blockquote> ++ <simpara> ++ A quotation set off from the main text. ++ </simpara> ++ </blockquote> ++ </para> ++ <para> ++ Code listing: ++ <programlisting> ++#!/bin/sh -e ++echo "Hello world" ++ </programlisting> ++ </para> ++ </section> ++ <section id="lists"> ++ <title>Lists</title> ++ <para> ++ Simple list: ++ <itemizedlist spacing="compact"> ++ <listitem> ++ <simpara> ++ first ++ </simpara> ++ </listitem> ++ <listitem> ++ <simpara> ++ second ++ </simpara> ++ </listitem> ++ </itemizedlist> ++ Numbered list: ++ <orderedlist spacing="compact"> ++ <listitem> ++ <simpara> ++ first ++ </simpara> ++ </listitem> ++ <listitem> ++ <simpara> ++ second ++ </simpara> ++ </listitem> ++ </orderedlist> ++ Definition list: ++ <variablelist> ++ <varlistentry> ++ <term> ++ DocBook ++ </term> ++ <listitem> ++ <simpara> ++ A sophisticated XML format. ++ </simpara> ++ </listitem> ++ </varlistentry> ++ <varlistentry> ++ <term> ++ orange ++ </term> ++ <listitem> ++ <simpara> ++ A healthy fruit. ++ </simpara> ++ </listitem> ++ <listitem> ++ <simpara> ++ A warm colour. ++ </simpara> ++ </listitem> ++ </varlistentry> ++ </variablelist> ++ </para> ++ </section> ++</section> ++ ++~~~~~~~~ ++ ++Further reading: ++[DocBook 5: The Definitive Guide](https://tdg.docbook.org/tdg/5.0/docbook.html), ++which includes the ++[List of DocBook elements](https://tdg.docbook.org/tdg/5.0/chunk-part-d64e8789.html). diff --git a/www/hs-gitit/files/patch-gitit.cabal b/www/hs-gitit/files/patch-gitit.cabal new file mode 100644 index 000000000000..09264a8ab096 --- /dev/null +++ b/www/hs-gitit/files/patch-gitit.cabal @@ -0,0 +1,31 @@ +--- gitit.cabal.orig 2001-09-09 01:46:40 UTC ++++ gitit.cabal +@@ -104,6 +104,10 @@ Flag plugins + plugins should disable this flag. + default: True + ++Flag with_rtsopts ++ description: Use -with-rtsopts=-I0 to avoid idle GC. ++ default: True ++ + Library + hs-source-dirs: src + exposed-modules: Network.Gitit, Network.Gitit.ContentTransformer, +@@ -176,6 +180,8 @@ Library + exposed-modules: Network.Gitit.Interface + build-depends: ghc, ghc-paths + cpp-options: -D_PLUGINS ++ if flag(with_rtsopts) ++ cpp-options: -DRTSOPTS + default-extensions: CPP + default-language: Haskell2010 + ghc-options: -Wall -fno-warn-unused-do-bind +@@ -198,6 +204,8 @@ Executable gitit + default-extensions: CPP + default-language: Haskell2010 + ghc-options: -Wall -threaded -fno-warn-unused-do-bind ++ if flag(with_rtsopts) ++ ghc-options: -rtsopts=all -with-rtsopts=-I0 + ghc-prof-options: -fprof-auto-exported -rtsopts + + Executable expireGititCache diff --git a/www/hs-gitit/files/patch-src_Network_Gitit_Initialize.hs b/www/hs-gitit/files/patch-src_Network_Gitit_Initialize.hs new file mode 100644 index 000000000000..636e7ef14447 --- /dev/null +++ b/www/hs-gitit/files/patch-src_Network_Gitit_Initialize.hs @@ -0,0 +1,14 @@ +--- src/Network/Gitit/Initialize.hs.orig 2001-09-09 01:46:40 UTC ++++ src/Network/Gitit/Initialize.hs +@@ -123,7 +123,10 @@ createDefaultPages :: Config -> IO () + createDefaultPages conf = do + let fs = filestoreFromConfig conf + pt = defaultPageType conf +- toPandoc = readMarkdown def{ readerExtensions = enableExtension Ext_smart (readerExtensions def) } ++ rOpts = def{ readerExtensions = getDefaultExtensions "markdown" ++ <> extensionsFromList [Ext_smart] ++ <> readerExtensions def } ++ toPandoc = readMarkdown rOpts + defOpts = def{ writerExtensions = if showLHSBirdTracks conf + then enableExtension + Ext_literate_haskell diff --git a/www/hs-gitit/files/patch-src_Network_Gitit_Util.hs b/www/hs-gitit/files/patch-src_Network_Gitit_Util.hs new file mode 100644 index 000000000000..d8cd908bcd5e --- /dev/null +++ b/www/hs-gitit/files/patch-src_Network_Gitit_Util.hs @@ -0,0 +1,10 @@ +--- src/Network/Gitit/Util.hs.orig 2001-09-09 01:46:40 UTC ++++ src/Network/Gitit/Util.hs +@@ -115,6 +115,7 @@ parsePageType s = + "latex" -> (LaTeX,False) + "latex+lhs" -> (LaTeX,True) + "org" -> (Org,False) ++ "docbook" -> (DocBook,False) + "mediawiki" -> (MediaWiki,False) + x -> error $ "Unknown page type: " ++ x + diff --git a/www/hs-gitit/pkg-descr b/www/hs-gitit/pkg-descr new file mode 100644 index 000000000000..c7c5cf1269ae --- /dev/null +++ b/www/hs-gitit/pkg-descr @@ -0,0 +1,19 @@ +Gitit is a wiki program written in Haskell. It uses Happstack for the +web server and pandoc for markup processing. Pages and uploaded files +are stored in a git, darcs, or mercurial repository and may be +modified either by using the VCS's command-line tools or through +the wiki's web interface. By default, pandoc's extended version of +markdown is used as a markup language, but reStructuredText, LaTeX, +HTML, DocBook, or Emacs Org-mode markup can also be used. Gitit can +be configured to display TeX math (using texmath) and highlighted +source code (using highlighting-kate). + +Other features include + + * plugins: dynamically loaded page transformations written in + Haskell (see "Network.Gitit.Interface") + * categories + * caching + * Atom feeds (site-wide and per-page) + * a library, "Network.Gitit", that makes it simple to include + a gitit wiki in any happstack application diff --git a/www/hs-gitit/pkg-plist b/www/hs-gitit/pkg-plist new file mode 100644 index 000000000000..af0a66fa3ec2 --- /dev/null +++ b/www/hs-gitit/pkg-plist @@ -0,0 +1,71 @@ +%%DATADIR%%/README.markdown +%%DATADIR%%/data/default.conf +%%DATADIR%%/data/FrontPage.page +%%DATADIR%%/data/Help.page +%%DATADIR%%/data/markup.DocBook +%%DATADIR%%/data/markup.HTML +%%DATADIR%%/data/markup.LaTeX +%%DATADIR%%/data/markup.Markdown +%%DATADIR%%/data/markup.Org +%%DATADIR%%/data/markup.RST +%%DATADIR%%/data/markup.Textile +%%DATADIR%%/data/markupHelp/DocBook +%%DATADIR%%/data/markupHelp/HTML +%%DATADIR%%/data/markupHelp/LaTeX +%%DATADIR%%/data/markupHelp/LaTeX+LHS +%%DATADIR%%/data/markupHelp/Markdown +%%DATADIR%%/data/markupHelp/Markdown+LHS +%%DATADIR%%/data/markupHelp/Org +%%DATADIR%%/data/markupHelp/RST +%%DATADIR%%/data/markupHelp/RST+LHS +%%DATADIR%%/data/post-update +%%DATADIR%%/data/s5/default/blank.gif +%%DATADIR%%/data/s5/default/bodybg.gif +%%DATADIR%%/data/s5/default/framing.css +%%DATADIR%%/data/s5/default/iepngfix.htc +%%DATADIR%%/data/s5/default/opera.css +%%DATADIR%%/data/s5/default/outline.css +%%DATADIR%%/data/s5/default/pretty.css +%%DATADIR%%/data/s5/default/print.css +%%DATADIR%%/data/s5/default/s5-core.css +%%DATADIR%%/data/s5/default/slides.css +%%DATADIR%%/data/s5/default/slides.js +%%DATADIR%%/data/s5/default/slides.min.js +%%DATADIR%%/data/static/css/custom.css +%%DATADIR%%/data/static/css/highlighting.css +%%DATADIR%%/data/static/css/ie.css +%%DATADIR%%/data/static/css/print.css +%%DATADIR%%/data/static/css/reset-fonts-grids.css +%%DATADIR%%/data/static/css/screen.css +%%DATADIR%%/data/static/img/icons/feed.png +%%DATADIR%%/data/static/img/icons/folder.png +%%DATADIR%%/data/static/img/icons/page.png +%%DATADIR%%/data/static/img/logo.png +%%DATADIR%%/data/static/js/dragdiff.js +%%DATADIR%%/data/static/js/footnotes.js +%%DATADIR%%/data/static/js/jquery-1.2.6.js +%%DATADIR%%/data/static/js/jquery-1.2.6.min.js +%%DATADIR%%/data/static/js/jquery-ui-combined-1.6rc2.min.js +%%DATADIR%%/data/static/js/jquery-ui.core-1.6rc2.js +%%DATADIR%%/data/static/js/jquery-ui.draggable-1.6rc2.js +%%DATADIR%%/data/static/js/jquery-ui.droppable-1.6rc2.js +%%DATADIR%%/data/static/js/jquery-ui.tabs-1.6rc2.js +%%DATADIR%%/data/static/js/jquery.hotkeys-0.7.9.js +%%DATADIR%%/data/static/js/jquery.hotkeys-0.7.9.min.js +%%DATADIR%%/data/static/js/MathMLinHTML.js +%%DATADIR%%/data/static/js/preview.js +%%DATADIR%%/data/static/js/search.js +%%DATADIR%%/data/static/js/uploadForm.js +%%DATADIR%%/data/static/robots.txt +%%DATADIR%%/data/templates/content.st +%%DATADIR%%/data/templates/expire.st +%%DATADIR%%/data/templates/footer.st +%%DATADIR%%/data/templates/getuser.st +%%DATADIR%%/data/templates/listitem.st +%%DATADIR%%/data/templates/logo.st +%%DATADIR%%/data/templates/markuphelp.st +%%DATADIR%%/data/templates/messages.st +%%DATADIR%%/data/templates/page.st +%%DATADIR%%/data/templates/pagetools.st +%%DATADIR%%/data/templates/sitenav.st +%%DATADIR%%/data/templates/userbox.st |