Skip to content

Conversation

@YDX-2147483647
Copy link
Contributor

@YDX-2147483647 YDX-2147483647 commented Jan 14, 2026

  • Make Numeric::from_str refuse to parse irregular page numbers like 11E720, so that they can be interpreted as non-numeric strings.
  • Let Numeric store leading zeros (e.g., 011) and whitespaces between affixes and numbers (e.g., GB/T 7714) in prefix.
  • Add support for <if is-numeric="page">. Previously, it's always false.

Resolves #170
Resolves #440 (which is a part of #312)
Also relates to #327 because number_{LeadingZeros,MixedText} now pass.


Notes for Chinese:
This PR eliminates num, code_space, and han_space errors. According to the survey Hayagriva对GB/T 7714—2015的支持情况, they account for 41% of the errors in GB/T 7714—2015.

@YDX-2147483647 YDX-2147483647 marked this pull request as ready for review January 14, 2026 11:47
@YDX-2147483647 YDX-2147483647 marked this pull request as draft January 14, 2026 12:01
@YDX-2147483647 YDX-2147483647 changed the title Fix parsing of non-numeric page numbers and serial numbers Fix parsing of atypical page numbers and serial numbers Jan 14, 2026
#[test]
fn nonnumeric_page() {
// https://github.com/typst/hayagriva/issues/170
for s in &["11E201", "1.36"] {
Copy link
Contributor Author

@YDX-2147483647 YDX-2147483647 Jan 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CSL spec says nothing about 1.36, and citeproc-js (citext) thinks it's non-numeric.

图片
Test code
#import "@local/citext:0.3.0": *

#let source = ```bib
@book{a,
  title = {A},
  pages =  {1a},
}
@book{b,
  title = {B},
  pages =  {1.36},
}
```.text

#let csl = ```xml
<?xml version="1.0" encoding="utf-8"?>
<style xmlns="http://purl.org/net/xbiblio/csl" class="note" version="1.0" name-as-sort-order="all" sort-separator=" " demote-non-dropping-particle="never" initialize-with=" " initialize-with-hyphen="false" page-range-format="expanded" default-locale="zh-CN">
  <info>
    <id />
    <title />
    <updated>2009-08-10T04:49:00+09:00</updated>
  </info>
  <citation>
    <layout/>
  </citation>
  <bibliography>
    <layout delimiter="; ">
      <group delimiter=" ">
        <text variable="title"/>
        <text variable="page"/>
        <choose>
          <if is-numeric="page">
            <text value="(is-numeric)"/>
          </if>
          <else>
            <text value="(non-numeric)"/>
          </else>
        </choose>
      </group>
    </layout>
  </bibliography>
</style>
```.text

#let bib = init-citation(source, mode: "stable", csl: csl)
#show: show-extcite.with(bib: bib, gen-id: true)

- @a
- @b

#show bibliography: none
#bibliography(bytes(source))

#extbib(bib)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Whitespaces and zeros before numbers are trimmed unexpectedly Fails to accurately print nonnumeric page numbers

1 participant