Fix xrefs (#402)
This commit is contained in:
parent
b6f1dc9667
commit
194ba6d4e0
21
flake-info/src/data/fix-xrefs.lua
Normal file
21
flake-info/src/data/fix-xrefs.lua
Normal 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
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue