at 18.03-beta 3.7 kB view raw
1let 2 pkgs = import ./.. { }; 3 lib = pkgs.lib; 4 sources = lib.sourceFilesBySuffices ./. [".xml"]; 5 sources-langs = ./languages-frameworks; 6in 7pkgs.stdenv.mkDerivation { 8 name = "nixpkgs-manual"; 9 10 11 buildInputs = with pkgs; [ pandoc libxml2 libxslt zip ]; 12 13 xsltFlags = '' 14 --param section.autolabel 1 15 --param section.label.includes.component.label 1 16 --param html.stylesheet 'style.css' 17 --param xref.with.number.and.title 1 18 --param toc.section.depth 3 19 --param admon.style ''' 20 --param callout.graphics.extension '.gif' 21 ''; 22 23 24 buildCommand = let toDocbook = { useChapters ? false, inputFile, outputFile }: 25 let 26 extraHeader = lib.optionalString (!useChapters) 27 ''xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" ''; 28 in '' 29 { 30 pandoc '${inputFile}' -w docbook+smart ${lib.optionalString useChapters "--top-level-division=chapter"} \ 31 -f markdown+smart \ 32 | sed -e 's|<ulink url=|<link xlink:href=|' \ 33 -e 's|</ulink>|</link>|' \ 34 -e 's|<sect. id=|<section xml:id=|' \ 35 -e 's|</sect[0-9]>|</section>|' \ 36 -e '1s| id=| xml:id=|' \ 37 -e '1s|\(<[^ ]* \)|\1${extraHeader}|' 38 } > '${outputFile}' 39 ''; 40 in 41 42 '' 43 ln -s '${sources}/'*.xml . 44 mkdir ./languages-frameworks 45 cp -s '${sources-langs}'/* ./languages-frameworks 46 '' 47 + toDocbook { 48 inputFile = ./introduction.md; 49 outputFile = "introduction.xml"; 50 useChapters = true; 51 } 52 + toDocbook { 53 inputFile = ./shell.md; 54 outputFile = "shell.xml"; 55 } 56 + toDocbook { 57 inputFile = ./languages-frameworks/python.md; 58 outputFile = "./languages-frameworks/python.xml"; 59 } 60 + toDocbook { 61 inputFile = ./languages-frameworks/haskell.md; 62 outputFile = "./languages-frameworks/haskell.xml"; 63 } 64 + toDocbook { 65 inputFile = ../pkgs/development/idris-modules/README.md; 66 outputFile = "languages-frameworks/idris.xml"; 67 } 68 + toDocbook { 69 inputFile = ../pkgs/development/node-packages/README.md; 70 outputFile = "languages-frameworks/node.xml"; 71 } 72 + toDocbook { 73 inputFile = ../pkgs/development/r-modules/README.md; 74 outputFile = "languages-frameworks/r.xml"; 75 } 76 + toDocbook { 77 inputFile = ./languages-frameworks/rust.md; 78 outputFile = "./languages-frameworks/rust.xml"; 79 } 80 + toDocbook { 81 inputFile = ./languages-frameworks/vim.md; 82 outputFile = "./languages-frameworks/vim.xml"; 83 } 84 + '' 85 echo ${lib.nixpkgsVersion} > .version 86 87 # validate against relaxng schema 88 xmllint --nonet --xinclude --noxincludenode manual.xml --output manual-full.xml 89 ${pkgs.jing}/bin/jing ${pkgs.docbook5}/xml/rng/docbook/docbook.rng manual-full.xml 90 91 dst=$out/share/doc/nixpkgs 92 mkdir -p $dst 93 xsltproc $xsltFlags --nonet --xinclude \ 94 --output $dst/manual.html \ 95 ${pkgs.docbook5_xsl}/xml/xsl/docbook/xhtml/docbook.xsl \ 96 ./manual.xml 97 98 cp ${./style.css} $dst/style.css 99 100 mkdir -p $dst/images/callouts 101 cp "${pkgs.docbook5_xsl}/xml/xsl/docbook/images/callouts/"*.gif $dst/images/callouts/ 102 103 mkdir -p $out/nix-support 104 echo "doc manual $dst manual.html" >> $out/nix-support/hydra-build-products 105 106 xsltproc $xsltFlags --nonet --xinclude \ 107 --output $dst/epub/ \ 108 ${pkgs.docbook5_xsl}/xml/xsl/docbook/epub/docbook.xsl \ 109 ./manual.xml 110 111 cp -r $dst/images $dst/epub/OEBPS 112 echo "application/epub+zip" > mimetype 113 manual="$dst/nixpkgs-manual.epub" 114 zip -0Xq "$manual" mimetype 115 cd $dst/epub && zip -Xr9D "$manual" * 116 rm -rf $dst/epub 117 ''; 118}