mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 00:25:42 +02:00
docs/fix-links: init
The README/CONTRIBUTING files are authored with GitHub in mind, but we want to re-use them for the docs website. Replace the existing simple substitution with a pandoc AST-based filter.
This commit is contained in:
parent
ff63fc92ed
commit
7f29e4b2ae
3 changed files with 84 additions and 6 deletions
33
docs/fix-links/default.nix
Normal file
33
docs/fix-links/default.nix
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
runCommand,
|
||||||
|
pandoc,
|
||||||
|
githubUrl ? "https://github.com/nix-community/nixvim/blob/main/",
|
||||||
|
docsUrl ? "https://nix-community.github.io/nixvim/",
|
||||||
|
}:
|
||||||
|
src:
|
||||||
|
runCommand (src.name or (builtins.baseNameOf src))
|
||||||
|
{
|
||||||
|
inherit src;
|
||||||
|
bindings =
|
||||||
|
lib.generators.toLua
|
||||||
|
{
|
||||||
|
asBindings = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
inherit githubUrl docsUrl;
|
||||||
|
};
|
||||||
|
filter = ./filter.lua;
|
||||||
|
nativeBuildInputs = [ pandoc ];
|
||||||
|
}
|
||||||
|
''
|
||||||
|
echo "$bindings" > filter.lua
|
||||||
|
cat $filter >> filter.lua
|
||||||
|
|
||||||
|
pandoc \
|
||||||
|
--output $out \
|
||||||
|
--from markdown \
|
||||||
|
--to markdown-raw_attribute \
|
||||||
|
--lua-filter filter.lua \
|
||||||
|
$src
|
||||||
|
''
|
40
docs/fix-links/filter.lua
Normal file
40
docs/fix-links/filter.lua
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
local len = pandoc.text.len
|
||||||
|
local sub = pandoc.text.sub
|
||||||
|
|
||||||
|
-- True if str starts with prefix
|
||||||
|
local function hasPrefix(prefix, str)
|
||||||
|
local pfxLen = len(prefix)
|
||||||
|
local strLen = len(str)
|
||||||
|
if pfxLen == strLen then
|
||||||
|
return prefix == str
|
||||||
|
end
|
||||||
|
if pfxLen < strLen then
|
||||||
|
return prefix == sub(str, 1, pfxLen)
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
function Link(link)
|
||||||
|
local target = link.target
|
||||||
|
-- Check for relative links
|
||||||
|
-- TODO: handle ../
|
||||||
|
if hasPrefix("./", target) then
|
||||||
|
link.target = githubUrl .. sub(target, 3)
|
||||||
|
return link
|
||||||
|
end
|
||||||
|
if not hasPrefix("https://", target) then
|
||||||
|
link.target = githubUrl .. target
|
||||||
|
return link
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Check for absolute links, pointing to the docs website
|
||||||
|
if docsUrl == target then
|
||||||
|
link.target = "."
|
||||||
|
return link
|
||||||
|
end
|
||||||
|
if hasPrefix(docsUrl, target) then
|
||||||
|
local i = len(docsUrl) + 1
|
||||||
|
link.target = sub(target, i)
|
||||||
|
return link
|
||||||
|
end
|
||||||
|
end
|
|
@ -317,7 +317,6 @@ pkgs.stdenv.mkDerivation (finalAttrs: {
|
||||||
fileset = lib.fileset.unions [
|
fileset = lib.fileset.unions [
|
||||||
../user-guide
|
../user-guide
|
||||||
../platforms
|
../platforms
|
||||||
../../CONTRIBUTING.md
|
|
||||||
(lib.fileset.fileFilter (
|
(lib.fileset.fileFilter (
|
||||||
{ type, hasExt, ... }:
|
{ type, hasExt, ... }:
|
||||||
type == "regular"
|
type == "regular"
|
||||||
|
@ -330,6 +329,8 @@ pkgs.stdenv.mkDerivation (finalAttrs: {
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
contributing = finalAttrs.passthru.fix-links ../../CONTRIBUTING.md;
|
||||||
|
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
dest=$out/share/doc
|
dest=$out/share/doc
|
||||||
mkdir -p $dest
|
mkdir -p $dest
|
||||||
|
@ -339,6 +340,9 @@ pkgs.stdenv.mkDerivation (finalAttrs: {
|
||||||
mv ./docs/* ./ && rmdir ./docs
|
mv ./docs/* ./ && rmdir ./docs
|
||||||
mv ./mdbook/* ./ && rmdir ./mdbook
|
mv ./mdbook/* ./ && rmdir ./mdbook
|
||||||
|
|
||||||
|
# Copy the contributing file
|
||||||
|
cp $contributing ./CONTRIBUTING.md
|
||||||
|
|
||||||
# Copy the generated MD docs into the build directory
|
# Copy the generated MD docs into the build directory
|
||||||
bash -e ${finalAttrs.passthru.copy-docs}
|
bash -e ${finalAttrs.passthru.copy-docs}
|
||||||
|
|
||||||
|
@ -382,21 +386,22 @@ pkgs.stdenv.mkDerivation (finalAttrs: {
|
||||||
;
|
;
|
||||||
|
|
||||||
passthru = {
|
passthru = {
|
||||||
|
fix-links = callPackage ../fix-links {
|
||||||
|
# FIXME: determine values from availableVersions & baseHref
|
||||||
|
docsUrl = "https://nix-community.github.io/nixvim/";
|
||||||
|
githubUrl = "https://github.com/nix-community/nixvim/blob/main/";
|
||||||
|
};
|
||||||
copy-docs = pkgs.writeShellScript "copy-docs" docs.commands;
|
copy-docs = pkgs.writeShellScript "copy-docs" docs.commands;
|
||||||
readme =
|
readme =
|
||||||
runCommand "readme"
|
runCommand "readme"
|
||||||
{
|
{
|
||||||
start = "<!-- START DOCS -->";
|
start = "<!-- START DOCS -->";
|
||||||
end = "<!-- STOP DOCS -->";
|
end = "<!-- STOP DOCS -->";
|
||||||
baseurl = "https://nix-community.github.io/nixvim/";
|
src = finalAttrs.passthru.fix-links ../../README.md;
|
||||||
src = ../../README.md;
|
|
||||||
}
|
}
|
||||||
''
|
''
|
||||||
# extract relevant section of the README
|
# extract relevant section of the README
|
||||||
sed -n "/$start/,/$end/p" $src > $out
|
sed -n "/$start/,/$end/p" $src > $out
|
||||||
# replace absolute links
|
|
||||||
substituteInPlace $out --replace-quiet "$baseurl" "./"
|
|
||||||
# TODO: replace .html with .md
|
|
||||||
'';
|
'';
|
||||||
search = search.override {
|
search = search.override {
|
||||||
baseHref = finalAttrs.baseHref + "search/";
|
baseHref = finalAttrs.baseHref + "search/";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue