From 5857caa7fe1c1d2b4529ebd7d94ce0e55ce346f0 Mon Sep 17 00:00:00 2001 From: Wojciech Kordalski Date: Sat, 12 Apr 2025 22:03:12 +0200 Subject: [PATCH 1/2] =?UTF-8?q?Typst=20treats=20each=20citation=20suppleme?= =?UTF-8?q?nt=20as=20equal=20=E2=80=94=20fix=20it?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 3 +-- Cargo.toml | 3 +++ .../typst-library/src/model/bibliography.rs | 21 +++++++++++++++++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ab2d2cc83..477cbe4da 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -947,8 +947,7 @@ dependencies = [ [[package]] name = "hayagriva" version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "954907554bb7fcba29a4f917c2d43e289ec21b69d872ccf97db160eca6caeed8" +source = "git+https://github.com/wkordalski/hayagriva.git?branch=transparent-locator-payload-with-discrimination-ids#3014bc205549e66c0fec2b74612c07c5b67a6f49" dependencies = [ "biblatex", "ciborium", diff --git a/Cargo.toml b/Cargo.toml index 12870b809..45ab4482f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -160,3 +160,6 @@ manual_range_contains = "allow" mutable_key_type = "allow" uninlined_format_args = "warn" wildcard_in_or_patterns = "allow" + +[patch.crates-io] +hayagriva = { git = "https://github.com/wkordalski/hayagriva.git", branch = "transparent-locator-payload-with-discrimination-ids" } diff --git a/crates/typst-library/src/model/bibliography.rs b/crates/typst-library/src/model/bibliography.rs index 51e3b03b0..25589806c 100644 --- a/crates/typst-library/src/model/bibliography.rs +++ b/crates/typst-library/src/model/bibliography.rs @@ -638,6 +638,9 @@ impl<'a> Generator<'a> { let database = &self.bibliography.sources.derived; let bibliography_style = &self.bibliography.style(StyleChain::default()).derived; + let mut supplement_ids = HashMap::new(); + let mut next_supplement_id: u64 = 0; + // Process all citation groups. let mut driver = BibliographyDriver::new(); for elem in &self.groups { @@ -665,10 +668,24 @@ impl<'a> Generator<'a> { }; let supplement = child.supplement(StyleChain::default()); - let locator = supplement.as_ref().map(|_| { + let locator = supplement.as_ref().map(|c| { + // let mut hasher = DefaultHasher::new(); + // c.hash(&mut hasher); + // let content_hash = hasher.finish(); + + let plain_text = c.plain_text(); + // println!("plain_text: {}", plain_text); + // println!("{c:?}"); + + let id = *supplement_ids.entry(plain_text).or_insert_with(|| { + let id = next_supplement_id; + next_supplement_id += 1; + id + }); + SpecificLocator( citationberg::taxonomy::Locator::Custom, - hayagriva::LocatorPayload::Transparent, + hayagriva::LocatorPayload::Transparent(id), ) }); From 8f062997d1ec811a608d6d8cd41ef5a4b36e0d5d Mon Sep 17 00:00:00 2001 From: Wojciech Kordalski Date: Sat, 12 Apr 2025 22:08:13 +0200 Subject: [PATCH 2/2] Rustfmt fix --- crates/typst-library/src/model/bibliography.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/typst-library/src/model/bibliography.rs b/crates/typst-library/src/model/bibliography.rs index 25589806c..2dd37f792 100644 --- a/crates/typst-library/src/model/bibliography.rs +++ b/crates/typst-library/src/model/bibliography.rs @@ -682,7 +682,7 @@ impl<'a> Generator<'a> { next_supplement_id += 1; id }); - + SpecificLocator( citationberg::taxonomy::Locator::Custom, hayagriva::LocatorPayload::Transparent(id),