Fix xrefs (#402)

This commit is contained in:
Naïm Favier 2021-12-31 00:29:13 +01:00 committed by GitHub
parent b6f1dc9667
commit 194ba6d4e0
Failed to generate hash of commit
3 changed files with 31 additions and 1 deletions

View file

@ -1 +1 @@
25 26

View file

@ -0,0 +1,21 @@
--[[
Resolve cross-references to NixOS options in a hacky way and link them to the
unstable channel's option search page on search.nixos.org
]]
function Link(elem)
prefix = '#opt-'
if elem.target:sub(1, #prefix) == prefix then
option_name = elem.target:sub(#prefix + 1)
option_name = option_name:gsub('%._name_%.', '.<name>.')
option_name = option_name:gsub('%._%.', '.*.')
elem.target = 'https://search.nixos.org/options?channel=unstable&show=' .. option_name .. '&query=' .. option_name
if #elem.content == 1 and elem.content[1].tag == 'Str' and elem.content[1].text == '???' then
elem.content[1].text = option_name
end
return elem
end
end

View file

@ -1,3 +1,5 @@
use std::fs::File;
use std::io::Write;
use std::path::PathBuf; use std::path::PathBuf;
use lazy_static::lazy_static; use lazy_static::lazy_static;
@ -6,6 +8,8 @@ use pandoc::{
InputFormat, InputKind, OutputFormat, OutputKind, PandocError, PandocOption, PandocOutput, InputFormat, InputKind, OutputFormat, OutputKind, PandocError, PandocOption, PandocOutput,
}; };
const XREF_FILTER: &str = include_str!("fix-xrefs.lua");
lazy_static! { lazy_static! {
static ref FILTERS_PATH: PathBuf = std::env::var("NIXPKGS_PANDOC_FILTERS_PATH") static ref FILTERS_PATH: PathBuf = std::env::var("NIXPKGS_PANDOC_FILTERS_PATH")
.unwrap_or("".into()) .unwrap_or("".into())
@ -35,6 +39,10 @@ impl<T: AsRef<str>> PandocExt for T {
p.push("link-unix-man-references.lua"); p.push("link-unix-man-references.lua");
p p
}; };
let tmpdir = tempfile::tempdir()?;
let xref_filter = tmpdir.path().join("fix-xrefs.lua");
writeln!(File::create(&xref_filter)?, "{}", XREF_FILTER)?;
let mut pandoc = pandoc::new(); let mut pandoc = pandoc::new();
let wrapper_xml = format!( let wrapper_xml = format!(
" "
@ -52,6 +60,7 @@ impl<T: AsRef<str>> PandocExt for T {
pandoc.add_options(&[ pandoc.add_options(&[
PandocOption::LuaFilter(citeref_filter), PandocOption::LuaFilter(citeref_filter),
PandocOption::LuaFilter(man_filter), PandocOption::LuaFilter(man_filter),
PandocOption::LuaFilter(xref_filter),
]); ]);
pandoc.execute().map(|result| match result { pandoc.execute().map(|result| match result {