anchor.diff:          -e "s|^W3M =.*|W3M = '${w3m}/bin/w3m'|" \
           -e "s|^LYNX =.*|LYNX = '${lynx}/bin/lynx'|" \
           -e "s|^XMLLINT =.*|XMLLINT = '${libxml2.bin}/bin/xmllint'|" \
  -        -e "s|^EPUBCHECK =.*|EPUBCHECK = 'nixpkgs_is_missing_epubcheck'|" \
  -        -i a2x.py
  +        -e "s|^EPUBCHECK =.*|EPUBCHECK = '${epubcheck}/bin/epubcheck'|" \
  +        -i asciidoc/a2x.py
     '' else ''
       sed -e "s|^ENV =.*|ENV = dict(XML_CATALOG_FILES='${docbook_xml_dtd_45}/xml/dtd/docbook/catalog.xml ${docbook_xsl_ns}/xml/xsl/docbook/catalog.xml ${docbook_xsl}/xml/xsl/docbook/catalog.xml')|" \
           -e "s|^XSLTPROC =.*|XSLTPROC = '${libxslt.bin}/bin/xsltproc'|" \
           -e "s|^XMLLINT =.*|XMLLINT = '${libxml2.bin}/bin/xmllint'|" \
  -        -i a2x.py
  +        -i asciidoc/a2x.py
     '') + ''
  -    patchShebangs --host \
  -      asciidoc.py \
  -      a2x.py \
  -      tests/testasciidoc.py \
  -      filters/code/code-filter.py \
  -      filters/latex/latex2img.py \
  -      filters/music/music2png.py \
  -      filters/unwraplatex.py \
  -      filters/graphviz/graphviz2png.py
  -
  -    # Hardcode the path to its own asciidoc.
  -    # This helps with cross-compilation.
  -    substituteInPlace a2x.py \
  -      --replace "find_executable(ASCIIDOC)" "'${placeholder "out"}/bin/asciidoc'"
  -
  -    # Note: this substitution will not work in the planned 10.0.0 release:
  -    #
  -    # https://github.com/asciidoc/asciidoc-py3/commit/dfffda23381014481cd13e8e9d8f131e1f93f08a
  -    #
  -    # Update this substitution to:
  -    #
  -    # --replace "python3 -m asciidoc.a2x" "python3 -m asciidoc.a2x -a revdate=01/01/1980"
  -    substituteInPlace Makefile.in \
  -      --replace "python3 a2x.py" "python3 a2x.py -a revdate=01/01/1980"
  -
       # Fix tests
       for f in $(grep -R --files-with-matches "2002-11-25") ; do
  -      substituteInPlace $f --replace "2002-11-25" "1970-01-01"
  -      substituteInPlace $f --replace "00:37:42" "00:00:01"
  +      substituteInPlace $f --replace "2002-11-25" "1980-01-02"
  +      substituteInPlace $f --replace "00:37:42" "00:00:00"
       done
     '' + lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
       # We want to use asciidoc from the build platform to build the documentation.
       substituteInPlace Makefile.in \
  -      --replace "python3 a2x.py" "python3 ${buildPackages.asciidoc}/bin/a2x.py"
  +      --replace "python3 -m asciidoc.a2x" "${buildPackages.asciidoc}/bin/a2x"
     '';
   
  -  preInstall = "mkdir -p $out/etc/vim";
  -  makeFlags = lib.optional stdenv.isCygwin "DESTDIR=/.";
  -
  -  checkInputs = [ sourceHighlight ];
  -  doCheck = true;
  +  postBuild = ''
  +    make manpages
  +  '';
  +
  +  postInstall = ''
  +    installManPage doc/asciidoc.1 doc/a2x.1 doc/testasciidoc.1
  +  '';
  +
  +  checkInputs = with python3.pkgs; [
  +    pytest
  +    pytest-mock
  +  ];
  +
  +  checkPhase = ''
  +    runHook preCheck
  +
  +    make test
  +
  +    runHook postCheck
  +  '';
   
     meta = with lib; {
       description = "Text-based document generation system";
  
positive.code:         -e "s|twopi|${graphviz}/bin/twopi|g" \
          -e "s|circo|${graphviz}/bin/circo|g" \
          -e "s|fdp|${graphviz}/bin/fdp|g" \
          -i "filters/graphviz/graphviz2png.py"
  
      sed -e "s|run('latex|run('${texlive}/bin/latex|g" \
          -e "s|cmd = 'dvipng'|cmd = '${texlive}/bin/dvipng'|g" \
          -e "s|cmd = 'dvisvgm'|cmd = '${texlive}/bin/dvisvgm'|g" \
          -i "filters/latex/latex2img.py"
  
      sed -e "s|run('abc2ly|run('${lilypond}/bin/abc2ly|g" \
          -e "s|run('lilypond|run('${lilypond}/bin/lilypond|g" \
          -e "s|run('convert|run('${imagemagick.out}/bin/convert|g" \
          -i "filters/music/music2png.py"
  
      sed -e 's|filter="source-highlight|filter="${sourceHighlight}/bin/source-highlight|' \
          -e 's|filter="highlight|filter="${highlight}/bin/highlight|' \
          -e 's|filter="pygmentize|filter="${pygments}/bin/pygmentize|' \
          -i "filters/source/source-highlight-filter.conf"
  
      # ENV is custom environment passed to programs that a2x invokes. Here we
      # use it to work around an impurity in the tetex package; tetex tools
  
negative.code:     sha256 = "08ya4bskygzqkfqwjllpg31qc5k08xp2k78z9b2480g8y57bfy10";
    };
  
  in python3.pkgs.buildPythonApplication rec {
    pname = "asciidoc"
      + lib.optionalString enableStandardFeatures "-full"
      + lib.optionalString enableExtraPlugins "-with-plugins";
    version = "10.2.0";
  
    src = fetchFromGitHub {
      owner = "asciidoc-py";
      repo = "asciidoc-py";
      rev = version;
      hash = "sha256-TqC0x9xB6e2d6Wc9bgnlqgZVOmYHmUUKfE/CKAiEtag=";
    };
  
    nativeBuildInputs = [
      autoreconfHook
      installShellFiles
      unzip
    ];
  
    # install filters early, so their shebangs are patched too
    postPatch = with lib; ''
  