chaffjs 0.31.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +330 -0
- package/README.md +119 -257
- package/dist/company-kana-spelling.d.ts +31 -0
- package/dist/company-kana-spelling.d.ts.map +1 -0
- package/dist/company-kana-spelling.js +79 -0
- package/dist/company-kana-spelling.js.map +1 -0
- package/dist/company-names.d.ts +32 -1
- package/dist/company-names.d.ts.map +1 -1
- package/dist/company-names.js +129 -22
- package/dist/company-names.js.map +1 -1
- package/dist/contacts/table-rows.d.ts +7 -0
- package/dist/contacts/table-rows.d.ts.map +1 -0
- package/dist/contacts/table-rows.js +42 -0
- package/dist/contacts/table-rows.js.map +1 -0
- package/dist/derived/age-on-date.d.ts +53 -0
- package/dist/derived/age-on-date.d.ts.map +1 -0
- package/dist/derived/age-on-date.js +114 -0
- package/dist/derived/age-on-date.js.map +1 -0
- package/dist/derived/durations.d.ts +17 -2
- package/dist/derived/durations.d.ts.map +1 -1
- package/dist/derived/durations.js +61 -10
- package/dist/derived/durations.js.map +1 -1
- package/dist/derived/hours-and-minutes.d.ts +26 -0
- package/dist/derived/hours-and-minutes.d.ts.map +1 -0
- package/dist/derived/hours-and-minutes.js +24 -0
- package/dist/derived/hours-and-minutes.js.map +1 -0
- package/dist/derived/hyphenated-counts.d.ts +15 -0
- package/dist/derived/hyphenated-counts.d.ts.map +1 -0
- package/dist/derived/hyphenated-counts.js +31 -0
- package/dist/derived/hyphenated-counts.js.map +1 -0
- package/dist/derived/marked-dates.d.ts +15 -0
- package/dist/derived/marked-dates.d.ts.map +1 -0
- package/dist/derived/marked-dates.js +41 -0
- package/dist/derived/marked-dates.js.map +1 -0
- package/dist/derived/money-span.d.ts +9 -0
- package/dist/derived/money-span.d.ts.map +1 -0
- package/dist/derived/money-span.js +6 -0
- package/dist/derived/money-span.js.map +1 -0
- package/dist/derived/period-parts.d.ts +55 -0
- package/dist/derived/period-parts.d.ts.map +1 -0
- package/dist/derived/period-parts.js +283 -0
- package/dist/derived/period-parts.js.map +1 -0
- package/dist/derived/readable-date.d.ts +20 -0
- package/dist/derived/readable-date.d.ts.map +1 -0
- package/dist/derived/readable-date.js +50 -0
- package/dist/derived/readable-date.js.map +1 -0
- package/dist/derived/stays.d.ts +3 -1
- package/dist/derived/stays.d.ts.map +1 -1
- package/dist/derived/stays.js +3 -0
- package/dist/derived/stays.js.map +1 -1
- package/dist/derived/timesheet-hours.d.ts +27 -0
- package/dist/derived/timesheet-hours.d.ts.map +1 -0
- package/dist/derived/timesheet-hours.js +86 -0
- package/dist/derived/timesheet-hours.js.map +1 -0
- package/dist/derived/use-maximum.d.ts +27 -0
- package/dist/derived/use-maximum.d.ts.map +1 -0
- package/dist/derived/use-maximum.js +104 -0
- package/dist/derived/use-maximum.js.map +1 -0
- package/dist/derived/working-hours.d.ts +4 -5
- package/dist/derived/working-hours.d.ts.map +1 -1
- package/dist/detectors/annual-holidays-mismatch.d.ts +3 -0
- package/dist/detectors/annual-holidays-mismatch.d.ts.map +1 -0
- package/dist/detectors/annual-holidays-mismatch.js +29 -0
- package/dist/detectors/annual-holidays-mismatch.js.map +1 -0
- package/dist/detectors/annual-pay-mismatch.d.ts +3 -0
- package/dist/detectors/annual-pay-mismatch.d.ts.map +1 -0
- package/dist/detectors/annual-pay-mismatch.js +52 -0
- package/dist/detectors/annual-pay-mismatch.js.map +1 -0
- package/dist/detectors/blank-structure.d.ts +3 -1
- package/dist/detectors/blank-structure.d.ts.map +1 -1
- package/dist/detectors/blank-structure.js +45 -12
- package/dist/detectors/blank-structure.js.map +1 -1
- package/dist/detectors/bmi-mismatch.d.ts +3 -0
- package/dist/detectors/bmi-mismatch.d.ts.map +1 -0
- package/dist/detectors/bmi-mismatch.js +70 -0
- package/dist/detectors/bmi-mismatch.js.map +1 -0
- package/dist/detectors/change-rate.d.ts.map +1 -1
- package/dist/detectors/change-rate.js +24 -9
- package/dist/detectors/change-rate.js.map +1 -1
- package/dist/detectors/closing-balance-mismatch.d.ts +3 -0
- package/dist/detectors/closing-balance-mismatch.d.ts.map +1 -0
- package/dist/detectors/closing-balance-mismatch.js +42 -0
- package/dist/detectors/closing-balance-mismatch.js.map +1 -0
- package/dist/detectors/contact-variant.d.ts.map +1 -1
- package/dist/detectors/contact-variant.js +6 -2
- package/dist/detectors/contact-variant.js.map +1 -1
- package/dist/detectors/cumulative-below-current.d.ts +3 -0
- package/dist/detectors/cumulative-below-current.d.ts.map +1 -0
- package/dist/detectors/cumulative-below-current.js +25 -0
- package/dist/detectors/cumulative-below-current.js.map +1 -0
- package/dist/detectors/currency-column.d.ts +3 -0
- package/dist/detectors/currency-column.d.ts.map +1 -0
- package/dist/detectors/currency-column.js +32 -0
- package/dist/detectors/currency-column.js.map +1 -0
- package/dist/detectors/date-any-year.d.ts +24 -0
- package/dist/detectors/date-any-year.d.ts.map +1 -0
- package/dist/detectors/date-any-year.js +103 -0
- package/dist/detectors/date-any-year.js.map +1 -0
- package/dist/detectors/date-outside-period.d.ts.map +1 -1
- package/dist/detectors/date-outside-period.js +4 -10
- package/dist/detectors/date-outside-period.js.map +1 -1
- package/dist/detectors/date-stamp-order.d.ts.map +1 -1
- package/dist/detectors/date-stamp-order.js +2 -1
- package/dist/detectors/date-stamp-order.js.map +1 -1
- package/dist/detectors/date-year.d.ts +18 -6
- package/dist/detectors/date-year.d.ts.map +1 -1
- package/dist/detectors/date-year.js +39 -11
- package/dist/detectors/date-year.js.map +1 -1
- package/dist/detectors/deductible-exceeds-limit.d.ts +4 -0
- package/dist/detectors/deductible-exceeds-limit.d.ts.map +1 -0
- package/dist/detectors/deductible-exceeds-limit.js +46 -0
- package/dist/detectors/deductible-exceeds-limit.js.map +1 -0
- package/dist/detectors/defined-term-form.d.ts.map +1 -1
- package/dist/detectors/defined-term-form.js +6 -20
- package/dist/detectors/defined-term-form.js.map +1 -1
- package/dist/detectors/derived-numbers.d.ts +4 -3
- package/dist/detectors/derived-numbers.d.ts.map +1 -1
- package/dist/detectors/derived-numbers.js +43 -70
- package/dist/detectors/derived-numbers.js.map +1 -1
- package/dist/detectors/discount-rate.d.ts +3 -0
- package/dist/detectors/discount-rate.d.ts.map +1 -0
- package/dist/detectors/discount-rate.js +35 -0
- package/dist/detectors/discount-rate.js.map +1 -0
- package/dist/detectors/due-date.d.ts.map +1 -1
- package/dist/detectors/due-date.js +11 -4
- package/dist/detectors/due-date.js.map +1 -1
- package/dist/detectors/email-letter.d.ts +10 -2
- package/dist/detectors/email-letter.d.ts.map +1 -1
- package/dist/detectors/email-letter.js +24 -5
- package/dist/detectors/email-letter.js.map +1 -1
- package/dist/detectors/event-deadline.d.ts.map +1 -1
- package/dist/detectors/event-deadline.js +11 -2
- package/dist/detectors/event-deadline.js.map +1 -1
- package/dist/detectors/fact-consistency.d.ts.map +1 -1
- package/dist/detectors/fact-consistency.js +112 -5
- package/dist/detectors/fact-consistency.js.map +1 -1
- package/dist/detectors/gloss-year.d.ts +11 -0
- package/dist/detectors/gloss-year.d.ts.map +1 -0
- package/dist/detectors/gloss-year.js +14 -0
- package/dist/detectors/gloss-year.js.map +1 -0
- package/dist/detectors/gpa-mismatch.d.ts +3 -0
- package/dist/detectors/gpa-mismatch.d.ts.map +1 -0
- package/dist/detectors/gpa-mismatch.js +39 -0
- package/dist/detectors/gpa-mismatch.js.map +1 -0
- package/dist/detectors/impossible-date.d.ts.map +1 -1
- package/dist/detectors/impossible-date.js +22 -6
- package/dist/detectors/impossible-date.js.map +1 -1
- package/dist/detectors/installment-total-mismatch.d.ts +3 -0
- package/dist/detectors/installment-total-mismatch.d.ts.map +1 -0
- package/dist/detectors/installment-total-mismatch.js +49 -0
- package/dist/detectors/installment-total-mismatch.js.map +1 -0
- package/dist/detectors/interest.d.ts +3 -0
- package/dist/detectors/interest.d.ts.map +1 -0
- package/dist/detectors/interest.js +38 -0
- package/dist/detectors/interest.js.map +1 -0
- package/dist/detectors/lab-columns.d.ts +4 -0
- package/dist/detectors/lab-columns.d.ts.map +1 -0
- package/dist/detectors/lab-columns.js +3 -0
- package/dist/detectors/lab-columns.js.map +1 -0
- package/dist/detectors/labelled-age.d.ts +4 -0
- package/dist/detectors/labelled-age.d.ts.map +1 -0
- package/dist/detectors/labelled-age.js +110 -0
- package/dist/detectors/labelled-age.js.map +1 -0
- package/dist/detectors/line-amount.d.ts.map +1 -1
- package/dist/detectors/line-amount.js +45 -2
- package/dist/detectors/line-amount.js.map +1 -1
- package/dist/detectors/measured-facts.d.ts +1 -1
- package/dist/detectors/measured-facts.d.ts.map +1 -1
- package/dist/detectors/measured-facts.js.map +1 -1
- package/dist/detectors/meter-usage.d.ts +3 -0
- package/dist/detectors/meter-usage.d.ts.map +1 -0
- package/dist/detectors/meter-usage.js +37 -0
- package/dist/detectors/meter-usage.js.map +1 -0
- package/dist/detectors/name-field.d.ts +13 -0
- package/dist/detectors/name-field.d.ts.map +1 -0
- package/dist/detectors/name-field.js +38 -0
- package/dist/detectors/name-field.js.map +1 -0
- package/dist/detectors/name-variant.d.ts.map +1 -1
- package/dist/detectors/name-variant.js +128 -14
- package/dist/detectors/name-variant.js.map +1 -1
- package/dist/detectors/net-amount-mismatch.d.ts +10 -0
- package/dist/detectors/net-amount-mismatch.d.ts.map +1 -0
- package/dist/detectors/net-amount-mismatch.js +70 -0
- package/dist/detectors/net-amount-mismatch.js.map +1 -0
- package/dist/detectors/net-gross-weight.d.ts +3 -0
- package/dist/detectors/net-gross-weight.d.ts.map +1 -0
- package/dist/detectors/net-gross-weight.js +35 -0
- package/dist/detectors/net-gross-weight.js.map +1 -0
- package/dist/detectors/nominal-step.d.ts +3 -0
- package/dist/detectors/nominal-step.d.ts.map +1 -0
- package/dist/detectors/nominal-step.js +28 -0
- package/dist/detectors/nominal-step.js.map +1 -0
- package/dist/detectors/number-style.d.ts +2 -0
- package/dist/detectors/number-style.d.ts.map +1 -1
- package/dist/detectors/number-style.js +8 -2
- package/dist/detectors/number-style.js.map +1 -1
- package/dist/detectors/order-quantity.d.ts +10 -0
- package/dist/detectors/order-quantity.d.ts.map +1 -0
- package/dist/detectors/order-quantity.js +35 -0
- package/dist/detectors/order-quantity.js.map +1 -0
- package/dist/detectors/orthographic-variant.d.ts.map +1 -1
- package/dist/detectors/orthographic-variant.js +35 -10
- package/dist/detectors/orthographic-variant.js.map +1 -1
- package/dist/detectors/orthography.d.ts.map +1 -1
- package/dist/detectors/orthography.js +15 -7
- package/dist/detectors/orthography.js.map +1 -1
- package/dist/detectors/period-label-conflict.d.ts +4 -0
- package/dist/detectors/period-label-conflict.d.ts.map +1 -0
- package/dist/detectors/period-label-conflict.js +34 -0
- package/dist/detectors/period-label-conflict.js.map +1 -0
- package/dist/detectors/period-multiple-mismatch.d.ts +3 -0
- package/dist/detectors/period-multiple-mismatch.d.ts.map +1 -0
- package/dist/detectors/period-multiple-mismatch.js +36 -0
- package/dist/detectors/period-multiple-mismatch.js.map +1 -0
- package/dist/detectors/period-part.d.ts +4 -0
- package/dist/detectors/period-part.d.ts.map +1 -0
- package/dist/detectors/period-part.js +58 -0
- package/dist/detectors/period-part.js.map +1 -0
- package/dist/detectors/range-words.d.ts +5 -0
- package/dist/detectors/range-words.d.ts.map +1 -0
- package/dist/detectors/range-words.js +14 -0
- package/dist/detectors/range-words.js.map +1 -0
- package/dist/detectors/ratio-mismatch.d.ts +7 -0
- package/dist/detectors/ratio-mismatch.d.ts.map +1 -0
- package/dist/detectors/ratio-mismatch.js +89 -0
- package/dist/detectors/ratio-mismatch.js.map +1 -0
- package/dist/detectors/readable-dates.d.ts +9 -0
- package/dist/detectors/readable-dates.d.ts.map +1 -0
- package/dist/detectors/readable-dates.js +23 -0
- package/dist/detectors/readable-dates.js.map +1 -0
- package/dist/detectors/reference-flag.d.ts +3 -0
- package/dist/detectors/reference-flag.d.ts.map +1 -0
- package/dist/detectors/reference-flag.js +31 -0
- package/dist/detectors/reference-flag.js.map +1 -0
- package/dist/detectors/reference-number-repeated.d.ts +3 -0
- package/dist/detectors/reference-number-repeated.d.ts.map +1 -0
- package/dist/detectors/reference-number-repeated.js +22 -0
- package/dist/detectors/reference-number-repeated.js.map +1 -0
- package/dist/detectors/reference-number-variant.d.ts +3 -0
- package/dist/detectors/reference-number-variant.d.ts.map +1 -0
- package/dist/detectors/reference-number-variant.js +40 -0
- package/dist/detectors/reference-number-variant.js.map +1 -0
- package/dist/detectors/reference-unit.d.ts +3 -0
- package/dist/detectors/reference-unit.d.ts.map +1 -0
- package/dist/detectors/reference-unit.js +19 -0
- package/dist/detectors/reference-unit.js.map +1 -0
- package/dist/detectors/registry/annual-holidays-mismatch.d.ts +3 -0
- package/dist/detectors/registry/annual-holidays-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/annual-holidays-mismatch.js +3 -0
- package/dist/detectors/registry/annual-holidays-mismatch.js.map +1 -0
- package/dist/detectors/registry/annual-pay-mismatch.d.ts +3 -0
- package/dist/detectors/registry/annual-pay-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/annual-pay-mismatch.js +3 -0
- package/dist/detectors/registry/annual-pay-mismatch.js.map +1 -0
- package/dist/detectors/registry/backorder-mismatch.d.ts +3 -0
- package/dist/detectors/registry/backorder-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/backorder-mismatch.js +3 -0
- package/dist/detectors/registry/backorder-mismatch.js.map +1 -0
- package/dist/detectors/registry/bmi-mismatch.d.ts +3 -0
- package/dist/detectors/registry/bmi-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/bmi-mismatch.js +3 -0
- package/dist/detectors/registry/bmi-mismatch.js.map +1 -0
- package/dist/detectors/registry/closing-balance-mismatch.d.ts +3 -0
- package/dist/detectors/registry/closing-balance-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/closing-balance-mismatch.js +3 -0
- package/dist/detectors/registry/closing-balance-mismatch.js.map +1 -0
- package/dist/detectors/registry/cumulative-below-current.d.ts +3 -0
- package/dist/detectors/registry/cumulative-below-current.d.ts.map +1 -0
- package/dist/detectors/registry/cumulative-below-current.js +3 -0
- package/dist/detectors/registry/cumulative-below-current.js.map +1 -0
- package/dist/detectors/registry/currency-column-mix.d.ts +3 -0
- package/dist/detectors/registry/currency-column-mix.d.ts.map +1 -0
- package/dist/detectors/registry/currency-column-mix.js +3 -0
- package/dist/detectors/registry/currency-column-mix.js.map +1 -0
- package/dist/detectors/registry/deductible-exceeds-limit.d.ts +3 -0
- package/dist/detectors/registry/deductible-exceeds-limit.d.ts.map +1 -0
- package/dist/detectors/registry/deductible-exceeds-limit.js +3 -0
- package/dist/detectors/registry/deductible-exceeds-limit.js.map +1 -0
- package/dist/detectors/registry/delivered-over-ordered.d.ts +3 -0
- package/dist/detectors/registry/delivered-over-ordered.d.ts.map +1 -0
- package/dist/detectors/registry/delivered-over-ordered.js +3 -0
- package/dist/detectors/registry/delivered-over-ordered.js.map +1 -0
- package/dist/detectors/registry/discount-rate.d.ts +3 -0
- package/dist/detectors/registry/discount-rate.d.ts.map +1 -0
- package/dist/detectors/registry/discount-rate.js +3 -0
- package/dist/detectors/registry/discount-rate.js.map +1 -0
- package/dist/detectors/registry/elapsed-years-mismatch.js +1 -1
- package/dist/detectors/registry/elapsed-years-mismatch.js.map +1 -1
- package/dist/detectors/registry/gpa-mismatch.d.ts +3 -0
- package/dist/detectors/registry/gpa-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/gpa-mismatch.js +3 -0
- package/dist/detectors/registry/gpa-mismatch.js.map +1 -0
- package/dist/detectors/registry/installment-total-mismatch.d.ts +3 -0
- package/dist/detectors/registry/installment-total-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/installment-total-mismatch.js +3 -0
- package/dist/detectors/registry/installment-total-mismatch.js.map +1 -0
- package/dist/detectors/registry/interest.d.ts +3 -0
- package/dist/detectors/registry/interest.d.ts.map +1 -0
- package/dist/detectors/registry/interest.js +3 -0
- package/dist/detectors/registry/interest.js.map +1 -0
- package/dist/detectors/registry/meter-usage.d.ts +3 -0
- package/dist/detectors/registry/meter-usage.d.ts.map +1 -0
- package/dist/detectors/registry/meter-usage.js +3 -0
- package/dist/detectors/registry/meter-usage.js.map +1 -0
- package/dist/detectors/registry/net-amount-mismatch.d.ts +3 -0
- package/dist/detectors/registry/net-amount-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/net-amount-mismatch.js +3 -0
- package/dist/detectors/registry/net-amount-mismatch.js.map +1 -0
- package/dist/detectors/registry/net-over-gross.d.ts +3 -0
- package/dist/detectors/registry/net-over-gross.d.ts.map +1 -0
- package/dist/detectors/registry/net-over-gross.js +3 -0
- package/dist/detectors/registry/net-over-gross.js.map +1 -0
- package/dist/detectors/registry/period-label-conflict.d.ts +3 -0
- package/dist/detectors/registry/period-label-conflict.d.ts.map +1 -0
- package/dist/detectors/registry/period-label-conflict.js +3 -0
- package/dist/detectors/registry/period-label-conflict.js.map +1 -0
- package/dist/detectors/registry/period-multiple-mismatch.d.ts +3 -0
- package/dist/detectors/registry/period-multiple-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/period-multiple-mismatch.js +3 -0
- package/dist/detectors/registry/period-multiple-mismatch.js.map +1 -0
- package/dist/detectors/registry/period-part-exceeds-whole.d.ts +3 -0
- package/dist/detectors/registry/period-part-exceeds-whole.d.ts.map +1 -0
- package/dist/detectors/registry/period-part-exceeds-whole.js +3 -0
- package/dist/detectors/registry/period-part-exceeds-whole.js.map +1 -0
- package/dist/detectors/registry/product-exceeds-maximum.d.ts +3 -0
- package/dist/detectors/registry/product-exceeds-maximum.d.ts.map +1 -0
- package/dist/detectors/registry/product-exceeds-maximum.js +3 -0
- package/dist/detectors/registry/product-exceeds-maximum.js.map +1 -0
- package/dist/detectors/registry/ratio-mismatch.d.ts +3 -0
- package/dist/detectors/registry/ratio-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/ratio-mismatch.js +3 -0
- package/dist/detectors/registry/ratio-mismatch.js.map +1 -0
- package/dist/detectors/registry/reference-flag-mismatch.d.ts +3 -0
- package/dist/detectors/registry/reference-flag-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/reference-flag-mismatch.js +3 -0
- package/dist/detectors/registry/reference-flag-mismatch.js.map +1 -0
- package/dist/detectors/registry/reference-number-repeated.d.ts +3 -0
- package/dist/detectors/registry/reference-number-repeated.d.ts.map +1 -0
- package/dist/detectors/registry/reference-number-repeated.js +3 -0
- package/dist/detectors/registry/reference-number-repeated.js.map +1 -0
- package/dist/detectors/registry/reference-number-variant.d.ts +3 -0
- package/dist/detectors/registry/reference-number-variant.d.ts.map +1 -0
- package/dist/detectors/registry/reference-number-variant.js +3 -0
- package/dist/detectors/registry/reference-number-variant.js.map +1 -0
- package/dist/detectors/registry/reference-unit.d.ts +3 -0
- package/dist/detectors/registry/reference-unit.d.ts.map +1 -0
- package/dist/detectors/registry/reference-unit.js +3 -0
- package/dist/detectors/registry/reference-unit.js.map +1 -0
- package/dist/detectors/registry/revision-direction.d.ts +3 -0
- package/dist/detectors/registry/revision-direction.d.ts.map +1 -0
- package/dist/detectors/registry/revision-direction.js +3 -0
- package/dist/detectors/registry/revision-direction.js.map +1 -0
- package/dist/detectors/registry/running-balance.d.ts +3 -0
- package/dist/detectors/registry/running-balance.d.ts.map +1 -0
- package/dist/detectors/registry/running-balance.js +3 -0
- package/dist/detectors/registry/running-balance.js.map +1 -0
- package/dist/detectors/registry/serial-range.d.ts +3 -0
- package/dist/detectors/registry/serial-range.d.ts.map +1 -0
- package/dist/detectors/registry/serial-range.js +3 -0
- package/dist/detectors/registry/serial-range.js.map +1 -0
- package/dist/detectors/registry/share-amount.d.ts +3 -0
- package/dist/detectors/registry/share-amount.d.ts.map +1 -0
- package/dist/detectors/registry/share-amount.js +3 -0
- package/dist/detectors/registry/share-amount.js.map +1 -0
- package/dist/detectors/registry/table-unit-mix.d.ts +3 -0
- package/dist/detectors/registry/table-unit-mix.d.ts.map +1 -0
- package/dist/detectors/registry/table-unit-mix.js +3 -0
- package/dist/detectors/registry/table-unit-mix.js.map +1 -0
- package/dist/detectors/registry/tier-threshold.d.ts +3 -0
- package/dist/detectors/registry/tier-threshold.d.ts.map +1 -0
- package/dist/detectors/registry/tier-threshold.js +3 -0
- package/dist/detectors/registry/tier-threshold.js.map +1 -0
- package/dist/detectors/registry/variance-mismatch.d.ts +3 -0
- package/dist/detectors/registry/variance-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/variance-mismatch.js +3 -0
- package/dist/detectors/registry/variance-mismatch.js.map +1 -0
- package/dist/detectors/relative-dates.d.ts.map +1 -1
- package/dist/detectors/relative-dates.js +2 -1
- package/dist/detectors/relative-dates.js.map +1 -1
- package/dist/detectors/relative-day-words.d.ts.map +1 -1
- package/dist/detectors/relative-day-words.js +2 -1
- package/dist/detectors/relative-day-words.js.map +1 -1
- package/dist/detectors/rent-multiple-mismatch.d.ts.map +1 -1
- package/dist/detectors/rent-multiple-mismatch.js.map +1 -1
- package/dist/detectors/request-owner.d.ts +3 -1
- package/dist/detectors/request-owner.d.ts.map +1 -1
- package/dist/detectors/request-owner.js +5 -2
- package/dist/detectors/request-owner.js.map +1 -1
- package/dist/detectors/revision-direction.d.ts +3 -0
- package/dist/detectors/revision-direction.d.ts.map +1 -0
- package/dist/detectors/revision-direction.js +32 -0
- package/dist/detectors/revision-direction.js.map +1 -0
- package/dist/detectors/row-sentence-amounts.d.ts +5 -0
- package/dist/detectors/row-sentence-amounts.d.ts.map +1 -0
- package/dist/detectors/row-sentence-amounts.js +71 -0
- package/dist/detectors/row-sentence-amounts.js.map +1 -0
- package/dist/detectors/running-balance.d.ts +3 -0
- package/dist/detectors/running-balance.d.ts.map +1 -0
- package/dist/detectors/running-balance.js +26 -0
- package/dist/detectors/running-balance.js.map +1 -0
- package/dist/detectors/scaled-quantity.js +1 -1
- package/dist/detectors/scaled-quantity.js.map +1 -1
- package/dist/detectors/serial-range.d.ts +3 -0
- package/dist/detectors/serial-range.d.ts.map +1 -0
- package/dist/detectors/serial-range.js +29 -0
- package/dist/detectors/serial-range.js.map +1 -0
- package/dist/detectors/share-amount.d.ts +3 -0
- package/dist/detectors/share-amount.d.ts.map +1 -0
- package/dist/detectors/share-amount.js +45 -0
- package/dist/detectors/share-amount.js.map +1 -0
- package/dist/detectors/structure-tree.d.ts.map +1 -1
- package/dist/detectors/structure-tree.js +42 -10
- package/dist/detectors/structure-tree.js.map +1 -1
- package/dist/detectors/table-scale.d.ts +3 -0
- package/dist/detectors/table-scale.d.ts.map +1 -0
- package/dist/detectors/table-scale.js +32 -0
- package/dist/detectors/table-scale.js.map +1 -0
- package/dist/detectors/tax-amount.d.ts.map +1 -1
- package/dist/detectors/tax-amount.js +34 -10
- package/dist/detectors/tax-amount.js.map +1 -1
- package/dist/detectors/technical-docs.d.ts +1 -1
- package/dist/detectors/technical-docs.d.ts.map +1 -1
- package/dist/detectors/technical-docs.js +3 -2
- package/dist/detectors/technical-docs.js.map +1 -1
- package/dist/detectors/tier-threshold.d.ts +3 -0
- package/dist/detectors/tier-threshold.d.ts.map +1 -0
- package/dist/detectors/tier-threshold.js +86 -0
- package/dist/detectors/tier-threshold.js.map +1 -0
- package/dist/detectors/time-order.d.ts +1 -0
- package/dist/detectors/time-order.d.ts.map +1 -1
- package/dist/detectors/time-order.js +43 -13
- package/dist/detectors/time-order.js.map +1 -1
- package/dist/detectors/use-maximum.d.ts +3 -0
- package/dist/detectors/use-maximum.d.ts.map +1 -0
- package/dist/detectors/use-maximum.js +32 -0
- package/dist/detectors/use-maximum.js.map +1 -0
- package/dist/detectors/variance.d.ts +3 -0
- package/dist/detectors/variance.d.ts.map +1 -0
- package/dist/detectors/variance.js +28 -0
- package/dist/detectors/variance.js.map +1 -0
- package/dist/detectors/whole-count-findings.d.ts +4 -0
- package/dist/detectors/whole-count-findings.d.ts.map +1 -0
- package/dist/detectors/whole-count-findings.js +38 -0
- package/dist/detectors/whole-count-findings.js.map +1 -0
- package/dist/detectors/working-hours-findings.d.ts +9 -0
- package/dist/detectors/working-hours-findings.d.ts.map +1 -0
- package/dist/detectors/working-hours-findings.js +79 -0
- package/dist/detectors/working-hours-findings.js.map +1 -0
- package/dist/facts/age-values.d.ts +22 -0
- package/dist/facts/age-values.d.ts.map +1 -0
- package/dist/facts/age-values.js +76 -0
- package/dist/facts/age-values.js.map +1 -0
- package/dist/facts/cell-keys.d.ts +12 -0
- package/dist/facts/cell-keys.d.ts.map +1 -0
- package/dist/facts/cell-keys.js +19 -0
- package/dist/facts/cell-keys.js.map +1 -0
- package/dist/facts/count-labels.d.ts +15 -0
- package/dist/facts/count-labels.d.ts.map +1 -0
- package/dist/facts/count-labels.js +19 -0
- package/dist/facts/count-labels.js.map +1 -0
- package/dist/facts/document-terms.d.ts +43 -0
- package/dist/facts/document-terms.d.ts.map +1 -0
- package/dist/facts/document-terms.js +74 -0
- package/dist/facts/document-terms.js.map +1 -0
- package/dist/facts/duration-scale.d.ts +11 -0
- package/dist/facts/duration-scale.d.ts.map +1 -0
- package/dist/facts/duration-scale.js +14 -0
- package/dist/facts/duration-scale.js.map +1 -0
- package/dist/facts/duration-values.d.ts +15 -0
- package/dist/facts/duration-values.d.ts.map +1 -0
- package/dist/facts/duration-values.js +29 -0
- package/dist/facts/duration-values.js.map +1 -0
- package/dist/facts/fact-values.d.ts +9 -1
- package/dist/facts/fact-values.d.ts.map +1 -1
- package/dist/facts/fact-values.js +19 -6
- package/dist/facts/fact-values.js.map +1 -1
- package/dist/facts/labelled-facts.d.ts +15 -1
- package/dist/facts/labelled-facts.d.ts.map +1 -1
- package/dist/facts/labelled-facts.js +51 -8
- package/dist/facts/labelled-facts.js.map +1 -1
- package/dist/facts/measure-units.d.ts.map +1 -1
- package/dist/facts/measure-units.js +23 -8
- package/dist/facts/measure-units.js.map +1 -1
- package/dist/facts/measures.js +11 -9
- package/dist/facts/measures.js.map +1 -1
- package/dist/facts/qualified-labels.d.ts +28 -0
- package/dist/facts/qualified-labels.d.ts.map +1 -0
- package/dist/facts/qualified-labels.js +96 -0
- package/dist/facts/qualified-labels.js.map +1 -0
- package/dist/facts/rate-values.d.ts +40 -0
- package/dist/facts/rate-values.d.ts.map +1 -0
- package/dist/facts/rate-values.js +68 -0
- package/dist/facts/rate-values.js.map +1 -0
- package/dist/facts/row-sentence-amounts.d.ts +51 -0
- package/dist/facts/row-sentence-amounts.d.ts.map +1 -0
- package/dist/facts/row-sentence-amounts.js +71 -0
- package/dist/facts/row-sentence-amounts.js.map +1 -0
- package/dist/facts/superscript-power.d.ts +3 -0
- package/dist/facts/superscript-power.d.ts.map +1 -0
- package/dist/facts/superscript-power.js +5 -0
- package/dist/facts/superscript-power.js.map +1 -0
- package/dist/facts/table-facts.d.ts +18 -2
- package/dist/facts/table-facts.d.ts.map +1 -1
- package/dist/facts/table-facts.js +16 -6
- package/dist/facts/table-facts.js.map +1 -1
- package/dist/facts/term-values.d.ts +34 -0
- package/dist/facts/term-values.d.ts.map +1 -0
- package/dist/facts/term-values.js +195 -0
- package/dist/facts/term-values.js.map +1 -0
- package/dist/facts/unit-word.d.ts +5 -0
- package/dist/facts/unit-word.d.ts.map +1 -1
- package/dist/facts/unit-word.js +9 -0
- package/dist/facts/unit-word.js.map +1 -1
- package/dist/facts/verb-quantity-facts.d.ts +22 -0
- package/dist/facts/verb-quantity-facts.d.ts.map +1 -0
- package/dist/facts/verb-quantity-facts.js +58 -0
- package/dist/facts/verb-quantity-facts.js.map +1 -0
- package/dist/facts/whole-counts.d.ts +58 -0
- package/dist/facts/whole-counts.d.ts.map +1 -0
- package/dist/facts/whole-counts.js +118 -0
- package/dist/facts/whole-counts.js.map +1 -0
- package/dist/name-char-reading.d.ts +16 -0
- package/dist/name-char-reading.d.ts.map +1 -0
- package/dist/name-char-reading.js +18 -0
- package/dist/name-char-reading.js.map +1 -0
- package/dist/name-line-block.d.ts +6 -0
- package/dist/name-line-block.d.ts.map +1 -0
- package/dist/name-line-block.js +35 -0
- package/dist/name-line-block.js.map +1 -0
- package/dist/name-lookalike-chars.d.ts +16 -0
- package/dist/name-lookalike-chars.d.ts.map +1 -0
- package/dist/name-lookalike-chars.js +41 -0
- package/dist/name-lookalike-chars.js.map +1 -0
- package/dist/name-neighbours.d.ts +7 -0
- package/dist/name-neighbours.d.ts.map +1 -0
- package/dist/name-neighbours.js +55 -0
- package/dist/name-neighbours.js.map +1 -0
- package/dist/name-ordinary-word.d.ts +13 -0
- package/dist/name-ordinary-word.d.ts.map +1 -0
- package/dist/name-ordinary-word.js +54 -0
- package/dist/name-ordinary-word.js.map +1 -0
- package/dist/name-person.d.ts +9 -0
- package/dist/name-person.d.ts.map +1 -0
- package/dist/name-person.js +25 -0
- package/dist/name-person.js.map +1 -0
- package/dist/name-separator.d.ts +14 -0
- package/dist/name-separator.d.ts.map +1 -0
- package/dist/name-separator.js +33 -0
- package/dist/name-separator.js.map +1 -0
- package/dist/name-variants.d.ts +8 -8
- package/dist/name-variants.d.ts.map +1 -1
- package/dist/name-variants.js +28 -81
- package/dist/name-variants.js.map +1 -1
- package/dist/name-weight.d.ts +10 -0
- package/dist/name-weight.d.ts.map +1 -0
- package/dist/name-weight.js +7 -0
- package/dist/name-weight.js.map +1 -0
- package/dist/person-field.d.ts +6 -0
- package/dist/person-field.d.ts.map +1 -0
- package/dist/person-field.js +40 -0
- package/dist/person-field.js.map +1 -0
- package/dist/person-full-name.d.ts +12 -0
- package/dist/person-full-name.d.ts.map +1 -0
- package/dist/person-full-name.js +52 -0
- package/dist/person-full-name.js.map +1 -0
- package/dist/phone-numbers.d.ts +23 -3
- package/dist/phone-numbers.d.ts.map +1 -1
- package/dist/phone-numbers.js +49 -21
- package/dist/phone-numbers.js.map +1 -1
- package/dist/plugin.d.ts +2 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/product-names.d.ts +33 -0
- package/dist/product-names.d.ts.map +1 -0
- package/dist/product-names.js +74 -0
- package/dist/product-names.js.map +1 -0
- package/dist/reference-numbers.d.ts +26 -0
- package/dist/reference-numbers.d.ts.map +1 -0
- package/dist/reference-numbers.js +43 -0
- package/dist/reference-numbers.js.map +1 -0
- package/dist/spaced-person-name.d.ts +17 -0
- package/dist/spaced-person-name.d.ts.map +1 -0
- package/dist/spaced-person-name.js +82 -0
- package/dist/spaced-person-name.js.map +1 -0
- package/dist/spacing-code.d.ts +1 -0
- package/dist/spacing-code.d.ts.map +1 -1
- package/dist/spacing-code.js +15 -1
- package/dist/spacing-code.js.map +1 -1
- package/dist/structure/annual-holidays.d.ts +56 -0
- package/dist/structure/annual-holidays.d.ts.map +1 -0
- package/dist/structure/annual-holidays.js +159 -0
- package/dist/structure/annual-holidays.js.map +1 -0
- package/dist/structure/annual-pay.d.ts +97 -0
- package/dist/structure/annual-pay.d.ts.map +1 -0
- package/dist/structure/annual-pay.js +236 -0
- package/dist/structure/annual-pay.js.map +1 -0
- package/dist/structure/bmi.d.ts +63 -0
- package/dist/structure/bmi.d.ts.map +1 -0
- package/dist/structure/bmi.js +106 -0
- package/dist/structure/bmi.js.map +1 -0
- package/dist/structure/change-rate-table.d.ts +46 -0
- package/dist/structure/change-rate-table.d.ts.map +1 -0
- package/dist/structure/change-rate-table.js +110 -0
- package/dist/structure/change-rate-table.js.map +1 -0
- package/dist/structure/change-rate.d.ts +13 -1
- package/dist/structure/change-rate.d.ts.map +1 -1
- package/dist/structure/change-rate.js +51 -19
- package/dist/structure/change-rate.js.map +1 -1
- package/dist/structure/closing-balance.d.ts +24 -0
- package/dist/structure/closing-balance.d.ts.map +1 -0
- package/dist/structure/closing-balance.js +79 -0
- package/dist/structure/closing-balance.js.map +1 -0
- package/dist/structure/column-date-order.d.ts +5 -0
- package/dist/structure/column-date-order.d.ts.map +1 -0
- package/dist/structure/column-date-order.js +57 -0
- package/dist/structure/column-date-order.js.map +1 -0
- package/dist/structure/compound-hours.d.ts +5 -0
- package/dist/structure/compound-hours.d.ts.map +1 -0
- package/dist/structure/compound-hours.js +45 -0
- package/dist/structure/compound-hours.js.map +1 -0
- package/dist/structure/cumulative-below-current.d.ts +21 -0
- package/dist/structure/cumulative-below-current.d.ts.map +1 -0
- package/dist/structure/cumulative-below-current.js +48 -0
- package/dist/structure/cumulative-below-current.js.map +1 -0
- package/dist/structure/currency-column.d.ts +21 -0
- package/dist/structure/currency-column.d.ts.map +1 -0
- package/dist/structure/currency-column.js +74 -0
- package/dist/structure/currency-column.js.map +1 -0
- package/dist/structure/date-deadline-mark.d.ts +15 -0
- package/dist/structure/date-deadline-mark.d.ts.map +1 -0
- package/dist/structure/date-deadline-mark.js +22 -0
- package/dist/structure/date-deadline-mark.js.map +1 -0
- package/dist/structure/date-outside-period.d.ts +5 -1
- package/dist/structure/date-outside-period.d.ts.map +1 -1
- package/dist/structure/date-outside-period.js +13 -9
- package/dist/structure/date-outside-period.js.map +1 -1
- package/dist/structure/date-range.d.ts +2 -1
- package/dist/structure/date-range.d.ts.map +1 -1
- package/dist/structure/date-range.js +4 -6
- package/dist/structure/date-range.js.map +1 -1
- package/dist/structure/deadline-after-event.d.ts +35 -2
- package/dist/structure/deadline-after-event.d.ts.map +1 -1
- package/dist/structure/deadline-after-event.js +77 -6
- package/dist/structure/deadline-after-event.js.map +1 -1
- package/dist/structure/deductible-limit.d.ts +69 -0
- package/dist/structure/deductible-limit.d.ts.map +1 -0
- package/dist/structure/deductible-limit.js +191 -0
- package/dist/structure/deductible-limit.js.map +1 -0
- package/dist/structure/discount-rate.d.ts +35 -0
- package/dist/structure/discount-rate.d.ts.map +1 -0
- package/dist/structure/discount-rate.js +172 -0
- package/dist/structure/discount-rate.js.map +1 -0
- package/dist/structure/generic-role.d.ts +2 -0
- package/dist/structure/generic-role.d.ts.map +1 -0
- package/dist/structure/generic-role.js +8 -0
- package/dist/structure/generic-role.js.map +1 -0
- package/dist/structure/gpa.d.ts +74 -0
- package/dist/structure/gpa.d.ts.map +1 -0
- package/dist/structure/gpa.js +170 -0
- package/dist/structure/gpa.js.map +1 -0
- package/dist/structure/installment-total.d.ts +110 -0
- package/dist/structure/installment-total.d.ts.map +1 -0
- package/dist/structure/installment-total.js +224 -0
- package/dist/structure/installment-total.js.map +1 -0
- package/dist/structure/interest.d.ts +22 -0
- package/dist/structure/interest.d.ts.map +1 -0
- package/dist/structure/interest.js +107 -0
- package/dist/structure/interest.js.map +1 -0
- package/dist/structure/key-value-row.d.ts +14 -0
- package/dist/structure/key-value-row.d.ts.map +1 -0
- package/dist/structure/key-value-row.js +38 -0
- package/dist/structure/key-value-row.js.map +1 -0
- package/dist/structure/lab-columns.d.ts +12 -0
- package/dist/structure/lab-columns.d.ts.map +1 -0
- package/dist/structure/lab-columns.js +11 -0
- package/dist/structure/lab-columns.js.map +1 -0
- package/dist/structure/labelled-date-order.d.ts +33 -16
- package/dist/structure/labelled-date-order.d.ts.map +1 -1
- package/dist/structure/labelled-date-order.js +38 -30
- package/dist/structure/labelled-date-order.js.map +1 -1
- package/dist/structure/labelled-order.d.ts +59 -0
- package/dist/structure/labelled-order.d.ts.map +1 -0
- package/dist/structure/labelled-order.js +65 -0
- package/dist/structure/labelled-order.js.map +1 -0
- package/dist/structure/labelled-time-order.d.ts +17 -0
- package/dist/structure/labelled-time-order.d.ts.map +1 -0
- package/dist/structure/labelled-time-order.js +79 -0
- package/dist/structure/labelled-time-order.js.map +1 -0
- package/dist/structure/line-amount-label.d.ts +31 -0
- package/dist/structure/line-amount-label.d.ts.map +1 -0
- package/dist/structure/line-amount-label.js +77 -0
- package/dist/structure/line-amount-label.js.map +1 -0
- package/dist/structure/line-amount-rate.d.ts +47 -0
- package/dist/structure/line-amount-rate.d.ts.map +1 -0
- package/dist/structure/line-amount-rate.js +141 -0
- package/dist/structure/line-amount-rate.js.map +1 -0
- package/dist/structure/line-amount-unit.d.ts +7 -0
- package/dist/structure/line-amount-unit.d.ts.map +1 -1
- package/dist/structure/line-amount-unit.js +11 -0
- package/dist/structure/line-amount-unit.js.map +1 -1
- package/dist/structure/line-amount.d.ts +33 -7
- package/dist/structure/line-amount.d.ts.map +1 -1
- package/dist/structure/line-amount.js +152 -42
- package/dist/structure/line-amount.js.map +1 -1
- package/dist/structure/meter-usage-read.d.ts +21 -0
- package/dist/structure/meter-usage-read.d.ts.map +1 -0
- package/dist/structure/meter-usage-read.js +116 -0
- package/dist/structure/meter-usage-read.js.map +1 -0
- package/dist/structure/meter-usage.d.ts +62 -0
- package/dist/structure/meter-usage.d.ts.map +1 -0
- package/dist/structure/meter-usage.js +157 -0
- package/dist/structure/meter-usage.js.map +1 -0
- package/dist/structure/net-amount.d.ts +81 -0
- package/dist/structure/net-amount.d.ts.map +1 -0
- package/dist/structure/net-amount.js +161 -0
- package/dist/structure/net-amount.js.map +1 -0
- package/dist/structure/net-gross-weight.d.ts +30 -0
- package/dist/structure/net-gross-weight.d.ts.map +1 -0
- package/dist/structure/net-gross-weight.js +79 -0
- package/dist/structure/net-gross-weight.js.map +1 -0
- package/dist/structure/order-quantity.d.ts +38 -0
- package/dist/structure/order-quantity.d.ts.map +1 -0
- package/dist/structure/order-quantity.js +104 -0
- package/dist/structure/order-quantity.js.map +1 -0
- package/dist/structure/party-role.d.ts.map +1 -1
- package/dist/structure/party-role.js +4 -1
- package/dist/structure/party-role.js.map +1 -1
- package/dist/structure/percent-sum.d.ts +2 -0
- package/dist/structure/percent-sum.d.ts.map +1 -1
- package/dist/structure/percent-sum.js +2 -0
- package/dist/structure/percent-sum.js.map +1 -1
- package/dist/structure/period-label-conflict.d.ts +52 -0
- package/dist/structure/period-label-conflict.d.ts.map +1 -0
- package/dist/structure/period-label-conflict.js +105 -0
- package/dist/structure/period-label-conflict.js.map +1 -0
- package/dist/structure/period-labels.d.ts +36 -0
- package/dist/structure/period-labels.d.ts.map +1 -0
- package/dist/structure/period-labels.js +86 -0
- package/dist/structure/period-labels.js.map +1 -0
- package/dist/structure/period-multiple.d.ts +46 -0
- package/dist/structure/period-multiple.d.ts.map +1 -0
- package/dist/structure/period-multiple.js +123 -0
- package/dist/structure/period-multiple.js.map +1 -0
- package/dist/structure/quantity-range.d.ts.map +1 -1
- package/dist/structure/quantity-range.js +1 -5
- package/dist/structure/quantity-range.js.map +1 -1
- package/dist/structure/range-bands.d.ts +2 -0
- package/dist/structure/range-bands.d.ts.map +1 -1
- package/dist/structure/range-bands.js +1 -1
- package/dist/structure/range-bands.js.map +1 -1
- package/dist/structure/range-years.d.ts +18 -0
- package/dist/structure/range-years.d.ts.map +1 -0
- package/dist/structure/range-years.js +60 -0
- package/dist/structure/range-years.js.map +1 -0
- package/dist/structure/ratio.d.ts +136 -0
- package/dist/structure/ratio.d.ts.map +1 -0
- package/dist/structure/ratio.js +214 -0
- package/dist/structure/ratio.js.map +1 -0
- package/dist/structure/reference-flags.d.ts +55 -0
- package/dist/structure/reference-flags.d.ts.map +1 -0
- package/dist/structure/reference-flags.js +116 -0
- package/dist/structure/reference-flags.js.map +1 -0
- package/dist/structure/reference-number-repeated.d.ts +12 -0
- package/dist/structure/reference-number-repeated.d.ts.map +1 -0
- package/dist/structure/reference-number-repeated.js +43 -0
- package/dist/structure/reference-number-repeated.js.map +1 -0
- package/dist/structure/reference-unit.d.ts +24 -0
- package/dist/structure/reference-unit.d.ts.map +1 -0
- package/dist/structure/reference-unit.js +80 -0
- package/dist/structure/reference-unit.js.map +1 -0
- package/dist/structure/rent-multiple.d.ts +2 -22
- package/dist/structure/rent-multiple.d.ts.map +1 -1
- package/dist/structure/rent-multiple.js +2 -49
- package/dist/structure/rent-multiple.js.map +1 -1
- package/dist/structure/revision-direction.d.ts +51 -0
- package/dist/structure/revision-direction.d.ts.map +1 -0
- package/dist/structure/revision-direction.js +163 -0
- package/dist/structure/revision-direction.js.map +1 -0
- package/dist/structure/running-balance.d.ts +36 -0
- package/dist/structure/running-balance.d.ts.map +1 -0
- package/dist/structure/running-balance.js +126 -0
- package/dist/structure/running-balance.js.map +1 -0
- package/dist/structure/scaled-quantities.d.ts +1 -1
- package/dist/structure/scaled-quantities.d.ts.map +1 -1
- package/dist/structure/scaled-quantities.js +23 -6
- package/dist/structure/scaled-quantities.js.map +1 -1
- package/dist/structure/serial-range.d.ts +9 -0
- package/dist/structure/serial-range.d.ts.map +1 -0
- package/dist/structure/serial-range.js +41 -0
- package/dist/structure/serial-range.js.map +1 -0
- package/dist/structure/share-amount.d.ts +55 -0
- package/dist/structure/share-amount.d.ts.map +1 -0
- package/dist/structure/share-amount.js +162 -0
- package/dist/structure/share-amount.js.map +1 -0
- package/dist/structure/shift-times.d.ts +32 -0
- package/dist/structure/shift-times.d.ts.map +1 -0
- package/dist/structure/shift-times.js +112 -0
- package/dist/structure/shift-times.js.map +1 -0
- package/dist/structure/span-label.d.ts +3 -0
- package/dist/structure/span-label.d.ts.map +1 -0
- package/dist/structure/span-label.js +27 -0
- package/dist/structure/span-label.js.map +1 -0
- package/dist/structure/stated-multiple.d.ts +39 -0
- package/dist/structure/stated-multiple.d.ts.map +1 -0
- package/dist/structure/stated-multiple.js +49 -0
- package/dist/structure/stated-multiple.js.map +1 -0
- package/dist/structure/stated-period.d.ts +3 -2
- package/dist/structure/stated-period.d.ts.map +1 -1
- package/dist/structure/stated-period.js +17 -11
- package/dist/structure/stated-period.js.map +1 -1
- package/dist/structure/table-scale.d.ts +45 -0
- package/dist/structure/table-scale.d.ts.map +1 -0
- package/dist/structure/table-scale.js +188 -0
- package/dist/structure/table-scale.js.map +1 -0
- package/dist/structure/tax-price.d.ts +29 -0
- package/dist/structure/tax-price.d.ts.map +1 -0
- package/dist/structure/tax-price.js +112 -0
- package/dist/structure/tax-price.js.map +1 -0
- package/dist/structure/tax.d.ts +2 -0
- package/dist/structure/tax.d.ts.map +1 -1
- package/dist/structure/tax.js +46 -23
- package/dist/structure/tax.js.map +1 -1
- package/dist/structure/tier-threshold.d.ts +65 -0
- package/dist/structure/tier-threshold.d.ts.map +1 -0
- package/dist/structure/tier-threshold.js +170 -0
- package/dist/structure/tier-threshold.js.map +1 -0
- package/dist/structure/time-range.d.ts +2 -0
- package/dist/structure/time-range.d.ts.map +1 -1
- package/dist/structure/time-range.js +7 -2
- package/dist/structure/time-range.js.map +1 -1
- package/dist/structure/total-line.d.ts +34 -2
- package/dist/structure/total-line.d.ts.map +1 -1
- package/dist/structure/total-line.js +124 -3
- package/dist/structure/total-line.js.map +1 -1
- package/dist/structure/total-row-blank.d.ts +10 -0
- package/dist/structure/total-row-blank.d.ts.map +1 -0
- package/dist/structure/total-row-blank.js +15 -0
- package/dist/structure/total-row-blank.js.map +1 -0
- package/dist/structure/total.d.ts +13 -3
- package/dist/structure/total.d.ts.map +1 -1
- package/dist/structure/total.js +80 -7
- package/dist/structure/total.js.map +1 -1
- package/dist/structure/variance-table.d.ts +34 -0
- package/dist/structure/variance-table.d.ts.map +1 -0
- package/dist/structure/variance-table.js +130 -0
- package/dist/structure/variance-table.js.map +1 -0
- package/dist/table-names.d.ts +4 -3
- package/dist/table-names.d.ts.map +1 -1
- package/dist/table-names.js +6 -6
- package/dist/table-names.js.map +1 -1
- package/dist/unlabelled-references.d.ts +16 -0
- package/dist/unlabelled-references.d.ts.map +1 -0
- package/dist/unlabelled-references.js +73 -0
- package/dist/unlabelled-references.js.map +1 -0
- package/dist/vehicle-plates.d.ts +28 -0
- package/dist/vehicle-plates.d.ts.map +1 -0
- package/dist/vehicle-plates.js +116 -0
- package/dist/vehicle-plates.js.map +1 -0
- package/dist/whole-word-runs.d.ts +24 -0
- package/dist/whole-word-runs.d.ts.map +1 -0
- package/dist/whole-word-runs.js +26 -0
- package/dist/whole-word-runs.js.map +1 -0
- package/package.json +4 -3
- package/rules/absolute-exception.yaml +1 -1
- package/rules/ai-generated-composite.yaml +1 -1
- package/rules/ai-tell.yaml +1 -1
- package/rules/amount-range-reversed.yaml +1 -1
- package/rules/amount-scale-consistency.yaml +1 -1
- package/rules/announcing-opener.yaml +1 -1
- package/rules/annual-holidays-mismatch.yaml +65 -0
- package/rules/annual-pay-mismatch.yaml +64 -0
- package/rules/article-sound.yaml +1 -1
- package/rules/assistant-residue.yaml +1 -1
- package/rules/attachment-not-attached.yaml +1 -1
- package/rules/backorder-mismatch.yaml +57 -0
- package/rules/bmi-mismatch.yaml +63 -0
- package/rules/bold-label-list.yaml +1 -1
- package/rules/broken-link.yaml +1 -1
- package/rules/capacity-runtime-mismatch.yaml +1 -1
- package/rules/change-rate-mismatch.yaml +6 -6
- package/rules/chat-citation-residue.yaml +2 -2
- package/rules/cliche.yaml +2 -2
- package/rules/closing-balance-mismatch.yaml +63 -0
- package/rules/colon-lead-in.yaml +1 -1
- package/rules/comparative-without-baseline.yaml +1 -1
- package/rules/concrete-evidence-density.yaml +1 -1
- package/rules/connection-time-short.yaml +1 -1
- package/rules/contact-variant.yaml +4 -4
- package/rules/contrast-framing.yaml +2 -2
- package/rules/cross-doc-broken-link.yaml +1 -1
- package/rules/cross-doc-fact-conflict.yaml +1 -1
- package/rules/cross-doc-term-variant.yaml +1 -1
- package/rules/cumulative-below-current.yaml +59 -0
- package/rules/currency-column-mix.yaml +70 -0
- package/rules/currency-notation-consistency.yaml +2 -2
- package/rules/cushion-phrase-density.yaml +1 -1
- package/rules/dangling-participle.yaml +2 -2
- package/rules/dangling-reference.yaml +1 -1
- package/rules/date-format-consistency.yaml +1 -1
- package/rules/date-outside-period.yaml +5 -5
- package/rules/date-range-reversed.yaml +2 -2
- package/rules/date-stamp-order.yaml +2 -2
- package/rules/date-without-year.yaml +12 -12
- package/rules/deadline-after-event.yaml +11 -6
- package/rules/deductible-exceeds-limit.yaml +54 -0
- package/rules/defined-name-repeated.yaml +3 -3
- package/rules/defined-term-form.yaml +2 -2
- package/rules/delivered-over-ordered.yaml +57 -0
- package/rules/demonstrative-opener-run.yaml +1 -1
- package/rules/discount-rate-mismatch.yaml +66 -0
- package/rules/due-before-issue.yaml +33 -12
- package/rules/duration-mismatch.yaml +16 -7
- package/rules/duration-product-mismatch.yaml +11 -3
- package/rules/elapsed-years-mismatch.yaml +11 -6
- package/rules/email-greeting-closing.yaml +2 -2
- package/rules/empty-conclusion.yaml +1 -1
- package/rules/empty-intensifier.yaml +1 -1
- package/rules/empty-list-item.yaml +1 -1
- package/rules/empty-section.yaml +1 -1
- package/rules/empty-table-cell.yaml +2 -2
- package/rules/expletive-construction.yaml +1 -1
- package/rules/fact-conflict.yaml +16 -4
- package/rules/figurative-density.yaml +1 -1
- package/rules/figure-reference-order.yaml +1 -1
- package/rules/footnote-mismatch.yaml +1 -1
- package/rules/fullwidth-alnum-consistency.yaml +1 -1
- package/rules/gpa-mismatch.yaml +80 -0
- package/rules/heading-end-punctuation-mix.yaml +1 -1
- package/rules/heading-level-skip.yaml +1 -1
- package/rules/heading-numbering-mix.yaml +3 -3
- package/rules/homophone-slip.yaml +1 -1
- package/rules/humble-for-others.yaml +1 -1
- package/rules/idiom-misuse.yaml +1 -1
- package/rules/ime-residue.yaml +1 -1
- package/rules/impossible-date.yaml +10 -6
- package/rules/installment-total-mismatch.yaml +58 -0
- package/rules/interest-mismatch.yaml +50 -0
- package/rules/interval-count-mismatch.yaml +1 -1
- package/rules/invisible-character.yaml +1 -1
- package/rules/kana-function-word.yaml +2 -2
- package/rules/katakana-density.yaml +1 -1
- package/rules/katakana-long-vowel.yaml +2 -2
- package/rules/kutoten-consistency.yaml +1 -1
- package/rules/latin-spacing.yaml +20 -6
- package/rules/layout-code-mismatch.yaml +1 -1
- package/rules/less-for-fewer.yaml +1 -1
- package/rules/line-amount-mismatch.yaml +8 -7
- package/rules/link-text-url-mismatch.yaml +1 -1
- package/rules/list-item-form-mix.yaml +1 -1
- package/rules/lookalike-character.yaml +1 -1
- package/rules/max-kanji-continuous.yaml +1 -1
- package/rules/meter-usage-mismatch.yaml +64 -0
- package/rules/misconversion.yaml +1 -1
- package/rules/modal-conflict.yaml +1 -1
- package/rules/name-variant.yaml +12 -3
- package/rules/net-amount-mismatch.yaml +57 -0
- package/rules/net-over-gross.yaml +57 -0
- package/rules/no-doubled-joshi.yaml +1 -1
- package/rules/no-mixed-desumasu.yaml +1 -1
- package/rules/no-nakaguro-parallel.yaml +1 -1
- package/rules/nominalization.yaml +1 -1
- package/rules/nonstandard-word.yaml +1 -1
- package/rules/number-style-consistency.yaml +3 -3
- package/rules/number-without-unit.yaml +1 -1
- package/rules/number-word-figure-mismatch.yaml +1 -1
- package/rules/numbering-gap.yaml +1 -1
- package/rules/obligation-without-deadline.yaml +1 -1
- package/rules/ordinal-suffix-mismatch.yaml +1 -1
- package/rules/orthographic-variant.yaml +2 -2
- package/rules/outside-announced-list.yaml +1 -1
- package/rules/padded-intro.yaml +1 -1
- package/rules/paragraph-restatement.yaml +1 -1
- package/rules/party-role-name.yaml +3 -3
- package/rules/percent-sum-mismatch.yaml +2 -2
- package/rules/period-label-conflict.yaml +68 -0
- package/rules/period-multiple-mismatch.yaml +61 -0
- package/rules/period-part-exceeds-whole.yaml +62 -0
- package/rules/person-consistency.yaml +1 -1
- package/rules/phone-number-variant.yaml +3 -3
- package/rules/preferred-term.yaml +2 -2
- package/rules/prerequisite-after-step.yaml +1 -1
- package/rules/product-exceeds-maximum.yaml +49 -0
- package/rules/proper-noun-density.yaml +1 -1
- package/rules/quantity-range-reversed.yaml +2 -2
- package/rules/range-band-mismatch.yaml +1 -1
- package/rules/ratio-mismatch.yaml +64 -0
- package/rules/reference-flag-mismatch.yaml +74 -0
- package/rules/reference-number-repeated.yaml +63 -0
- package/rules/reference-number-variant.yaml +81 -0
- package/rules/reference-title-mismatch.yaml +1 -1
- package/rules/reference-topic-missing.yaml +1 -1
- package/rules/reference-unit-mismatch.yaml +62 -0
- package/rules/relative-date-mismatch.yaml +1 -1
- package/rules/request-without-deadline.yaml +3 -3
- package/rules/required-listed-as-preferred.yaml +1 -1
- package/rules/required-sections.yaml +2 -2
- package/rules/requirement-modal.yaml +2 -2
- package/rules/requirement-smell.yaml +1 -1
- package/rules/revision-direction-mismatch.yaml +66 -0
- package/rules/risk-disclosure.yaml +1 -1
- package/rules/running-balance-mismatch.yaml +59 -0
- package/rules/scaled-quantity-mismatch.yaml +1 -1
- package/rules/serial-range-reversed.yaml +52 -0
- package/rules/share-amount-mismatch.yaml +58 -0
- package/rules/share-over-hundred.yaml +1 -1
- package/rules/shell-prompt-mix.yaml +1 -1
- package/rules/space-before-punctuation.yaml +1 -1
- package/rules/spelling-consistency.yaml +1 -1
- package/rules/step-statement-mix.yaml +3 -3
- package/rules/stock-transition.yaml +1 -1
- package/rules/summary-fact-mismatch.yaml +1 -1
- package/rules/table-header-variant.yaml +1 -1
- package/rules/table-unit-mix.yaml +82 -0
- package/rules/taigen-dome-in-prose.yaml +1 -1
- package/rules/tax-mismatch.yaml +13 -7
- package/rules/tier-threshold-mismatch.yaml +73 -0
- package/rules/time-order.yaml +7 -4
- package/rules/time-range-reversed.yaml +9 -4
- package/rules/toc-heading-mismatch.yaml +1 -1
- package/rules/topic-predicate-distance.yaml +1 -1
- package/rules/total-mismatch.yaml +5 -5
- package/rules/ui-label-variant.yaml +1 -1
- package/rules/unclosed-code-fence.yaml +1 -1
- package/rules/uncomparable-graded.yaml +2 -2
- package/rules/undefined-term.yaml +2 -2
- package/rules/unfilled-placeholder.yaml +2 -2
- package/rules/unit-mismatch.yaml +1 -1
- package/rules/unit-spacing-consistency.yaml +1 -1
- package/rules/unknown-word.yaml +1 -1
- package/rules/url-run-on.yaml +1 -1
- package/rules/vague-deadline.yaml +1 -1
- package/rules/vague-figure-reference.yaml +1 -1
- package/rules/vague-word-density.yaml +2 -2
- package/rules/variance-mismatch.yaml +67 -0
- package/rules/very-adjective.yaml +1 -1
- package/rules/walk-time-distance-mismatch.yaml +1 -1
- package/rules/warning-without-action.yaml +1 -1
- package/rules/weasel-word.yaml +2 -2
- package/rules/wordy-phrase.yaml +2 -2
- package/rules/yori-as-from.yaml +1 -1
- package/skills/chaff/SKILL.md +59 -9
- package/src/company-kana-spelling.ts +105 -0
- package/src/company-names.ts +159 -26
- package/src/contacts/table-rows.ts +51 -0
- package/src/derived/age-on-date.ts +161 -0
- package/src/derived/durations.ts +83 -12
- package/src/derived/hours-and-minutes.ts +41 -0
- package/src/derived/hyphenated-counts.ts +38 -0
- package/src/derived/marked-dates.ts +61 -0
- package/src/derived/money-span.ts +10 -0
- package/src/derived/period-parts.ts +360 -0
- package/src/derived/readable-date.ts +63 -0
- package/src/derived/stays.ts +7 -2
- package/src/derived/timesheet-hours.ts +112 -0
- package/src/derived/use-maximum.ts +158 -0
- package/src/derived/working-hours.ts +2 -2
- package/src/detectors/annual-holidays-mismatch.ts +41 -0
- package/src/detectors/annual-pay-mismatch.ts +71 -0
- package/src/detectors/blank-structure.ts +54 -14
- package/src/detectors/bmi-mismatch.ts +82 -0
- package/src/detectors/change-rate.ts +27 -4
- package/src/detectors/closing-balance-mismatch.ts +52 -0
- package/src/detectors/contact-variant.ts +8 -2
- package/src/detectors/cumulative-below-current.ts +30 -0
- package/src/detectors/currency-column.ts +37 -0
- package/src/detectors/date-any-year.ts +130 -0
- package/src/detectors/date-outside-period.ts +4 -10
- package/src/detectors/date-stamp-order.ts +2 -1
- package/src/detectors/date-year.ts +55 -13
- package/src/detectors/deductible-exceeds-limit.ts +55 -0
- package/src/detectors/defined-term-form.ts +6 -23
- package/src/detectors/derived-numbers.ts +50 -89
- package/src/detectors/discount-rate.ts +41 -0
- package/src/detectors/due-date.ts +21 -7
- package/src/detectors/email-letter.ts +45 -15
- package/src/detectors/event-deadline.ts +13 -3
- package/src/detectors/fact-consistency.ts +145 -7
- package/src/detectors/gloss-year.ts +21 -0
- package/src/detectors/gpa-mismatch.ts +43 -0
- package/src/detectors/impossible-date.ts +25 -3
- package/src/detectors/installment-total-mismatch.ts +68 -0
- package/src/detectors/interest.ts +43 -0
- package/src/detectors/lab-columns.ts +9 -0
- package/src/detectors/labelled-age.ts +154 -0
- package/src/detectors/line-amount.ts +58 -3
- package/src/detectors/measured-facts.ts +1 -1
- package/src/detectors/meter-usage.ts +49 -0
- package/src/detectors/name-field.ts +43 -0
- package/src/detectors/name-variant.ts +160 -16
- package/src/detectors/net-amount-mismatch.ts +86 -0
- package/src/detectors/net-gross-weight.ts +39 -0
- package/src/detectors/nominal-step.ts +35 -0
- package/src/detectors/number-style.ts +11 -2
- package/src/detectors/order-quantity.ts +46 -0
- package/src/detectors/orthographic-variant.ts +40 -10
- package/src/detectors/orthography.ts +27 -11
- package/src/detectors/period-label-conflict.ts +43 -0
- package/src/detectors/period-multiple-mismatch.ts +54 -0
- package/src/detectors/period-part.ts +71 -0
- package/src/detectors/range-words.ts +17 -0
- package/src/detectors/ratio-mismatch.ts +116 -0
- package/src/detectors/readable-dates.ts +36 -0
- package/src/detectors/reference-flag.ts +36 -0
- package/src/detectors/reference-number-repeated.ts +25 -0
- package/src/detectors/reference-number-variant.ts +44 -0
- package/src/detectors/reference-unit.ts +24 -0
- package/src/detectors/registry/annual-holidays-mismatch.ts +4 -0
- package/src/detectors/registry/annual-pay-mismatch.ts +4 -0
- package/src/detectors/registry/backorder-mismatch.ts +4 -0
- package/src/detectors/registry/bmi-mismatch.ts +4 -0
- package/src/detectors/registry/closing-balance-mismatch.ts +4 -0
- package/src/detectors/registry/cumulative-below-current.ts +4 -0
- package/src/detectors/registry/currency-column-mix.ts +4 -0
- package/src/detectors/registry/deductible-exceeds-limit.ts +4 -0
- package/src/detectors/registry/delivered-over-ordered.ts +4 -0
- package/src/detectors/registry/discount-rate.ts +4 -0
- package/src/detectors/registry/elapsed-years-mismatch.ts +1 -1
- package/src/detectors/registry/gpa-mismatch.ts +4 -0
- package/src/detectors/registry/installment-total-mismatch.ts +4 -0
- package/src/detectors/registry/interest.ts +4 -0
- package/src/detectors/registry/meter-usage.ts +4 -0
- package/src/detectors/registry/net-amount-mismatch.ts +4 -0
- package/src/detectors/registry/net-over-gross.ts +4 -0
- package/src/detectors/registry/period-label-conflict.ts +4 -0
- package/src/detectors/registry/period-multiple-mismatch.ts +4 -0
- package/src/detectors/registry/period-part-exceeds-whole.ts +4 -0
- package/src/detectors/registry/product-exceeds-maximum.ts +4 -0
- package/src/detectors/registry/ratio-mismatch.ts +4 -0
- package/src/detectors/registry/reference-flag-mismatch.ts +4 -0
- package/src/detectors/registry/reference-number-repeated.ts +4 -0
- package/src/detectors/registry/reference-number-variant.ts +4 -0
- package/src/detectors/registry/reference-unit.ts +4 -0
- package/src/detectors/registry/revision-direction.ts +4 -0
- package/src/detectors/registry/running-balance.ts +4 -0
- package/src/detectors/registry/serial-range.ts +4 -0
- package/src/detectors/registry/share-amount.ts +4 -0
- package/src/detectors/registry/table-unit-mix.ts +4 -0
- package/src/detectors/registry/tier-threshold.ts +4 -0
- package/src/detectors/registry/variance-mismatch.ts +4 -0
- package/src/detectors/relative-dates.ts +2 -1
- package/src/detectors/relative-day-words.ts +2 -1
- package/src/detectors/rent-multiple-mismatch.ts +3 -2
- package/src/detectors/request-owner.ts +5 -2
- package/src/detectors/revision-direction.ts +44 -0
- package/src/detectors/row-sentence-amounts.ts +96 -0
- package/src/detectors/running-balance.ts +31 -0
- package/src/detectors/scaled-quantity.ts +1 -1
- package/src/detectors/serial-range.ts +37 -0
- package/src/detectors/share-amount.ts +51 -0
- package/src/detectors/structure-tree.ts +58 -10
- package/src/detectors/table-scale.ts +37 -0
- package/src/detectors/tax-amount.ts +45 -13
- package/src/detectors/technical-docs.ts +4 -2
- package/src/detectors/tier-threshold.ts +108 -0
- package/src/detectors/time-order.ts +52 -18
- package/src/detectors/use-maximum.ts +38 -0
- package/src/detectors/variance.ts +33 -0
- package/src/detectors/whole-count-findings.ts +48 -0
- package/src/detectors/working-hours-findings.ts +100 -0
- package/src/facts/age-values.ts +124 -0
- package/src/facts/cell-keys.ts +21 -0
- package/src/facts/count-labels.ts +28 -0
- package/src/facts/document-terms.ts +107 -0
- package/src/facts/duration-scale.ts +22 -0
- package/src/facts/duration-values.ts +44 -0
- package/src/facts/fact-values.ts +36 -7
- package/src/facts/labelled-facts.ts +66 -9
- package/src/facts/measure-units.ts +28 -10
- package/src/facts/measures.ts +11 -11
- package/src/facts/qualified-labels.ts +126 -0
- package/src/facts/rate-values.ts +117 -0
- package/src/facts/row-sentence-amounts.ts +113 -0
- package/src/facts/superscript-power.ts +5 -0
- package/src/facts/table-facts.ts +35 -7
- package/src/facts/term-values.ts +236 -0
- package/src/facts/unit-word.ts +13 -0
- package/src/facts/verb-quantity-facts.ts +84 -0
- package/src/facts/whole-counts.ts +183 -0
- package/src/name-char-reading.ts +24 -0
- package/src/name-line-block.ts +40 -0
- package/src/name-lookalike-chars.ts +53 -0
- package/src/name-neighbours.ts +58 -0
- package/src/name-ordinary-word.ts +68 -0
- package/src/name-person.ts +31 -0
- package/src/name-separator.ts +48 -0
- package/src/name-variants.ts +42 -86
- package/src/name-weight.ts +12 -0
- package/src/person-field.ts +43 -0
- package/src/person-full-name.ts +70 -0
- package/src/phone-numbers.ts +54 -18
- package/src/plugin.ts +2 -0
- package/src/product-names.ts +98 -0
- package/src/reference-numbers.ts +55 -0
- package/src/spaced-person-name.ts +97 -0
- package/src/spacing-code.ts +22 -1
- package/src/structure/annual-holidays.ts +222 -0
- package/src/structure/annual-pay.ts +339 -0
- package/src/structure/bmi.ts +133 -0
- package/src/structure/change-rate-table.ts +135 -0
- package/src/structure/change-rate.ts +54 -17
- package/src/structure/closing-balance.ts +104 -0
- package/src/structure/column-date-order.ts +73 -0
- package/src/structure/compound-hours.ts +49 -0
- package/src/structure/cumulative-below-current.ts +66 -0
- package/src/structure/currency-column.ts +97 -0
- package/src/structure/date-deadline-mark.ts +30 -0
- package/src/structure/date-outside-period.ts +17 -9
- package/src/structure/date-range.ts +6 -9
- package/src/structure/deadline-after-event.ts +125 -8
- package/src/structure/deductible-limit.ts +255 -0
- package/src/structure/discount-rate.ts +209 -0
- package/src/structure/generic-role.ts +8 -0
- package/src/structure/gpa.ts +218 -0
- package/src/structure/installment-total.ts +343 -0
- package/src/structure/interest.ts +133 -0
- package/src/structure/key-value-row.ts +45 -0
- package/src/structure/lab-columns.ts +21 -0
- package/src/structure/labelled-date-order.ts +68 -52
- package/src/structure/labelled-order.ts +122 -0
- package/src/structure/labelled-time-order.ts +100 -0
- package/src/structure/line-amount-label.ts +100 -0
- package/src/structure/line-amount-rate.ts +178 -0
- package/src/structure/line-amount-unit.ts +16 -0
- package/src/structure/line-amount.ts +200 -48
- package/src/structure/meter-usage-read.ts +139 -0
- package/src/structure/meter-usage.ts +224 -0
- package/src/structure/net-amount.ts +243 -0
- package/src/structure/net-gross-weight.ts +97 -0
- package/src/structure/order-quantity.ts +125 -0
- package/src/structure/party-role.ts +4 -1
- package/src/structure/percent-sum.ts +3 -0
- package/src/structure/period-label-conflict.ts +174 -0
- package/src/structure/period-labels.ts +147 -0
- package/src/structure/period-multiple.ts +186 -0
- package/src/structure/quantity-range.ts +1 -8
- package/src/structure/range-bands.ts +1 -1
- package/src/structure/range-years.ts +75 -0
- package/src/structure/ratio.ts +296 -0
- package/src/structure/reference-flags.ts +156 -0
- package/src/structure/reference-number-repeated.ts +57 -0
- package/src/structure/reference-unit.ts +105 -0
- package/src/structure/rent-multiple.ts +12 -82
- package/src/structure/revision-direction.ts +214 -0
- package/src/structure/running-balance.ts +157 -0
- package/src/structure/scaled-quantities.ts +20 -6
- package/src/structure/serial-range.ts +52 -0
- package/src/structure/share-amount.ts +206 -0
- package/src/structure/shift-times.ts +136 -0
- package/src/structure/span-label.ts +26 -0
- package/src/structure/stated-multiple.ts +82 -0
- package/src/structure/stated-period.ts +23 -11
- package/src/structure/table-scale.ts +239 -0
- package/src/structure/tax-price.ts +136 -0
- package/src/structure/tax.ts +55 -20
- package/src/structure/tier-threshold.ts +218 -0
- package/src/structure/time-range.ts +9 -3
- package/src/structure/total-line.ts +174 -5
- package/src/structure/total-row-blank.ts +23 -0
- package/src/structure/total.ts +122 -13
- package/src/structure/variance-table.ts +167 -0
- package/src/table-names.ts +6 -6
- package/src/unlabelled-references.ts +83 -0
- package/src/vehicle-plates.ts +142 -0
- package/src/whole-word-runs.ts +38 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Token } from "./plugin.ts";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 1 行に 1 つずつ書いた短い行の並び(署名の 名前/役職/学校名、住所の行)。Markdown では一つの段落、一つの文になり、名前の
|
|
5
|
+
* 語の続きが次の行の頭の語(Mr Daniel Whitfield⏎Head of Year 9 の Head)まで伸びる。行が文の終わりの記号で終わらず、どの行も
|
|
6
|
+
* 短く、小文字で始まらず、行の数も少ないときだけ、行ごとに名前を読む。折り返したふつうの文は最後の行が文の終わりの記号で
|
|
7
|
+
* 終わるか、行が長いか、小文字で始まる行を持つ。
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/** 行ごとに読む行の語の数の上限。折り返した文の行はこれより長い。 */
|
|
11
|
+
const MAX_LINE_WORDS = 6;
|
|
12
|
+
/** 行ごとに読む文の行の数の上限。署名や住所は収まる。長い一覧の一語の地名は、分けるとふつうの語と一字違いに見える。 */
|
|
13
|
+
const MAX_BLOCK_LINES = 8;
|
|
14
|
+
const SENTENCE_END = /[.!?。!?:;:;]["'”’))]*$/u;
|
|
15
|
+
const LOWERCASE_START = /^\p{Ll}/u;
|
|
16
|
+
const NEWLINE = /\r?\n/u;
|
|
17
|
+
const WORD = /\S+/gu;
|
|
18
|
+
|
|
19
|
+
const isItemLine = (line: string): boolean =>
|
|
20
|
+
line !== "" && !SENTENCE_END.test(line) && !LOWERCASE_START.test(line) && (line.match(WORD) ?? []).length <= MAX_LINE_WORDS;
|
|
21
|
+
|
|
22
|
+
/** 文が、短い行を 1 行に 1 つずつ並べたものか。 */
|
|
23
|
+
export const isLineBlock = (text: string): boolean => {
|
|
24
|
+
const lines = text
|
|
25
|
+
.trim()
|
|
26
|
+
.split(NEWLINE)
|
|
27
|
+
.map((line) => line.trim());
|
|
28
|
+
return lines.length >= 2 && lines.length <= MAX_BLOCK_LINES && lines.every(isItemLine);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/** 語を、あいだに改行を挟むところで分けた並び。text は start の位置から始まる文字列で、語の範囲を覆う。 */
|
|
32
|
+
export const tokensByLine = (tokens: readonly Token[], text: string, start = 0): Token[][] =>
|
|
33
|
+
tokens.reduce<Token[][]>((lines, token, index) => {
|
|
34
|
+
const previous = tokens[index - 1];
|
|
35
|
+
const breaks = previous !== undefined && NEWLINE.test(text.slice(previous.span.end - start, token.span.start - start));
|
|
36
|
+
const current = lines.at(-1);
|
|
37
|
+
if (current === undefined || breaks) lines.push([token]);
|
|
38
|
+
else current.push(token);
|
|
39
|
+
return lines;
|
|
40
|
+
}, []);
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { NameMention } from "./name-variants.ts";
|
|
2
|
+
|
|
3
|
+
// 人の名前で、形が似ていて取り違えやすい別の字(太 と 大、未 と 末)。どの字が似ているかは語彙表 name-lookalike-char が組(group)
|
|
4
|
+
// ごとに言う。読みが違うので、読みの同じ名前の見方では比べられない。
|
|
5
|
+
|
|
6
|
+
/** 字から、その組の代表の字へ。 */
|
|
7
|
+
export type LookalikeChars = ReadonlyMap<string, string>;
|
|
8
|
+
|
|
9
|
+
export const NO_LOOKALIKES: LookalikeChars = new Map();
|
|
10
|
+
|
|
11
|
+
const isSameGroup = (left: string, right: string, lookalikes: LookalikeChars): boolean => {
|
|
12
|
+
const group = lookalikes.get(left);
|
|
13
|
+
return group !== undefined && group === lookalikes.get(right);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/** 字数が同じで、同じ位置の一字だけが違い、その二字が同じ組にある(山本 健太 と 山本 健大)。 */
|
|
17
|
+
export const isLookalikeApart = (left: string, right: string, lookalikes: LookalikeChars): boolean => {
|
|
18
|
+
const [leftChars, rightChars] = [[...left], [...right]];
|
|
19
|
+
if (leftChars.length !== rightChars.length) return false;
|
|
20
|
+
const differ = leftChars.flatMap((char, index) => (char === rightChars[index] ? [] : [index]));
|
|
21
|
+
const [at] = differ;
|
|
22
|
+
return differ.length === 1 && at !== undefined && isSameGroup(leftChars[at] ?? "", rightChars[at] ?? "", lookalikes);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/** 書き方ごとの最初の現れと数。姓と名のそろった(二語以上の)人の名前だけ。 */
|
|
26
|
+
const fullPersonNamesOf = (mentions: readonly NameMention[]): Map<string, { readonly first: NameMention; readonly count: number }> => {
|
|
27
|
+
const names = new Map<string, { readonly first: NameMention; readonly count: number }>();
|
|
28
|
+
mentions
|
|
29
|
+
.filter((mention) => mention.person === true && mention.words.length >= 2)
|
|
30
|
+
.forEach((mention) => {
|
|
31
|
+
const known = names.get(mention.surface);
|
|
32
|
+
names.set(mention.surface, { first: known?.first ?? mention, count: (known?.count ?? 0) + 1 });
|
|
33
|
+
});
|
|
34
|
+
return names;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export type LookalikeSlip = { readonly mention: NameMention; readonly usual: string };
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* 姓と名のそろった人の名前が、形の似た別の字一字だけで違う所(山本 健太 と 山本 健大)。兄弟(健太 と 健大)もありうるので、
|
|
41
|
+
* 多いほうが二度以上、少ないほうが一度だけのときに限る。相手が二つあれば多いほう、同数なら先に書いたほう。
|
|
42
|
+
*/
|
|
43
|
+
export const lookalikeSlipsIn = (mentions: readonly NameMention[], lookalikes: LookalikeChars): LookalikeSlip[] => {
|
|
44
|
+
const names = [...fullPersonNamesOf(mentions).values()];
|
|
45
|
+
return names
|
|
46
|
+
.filter((name) => name.count === 1)
|
|
47
|
+
.flatMap((slip) => {
|
|
48
|
+
const usual = names
|
|
49
|
+
.filter((other) => other.count >= 2 && isLookalikeApart(slip.first.surface, other.first.surface, lookalikes))
|
|
50
|
+
.toSorted((left, right) => right.count - left.count || left.first.offset - right.first.offset)[0];
|
|
51
|
+
return usual === undefined ? [] : [{ mention: slip.first, usual: usual.first.surface }];
|
|
52
|
+
});
|
|
53
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { NameMention } from "./name-variants.ts";
|
|
2
|
+
|
|
3
|
+
// 解析器が名前の一語を名前と読まなかった所を、隣の語と合わせて名前の現れにする(to Rachel Whitford の Rachel)。
|
|
4
|
+
|
|
5
|
+
/** 隣の語を探す範囲(UTF-16 の単位)。 */
|
|
6
|
+
const NEIGHBOUR_LOOKBACK = 40;
|
|
7
|
+
/** 隣の語の外側の記号((Rachel、Floyd.)。名前の側の記号(Rachel, Whitford の ,)は語を切るので残す。 */
|
|
8
|
+
const MARK = /\p{P}/u;
|
|
9
|
+
const withoutLeadingMarks = (word: string): string => {
|
|
10
|
+
const chars = [...word];
|
|
11
|
+
const start = chars.findIndex((char) => !MARK.test(char));
|
|
12
|
+
return start < 0 ? "" : chars.slice(start).join("");
|
|
13
|
+
};
|
|
14
|
+
const withoutTrailingMarks = (word: string): string => {
|
|
15
|
+
const chars = [...word];
|
|
16
|
+
return chars.slice(0, chars.findLastIndex((char) => !MARK.test(char)) + 1).join("");
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const wordBeforeAt = (source: string, offset: number): string | undefined => {
|
|
20
|
+
if (source.charAt(offset - 1) !== " ") return undefined;
|
|
21
|
+
const from = Math.max(0, offset - 1 - NEIGHBOUR_LOOKBACK);
|
|
22
|
+
const parts = source.slice(from, offset - 1).split(/\s/u);
|
|
23
|
+
const word = withoutLeadingMarks(parts.at(-1) ?? "");
|
|
24
|
+
return word === "" || (from > 0 && parts.length === 1) ? undefined : word;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const wordAfterAt = (source: string, end: number): string | undefined => {
|
|
28
|
+
if (source.charAt(end) !== " ") return undefined;
|
|
29
|
+
const word = withoutTrailingMarks(source.slice(end + 1, end + 1 + NEIGHBOUR_LOOKBACK).split(/\s/u)[0] ?? "");
|
|
30
|
+
return word === "" ? undefined : word;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* 解析器が名前の一語を名前と読まなかった所(to Rachel Whitford の Rachel を動詞と読む)。空白一つで隣の語と合わせた形を、ほかの所で
|
|
35
|
+
* 名前と読めていれば、その形の現れと見る。隣の語がほかの名前の現れに入るなら合わせない。
|
|
36
|
+
*/
|
|
37
|
+
export const withKnownNeighbours = (mentions: readonly NameMention[], source: string): NameMention[] => {
|
|
38
|
+
const known = new Set(mentions.filter((mention) => mention.words.length >= 2).map((mention) => mention.surface));
|
|
39
|
+
const taken = (start: number, end: number): boolean => mentions.some((mention) => mention.offset < end && start < mention.offset + mention.surface.length);
|
|
40
|
+
return mentions.map((mention) => {
|
|
41
|
+
const end = mention.offset + mention.surface.length;
|
|
42
|
+
const before = wordBeforeAt(source, mention.offset);
|
|
43
|
+
const after = wordAfterAt(source, end);
|
|
44
|
+
if (before !== undefined && known.has(`${before} ${mention.surface}`) && !taken(mention.offset - 1 - before.length, mention.offset - 1)) {
|
|
45
|
+
return {
|
|
46
|
+
...mention,
|
|
47
|
+
surface: `${before} ${mention.surface}`,
|
|
48
|
+
offset: mention.offset - 1 - before.length,
|
|
49
|
+
reading: undefined,
|
|
50
|
+
words: [before, ...mention.words],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
if (after !== undefined && known.has(`${mention.surface} ${after}`) && !taken(end + 1, end + 1 + after.length)) {
|
|
54
|
+
return { ...mention, surface: `${mention.surface} ${after}`, reading: undefined, words: [...mention.words, after] };
|
|
55
|
+
}
|
|
56
|
+
return mention;
|
|
57
|
+
});
|
|
58
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { Token } from "./plugin.ts";
|
|
2
|
+
import type { NameMention } from "./name-variants.ts";
|
|
3
|
+
import { escapeRegExp } from "./orthography.ts";
|
|
4
|
+
|
|
5
|
+
// 名前と読んだ一語が、ふつうの語でもある所(文頭や題の Green、国の名の Greek)。二つのふつうの語(Green と Greek、Course と
|
|
6
|
+
// Curse)は一字違いでも別の語で、同じ名前の書き損じではない。
|
|
7
|
+
|
|
8
|
+
/** 解析器が名前と読んだ語が、小文字で書けばふつうの語か(adapter の OrdinaryWord=Yes)。 */
|
|
9
|
+
export const isOrdinaryToken = (token: Token): boolean => token.features?.["OrdinaryWord"] === "Yes";
|
|
10
|
+
|
|
11
|
+
/** 文書が word を敬称か肩書きの後ろに書くか(Mr. Green、Senator Marsh)。書けば、その語を人の名前に使っている。 */
|
|
12
|
+
export const isTitledIn = (source: string, titles: readonly string[], word: string): boolean =>
|
|
13
|
+
titles.some((title) => new RegExp(`(?<![\\p{L}\\p{N}])${escapeRegExp(title)}\\s+${escapeRegExp(word)}(?![\\p{L}\\p{N}])`, "u").test(source));
|
|
14
|
+
|
|
15
|
+
/** 人を書く欄の行の頭の、Markdown の印(箇条書き、引用、見出し、太字)。 */
|
|
16
|
+
const LINE_MARKS = /^[\s>*#+-]*(?:\*\*|__)?/u;
|
|
17
|
+
/** 欄の後ろの名前: 大文字で始まる一語から三語(Ellen J. Marsh)。行の終わりか、「,」か括弧の前まで。 */
|
|
18
|
+
const FIELD_NAME = /^(?:\*\*|__)?[ \t]*(\p{Lu}[\p{L}'’.-]*(?:[ \t]+\p{Lu}[\p{L}'’.-]*){0,2})[ \t]*(?:[,((].*)?$/u;
|
|
19
|
+
|
|
20
|
+
/** 行が人を書く欄(Customer: Ellen Marsh)なら、欄の後ろの名前の最後の語(姓)。欄の語は、行の頭の「:」の前の語まるごとで照らす。 */
|
|
21
|
+
const labelledSurname = (line: string, labels: ReadonlySet<string>): string | undefined => {
|
|
22
|
+
const colon = line.search(/[::]/u);
|
|
23
|
+
if (colon < 0) return undefined;
|
|
24
|
+
const label = line
|
|
25
|
+
.slice(0, colon)
|
|
26
|
+
.replace(LINE_MARKS, "")
|
|
27
|
+
.replace(/(?:\*\*|__)$/u, "")
|
|
28
|
+
.trim()
|
|
29
|
+
.toLowerCase();
|
|
30
|
+
if (!labels.has(label)) return undefined;
|
|
31
|
+
return FIELD_NAME.exec(line.slice(colon + 1))?.[1]
|
|
32
|
+
?.split(/[ \t]+/u)
|
|
33
|
+
.at(-1)
|
|
34
|
+
?.replace(/\.$/u, "");
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* 文書が word を、人を書く欄の名前の最後の語(姓)に書くか(Customer: Ellen Marsh、Client: Marsh)。書けば、その語を人の名前に
|
|
39
|
+
* 使っている。欄の後ろの最後の語だけを見るので、Name: Green Valley Farm の Green は名前に使った語にならない。
|
|
40
|
+
*/
|
|
41
|
+
const labelledSurnamesIn = (source: string, labels: readonly string[]): ReadonlySet<string> => {
|
|
42
|
+
const wanted = new Set(labels.map((label) => label.toLowerCase()));
|
|
43
|
+
return new Set(wanted.size === 0 ? [] : source.split(/\r?\n/u).flatMap((line) => labelledSurname(line, wanted) ?? []));
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export const isLabelledIn = (source: string, labels: readonly string[], word: string): boolean => labelledSurnamesIn(source, labels).has(word);
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* 一語の名前の現れのうち、その語がふつうの語でもあり(ordinaryStarts は、そういう語の頭の位置)、文書のどこでも敬称や肩書きの
|
|
50
|
+
* 後ろにも、人を書く欄(labels)の姓にも書かないものに ordinary を付ける。同じ形の現れが一つでもそうでなければ、その形のどの現れにも付けない。
|
|
51
|
+
*/
|
|
52
|
+
export const withOrdinaryWords = (
|
|
53
|
+
mentions: readonly NameMention[],
|
|
54
|
+
ordinaryStarts: ReadonlySet<number>,
|
|
55
|
+
source: string,
|
|
56
|
+
titles: readonly string[],
|
|
57
|
+
labels: readonly string[] = [],
|
|
58
|
+
): NameMention[] => {
|
|
59
|
+
const isOrdinary = (mention: NameMention): boolean => {
|
|
60
|
+
const [word] = mention.words;
|
|
61
|
+
return mention.words.length === 1 && word !== undefined && ordinaryStarts.has(mention.offset);
|
|
62
|
+
};
|
|
63
|
+
const named = new Set(mentions.filter((mention) => !isOrdinary(mention)).map((mention) => mention.surface));
|
|
64
|
+
const ordinarySurfaces = new Set(mentions.filter((mention) => !named.has(mention.surface) && isOrdinary(mention)).map((mention) => mention.surface));
|
|
65
|
+
const labelled = labelledSurnamesIn(source, labels);
|
|
66
|
+
const neverNamed = new Set([...ordinarySurfaces].filter((surface) => !isTitledIn(source, titles, surface) && !labelled.has(surface)));
|
|
67
|
+
return mentions.map((mention) => (neverNamed.has(mention.surface) ? { ...mention, ordinary: true } : mention));
|
|
68
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Token } from "./plugin.ts";
|
|
2
|
+
|
|
3
|
+
// 固有名詞の続きが人の名前と読めるか。解析器の人名の印か、後ろの敬称で決める。
|
|
4
|
+
|
|
5
|
+
/** 人名と読む解析器の印(UD の NameType: 姓 Sur、名 Giv、どちらとも言えない人名 Prs)。 */
|
|
6
|
+
const PERSON_TYPES: ReadonlySet<string> = new Set(["Sur", "Giv", "Prs"]);
|
|
7
|
+
|
|
8
|
+
/** 行の中の空き(半角・全角の空白、タブ)。名前と敬称のあいだに置く(森下 千尋 様)。改行は越えない。 */
|
|
9
|
+
const INLINE_BLANK = /^[\t\p{Zs}]+$/u;
|
|
10
|
+
|
|
11
|
+
/** 名前の後ろの語。行の中の空きを一つ越える(森下 千尋 様 の 様)。 */
|
|
12
|
+
const wordAfter = (tokens: readonly Token[], last: Token): Token | undefined => {
|
|
13
|
+
const at = tokens.indexOf(last) + 1;
|
|
14
|
+
const next = tokens[at];
|
|
15
|
+
return next !== undefined && INLINE_BLANK.test(next.surface) ? tokens[at + 1] : next;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/** 語の後ろに敬称(様、さん、氏)が付くか。行の中の空きを挟んでもよい。 */
|
|
19
|
+
export const isFollowedBySuffix = (token: Token, tokens: readonly Token[], suffixes: readonly string[]): boolean => {
|
|
20
|
+
const next = wordAfter(tokens, token);
|
|
21
|
+
return next !== undefined && suffixes.includes(next.surface);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* 人の名前か。解析器が人名と読む語を含むか、後ろに敬称が付く。解析器は名を地名と読むことがある(千尋 を Geo)ので、敬称は空白を
|
|
26
|
+
* 挟んでも見る。
|
|
27
|
+
*/
|
|
28
|
+
export const isPersonRun = (run: readonly Token[], tokens: readonly Token[], suffixes: readonly string[]): boolean => {
|
|
29
|
+
const last = run.at(-1);
|
|
30
|
+
return run.some((token) => PERSON_TYPES.has(token.features?.["NameType"] ?? "")) || (last !== undefined && isFollowedBySuffix(last, tokens, suffixes));
|
|
31
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Boundary } from "./orthography.ts";
|
|
2
|
+
import type { Span, Token } from "./plugin.ts";
|
|
3
|
+
|
|
4
|
+
/** 名前を空白で並べた行(署名・連絡先・所属の行)に出る品詞。助詞・動詞・助動詞・連体詞が一つでもあれば、その行は文。 */
|
|
5
|
+
const NAME_LINE_POS = new Set(["NOUN", "PROPN", "NUM", "PUNCT", "SYM"]);
|
|
6
|
+
|
|
7
|
+
/** units は部署・拠点・役目の名前を閉じる語(語彙表 organization-unit)、forms は会社の形の語(語彙表 company-form)。 */
|
|
8
|
+
export type OrganizationWords = { readonly units: ReadonlySet<string>; readonly forms: readonly string[] };
|
|
9
|
+
|
|
10
|
+
/** at を含む行の範囲。 */
|
|
11
|
+
const lineAround = (text: string, at: number): Span => {
|
|
12
|
+
const end = text.indexOf("\n", at);
|
|
13
|
+
return { start: text.lastIndexOf("\n", at - 1) + 1, end: end === -1 ? text.length : end };
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/** 語を区切る空白。 */
|
|
17
|
+
const WORD_BREAKS = [" ", "\t", "\n", "\r", "\u00a0", "\u3000"];
|
|
18
|
+
|
|
19
|
+
/** end の前の、空白で区切った語の頭の位置。 */
|
|
20
|
+
const wordStart = (text: string, end: number): number => Math.max(...WORD_BREAKS.map((space) => text.slice(0, end).lastIndexOf(space))) + 1;
|
|
21
|
+
|
|
22
|
+
/** start からの、空白で区切った語の終わりの位置。 */
|
|
23
|
+
const wordEnd = (text: string, start: number): number =>
|
|
24
|
+
Math.min(...WORD_BREAKS.map((space) => text.indexOf(space, start)).map((at) => (at === -1 ? text.length : at)));
|
|
25
|
+
|
|
26
|
+
/** span の中の語。tokens は文書全体の座標で、base は text の先頭の位置。 */
|
|
27
|
+
const tokensIn = (tokens: readonly Token[], span: Span, base: number): Token[] =>
|
|
28
|
+
tokens.filter((token) => token.span.start >= base + span.start && token.span.end <= base + span.end);
|
|
29
|
+
|
|
30
|
+
/** 行の語がどれも名前の語か。品詞の無い行は名前の並びと読まない。 */
|
|
31
|
+
const isNameLine = (lineTokens: readonly Token[]): boolean => lineTokens.length > 0 && lineTokens.every((token) => NAME_LINE_POS.has(token.pos));
|
|
32
|
+
|
|
33
|
+
/** 空白で区切った語が、組織の名前か。最後の語が部署・拠点・役目の語(経営企画部、IR担当)か、会社の形の語で始まるか終わる(株式会社ABC)。 */
|
|
34
|
+
const isOrganizationName = (word: string, wordTokens: readonly Token[], words: OrganizationWords): boolean =>
|
|
35
|
+
words.units.has(wordTokens.at(-1)?.surface ?? "") || words.forms.some((form) => word.length > form.length && (word.startsWith(form) || word.endsWith(form)));
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* 「株式会社あおば電子 経営企画部 IR担当」「東京本社 PR室」のように、名前だけを空白で並べた行で、空白の両側がどちらも組織の名前のときの空白。
|
|
39
|
+
* 名前と名前の区切りで、英字の前後の空け方ではない。文の中の空白(この IT システムは)や、組織の名前でない語のあいだ(生成AI 活用事例、Patch リリース)は区切りと読まない。
|
|
40
|
+
* boundary は空けた英字の境目(text[offset] が空白)。tokens は文書全体の座標で、base は text の先頭の位置。
|
|
41
|
+
*/
|
|
42
|
+
export const isNameSeparator = (text: string, boundary: Boundary, tokens: readonly Token[] | undefined, base: number, words: OrganizationWords): boolean => {
|
|
43
|
+
if (tokens === undefined || boundary.kind !== "letter" || !boundary.spaced) return false;
|
|
44
|
+
const before = { start: wordStart(text, boundary.offset), end: boundary.offset };
|
|
45
|
+
const after = { start: boundary.offset + 1, end: wordEnd(text, boundary.offset + 1) };
|
|
46
|
+
const isName = (span: Span): boolean => isOrganizationName(text.slice(span.start, span.end), tokensIn(tokens, span, base), words);
|
|
47
|
+
return isName(before) && isName(after) && isNameLine(tokensIn(tokens, lineAround(text, boundary.offset), base));
|
|
48
|
+
};
|
package/src/name-variants.ts
CHANGED
|
@@ -3,6 +3,9 @@ import { escapeRegExp } from "./orthography.ts";
|
|
|
3
3
|
import { nameCueAt, type NameCue, type NameCues } from "./name-cue.ts";
|
|
4
4
|
import { isNearSurname } from "./surname-near.ts";
|
|
5
5
|
import { foldedKeysOf, NO_SPELLING, type SpellingInput } from "./name-spelling-chars.ts";
|
|
6
|
+
import { NO_CHAR_READINGS, readingOfWords } from "./name-char-reading.ts";
|
|
7
|
+
import { isPersonRun } from "./name-person.ts";
|
|
8
|
+
import { heavierFirst, outweighs, type NameWeight } from "./name-weight.ts";
|
|
6
9
|
|
|
7
10
|
// 同じ名前(人・会社・製品)を、文書の中で少しだけ違う形に書いた所。どの形が正しいかは決めず、少ないほうを指す。
|
|
8
11
|
// 三通りで同じ名前と見る。書き方の違いだけ(GitHub と Github、Mac OS と macOS)、読みが同じ(山田太郎 と 山田太朗)、
|
|
@@ -10,7 +13,9 @@ import { foldedKeysOf, NO_SPELLING, type SpellingInput } from "./name-spelling-c
|
|
|
10
13
|
|
|
11
14
|
/**
|
|
12
15
|
* words は名前の語(記号を除く)。読みが同じ二つの名前が、どの語で違うかを見るため。person は人の名前と読めるもの(解析器が
|
|
13
|
-
* 人名と読むか、敬称が付く)。cue は前後の語から見た名前らしさ(name-cue.ts)。
|
|
16
|
+
* 人名と読むか、敬称が付く)。cue は前後の語から見た名前らしさ(name-cue.ts)。ordinary は、ふつうの語でもある一語の名前で、
|
|
17
|
+
* 文書がその形をどこでも名前に使わないもの(name-ordinary-word.ts)。labelled は、人を書く欄(氏名:、Contractor:)に書いた名前
|
|
18
|
+
* (person-field.ts)。
|
|
14
19
|
*/
|
|
15
20
|
export type NameMention = {
|
|
16
21
|
readonly surface: string;
|
|
@@ -19,12 +24,14 @@ export type NameMention = {
|
|
|
19
24
|
readonly words: readonly string[];
|
|
20
25
|
readonly person?: boolean;
|
|
21
26
|
readonly cue?: NameCue;
|
|
27
|
+
readonly ordinary?: boolean;
|
|
28
|
+
readonly labelled?: boolean;
|
|
22
29
|
};
|
|
23
30
|
|
|
24
31
|
export type NameVariant = {
|
|
25
32
|
readonly mention: NameMention;
|
|
26
33
|
readonly usual: string;
|
|
27
|
-
readonly kind: "spelling" | "kana" | "reading" | "near" | "surname" | "character";
|
|
34
|
+
readonly kind: "spelling" | "kana" | "reading" | "near" | "surname" | "character" | "field";
|
|
28
35
|
};
|
|
29
36
|
|
|
30
37
|
/** 字体の違う同じ字(斎・斉・齋)。字から、その組の代表の字へ。 */
|
|
@@ -79,18 +86,12 @@ const withoutEdgeQuotes = (text: string): string => {
|
|
|
79
86
|
*/
|
|
80
87
|
const NOT_COMPARED = /@|(?:^|\s)\p{L}(?:\s|$)/u;
|
|
81
88
|
|
|
82
|
-
/** 人名と読む解析器の印(UD の NameType: 姓 Sur、名 Giv、どちらとも言えない人名 Prs)。 */
|
|
83
|
-
const PERSON_TYPES: ReadonlySet<string> = new Set(["Sur", "Giv", "Prs"]);
|
|
84
|
-
|
|
85
|
-
/** 人の名前か。解析器が人名と読む語を含むか、すぐ後ろに敬称(様、さん、氏)が付く。 */
|
|
86
|
-
const isPerson = (run: readonly Token[], next: Token | undefined, suffixes: readonly string[]): boolean =>
|
|
87
|
-
run.some((token) => PERSON_TYPES.has(token.features?.["NameType"] ?? "")) || (next !== undefined && suffixes.includes(next.surface));
|
|
88
|
-
|
|
89
89
|
/**
|
|
90
90
|
* 文の語から、名前の現れ。surface は source の上の書いたまま(折り返しの空白は一つにまとめる)。
|
|
91
91
|
* 大文字だけの名前(ACME INC、NASA)は外す。契約書の署名欄や略語で、ふつうの書き方の別の形ではない。小文字の英字だけの語も外す。
|
|
92
|
+
* charReadings は解析器が読めない名前の字の読み(name-char-reading.ts)。人の名前と読めるものだけに使う。
|
|
92
93
|
*/
|
|
93
|
-
export const mentionsIn = (tokens: readonly Token[], source: string, personSuffixes: readonly string[] = []): NameMention[] =>
|
|
94
|
+
export const mentionsIn = (tokens: readonly Token[], source: string, personSuffixes: readonly string[] = [], charReadings = NO_CHAR_READINGS): NameMention[] =>
|
|
94
95
|
runsOf(tokens).flatMap((run) => {
|
|
95
96
|
const first = run[0];
|
|
96
97
|
const last = run.at(-1);
|
|
@@ -99,67 +100,11 @@ export const mentionsIn = (tokens: readonly Token[], source: string, personSuffi
|
|
|
99
100
|
const surface = withoutEdgeQuotes(written);
|
|
100
101
|
if (surface === "" || isUpperOnly(surface) || LOWER_LATIN_ONLY.test(surface) || NOT_COMPARED.test(surface)) return [];
|
|
101
102
|
const words = run.filter((token) => !JOINERS.has(token.surface));
|
|
102
|
-
const
|
|
103
|
-
const reading =
|
|
104
|
-
const person = isPerson(run, tokens[tokens.indexOf(last) + 1], personSuffixes);
|
|
103
|
+
const person = isPersonRun(run, tokens, personSuffixes);
|
|
104
|
+
const reading = readingOfWords(words, person ? charReadings : NO_CHAR_READINGS);
|
|
105
105
|
return [{ surface, offset: first.span.start, reading, words: words.map((token) => token.surface), person }];
|
|
106
106
|
});
|
|
107
107
|
|
|
108
|
-
/** 隣の語を探す範囲(UTF-16 の単位)。 */
|
|
109
|
-
const NEIGHBOUR_LOOKBACK = 40;
|
|
110
|
-
/** 隣の語の外側の記号((Rachel、Floyd.)。名前の側の記号(Rachel, Whitford の ,)は語を切るので残す。 */
|
|
111
|
-
const MARK = /\p{P}/u;
|
|
112
|
-
const withoutLeadingMarks = (word: string): string => {
|
|
113
|
-
const chars = [...word];
|
|
114
|
-
const start = chars.findIndex((char) => !MARK.test(char));
|
|
115
|
-
return start < 0 ? "" : chars.slice(start).join("");
|
|
116
|
-
};
|
|
117
|
-
const withoutTrailingMarks = (word: string): string => {
|
|
118
|
-
const chars = [...word];
|
|
119
|
-
return chars.slice(0, chars.findLastIndex((char) => !MARK.test(char)) + 1).join("");
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
const wordBeforeAt = (source: string, offset: number): string | undefined => {
|
|
123
|
-
if (source.charAt(offset - 1) !== " ") return undefined;
|
|
124
|
-
const from = Math.max(0, offset - 1 - NEIGHBOUR_LOOKBACK);
|
|
125
|
-
const parts = source.slice(from, offset - 1).split(/\s/u);
|
|
126
|
-
const word = withoutLeadingMarks(parts.at(-1) ?? "");
|
|
127
|
-
return word === "" || (from > 0 && parts.length === 1) ? undefined : word;
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
const wordAfterAt = (source: string, end: number): string | undefined => {
|
|
131
|
-
if (source.charAt(end) !== " ") return undefined;
|
|
132
|
-
const word = withoutTrailingMarks(source.slice(end + 1, end + 1 + NEIGHBOUR_LOOKBACK).split(/\s/u)[0] ?? "");
|
|
133
|
-
return word === "" ? undefined : word;
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* 解析器が名前の一語を名前と読まなかった所(to Rachel Whitford の Rachel を動詞と読む)。空白一つで隣の語と合わせた形を、ほかの所で
|
|
138
|
-
* 名前と読めていれば、その形の現れと見る。隣の語がほかの名前の現れに入るなら合わせない。
|
|
139
|
-
*/
|
|
140
|
-
export const withKnownNeighbours = (mentions: readonly NameMention[], source: string): NameMention[] => {
|
|
141
|
-
const known = new Set(mentions.filter((mention) => mention.words.length >= 2).map((mention) => mention.surface));
|
|
142
|
-
const taken = (start: number, end: number): boolean => mentions.some((mention) => mention.offset < end && start < mention.offset + mention.surface.length);
|
|
143
|
-
return mentions.map((mention) => {
|
|
144
|
-
const end = mention.offset + mention.surface.length;
|
|
145
|
-
const before = wordBeforeAt(source, mention.offset);
|
|
146
|
-
const after = wordAfterAt(source, end);
|
|
147
|
-
if (before !== undefined && known.has(`${before} ${mention.surface}`) && !taken(mention.offset - 1 - before.length, mention.offset - 1)) {
|
|
148
|
-
return {
|
|
149
|
-
...mention,
|
|
150
|
-
surface: `${before} ${mention.surface}`,
|
|
151
|
-
offset: mention.offset - 1 - before.length,
|
|
152
|
-
reading: undefined,
|
|
153
|
-
words: [before, ...mention.words],
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
if (after !== undefined && known.has(`${mention.surface} ${after}`) && !taken(end + 1, end + 1 + after.length)) {
|
|
157
|
-
return { ...mention, surface: `${mention.surface} ${after}`, reading: undefined, words: [...mention.words, after] };
|
|
158
|
-
}
|
|
159
|
-
return mention;
|
|
160
|
-
});
|
|
161
|
-
};
|
|
162
|
-
|
|
163
108
|
/** 敬称の前の名前の字数(髙橋、髙橋太郎)。長い漢字の連なり(株式会社髙橋)は名前だけを切り出せない。 */
|
|
164
109
|
const MAX_SUFFIXED_NAME = 4;
|
|
165
110
|
const MIN_SUFFIXED_NAME = 2;
|
|
@@ -218,7 +163,11 @@ export const nameKey = (surface: string): string =>
|
|
|
218
163
|
*/
|
|
219
164
|
export type NameEvidence = { readonly person: boolean; readonly named: boolean; readonly nameLike: boolean };
|
|
220
165
|
|
|
221
|
-
|
|
166
|
+
/** readings は書き方の現れの読みのすべて。解析器は同じ字を所によって別に読む(佐伯 を サエキ と サイキ)。 */
|
|
167
|
+
type Tally = NameEvidence & NameWeight & { readonly surface: string; readonly first: NameMention; readonly readings: readonly string[] };
|
|
168
|
+
|
|
169
|
+
const readingsWith = (readings: readonly string[], reading: string | undefined): readonly string[] =>
|
|
170
|
+
reading === undefined || readings.includes(reading) ? readings : [...readings, reading];
|
|
222
171
|
|
|
223
172
|
const evidenceOf = (mention: NameMention): NameEvidence => ({
|
|
224
173
|
person: mention.person === true,
|
|
@@ -235,22 +184,24 @@ const talliesOf = (mentions: readonly NameMention[]): Tally[] => {
|
|
|
235
184
|
tallies.set(
|
|
236
185
|
mention.surface,
|
|
237
186
|
tally === undefined
|
|
238
|
-
? { surface: mention.surface, first: mention, count: 1, ...evidence }
|
|
187
|
+
? { surface: mention.surface, first: mention, count: 1, readings: readingsWith([], mention.reading), labelled: mention.labelled === true, ...evidence }
|
|
239
188
|
: {
|
|
240
189
|
...tally,
|
|
241
190
|
count: tally.count + 1,
|
|
191
|
+
readings: readingsWith(tally.readings, mention.reading),
|
|
242
192
|
person: tally.person || evidence.person,
|
|
243
193
|
named: tally.named || evidence.named,
|
|
244
194
|
nameLike: tally.nameLike || evidence.nameLike,
|
|
195
|
+
labelled: tally.labelled || mention.labelled === true,
|
|
245
196
|
},
|
|
246
197
|
);
|
|
247
198
|
});
|
|
248
199
|
return [...tallies.values()];
|
|
249
200
|
};
|
|
250
201
|
|
|
251
|
-
/**
|
|
202
|
+
/** 重いほう(name-weight.ts)。同じ重さなら先に書いたほう。 */
|
|
252
203
|
const usualOf = (group: readonly Tally[]): Tally | undefined =>
|
|
253
|
-
group.toSorted((left, right) => right
|
|
204
|
+
group.toSorted((left, right) => heavierFirst(left, right) || left.first.offset - right.first.offset)[0];
|
|
254
205
|
|
|
255
206
|
const groupBy = (tallies: readonly Tally[], keysOf: (tally: Tally) => readonly string[]): Tally[][] => {
|
|
256
207
|
const groups = new Map<string, Tally[]>();
|
|
@@ -266,13 +217,17 @@ const groupBy = (tallies: readonly Tally[], keysOf: (tally: Tally) => readonly s
|
|
|
266
217
|
|
|
267
218
|
/**
|
|
268
219
|
* 組の中で、それぞれの書き方を、同じ名前と言える相手(alike)のうち多いほうと比べる。組全体で一番多いものとだけ比べると、
|
|
269
|
-
* 同じ読みの別の名前(山田太郎 と 矢間田多労)が多ければ、本当の書き分け(山田太朗)が隠れる。
|
|
220
|
+
* 同じ読みの別の名前(山田太郎 と 矢間田多労)が多ければ、本当の書き分け(山田太朗)が隠れる。alike が数を問う見方では、
|
|
221
|
+
* 一度だけ書いた相手を選んだのは人を書く欄に書いたからなので、field と言う。
|
|
270
222
|
*/
|
|
271
|
-
|
|
223
|
+
type Alike = (tally: Tally, other: Tally) => boolean;
|
|
224
|
+
|
|
225
|
+
const variantsIn = (groups: readonly Tally[][], kind: NameVariant["kind"], alike: Alike = () => true, counted = false): NameVariant[] =>
|
|
272
226
|
groups.flatMap((group) =>
|
|
273
227
|
group.flatMap((tally) => {
|
|
274
228
|
const usual = usualOf([tally, ...group.filter((other) => other !== tally && alike(tally, other))]);
|
|
275
|
-
|
|
229
|
+
if (usual === undefined || usual === tally) return [];
|
|
230
|
+
return [{ mention: tally.first, usual: usual.surface, kind: counted && usual.count === 1 ? "field" : kind }];
|
|
276
231
|
}),
|
|
277
232
|
);
|
|
278
233
|
|
|
@@ -335,28 +290,28 @@ const differingWords = (left: Tally, right: Tally): readonly [string, string] |
|
|
|
335
290
|
return leftWords.length === rightWords.length && leftWord !== undefined && rightWord !== undefined ? [leftWord, rightWord] : undefined;
|
|
336
291
|
};
|
|
337
292
|
|
|
338
|
-
/**
|
|
293
|
+
/** 一語だけが一字違いで、相手のほうが重い(outweighs)。どちらもふつうの語(Green と Greek)なら、別の二つの語。 */
|
|
339
294
|
const isSlipOf = (tally: Tally, other: Tally): boolean => {
|
|
340
|
-
if (tally.
|
|
295
|
+
if (!outweighs(other, tally) || (tally.first.ordinary === true && other.first.ordinary === true)) return false;
|
|
341
296
|
const words = differingWords(tally, other);
|
|
342
297
|
return words !== undefined && isNearWord(...words);
|
|
343
298
|
};
|
|
344
299
|
|
|
345
|
-
const nearVariants = (tallies: readonly Tally[]): NameVariant[] => variantsIn(groupBy(tallies, maskedKeys), "near", isSlipOf);
|
|
300
|
+
const nearVariants = (tallies: readonly Tally[]): NameVariant[] => variantsIn(groupBy(tallies, maskedKeys), "near", isSlipOf, true);
|
|
346
301
|
|
|
347
302
|
/**
|
|
348
303
|
* 名が同じで姓だけが二字ほど違う人の名前(Rachel Whitford と Rachel Whitfield)。一字違い(near)より遠いので、名と姓の二語以上
|
|
349
|
-
*
|
|
304
|
+
* で、違うのが最後の語のときに限る。相手のほうが重い(outweighs)。名の違う二人(Sara Whitford と Rachel Whitfield)は比べない。
|
|
350
305
|
*/
|
|
351
306
|
const isSurnameSlipOf = (tally: Tally, other: Tally): boolean => {
|
|
352
|
-
if (
|
|
307
|
+
if (!outweighs(other, tally)) return false;
|
|
353
308
|
const [words, others] = [wordsOf(tally.surface), wordsOf(other.surface)];
|
|
354
309
|
const last = words.length - 1;
|
|
355
310
|
const sameBefore = words.slice(0, last).every((word, index) => word === others[index]);
|
|
356
311
|
return last >= 1 && words.length === others.length && sameBefore && isNearSurname(words[last] ?? "", others[last] ?? "");
|
|
357
312
|
};
|
|
358
313
|
|
|
359
|
-
const surnameVariants = (tallies: readonly Tally[]): NameVariant[] => variantsIn(groupBy(tallies, maskedKeys), "surname", isSurnameSlipOf);
|
|
314
|
+
const surnameVariants = (tallies: readonly Tally[]): NameVariant[] => variantsIn(groupBy(tallies, maskedKeys), "surname", isSurnameSlipOf, true);
|
|
360
315
|
|
|
361
316
|
/** 字体の違う字(斎と斉)を組の代表の字に寄せた形。 */
|
|
362
317
|
const characterKey = (tally: Tally, chars: VariantChars): string => [...tally.surface].map((letter) => chars.get(letter) ?? letter).join("");
|
|
@@ -387,19 +342,20 @@ const oneCharApart = (left: string, right: string): boolean => {
|
|
|
387
342
|
};
|
|
388
343
|
|
|
389
344
|
/**
|
|
390
|
-
* 読みが同じ人の名前が、一字だけ違う(松本 と 松元)。読みの同じ別の姓(伊藤 と
|
|
391
|
-
*
|
|
345
|
+
* 読みが同じ人の名前が、一字だけ違う(松本 と 松元)。読みの同じ別の姓(伊藤 と 伊東)もあるので、相手のほうが重い(outweighs)
|
|
346
|
+
* ときに限る。
|
|
392
347
|
*/
|
|
393
|
-
const isPersonSlipOf = (tally: Tally, other: Tally): boolean =>
|
|
348
|
+
const isPersonSlipOf = (tally: Tally, other: Tally): boolean => outweighs(other, tally) && oneCharApart(tally.surface, other.surface);
|
|
394
349
|
|
|
395
350
|
const personReadingVariants = (tallies: readonly Tally[]): NameVariant[] =>
|
|
396
351
|
variantsIn(
|
|
397
352
|
groupBy(
|
|
398
353
|
tallies.filter((tally) => tally.person),
|
|
399
|
-
(tally) =>
|
|
354
|
+
(tally) => tally.readings,
|
|
400
355
|
),
|
|
401
356
|
"reading",
|
|
402
357
|
isPersonSlipOf,
|
|
358
|
+
true,
|
|
403
359
|
);
|
|
404
360
|
|
|
405
361
|
/**
|
|
@@ -418,7 +374,7 @@ export const nameVariants = (mentions: readonly NameMention[], chars: VariantCha
|
|
|
418
374
|
"kana",
|
|
419
375
|
),
|
|
420
376
|
...variantsIn(
|
|
421
|
-
groupBy(tallies, (tally) =>
|
|
377
|
+
groupBy(tallies, (tally) => tally.readings),
|
|
422
378
|
"reading",
|
|
423
379
|
oneWordApart,
|
|
424
380
|
),
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// 同じ名前の二つの書き方のうち、どちらを正しい形と見るか。多く書いたほう。どちらも一度だけなら、人を書く欄(氏名:、
|
|
2
|
+
// Contractor:)に書いたほう。欄に書いた名前は、書き手が確かめて書いた形。
|
|
3
|
+
|
|
4
|
+
/** count は文書の中で書いた数、labelled はどれかの現れを人を書く欄に書いたか。 */
|
|
5
|
+
export type NameWeight = { readonly count: number; readonly labelled: boolean };
|
|
6
|
+
|
|
7
|
+
/** 並べたとき重いほうが先。数が多いほう、同数なら欄に書いたほう。 */
|
|
8
|
+
export const heavierFirst = (left: NameWeight, right: NameWeight): number => right.count - left.count || Number(right.labelled) - Number(left.labelled);
|
|
9
|
+
|
|
10
|
+
/** 一度だけ書いた slip を、other の書き損じと見てよいか。other が二度以上か、どちらも一度だけで other だけを欄に書いたとき。 */
|
|
11
|
+
export const outweighs = (other: NameWeight, slip: NameWeight): boolean =>
|
|
12
|
+
slip.count === 1 && (other.count >= 2 || (other.count === 1 && other.labelled && !slip.labelled));
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// 人を書く欄(氏名:山下 美咲、Contractor: Priya Raman)に書いた名前。欄の語は語彙表 person-label から。
|
|
2
|
+
|
|
3
|
+
const FIELD_COLON = /[::]/u;
|
|
4
|
+
/** 欄の行の頭の、Markdown の印(箇条書き、引用、見出し、太字)。 */
|
|
5
|
+
const LINE_MARKS = /^[\s>*#+-]*(?:\*\*|__)?/u;
|
|
6
|
+
const TRAILING_BOLD = /(?:\*\*|__)$/u;
|
|
7
|
+
/** 「:」と名前のあいだ: 空白と太字の印だけ。欄の値の途中の名前(ご宿泊者:森下 千尋 様 の 千尋 様)は欄の名前でない。 */
|
|
8
|
+
const VALUE_START = /^(?:[ \t\u3000]|\*\*|__)*$/u;
|
|
9
|
+
/** 名前の後ろ: 太字の閉じと、行の終わり。日付などの括弧一つで終わってもよい。「,」の後ろは文の続きのことがある(Priya Raman, and …)。 */
|
|
10
|
+
const FIELD_END = /^(?:\*\*|__)?[ \t\u3000]*(?:[((][^()()\n]*[))][ \t\u3000]*)?(?:\r?\n|$)/u;
|
|
11
|
+
const LEADING_SPACE = /^[ \t\u3000]+/u;
|
|
12
|
+
/** 欄の語の前で語を切らない字。Company name の name は欄の語 Name ではない。患者氏名 の 氏名 は 氏名。 */
|
|
13
|
+
const WORD_BEFORE = /[\s\p{Script=Latin}]$/u;
|
|
14
|
+
|
|
15
|
+
const lineStart = (source: string, offset: number): number => source.lastIndexOf("\n", offset - 1) + 1;
|
|
16
|
+
|
|
17
|
+
/** 欄の語。行の頭の「:」の前まるごとで、大文字小文字は見ない。漢字やかなの欄の語は、前に語が付いてもよい(患者氏名)。 */
|
|
18
|
+
const isPersonLabel = (label: string, labels: readonly string[]): boolean => {
|
|
19
|
+
const lower = label.toLowerCase();
|
|
20
|
+
return labels.some((pattern) => {
|
|
21
|
+
const wanted = pattern.toLowerCase();
|
|
22
|
+
return lower === wanted || (lower.endsWith(wanted) && !WORD_BEFORE.test(lower.slice(0, -wanted.length)));
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/** 名前の後ろの敬称(中村 健太 様)を一つ除いた残り。 */
|
|
27
|
+
const afterSuffix = (rest: string, suffixes: readonly string[]): string => {
|
|
28
|
+
const trimmed = rest.replace(LEADING_SPACE, "");
|
|
29
|
+
const suffix = suffixes.find((word) => trimmed.startsWith(word));
|
|
30
|
+
return suffix === undefined ? rest : trimmed.slice(suffix.length);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* source の offset から length の名前が、人を書く欄の行の、欄の語と「:」のすぐ後ろにあり、そこで行が終わるか(氏名:山下 美咲、
|
|
35
|
+
* 患者氏名:中村 健太 様、- **Contractor:** Priya Raman、Name: **Priya Raman**)。suffixes は名前の後ろに付いてよい敬称(様)。
|
|
36
|
+
*/
|
|
37
|
+
export const isInPersonField = (source: string, offset: number, length: number, labels: readonly string[], suffixes: readonly string[] = []): boolean => {
|
|
38
|
+
const head = source.slice(lineStart(source, offset), offset);
|
|
39
|
+
const colon = head.search(FIELD_COLON);
|
|
40
|
+
if (colon < 0 || !VALUE_START.test(head.slice(colon + 1)) || !FIELD_END.test(afterSuffix(source.slice(offset + length), suffixes))) return false;
|
|
41
|
+
const label = head.slice(0, colon).replace(LINE_MARKS, "").replace(TRAILING_BOLD, "").trim();
|
|
42
|
+
return label !== "" && isPersonLabel(label, labels);
|
|
43
|
+
};
|