From c35890f6dcb3d0dd8d74667ef1a0c2d9e1caa503 Mon Sep 17 00:00:00 2001 From: Wojciech Kordalski Date: Sat, 12 Apr 2025 22:03:12 +0200 Subject: [PATCH 1/5] =?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 4b70e06bc..2cbe0c555 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 bc563b980..fe5b7768b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -161,3 +161,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 314e7a042c54bb1e066db78bf702b009cdb7a776 Mon Sep 17 00:00:00 2001 From: Wojciech Kordalski Date: Sat, 12 Apr 2025 22:08:13 +0200 Subject: [PATCH 2/5] 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), From 20186c09acd40f9a164e85fcbd4c4332e63fed4f Mon Sep 17 00:00:00 2001 From: Wojciech Kordalski Date: Thu, 15 May 2025 16:00:50 +0200 Subject: [PATCH 3/5] Cleanup --- crates/typst-library/src/model/bibliography.rs | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/crates/typst-library/src/model/bibliography.rs b/crates/typst-library/src/model/bibliography.rs index 2dd37f792..1a9104f73 100644 --- a/crates/typst-library/src/model/bibliography.rs +++ b/crates/typst-library/src/model/bibliography.rs @@ -669,15 +669,7 @@ impl<'a> Generator<'a> { let supplement = child.supplement(StyleChain::default()); 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 = *supplement_ids.entry(c.plain_text()).or_insert_with(|| { let id = next_supplement_id; next_supplement_id += 1; id From a56c22e04f65cf4b53f20e32576ad62786ec2a1b Mon Sep 17 00:00:00 2001 From: Wojciech Kordalski Date: Thu, 15 May 2025 16:07:15 +0200 Subject: [PATCH 4/5] Update Hayagriva commit --- Cargo.lock | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2cbe0c555..784a638b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -327,8 +327,7 @@ dependencies = [ [[package]] name = "citationberg" version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4595e03beafb40235070080b5286d3662525efc622cca599585ff1d63f844fa" +source = "git+https://github.com/typst/citationberg.git?rev=67db988c7155f17b2e0aff9aabcd9a00745e4c04#67db988c7155f17b2e0aff9aabcd9a00745e4c04" dependencies = [ "quick-xml 0.36.2", "serde", @@ -947,7 +946,7 @@ dependencies = [ [[package]] name = "hayagriva" version = "0.8.1" -source = "git+https://github.com/wkordalski/hayagriva.git?branch=transparent-locator-payload-with-discrimination-ids#3014bc205549e66c0fec2b74612c07c5b67a6f49" +source = "git+https://github.com/wkordalski/hayagriva.git?branch=transparent-locator-payload-with-discrimination-ids#69975ad77ba4949aec747aa5ceb6f79d12bea4a1" dependencies = [ "biblatex", "ciborium", From dc1c1ebb8fcbe8e26005664bdec1c51beeb56a22 Mon Sep 17 00:00:00 2001 From: Wojciech Kordalski Date: Thu, 15 May 2025 16:33:04 +0200 Subject: [PATCH 5/5] Update Hayagriva commit once more --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 784a638b4..21f57ef9e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -946,7 +946,7 @@ dependencies = [ [[package]] name = "hayagriva" version = "0.8.1" -source = "git+https://github.com/wkordalski/hayagriva.git?branch=transparent-locator-payload-with-discrimination-ids#69975ad77ba4949aec747aa5ceb6f79d12bea4a1" +source = "git+https://github.com/wkordalski/hayagriva.git?branch=transparent-locator-payload-with-discrimination-ids#63c73bd163b997218fccd2713bdbf211bc7051cb" dependencies = [ "biblatex", "ciborium",