chaffjs 0.31.0 → 0.33.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 +124 -255
- package/dist/cli-text.js +2 -2
- 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/cross-run.d.ts.map +1 -1
- package/dist/cross-run.js +1 -0
- package/dist/cross-run.js.map +1 -1
- 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/agreement-slip.d.ts.map +1 -1
- package/dist/detectors/agreement-slip.js +4 -0
- package/dist/detectors/agreement-slip.js.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/formula-amount.d.ts +3 -0
- package/dist/detectors/formula-amount.d.ts.map +1 -0
- package/dist/detectors/formula-amount.js +41 -0
- package/dist/detectors/formula-amount.js.map +1 -0
- 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 +68 -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 +37 -11
- 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/formula-amount.d.ts +3 -0
- package/dist/detectors/registry/formula-amount.d.ts.map +1 -0
- package/dist/detectors/registry/formula-amount.js +3 -0
- package/dist/detectors/registry/formula-amount.js.map +1 -0
- 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 +1 -1
- package/dist/detectors/structure-tree.d.ts.map +1 -1
- package/dist/detectors/structure-tree.js +46 -12
- 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/eval.js +3 -3
- package/dist/eval.js.map +1 -1
- 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/fix-plan/text.js +2 -2
- package/dist/fix-plan/text.js.map +1 -1
- package/dist/lexicon-genres.d.ts +7 -0
- package/dist/lexicon-genres.d.ts.map +1 -0
- package/dist/lexicon-genres.js +8 -0
- package/dist/lexicon-genres.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 +8 -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/profile/parse.d.ts.map +1 -1
- package/dist/profile/parse.js +5 -0
- package/dist/profile/parse.js.map +1 -1
- 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/run.d.ts.map +1 -1
- package/dist/run.js +1 -0
- package/dist/run.js.map +1 -1
- 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 +5 -3
- package/dist/structure/date-range.d.ts.map +1 -1
- package/dist/structure/date-range.js +7 -9
- 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/formula-amount.d.ts +38 -0
- package/dist/structure/formula-amount.d.ts.map +1 -0
- package/dist/structure/formula-amount.js +187 -0
- package/dist/structure/formula-amount.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-fee.d.ts +52 -0
- package/dist/structure/installment-fee.d.ts.map +1 -0
- package/dist/structure/installment-fee.js +110 -0
- package/dist/structure/installment-fee.js.map +1 -0
- package/dist/structure/installment-total.d.ts +117 -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/start-end-range.d.ts +30 -0
- package/dist/structure/start-end-range.d.ts.map +1 -0
- package/dist/structure/start-end-range.js +79 -0
- package/dist/structure/start-end-range.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 +5 -4
- package/profiles/property-sale.yaml +21 -0
- 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 +4 -4
- 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/formula-amount-mismatch.yaml +67 -0
- 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 +63 -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 +5 -5
- 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/cli-text.ts +2 -2
- 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/cross-run.ts +1 -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/agreement-slip.ts +3 -0
- 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/formula-amount.ts +59 -0
- 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 +94 -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 +43 -11
- 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/formula-amount.ts +4 -0
- 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 +62 -12
- 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/eval.ts +3 -3
- 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/fix-plan/text.ts +2 -2
- package/src/lexicon-genres.ts +11 -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 +8 -0
- package/src/product-names.ts +98 -0
- package/src/profile/parse.ts +8 -0
- package/src/reference-numbers.ts +55 -0
- package/src/run.ts +1 -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 +9 -11
- 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/formula-amount.ts +236 -0
- package/src/structure/generic-role.ts +8 -0
- package/src/structure/gpa.ts +218 -0
- package/src/structure/installment-fee.ts +201 -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/start-end-range.ts +120 -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
package/src/company-names.ts
CHANGED
|
@@ -5,7 +5,16 @@ import { escapeRegExp } from "./orthography.ts";
|
|
|
5
5
|
// 会社の形の語(株式会社、Inc)は語彙表 company-form が言う。group が同じ語は同じ形(Inc と Incorporated、株式会社 と (株))、
|
|
6
6
|
// position は名前のどちら側に立つか(無ければどちらにも立つ)。名前の部分は、形の語のすぐ隣の、名前に使う字の連なり。
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
/**
|
|
9
|
+
* foreign は、カタカナか英字の名前のすぐ後ろにだけ立つ形の語(サウスベイ・インポート社 の 社)。漢字の語の中(会社、本社)では形の語でない。
|
|
10
|
+
* words はこの語で始まる語(社員、社長)で、そこでは形の語と読まない。
|
|
11
|
+
*/
|
|
12
|
+
export type CompanyForm = {
|
|
13
|
+
readonly pattern: string;
|
|
14
|
+
readonly group: string;
|
|
15
|
+
readonly position?: "before" | "after" | undefined;
|
|
16
|
+
readonly foreign?: { readonly words: readonly string[] } | undefined;
|
|
17
|
+
};
|
|
9
18
|
|
|
10
19
|
/** surface は形の語も含めた書いたまま。base は名前の部分、form は形の組、position は形の語が名前のどちら側にあるか。 */
|
|
11
20
|
export type CompanyMention = {
|
|
@@ -14,6 +23,8 @@ export type CompanyMention = {
|
|
|
14
23
|
readonly base: string;
|
|
15
24
|
readonly form: string;
|
|
16
25
|
readonly position: "before" | "after";
|
|
26
|
+
/** カタカナか英字の名前のすぐ後ろにだけ立つ形の語(社)で書いたもの。 */
|
|
27
|
+
readonly foreign?: boolean | undefined;
|
|
17
28
|
};
|
|
18
29
|
|
|
19
30
|
/** 二つの書き方の違い。spelling は記号・幅・大小だけ、form は会社の形、position は形の語の側、near は名前の一字違い。 */
|
|
@@ -26,7 +37,7 @@ export type IsProper = (start: number, end: number) => boolean;
|
|
|
26
37
|
|
|
27
38
|
const LATIN = /\p{Script=Latin}/u;
|
|
28
39
|
const LETTER = /\p{L}/u;
|
|
29
|
-
/**
|
|
40
|
+
/** 漢字・かなの名前に使う字。ひらがなは名前の頭にだけ立つ(kanaHeadOf)。 */
|
|
30
41
|
const CJK_NAME = /[\p{Script=Katakana}\p{Script=Han}\p{Script=Latin}\p{N}ー・&&]/u;
|
|
31
42
|
const NOT_HAN_LETTER = /(?!\p{Script=Han})\p{L}/u;
|
|
32
43
|
/** 英字の名前の一語。大文字か数字で始まる。 */
|
|
@@ -65,17 +76,69 @@ const CJK_BEFORE = new RegExp(`${CJK_NAME.source}+$`, "u");
|
|
|
65
76
|
const CJK_AFTER = new RegExp(`^${CJK_NAME.source}+`, "u");
|
|
66
77
|
const SPACES: ReadonlySet<string> = new Set([" ", "\u3000"]);
|
|
67
78
|
|
|
79
|
+
/**
|
|
80
|
+
* 名前の頭のひらがなを切り分ける語(語彙表 company-name-kana)。particles は前の語に続けて書く語(は、と、における)、openers は
|
|
81
|
+
* 句読点や行の頭に立つ語(また、なお)、ends は名前の頭の終わりに来ない字(の、る、て)。
|
|
82
|
+
*/
|
|
83
|
+
export type KanaStops = { readonly particles: readonly string[]; readonly openers: readonly string[]; readonly ends: readonly string[] };
|
|
84
|
+
|
|
85
|
+
/** ひらがなの前に何があるか。word は語や閉じ括弧(当社はこもれび、)により)、form は会社の形の語(株式会社こもれび)、boundary は句読点や行の頭。 */
|
|
86
|
+
export type KanaLead = "word" | "form" | "boundary";
|
|
87
|
+
|
|
88
|
+
const MIN_KANA_HEAD_LENGTH = 2;
|
|
89
|
+
|
|
90
|
+
const longestPrefix = (text: string, words: readonly string[]): string | undefined =>
|
|
91
|
+
words.filter((word) => text.startsWith(word)).toSorted((left, right) => right.length - left.length)[0];
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* 漢字やカタカナの名前のすぐ前のひらがなのうち、名前の頭と読む所(はこもれび の こもれび)。語のすぐ後ろなら助詞で始まるときだけ、
|
|
95
|
+
* その後ろを読む。形の語のすぐ後ろなら助詞で始まらないときだけ。二字以上で、句読点の後に立つ語で始まらず、助詞や動詞の終わりの字で終わらないもの。
|
|
96
|
+
* 語彙表が無ければ(英語の文書)ひらがなは名前に入れない。
|
|
97
|
+
*/
|
|
98
|
+
export const kanaHeadOf = (kana: string, lead: KanaLead, stops: KanaStops): string | undefined => {
|
|
99
|
+
if (stops.particles.length === 0) return undefined;
|
|
100
|
+
const particle = longestPrefix(kana, stops.particles);
|
|
101
|
+
if ((lead === "word" && particle === undefined) || (lead === "form" && particle !== undefined)) return undefined;
|
|
102
|
+
const head = lead === "word" ? kana.slice(particle?.length ?? 0) : kana;
|
|
103
|
+
if ([...head].length < MIN_KANA_HEAD_LENGTH || longestPrefix(head, stops.openers) !== undefined) return undefined;
|
|
104
|
+
return stops.ends.some((end) => head.endsWith(end)) ? undefined : head;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
/** ひらがなをその前の語に続けて読む字。閉じ括弧や数字の後ろのひらがなも助詞()により、第3条の)。 */
|
|
108
|
+
const GLUED = /[\p{L}\p{N}\p{Pe}\p{Pf}]/u;
|
|
109
|
+
const HIRAGANA = /\p{Script=Hiragana}/u;
|
|
110
|
+
const KANA_AFTER = /^\p{Script=Hiragana}+/u;
|
|
111
|
+
|
|
112
|
+
/** end の前に続くひらがなの始まり。 */
|
|
113
|
+
const kanaRunStart = (source: string, end: number): number => {
|
|
114
|
+
let start = end;
|
|
115
|
+
while (start > 0 && HIRAGANA.test(source.charAt(start - 1))) start -= 1;
|
|
116
|
+
return start;
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
/** 名前の前に続くひらがなのうち、名前の頭と読む所を足した始まり。 */
|
|
120
|
+
const withKanaHead = (source: string, start: number, stops: KanaStops): number => {
|
|
121
|
+
const kanaStart = kanaRunStart(source, start);
|
|
122
|
+
if (kanaStart === start) return start;
|
|
123
|
+
const lead = GLUED.test(source.charAt(kanaStart - 1)) ? "word" : "boundary";
|
|
124
|
+
return start - (kanaHeadOf(source.slice(kanaStart, start), lead, stops)?.length ?? 0);
|
|
125
|
+
};
|
|
126
|
+
|
|
68
127
|
/** 漢字・かなの名前: 形の語の隣の、名前に使う字の続き。形の語との間の空白一つは名前の外。 */
|
|
69
|
-
const cjkBaseBefore = (source: string, end: number): Span | undefined => {
|
|
128
|
+
const cjkBaseBefore = (source: string, end: number, stops: KanaStops): Span | undefined => {
|
|
70
129
|
const stop = SPACES.has(source.charAt(end - 1)) ? end - 1 : end;
|
|
71
130
|
const match = CJK_BEFORE.exec(source.slice(0, stop));
|
|
72
|
-
return match === null ? undefined : { start: match.index, end: stop };
|
|
131
|
+
return match === null ? undefined : { start: withKanaHead(source, match.index, stops), end: stop };
|
|
73
132
|
};
|
|
74
133
|
|
|
75
|
-
|
|
134
|
+
/** 形の語の後ろの名前。ひらがなで始まる名前(株式会社こもれび珈琲)は、ひらがなの後ろに名前に使う字が続くときだけ。 */
|
|
135
|
+
const cjkBaseAfter = (source: string, start: number, stops: KanaStops): Span | undefined => {
|
|
76
136
|
const from = SPACES.has(source.charAt(start)) ? start + 1 : start;
|
|
77
|
-
const
|
|
78
|
-
|
|
137
|
+
const kana = KANA_AFTER.exec(source.slice(from))?.[0] ?? "";
|
|
138
|
+
const head = kana === "" ? "" : kanaHeadOf(kana, "form", stops);
|
|
139
|
+
if (head === undefined) return undefined;
|
|
140
|
+
const match = CJK_AFTER.exec(source.slice(from + head.length));
|
|
141
|
+
return match === null ? undefined : { start: from, end: from + head.length + match[0].length };
|
|
79
142
|
};
|
|
80
143
|
|
|
81
144
|
/** 名前の部分の字数。一字(法令の項目の印 イ、ロ)は名前と読まない。 */
|
|
@@ -94,22 +157,50 @@ const mentionOf = (source: string, base: Span, form: Span, group: string): Compa
|
|
|
94
157
|
return { surface: source.slice(start, end), offset: start, base: source.slice(base.start, base.end), form: group, position };
|
|
95
158
|
};
|
|
96
159
|
|
|
97
|
-
|
|
98
|
-
|
|
160
|
+
/** カタカナか英字の名前の字。英字の語の間の空白一つも名前の内。 */
|
|
161
|
+
const FOREIGN_CHAR = /[\p{Script=Katakana}\p{Script=Latin}\p{N}ー・&&'’.\- ]/u;
|
|
162
|
+
/** 形の語のすぐ前の字。カタカナ・長音の印・英字のときだけ、形の語と読む(会社、本社、神社の 社 は読まない)。 */
|
|
163
|
+
const FOREIGN_END = /(?:[\p{Script=Katakana}ー\p{Script=Latin}]|\p{Script=Latin}\.)$/u;
|
|
164
|
+
/** 名前の頭に立たない字(空白、記号、数字だけの頭はそのまま残す)。 */
|
|
165
|
+
const FOREIGN_LEAD = /^[\s・&&'’.-]+/u;
|
|
166
|
+
/** カタカナの語に一字の記号を付けた仮の名前(ベンダーA、メーカーB)。名前ではないので、A と B を一字違いと見ない。 */
|
|
167
|
+
const PLACEHOLDER = /[\p{Script=Katakana}ー]\s?[\p{Lu}\p{N}]$/u;
|
|
168
|
+
|
|
169
|
+
/** text の終わりに続く、カタカナか英字の名前の字の始まり。 */
|
|
170
|
+
const foreignRunStart = (text: string): number => {
|
|
171
|
+
let start = text.length;
|
|
172
|
+
while (start > 0 && FOREIGN_CHAR.test(text.charAt(start - 1))) start -= 1;
|
|
173
|
+
return start;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
/** カタカナか英字の名前のすぐ後ろの形の語(サウスベイ・インポート社、Marlow Bay社)。形の語で始まる漢字の語(社員、社長)は外す。 */
|
|
177
|
+
const foreignMentionAt = (source: string, form: CompanyForm, at: number, words: readonly string[]): CompanyMention | undefined => {
|
|
178
|
+
const before = source.slice(0, at);
|
|
179
|
+
if (!FOREIGN_END.test(before) || words.some((word) => source.startsWith(word, at))) return undefined;
|
|
180
|
+
const run = before.slice(foreignRunStart(before));
|
|
181
|
+
const start = at - run.length + (FOREIGN_LEAD.exec(run)?.[0].length ?? 0);
|
|
182
|
+
const base = { start, end: at };
|
|
183
|
+
if (!isNameBase(source, base, () => false) || PLACEHOLDER.test(source.slice(start, at))) return undefined;
|
|
184
|
+
return { ...mentionOf(source, base, { start: at, end: at + form.pattern.length }, form.group), foreign: true };
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
const baseBefore = (source: string, at: number, latin: boolean, isProper: IsProper, stops: KanaStops): Span | undefined =>
|
|
188
|
+
latin ? latinBaseBefore(source, at, isProper) : cjkBaseBefore(source, at, stops);
|
|
99
189
|
|
|
100
190
|
/** 形の語の一つの現れから、会社の名前の現れ。名前が前にあればそれを、無ければ後ろを取る。 */
|
|
101
|
-
const mentionAt = (source: string, form: CompanyForm, at: number, isProper: IsProper): CompanyMention | undefined => {
|
|
191
|
+
const mentionAt = (source: string, form: CompanyForm, at: number, isProper: IsProper, stops: KanaStops): CompanyMention | undefined => {
|
|
192
|
+
if (form.foreign !== undefined) return foreignMentionAt(source, form, at, form.foreign.words);
|
|
102
193
|
const formSpan = { start: at, end: at + form.pattern.length };
|
|
103
194
|
const latin = LATIN.test(form.pattern);
|
|
104
195
|
if (latin && CONTINUED.test(source.slice(formSpan.end))) return undefined;
|
|
105
|
-
const before = form.position === "before" ? undefined : baseBefore(source, at, latin, isProper);
|
|
196
|
+
const before = form.position === "before" ? undefined : baseBefore(source, at, latin, isProper, stops);
|
|
106
197
|
if (before !== undefined && isNameBase(source, before, isProper)) return mentionOf(source, before, formSpan, form.group);
|
|
107
|
-
const after = form.position === "after" || latin ? undefined : cjkBaseAfter(source, formSpan.end);
|
|
198
|
+
const after = form.position === "after" || latin ? undefined : cjkBaseAfter(source, formSpan.end, stops);
|
|
108
199
|
return after !== undefined && isNameBase(source, after, isProper) ? mentionOf(source, after, formSpan, form.group) : undefined;
|
|
109
200
|
};
|
|
110
201
|
|
|
111
202
|
/** 文書の中の会社の名前の現れ。長い形の語(Co., Ltd)を先に取り、その中の短い語(Ltd)は数えない。 */
|
|
112
|
-
export const companyMentionsIn = (source: string, forms: readonly CompanyForm[], isProper: IsProper): CompanyMention[] => {
|
|
203
|
+
export const companyMentionsIn = (source: string, forms: readonly CompanyForm[], isProper: IsProper, stops: KanaStops): CompanyMention[] => {
|
|
113
204
|
const taken: Span[] = [];
|
|
114
205
|
return forms
|
|
115
206
|
.toSorted((left, right) => right.pattern.length - left.pattern.length)
|
|
@@ -118,7 +209,7 @@ export const companyMentionsIn = (source: string, forms: readonly CompanyForm[],
|
|
|
118
209
|
const end = at + form.pattern.length;
|
|
119
210
|
if (!standsAsWord(source, form.pattern, at) || taken.some((span) => span.start < end && at < span.end)) return [];
|
|
120
211
|
taken.push({ start: at, end });
|
|
121
|
-
const mention = mentionAt(source, form, at, isProper);
|
|
212
|
+
const mention = mentionAt(source, form, at, isProper, stops);
|
|
122
213
|
return mention === undefined ? [] : [mention];
|
|
123
214
|
}),
|
|
124
215
|
)
|
|
@@ -130,23 +221,30 @@ const MIN_SLIP_LENGTH = 7;
|
|
|
130
221
|
const spliced = (chars: readonly string[], at: number, count: number): string => chars.toSpliced(at, count).join("");
|
|
131
222
|
const firstDifference = (left: readonly string[], right: readonly string[]): number => left.findIndex((char, index) => char !== right[index]);
|
|
132
223
|
|
|
224
|
+
/** 一字違いの、違う字(changed)と、それが立つ名前の字(chars)の何字目か(at)。 */
|
|
225
|
+
type Change = { readonly changed: readonly string[]; readonly chars: readonly string[]; readonly at: number };
|
|
226
|
+
|
|
133
227
|
/** 一字の抜けなら、その字。 */
|
|
134
|
-
const droppedChars = (longer: readonly string[], shorter: readonly string[]):
|
|
228
|
+
const droppedChars = (longer: readonly string[], shorter: readonly string[]): Change | undefined => {
|
|
135
229
|
if (longer.length !== shorter.length + 1) return undefined;
|
|
136
230
|
const at = firstDifference(longer, shorter);
|
|
137
|
-
return spliced(longer, at, 1) === shorter.join("") ? [longer[at] ?? ""] : undefined;
|
|
231
|
+
return spliced(longer, at, 1) === shorter.join("") ? { changed: [longer[at] ?? ""], chars: longer, at } : undefined;
|
|
138
232
|
};
|
|
139
233
|
|
|
140
234
|
/** 一字の置き換えか、隣どうしの入れ替えなら、その字。 */
|
|
141
|
-
const replacedChars = (left: readonly string[], right: readonly string[]):
|
|
235
|
+
const replacedChars = (left: readonly string[], right: readonly string[]): Change | undefined => {
|
|
142
236
|
const at = firstDifference(left, right);
|
|
143
|
-
const
|
|
237
|
+
const change = { changed: [left[at] ?? "", right[at] ?? ""], chars: left, at };
|
|
144
238
|
if (left.length !== right.length || at < 0) return undefined;
|
|
145
|
-
if (spliced(left, at, 1) === spliced(right, at, 1)) return
|
|
239
|
+
if (spliced(left, at, 1) === spliced(right, at, 1)) return change;
|
|
146
240
|
const swapped = left[at] === right[at + 1] && left[at + 1] === right[at] && spliced(left, at, 2) === spliced(right, at, 2);
|
|
147
|
-
return swapped ?
|
|
241
|
+
return swapped ? change : undefined;
|
|
148
242
|
};
|
|
149
243
|
|
|
244
|
+
/** 名前の部分の一字違い(置き換え・抜け・隣どうしの入れ替え)。 */
|
|
245
|
+
const changeBetween = (leftChars: readonly string[], rightChars: readonly string[]): Change | undefined =>
|
|
246
|
+
replacedChars(leftChars, rightChars) ?? droppedChars(leftChars, rightChars) ?? droppedChars(rightChars, leftChars);
|
|
247
|
+
|
|
150
248
|
/**
|
|
151
249
|
* 名前の部分が一字違いか(置き換え・抜け・隣どうしの入れ替え)。違う字が漢字なら見ない。漢字の一字違い(日本電気 と 日本電機)
|
|
152
250
|
* は別の会社のことがある。短い名前(Alpha と Alpho)も別の会社のことが多い。
|
|
@@ -154,13 +252,40 @@ const replacedChars = (left: readonly string[], right: readonly string[]): strin
|
|
|
154
252
|
const isSlip = (left: string, right: string): boolean => {
|
|
155
253
|
const [leftChars, rightChars] = [[...left], [...right]];
|
|
156
254
|
if (Math.min(leftChars.length, rightChars.length) < MIN_SLIP_LENGTH) return false;
|
|
157
|
-
const
|
|
158
|
-
return
|
|
255
|
+
const change = changeBetween(leftChars, rightChars);
|
|
256
|
+
return change !== undefined && change.changed.every((char) => NOT_HAN_LETTER.test(char));
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
const HAN = /\p{Script=Han}/u;
|
|
260
|
+
const KANA = /^[\p{Script=Hiragana}\p{Script=Katakana}ー]$/u;
|
|
261
|
+
/** 漢字を含む短い名前で、一字違いを見るかなの語の字数。三字のかなの語(サンワ と サンヨ)は別の会社のことがある。 */
|
|
262
|
+
const MIN_KANA_WORD_LENGTH = 4;
|
|
263
|
+
|
|
264
|
+
/** at の字を含む、かなの続きの字数。 */
|
|
265
|
+
const kanaRunLength = (chars: readonly string[], at: number): number => {
|
|
266
|
+
const isKanaAt = (index: number): boolean => KANA.test(chars[index] ?? "");
|
|
267
|
+
if (!isKanaAt(at)) return 0;
|
|
268
|
+
const start = chars.findLastIndex((_char, index) => index < at && !isKanaAt(index)) + 1;
|
|
269
|
+
const end = chars.findIndex((_char, index) => index > at && !isKanaAt(index));
|
|
270
|
+
return (end < 0 ? chars.length : end) - start;
|
|
159
271
|
};
|
|
160
272
|
|
|
161
|
-
/**
|
|
273
|
+
/**
|
|
274
|
+
* 漢字を含む名前の、四字以上のかなの語の中の、かな一字違い(コモレビ電機 と コモレピ電機)。漢字の部分が同じなので、七字に
|
|
275
|
+
* 満たない名前でも見る。漢字の一字違い(日本電気 と 日本電機)は見ない。
|
|
276
|
+
*/
|
|
277
|
+
export const isKanaWordSlip = (left: string, right: string): boolean => {
|
|
278
|
+
if (!HAN.test(left) || !HAN.test(right)) return false;
|
|
279
|
+
const change = changeBetween([...left], [...right]);
|
|
280
|
+
return change !== undefined && change.changed.every((char) => KANA.test(char)) && kanaRunLength(change.chars, change.at) >= MIN_KANA_WORD_LENGTH;
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* 名前の部分が同じ二つ。同じ形の短い書き方と長い書き方(株式会社 と (株)、Inc と Incorporated)は書き分けと見ない。社で呼ぶ書き方
|
|
285
|
+
* (アップル社 と アップル株式会社)は正式の名前を略した呼び方なので、ほかの形の語と比べない。
|
|
286
|
+
*/
|
|
162
287
|
const sameNameRelation = (left: CompanyMention, right: CompanyMention): CompanyRelation | undefined => {
|
|
163
|
-
if (left.form !== right.form) return "form";
|
|
288
|
+
if (left.form !== right.form) return left.foreign === true || right.foreign === true ? undefined : "form";
|
|
164
289
|
if (left.position !== right.position) return "position";
|
|
165
290
|
return nameKey(left.surface) === nameKey(right.surface) ? "spelling" : undefined;
|
|
166
291
|
};
|
|
@@ -191,12 +316,20 @@ const talliesOf = (mentions: readonly CompanyMention[]): Tally[] => {
|
|
|
191
316
|
/** 多いほうが先。同数なら先に書いたほう。 */
|
|
192
317
|
const byUsage = (left: Tally, right: Tally): number => right.count - left.count || left.first.offset - right.first.offset;
|
|
193
318
|
|
|
319
|
+
/** 短い名前のかなの一字違いは、別の会社のこともあるので、相手が二度以上、こちらが一度だけのときに限る。 */
|
|
320
|
+
const relationBetween = (tally: Tally, other: Tally): CompanyRelation | undefined => {
|
|
321
|
+
const relation = companyRelation(tally.first, other.first);
|
|
322
|
+
if (relation !== undefined || tally.count !== 1 || other.count < 2) return relation;
|
|
323
|
+
const [left, right] = [tally.first, other.first];
|
|
324
|
+
return left.form === right.form && left.position === right.position && isKanaWordSlip(nameKey(left.base), nameKey(right.base)) ? "near" : undefined;
|
|
325
|
+
};
|
|
326
|
+
|
|
194
327
|
/** 同じ会社の、少ないほうの書き方。同じ会社と言える相手のうち一番多いものと比べる。書き方ごとに最初の現れを一つ。 */
|
|
195
328
|
export const companyVariants = (mentions: readonly CompanyMention[]): CompanyVariant[] => {
|
|
196
329
|
const tallies = talliesOf(mentions);
|
|
197
330
|
return tallies.flatMap((tally) => {
|
|
198
|
-
const [usual] = tallies.filter((other) => other === tally ||
|
|
199
|
-
const kind = usual === undefined || usual === tally ? undefined :
|
|
331
|
+
const [usual] = tallies.filter((other) => other === tally || relationBetween(tally, other) !== undefined).toSorted(byUsage);
|
|
332
|
+
const kind = usual === undefined || usual === tally ? undefined : relationBetween(tally, usual);
|
|
200
333
|
return usual === undefined || kind === undefined ? [] : [{ mention: tally.first, usual: usual.first.surface, kind }];
|
|
201
334
|
});
|
|
202
335
|
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// A two-column table row named by an address label (| 物件所在地 | 東京都… |, | Address | 12 Elm Street … |) read as the
|
|
2
|
+
// line `物件所在地 東京都…` the contact readers read: the prose masks tables, so the row's name is written back right before
|
|
3
|
+
// its value, at the row's own offsets. Only a table of two columns: a wider table's rows name whose address it is in
|
|
4
|
+
// another cell, and a list of shops or venues would compare neighbours. Pure.
|
|
5
|
+
import type { LexiconEntry } from "../plugin.ts";
|
|
6
|
+
import { cellsOf, tablesOf, type Cell } from "../facts/table-facts.ts";
|
|
7
|
+
import { withoutEdgeMarks } from "../facts/trim-marks.ts";
|
|
8
|
+
import { linesOf } from "../structure/lines.ts";
|
|
9
|
+
|
|
10
|
+
const TWO_COLUMNS = 2;
|
|
11
|
+
const LETTER = /\p{L}/u;
|
|
12
|
+
const LATIN_START = /^[A-Za-z]/u;
|
|
13
|
+
|
|
14
|
+
/** Whether a row's name ends with a label: 物件所在地 with 所在地, Property address with address (a Latin label as a whole word). */
|
|
15
|
+
const endsWithLabel = (name: string, label: string): boolean => {
|
|
16
|
+
const lowered = name.toLowerCase();
|
|
17
|
+
const pattern = label.toLowerCase();
|
|
18
|
+
if (!lowered.endsWith(pattern)) return false;
|
|
19
|
+
return !LATIN_START.test(label) || !LETTER.test(lowered.charAt(lowered.length - pattern.length - 1));
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
type LabelledRow = { readonly name: string; readonly nameEnd: number; readonly value: Cell };
|
|
23
|
+
|
|
24
|
+
const labelledRow = (cells: readonly Cell[], labels: readonly LexiconEntry[]): LabelledRow[] => {
|
|
25
|
+
const [first, value] = cells;
|
|
26
|
+
if (cells.length !== TWO_COLUMNS || first === undefined || value === undefined) return [];
|
|
27
|
+
const name = withoutEdgeMarks(first.text);
|
|
28
|
+
return labels.some((entry) => endsWithLabel(name, entry.pattern)) ? [{ name, nameEnd: first.end, value }] : [];
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/** The two-column rows of a text's tables whose first cell names an address. */
|
|
32
|
+
const labelledRows = (tables: string, labels: readonly LexiconEntry[]): LabelledRow[] =>
|
|
33
|
+
tablesOf(linesOf(tables))
|
|
34
|
+
.filter((table) => cellsOf(table.header).length === TWO_COLUMNS)
|
|
35
|
+
.flatMap((table) => table.rows.flatMap((row) => labelledRow(cellsOf(row), labels)));
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The prose with each labelled two-column row of `tables` (the same text with its tables shown) written back as its name
|
|
39
|
+
* then its value. The name ends where its cell ends, so it stays inside the row's span. Offsets are kept.
|
|
40
|
+
*/
|
|
41
|
+
export const proseWithLabelledRows = (prose: string, tables: string, labels: readonly LexiconEntry[]): string => {
|
|
42
|
+
const pieces: string[] = [];
|
|
43
|
+
const end = labelledRows(tables, labels).reduce((from, row) => {
|
|
44
|
+
const nameStart = row.nameEnd - row.name.length;
|
|
45
|
+
if (nameStart < from) return from;
|
|
46
|
+
pieces.push(prose.slice(from, nameStart), row.name, prose.slice(row.nameEnd, row.value.start), row.value.text);
|
|
47
|
+
return row.value.end;
|
|
48
|
+
}, 0);
|
|
49
|
+
pieces.push(prose.slice(end));
|
|
50
|
+
return pieces.join("");
|
|
51
|
+
};
|
package/src/cross-run.ts
CHANGED
|
@@ -40,6 +40,7 @@ const optionsFor = (input: CrossInput, rule: RuleDefinition): DetectorOptions =>
|
|
|
40
40
|
lexicon: rule.word_list === undefined ? undefined : input.doc.lexicons[rule.word_list],
|
|
41
41
|
where: rule.where,
|
|
42
42
|
...(rule.options === undefined ? {} : { settings: optionValues(settleOptions(rule.id, rule.options, input.context.optionLayers ?? [])) }),
|
|
43
|
+
genre: input.context.genre,
|
|
43
44
|
});
|
|
44
45
|
|
|
45
46
|
/** What one rule did to the documents taking part (by path): its findings, or why it did not run after all. */
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import type { Span } from "../plugin.ts";
|
|
2
|
+
import { calendarDateOf } from "./date-arithmetic.ts";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 生年月日のラベルの付いた日付と同じ行の年齢(「生年月日:1978年4月12日(受診時 48歳)」)を、ラベルの付いた日(受診日、報告日、
|
|
6
|
+
* Examination date)の満年齢と比べる。年齢の印(受診時)があれば、その印と同じ group のラベルの日で数える。
|
|
7
|
+
* 数える日が決まらない(無い、同じ group に違う日が二つ、日によって満年齢が変わる)ときは何も言わない。
|
|
8
|
+
*/
|
|
9
|
+
export type LabelWord = { readonly pattern: string; readonly position?: "before" | "after" | undefined; readonly group?: string | undefined };
|
|
10
|
+
|
|
11
|
+
export type Age = Span & { readonly amount: number; readonly approximate: boolean };
|
|
12
|
+
|
|
13
|
+
/** The span is the date of birth; birth is its value (1978-04-12). */
|
|
14
|
+
export type LabelledBirth = Span & { readonly birth: string; readonly age: Age; readonly group: string | undefined };
|
|
15
|
+
|
|
16
|
+
export type LabelledReference = Span & { readonly date: string; readonly group: string };
|
|
17
|
+
|
|
18
|
+
export type AgeVerdict = { readonly birth: LabelledBirth; readonly reference: LabelledReference; readonly expected: number };
|
|
19
|
+
|
|
20
|
+
const FEBRUARY = 2;
|
|
21
|
+
const LEAP_DAY = 29;
|
|
22
|
+
const LEAP_DAY_EVE = 28;
|
|
23
|
+
const LEAP_CYCLE = 4;
|
|
24
|
+
const CENTURY = 100;
|
|
25
|
+
const LEAP_CENTURY = 400;
|
|
26
|
+
|
|
27
|
+
const isLeapYear = (year: number): boolean => (year % LEAP_CYCLE === 0 && year % CENTURY !== 0) || year % LEAP_CENTURY === 0;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* 満年齢。誕生日の前日までは一つ少ない。2月29日生まれの、うるう年でない年の2月28日は、法と慣習で数え方が分かれるので undefined。
|
|
31
|
+
* 年の無い日付、生まれる前の日も undefined。
|
|
32
|
+
*/
|
|
33
|
+
export const ageOn = (birthValue: string, onValue: string): number | undefined => {
|
|
34
|
+
const birth = calendarDateOf(birthValue);
|
|
35
|
+
const on = calendarDateOf(onValue);
|
|
36
|
+
if (birth?.year === undefined || on?.year === undefined) return undefined;
|
|
37
|
+
const leapDayEve = birth.month === FEBRUARY && birth.day === LEAP_DAY && on.month === FEBRUARY && on.day === LEAP_DAY_EVE && !isLeapYear(on.year);
|
|
38
|
+
if (leapDayEve) return undefined;
|
|
39
|
+
const reached = on.month > birth.month || (on.month === birth.month && on.day >= birth.day);
|
|
40
|
+
const age = on.year - birth.year - (reached ? 0 : 1);
|
|
41
|
+
return age < 0 ? undefined : age;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/** 年齢の印(受診時)が名指す group のラベルの日。その group の日が無ければ、ラベルの付いた日すべて。 */
|
|
45
|
+
const candidatesFor = (birth: LabelledBirth, references: readonly LabelledReference[]): readonly LabelledReference[] => {
|
|
46
|
+
const named = references.filter((reference) => reference.group === birth.group);
|
|
47
|
+
return named.length > 0 ? named : references;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/** 同じ group に違う日が二つあれば(受診日が二つ)、どちらの日の年齢か決まらない。 */
|
|
51
|
+
const hasConflictingGroup = (candidates: readonly LabelledReference[]): boolean =>
|
|
52
|
+
candidates.some((left) => candidates.some((right) => left.group === right.group && left.date !== right.date));
|
|
53
|
+
|
|
54
|
+
const verdictOf = (birth: LabelledBirth, references: readonly LabelledReference[]): AgeVerdict[] => {
|
|
55
|
+
const candidates = candidatesFor(birth, references);
|
|
56
|
+
const [first] = candidates;
|
|
57
|
+
if (birth.age.approximate || first === undefined || hasConflictingGroup(candidates)) return [];
|
|
58
|
+
const ages = candidates.map((reference) => ageOn(birth.birth, reference.date));
|
|
59
|
+
const expected = ages[0];
|
|
60
|
+
if (expected === undefined || ages.some((age) => age !== expected)) return [];
|
|
61
|
+
return [{ birth, reference: first, expected }];
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/** 数える日が一つに決まった年齢と、その日の満年齢。書いた年齢と合うものも含む。 */
|
|
65
|
+
export const ageVerdicts = (births: readonly LabelledBirth[], references: readonly LabelledReference[]): AgeVerdict[] =>
|
|
66
|
+
births.flatMap((birth) => verdictOf(birth, references));
|
|
67
|
+
|
|
68
|
+
export const ageMismatches = (births: readonly LabelledBirth[], references: readonly LabelledReference[]): AgeVerdict[] =>
|
|
69
|
+
ageVerdicts(births, references).filter((verdict) => verdict.birth.age.amount !== verdict.expected);
|
|
70
|
+
|
|
71
|
+
const WORD_CHAR = /[\p{L}\p{N}]/u;
|
|
72
|
+
const SEPARATOR = /[\s::|**]/u;
|
|
73
|
+
|
|
74
|
+
const withoutTrailingSeparators = (text: string): string => {
|
|
75
|
+
let end = text.length;
|
|
76
|
+
while (end > 0 && SEPARATOR.test(text.charAt(end - 1))) end -= 1;
|
|
77
|
+
return text.slice(0, end);
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const isWordAt = (text: string, at: number): boolean => WORD_CHAR.test(text.charAt(at));
|
|
81
|
+
|
|
82
|
+
/** text の終わりに、語の切れ目から書いた word。 */
|
|
83
|
+
const endsWithWord = (text: string, word: string): boolean => text.endsWith(word) && !isWordAt(text, text.length - word.length - 1);
|
|
84
|
+
|
|
85
|
+
/** text の頭に書いた word。英字の語は、後ろが語の切れ目のときだけ。 */
|
|
86
|
+
const startsWithWord = (text: string, word: string): boolean => text.startsWith(word) && (!/[a-z]$/u.test(word) || !isWordAt(text, word.length));
|
|
87
|
+
|
|
88
|
+
const before = (word: LabelWord): boolean => (word.position ?? "before") === "before";
|
|
89
|
+
|
|
90
|
+
/** ラベルの前に書いてよいもの: 行の頭、表の区切り、強調や箇条書きの印、括弧や読点。「前回受診日」「Previous examination date」は別の日。 */
|
|
91
|
+
const FIELD_START = /(?:^|[|**#>\-・•(())、,;;。.])$/u;
|
|
92
|
+
|
|
93
|
+
/** text の終わりに書いた年齢(「(age 23」の後ろの as of は、その年齢を数える日の印)。 */
|
|
94
|
+
const endsWithAge = (text: string, words: AgeWords | undefined): boolean => words !== undefined && agesIn(text, words).some((age) => age.end === text.length);
|
|
95
|
+
|
|
96
|
+
/** 日付の前(同じ行の、日付までの文字)の終わりに、区切り(:、|、**)を除いて書いたラベル。ラベルは欄の頭から、または words の年齢のすぐ後ろに書いたものだけ。 */
|
|
97
|
+
export const labelBefore = (lineBefore: string, labels: readonly LabelWord[], words?: AgeWords): LabelWord | undefined => {
|
|
98
|
+
const head = withoutTrailingSeparators(lineBefore).toLowerCase();
|
|
99
|
+
return labels.filter(before).find((label) => {
|
|
100
|
+
const pattern = label.pattern.toLowerCase();
|
|
101
|
+
if (!head.endsWith(pattern)) return false;
|
|
102
|
+
const lead = head.slice(0, head.length - pattern.length).trimEnd();
|
|
103
|
+
return FIELD_START.test(lead) || endsWithAge(lead, words);
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
/** 日付のすぐ後ろに書いたラベル(2026年4月1日時点)。 */
|
|
108
|
+
export const labelAfter = (lineAfter: string, labels: readonly LabelWord[]): LabelWord | undefined => {
|
|
109
|
+
const tail = lineAfter.trimStart().toLowerCase();
|
|
110
|
+
return labels.filter((label) => !before(label)).find((label) => startsWithWord(tail, label.pattern.toLowerCase()));
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
/** 年齢の書き方。before は数の前の語(age、aged)、after は数の後ろの語(歳、old)、skip は数と after のあいだに書いてよい語(years)。 */
|
|
114
|
+
export type AgeWords = {
|
|
115
|
+
readonly before: readonly string[];
|
|
116
|
+
readonly after: readonly string[];
|
|
117
|
+
readonly skip: readonly string[];
|
|
118
|
+
readonly approximateBefore: readonly string[];
|
|
119
|
+
readonly approximateAfter: readonly string[];
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
/** 年齢の幅(59-60歳、59〜60 years old)の片方は、書いた年齢ではない。 */
|
|
123
|
+
const RANGE_BEFORE = /[0-90-9]\s*(?:[-–—~〜~]|\sto)$/iu;
|
|
124
|
+
const RANGE_AFTER = /^\s*(?:[-–—~〜~]|to\s)\s*[0-90-9]/iu;
|
|
125
|
+
|
|
126
|
+
const AGE_NUMBER = /(?<![0-90-9]|[0-90-9][.,.,])[0-90-9]{1,3}(?![0-90-9]|[.,.,][0-90-9])/gu;
|
|
127
|
+
|
|
128
|
+
const longestStart = (text: string, words: readonly string[]): string | undefined =>
|
|
129
|
+
words
|
|
130
|
+
.filter((word) => startsWithWord(text, word.toLowerCase()))
|
|
131
|
+
.toSorted((left, right) => right.length - left.length)
|
|
132
|
+
.at(0);
|
|
133
|
+
|
|
134
|
+
/** 数の後ろ: 書いてよい語(years)を飛ばしてから、年齢の語(歳、old)があれば、その語の後ろの文字。無ければ undefined。 */
|
|
135
|
+
const restAfterMarker = (afterNumber: string, words: AgeWords): string | undefined => {
|
|
136
|
+
const trimmed = afterNumber.trimStart().toLowerCase();
|
|
137
|
+
const skipped = longestStart(trimmed, words.skip);
|
|
138
|
+
const rest = skipped === undefined ? trimmed : trimmed.slice(skipped.length).trimStart();
|
|
139
|
+
const marker = longestStart(rest, words.after);
|
|
140
|
+
return marker === undefined ? undefined : rest.slice(marker.length);
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
/** 一行の中の年齢と、後ろに書いた年齢の語まで(48歳、満48歳、age 57、aged 57、57 years old)。目安の年齢(約48歳、48歳前後)と年齢の幅(59-60歳)は approximate。 */
|
|
144
|
+
export const agesIn = (text: string, words: AgeWords): Age[] =>
|
|
145
|
+
[...text.matchAll(AGE_NUMBER)].flatMap((match): Age[] => {
|
|
146
|
+
const start = match.index;
|
|
147
|
+
const end = start + match[0].length;
|
|
148
|
+
const head = text.slice(0, start).trimEnd().toLowerCase();
|
|
149
|
+
const afterNumber = text.slice(end);
|
|
150
|
+
const rest = restAfterMarker(afterNumber, words);
|
|
151
|
+
const marker = words.before.find((word) => endsWithWord(head, word.toLowerCase()));
|
|
152
|
+
if (rest === undefined && marker === undefined) return [];
|
|
153
|
+
const headBeforeMarker = marker === undefined ? head : head.slice(0, head.length - marker.length).trimEnd();
|
|
154
|
+
const approximate =
|
|
155
|
+
RANGE_BEFORE.test(headBeforeMarker) ||
|
|
156
|
+
RANGE_AFTER.test(afterNumber) ||
|
|
157
|
+
words.approximateBefore.some((word) => headBeforeMarker.endsWith(word.toLowerCase())) ||
|
|
158
|
+
(rest !== undefined && words.approximateAfter.some((word) => rest.trimStart().startsWith(word.toLowerCase())));
|
|
159
|
+
const markerEnd = rest === undefined ? end : end + afterNumber.length - rest.length;
|
|
160
|
+
return [{ start, end: markerEnd, amount: Number(match[0].normalize("NFKC")), approximate }];
|
|
161
|
+
});
|
package/src/derived/durations.ts
CHANGED
|
@@ -1,52 +1,123 @@
|
|
|
1
1
|
import type { Span } from "../plugin.ts";
|
|
2
2
|
import { bySentence } from "./sentence-buckets.ts";
|
|
3
3
|
import { calendarDateOf, dateOf, shifted, valueOf, type DurationUnit } from "./date-arithmetic.ts";
|
|
4
|
+
import { markedPair, type MarkText } from "./marked-dates.ts";
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* 始まりと期間と終わりを一つの文に書いたもの(「4月1日から3か月間(6月30日まで)」"for 3 months from April 1, 2026 (until
|
|
7
8
|
* June 30, 2026)")。始まりに期間を足した日が終わりと合わなければ言う。期間の数え方は三通りある。終わりの日を含めて数える
|
|
8
9
|
* (4月1日から3か月間は6月30日まで)か、含めずに数える(7月1日まで)か、初日を数えずに期間が過ぎた日(「到達日から2週間が経過した日
|
|
9
10
|
* (4月16日)」)。どれとも合わないときだけ言う。
|
|
10
|
-
*
|
|
11
|
+
* 文に期間がちょうど一つのときだけ読む。日付が三つ以上なら、始まりと終わりを語で印した組(「7月1日から」「(7月31日まで)」)だけを
|
|
12
|
+
* 読む。印が無ければ、どの日付とどの期間が組なのか決まらない。
|
|
13
|
+
* 範囲のすぐ後ろの括弧に書いた期間(「9月1日〜9月30日(30日間)」)は範囲そのものの長さで、期間が過ぎた日を終わりに書くことはない。
|
|
11
14
|
*/
|
|
12
15
|
export type DatedValue = Span & { readonly value: string };
|
|
13
16
|
|
|
14
|
-
export type Duration = Span & {
|
|
17
|
+
export type Duration = Span & {
|
|
18
|
+
readonly amount: number;
|
|
19
|
+
readonly unit: DurationUnit;
|
|
20
|
+
/** 名詞の前に書いた期間(a 7-day returns window)。決まりの長さのことが多く、二つの日付の間の長さとは限らない。 */
|
|
21
|
+
readonly attributive?: boolean;
|
|
22
|
+
};
|
|
15
23
|
|
|
16
24
|
export type DurationMismatch = { readonly start: DatedValue; readonly duration: Duration; readonly end: DatedValue; readonly expected: string };
|
|
17
25
|
|
|
18
|
-
/**
|
|
19
|
-
const expectedEnds = (start: Date, duration: Duration): Date[] => {
|
|
26
|
+
/** 期間を足した日と、その前の日(終わりを含めて数える)と、次の日(初日を数えずに期間が過ぎた日。範囲の長さには無い)。 */
|
|
27
|
+
const expectedEnds = (start: Date, duration: Duration, rangeLength: boolean): Date[] => {
|
|
20
28
|
const exclusive = shifted(start, duration.amount, duration.unit);
|
|
21
|
-
|
|
29
|
+
const ends = [shifted(exclusive, -1, "day"), exclusive];
|
|
30
|
+
return rangeLength ? ends : [...ends, shifted(exclusive, 1, "day")];
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/** 文書と、範囲の間の語(〜、–、to)と、日付の後ろの括弧に添える曜日((火)、(Wed))。 */
|
|
34
|
+
export type RangeText = { readonly source: string; readonly joiners: readonly string[]; readonly weekdays: readonly string[] };
|
|
35
|
+
|
|
36
|
+
const LEADING_BRACKET = /^\s*[((]([^()()\n]+)[))]/u;
|
|
37
|
+
const OPEN_BRACKET = /^\s*[((]\s*$/u;
|
|
38
|
+
const CLOSE_BRACKET = /^\s*[))]/u;
|
|
39
|
+
|
|
40
|
+
/** 先頭の曜日の括弧((火)、(Wednesday))を除いた残り。曜日の名の頭だけを書いたものも曜日。 */
|
|
41
|
+
const withoutWeekday = (text: string, weekdays: readonly string[]): string => {
|
|
42
|
+
const inside = LEADING_BRACKET.exec(text);
|
|
43
|
+
if (inside === null) return text;
|
|
44
|
+
const word = (inside[1] ?? "").trim().toLowerCase();
|
|
45
|
+
return word !== "" && weekdays.some((weekday) => weekday.toLowerCase().startsWith(word)) ? text.slice(inside[0].length) : text;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/** 範囲(9月1日〜9月30日、July 1 – August 31)の終わりのすぐ後ろの括弧に、期間だけを書いた((30日間)、(30 days))。 */
|
|
49
|
+
export const isRangeLength = (text: RangeText, range: readonly [Span, Span], duration: Span): boolean => {
|
|
50
|
+
const { source, ...words } = text;
|
|
51
|
+
const [first, end] = range;
|
|
52
|
+
if (first.end > end.start || end.end > duration.start) return false;
|
|
53
|
+
const joint = withoutWeekday(source.slice(first.end, end.start), words.weekdays).trim().toLowerCase();
|
|
54
|
+
return (
|
|
55
|
+
words.joiners.some((joiner) => joiner.toLowerCase() === joint) &&
|
|
56
|
+
OPEN_BRACKET.test(withoutWeekday(source.slice(end.end, duration.start), words.weekdays)) &&
|
|
57
|
+
CLOSE_BRACKET.test(source.slice(duration.end))
|
|
58
|
+
);
|
|
22
59
|
};
|
|
23
60
|
|
|
24
61
|
/** 年まで書いた二つの日付は、早いほうを始まりにする(「7月1日まで、4月1日から3か月」)。月日だけなら書いた順(年をまたぐことがある)。 */
|
|
25
62
|
const ordered = (first: DatedValue, second: DatedValue, withYear: boolean): [DatedValue, DatedValue] =>
|
|
26
63
|
withYear && second.value < first.value ? [second, first] : [first, second];
|
|
27
64
|
|
|
28
|
-
|
|
65
|
+
/** 名詞の前の期間は、日付の間がその二倍までのときだけ組にする。75日の間に書いた 7-day の窓は別の長さ。 */
|
|
66
|
+
export const ATTRIBUTIVE_REACH = 2;
|
|
67
|
+
|
|
68
|
+
/** 書いた終わりの日。年の無い月日で始まりより前なら、翌年。 */
|
|
69
|
+
const endDateOf = (start: Date, end: DatedValue, withYear: boolean): Date | undefined => {
|
|
70
|
+
const written = calendarDateOf(end.value);
|
|
71
|
+
if (written === undefined) return undefined;
|
|
72
|
+
const date = dateOf(written);
|
|
73
|
+
return withYear || date >= start ? date : shifted(date, 1, "year");
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
const beyondReach = (start: Date, end: DatedValue, duration: Duration, withYear: boolean): boolean => {
|
|
77
|
+
if (duration.attributive !== true) return false;
|
|
78
|
+
const endDate = endDateOf(start, end, withYear);
|
|
79
|
+
return endDate === undefined || endDate > shifted(start, duration.amount * ATTRIBUTIVE_REACH, duration.unit);
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const mismatchOf = (written: readonly [DatedValue, DatedValue], duration: Duration, rangeLength: boolean): DurationMismatch | undefined => {
|
|
29
83
|
const [firstDate, secondDate] = [calendarDateOf(written[0].value), calendarDateOf(written[1].value)];
|
|
30
84
|
if (firstDate === undefined || secondDate === undefined || (firstDate.year === undefined) !== (secondDate.year === undefined)) return undefined;
|
|
31
85
|
const withYear = firstDate.year !== undefined;
|
|
32
86
|
const [start, end] = ordered(written[0], written[1], withYear);
|
|
33
87
|
const startDate = calendarDateOf(start.value);
|
|
34
88
|
if (startDate === undefined) return undefined;
|
|
35
|
-
const ends = expectedEnds(dateOf(startDate), duration);
|
|
89
|
+
const ends = expectedEnds(dateOf(startDate), duration, rangeLength);
|
|
36
90
|
const [inclusive] = ends;
|
|
37
91
|
if (inclusive === undefined || ends.some((candidate) => valueOf(candidate, withYear) === end.value)) return undefined;
|
|
92
|
+
if (beyondReach(dateOf(startDate), end, duration, withYear)) return undefined;
|
|
38
93
|
return { start, duration, end, expected: valueOf(inclusive, withYear) };
|
|
39
94
|
};
|
|
40
95
|
|
|
96
|
+
/** 年まで書いた組で、印した終わりが始まりより前なら、期間の向きが逆(date-range-reversed が言う)。 */
|
|
97
|
+
const reversed = ([start, end]: readonly [DatedValue, DatedValue]): boolean =>
|
|
98
|
+
calendarDateOf(start.value)?.year !== undefined && calendarDateOf(end.value)?.year !== undefined && end.value < start.value;
|
|
99
|
+
|
|
100
|
+
const pairOf = (sentence: Span, inDates: readonly DatedValue[], duration: Duration, text: MarkText): readonly [DatedValue, DatedValue] | undefined => {
|
|
101
|
+
const [first, second] = inDates;
|
|
102
|
+
if (inDates.length === 2 && first !== undefined && second !== undefined) return [first, second];
|
|
103
|
+
const marked = inDates.length > 2 ? markedPair(text, sentence, inDates, duration) : undefined;
|
|
104
|
+
return marked === undefined || reversed(marked) ? undefined : marked;
|
|
105
|
+
};
|
|
106
|
+
|
|
41
107
|
/** 一つの文の中の、始まり・期間・終わり。 */
|
|
42
|
-
export const durationMismatches = (
|
|
108
|
+
export const durationMismatches = (
|
|
109
|
+
sentences: readonly Span[],
|
|
110
|
+
dates: readonly DatedValue[],
|
|
111
|
+
durations: readonly Duration[],
|
|
112
|
+
text: RangeText & MarkText,
|
|
113
|
+
): DurationMismatch[] => {
|
|
43
114
|
const datesIn = bySentence(sentences, dates);
|
|
44
115
|
return [...bySentence(sentences, durations).entries()].flatMap(([index, inDurations]) => {
|
|
45
|
-
const inDates = datesIn.get(index) ?? [];
|
|
46
|
-
const [first, second] = inDates;
|
|
47
116
|
const [duration] = inDurations;
|
|
48
|
-
|
|
49
|
-
|
|
117
|
+
const sentence = sentences[index];
|
|
118
|
+
if (inDurations.length !== 1 || duration === undefined || sentence === undefined) return [];
|
|
119
|
+
const pair = pairOf(sentence, datesIn.get(index) ?? [], duration, text);
|
|
120
|
+
const mismatch = pair === undefined ? undefined : mismatchOf(pair, duration, isRangeLength(text, pair, duration));
|
|
50
121
|
return mismatch === undefined ? [] : [mismatch];
|
|
51
122
|
});
|
|
52
123
|
};
|