chaffjs 0.29.0 → 0.31.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/dist/announced-count.d.ts +2 -0
- package/dist/announced-count.d.ts.map +1 -1
- package/dist/announced-count.js +4 -3
- package/dist/announced-count.js.map +1 -1
- package/dist/contacts/addresses.d.ts +21 -0
- package/dist/contacts/addresses.d.ts.map +1 -0
- package/dist/contacts/addresses.js +144 -0
- package/dist/contacts/addresses.js.map +1 -0
- package/dist/contacts/emails.d.ts +11 -0
- package/dist/contacts/emails.d.ts.map +1 -0
- package/dist/contacts/emails.js +51 -0
- package/dist/contacts/emails.js.map +1 -0
- package/dist/contacts/variants.d.ts +14 -0
- package/dist/contacts/variants.d.ts.map +1 -0
- package/dist/contacts/variants.js +25 -0
- package/dist/contacts/variants.js.map +1 -0
- package/dist/derived/battery-runtime.d.ts +85 -0
- package/dist/derived/battery-runtime.d.ts.map +1 -0
- package/dist/derived/battery-runtime.js +217 -0
- package/dist/derived/battery-runtime.js.map +1 -0
- package/dist/derived/period-counts.d.ts +48 -0
- package/dist/derived/period-counts.d.ts.map +1 -0
- package/dist/derived/period-counts.js +128 -0
- package/dist/derived/period-counts.js.map +1 -0
- package/dist/derived/session-hours.d.ts +26 -0
- package/dist/derived/session-hours.d.ts.map +1 -0
- package/dist/derived/session-hours.js +29 -0
- package/dist/derived/session-hours.js.map +1 -0
- package/dist/derived/time-lengths.d.ts +37 -0
- package/dist/derived/time-lengths.d.ts.map +1 -0
- package/dist/derived/time-lengths.js +171 -0
- package/dist/derived/time-lengths.js.map +1 -0
- package/dist/derived/unit-counts.d.ts +7 -0
- package/dist/derived/unit-counts.d.ts.map +1 -0
- package/dist/derived/unit-counts.js +13 -0
- package/dist/derived/unit-counts.js.map +1 -0
- package/dist/derived/use-interval.d.ts +33 -0
- package/dist/derived/use-interval.d.ts.map +1 -0
- package/dist/derived/use-interval.js +93 -0
- package/dist/derived/use-interval.js.map +1 -0
- package/dist/derived/working-hours.d.ts +36 -0
- package/dist/derived/working-hours.d.ts.map +1 -0
- package/dist/derived/working-hours.js +55 -0
- package/dist/derived/working-hours.js.map +1 -0
- package/dist/detectors/acronym-expansion.d.ts +1 -1
- package/dist/detectors/acronym-expansion.d.ts.map +1 -1
- package/dist/detectors/acronym-expansion.js +46 -2
- package/dist/detectors/acronym-expansion.js.map +1 -1
- package/dist/detectors/announced-count.d.ts.map +1 -1
- package/dist/detectors/announced-count.js +1 -0
- package/dist/detectors/announced-count.js.map +1 -1
- package/dist/detectors/capacity-runtime.d.ts +7 -0
- package/dist/detectors/capacity-runtime.d.ts.map +1 -0
- package/dist/detectors/capacity-runtime.js +98 -0
- package/dist/detectors/capacity-runtime.js.map +1 -0
- package/dist/detectors/capitalised-term.d.ts +44 -0
- package/dist/detectors/capitalised-term.d.ts.map +1 -0
- package/dist/detectors/capitalised-term.js +101 -0
- package/dist/detectors/capitalised-term.js.map +1 -0
- package/dist/detectors/contact-variant.d.ts +3 -0
- package/dist/detectors/contact-variant.d.ts.map +1 -0
- package/dist/detectors/contact-variant.js +21 -0
- package/dist/detectors/contact-variant.js.map +1 -0
- package/dist/detectors/count-over-capacity.d.ts +4 -0
- package/dist/detectors/count-over-capacity.d.ts.map +1 -0
- package/dist/detectors/count-over-capacity.js +26 -0
- package/dist/detectors/count-over-capacity.js.map +1 -0
- package/dist/detectors/date-outside-period.d.ts.map +1 -1
- package/dist/detectors/date-outside-period.js +5 -1
- package/dist/detectors/date-outside-period.js.map +1 -1
- package/dist/detectors/date-stamp-order.d.ts +3 -0
- package/dist/detectors/date-stamp-order.d.ts.map +1 -0
- package/dist/detectors/date-stamp-order.js +24 -0
- package/dist/detectors/date-stamp-order.js.map +1 -0
- package/dist/detectors/defined-term-form.d.ts.map +1 -1
- package/dist/detectors/defined-term-form.js +57 -7
- package/dist/detectors/defined-term-form.js.map +1 -1
- package/dist/detectors/definition-use.d.ts +1 -1
- package/dist/detectors/definition-use.d.ts.map +1 -1
- package/dist/detectors/definition-use.js +4 -2
- package/dist/detectors/definition-use.js.map +1 -1
- package/dist/detectors/derived-numbers.d.ts +11 -1
- package/dist/detectors/derived-numbers.d.ts.map +1 -1
- package/dist/detectors/derived-numbers.js +74 -20
- package/dist/detectors/derived-numbers.js.map +1 -1
- package/dist/detectors/due-date.d.ts.map +1 -1
- package/dist/detectors/due-date.js +6 -0
- package/dist/detectors/due-date.js.map +1 -1
- package/dist/detectors/en-shape.d.ts.map +1 -1
- package/dist/detectors/en-shape.js +7 -4
- package/dist/detectors/en-shape.js.map +1 -1
- package/dist/detectors/event-deadline.d.ts +3 -0
- package/dist/detectors/event-deadline.d.ts.map +1 -0
- package/dist/detectors/event-deadline.js +24 -0
- package/dist/detectors/event-deadline.js.map +1 -0
- package/dist/detectors/fact-consistency.d.ts +1 -1
- package/dist/detectors/fact-consistency.d.ts.map +1 -1
- package/dist/detectors/fact-consistency.js +52 -3
- package/dist/detectors/fact-consistency.js.map +1 -1
- package/dist/detectors/heading-case.d.ts +5 -2
- package/dist/detectors/heading-case.d.ts.map +1 -1
- package/dist/detectors/heading-case.js +12 -4
- package/dist/detectors/heading-case.js.map +1 -1
- package/dist/detectors/heading-echo.d.ts +5 -0
- package/dist/detectors/heading-echo.d.ts.map +1 -1
- package/dist/detectors/heading-echo.js +14 -1
- package/dist/detectors/heading-echo.js.map +1 -1
- package/dist/detectors/layout-code.d.ts +5 -0
- package/dist/detectors/layout-code.d.ts.map +1 -0
- package/dist/detectors/layout-code.js +124 -0
- package/dist/detectors/layout-code.js.map +1 -0
- package/dist/detectors/measured-facts.d.ts +8 -0
- package/dist/detectors/measured-facts.d.ts.map +1 -0
- package/dist/detectors/measured-facts.js +18 -0
- package/dist/detectors/measured-facts.js.map +1 -0
- package/dist/detectors/name-variant-model-codes.d.ts +11 -0
- package/dist/detectors/name-variant-model-codes.d.ts.map +1 -0
- package/dist/detectors/name-variant-model-codes.js +21 -0
- package/dist/detectors/name-variant-model-codes.js.map +1 -0
- package/dist/detectors/name-variant.d.ts.map +1 -1
- package/dist/detectors/name-variant.js +78 -10
- package/dist/detectors/name-variant.js.map +1 -1
- package/dist/detectors/orthographic-variant.d.ts.map +1 -1
- package/dist/detectors/orthographic-variant.js +62 -7
- package/dist/detectors/orthographic-variant.js.map +1 -1
- package/dist/detectors/orthography.d.ts.map +1 -1
- package/dist/detectors/orthography.js +12 -6
- package/dist/detectors/orthography.js.map +1 -1
- package/dist/detectors/party-order.d.ts +3 -0
- package/dist/detectors/party-order.d.ts.map +1 -0
- package/dist/detectors/party-order.js +46 -0
- package/dist/detectors/party-order.js.map +1 -0
- package/dist/detectors/quantity-range.d.ts +3 -0
- package/dist/detectors/quantity-range.d.ts.map +1 -0
- package/dist/detectors/quantity-range.js +35 -0
- package/dist/detectors/quantity-range.js.map +1 -0
- package/dist/detectors/range-band.d.ts +5 -0
- package/dist/detectors/range-band.d.ts.map +1 -0
- package/dist/detectors/range-band.js +80 -0
- package/dist/detectors/range-band.js.map +1 -0
- package/dist/detectors/registry/capacity-runtime-mismatch.d.ts +3 -0
- package/dist/detectors/registry/capacity-runtime-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/capacity-runtime-mismatch.js +3 -0
- package/dist/detectors/registry/capacity-runtime-mismatch.js.map +1 -0
- package/dist/detectors/registry/connection-time-short.d.ts +3 -0
- package/dist/detectors/registry/connection-time-short.d.ts.map +1 -0
- package/dist/detectors/registry/connection-time-short.js +3 -0
- package/dist/detectors/registry/connection-time-short.js.map +1 -0
- package/dist/detectors/registry/contact-variant.d.ts +3 -0
- package/dist/detectors/registry/contact-variant.d.ts.map +1 -0
- package/dist/detectors/registry/contact-variant.js +3 -0
- package/dist/detectors/registry/contact-variant.js.map +1 -0
- package/dist/detectors/registry/count-over-capacity.d.ts +3 -0
- package/dist/detectors/registry/count-over-capacity.d.ts.map +1 -0
- package/dist/detectors/registry/count-over-capacity.js +3 -0
- package/dist/detectors/registry/count-over-capacity.js.map +1 -0
- package/dist/detectors/registry/date-stamp-order.d.ts +3 -0
- package/dist/detectors/registry/date-stamp-order.d.ts.map +1 -0
- package/dist/detectors/registry/date-stamp-order.js +3 -0
- package/dist/detectors/registry/date-stamp-order.js.map +1 -0
- package/dist/detectors/registry/duration-product-mismatch.d.ts +3 -0
- package/dist/detectors/registry/duration-product-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/duration-product-mismatch.js +3 -0
- package/dist/detectors/registry/duration-product-mismatch.js.map +1 -0
- package/dist/detectors/registry/event-deadline.d.ts +3 -0
- package/dist/detectors/registry/event-deadline.d.ts.map +1 -0
- package/dist/detectors/registry/event-deadline.js +3 -0
- package/dist/detectors/registry/event-deadline.js.map +1 -0
- package/dist/detectors/registry/interval-count-mismatch.d.ts +3 -0
- package/dist/detectors/registry/interval-count-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/interval-count-mismatch.js +3 -0
- package/dist/detectors/registry/interval-count-mismatch.js.map +1 -0
- package/dist/detectors/registry/layout-code-mismatch.d.ts +3 -0
- package/dist/detectors/registry/layout-code-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/layout-code-mismatch.js +3 -0
- package/dist/detectors/registry/layout-code-mismatch.js.map +1 -0
- package/dist/detectors/registry/party-order.d.ts +3 -0
- package/dist/detectors/registry/party-order.d.ts.map +1 -0
- package/dist/detectors/registry/party-order.js +3 -0
- package/dist/detectors/registry/party-order.js.map +1 -0
- package/dist/detectors/registry/quantity-range.d.ts +3 -0
- package/dist/detectors/registry/quantity-range.d.ts.map +1 -0
- package/dist/detectors/registry/quantity-range.js +3 -0
- package/dist/detectors/registry/quantity-range.js.map +1 -0
- package/dist/detectors/registry/range-band-mismatch.d.ts +3 -0
- package/dist/detectors/registry/range-band-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/range-band-mismatch.js +3 -0
- package/dist/detectors/registry/range-band-mismatch.js.map +1 -0
- package/dist/detectors/registry/rent-multiple-mismatch.d.ts +3 -0
- package/dist/detectors/registry/rent-multiple-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/rent-multiple-mismatch.js +3 -0
- package/dist/detectors/registry/rent-multiple-mismatch.js.map +1 -0
- package/dist/detectors/registry/requirement-lists.d.ts +3 -0
- package/dist/detectors/registry/requirement-lists.d.ts.map +1 -0
- package/dist/detectors/registry/requirement-lists.js +3 -0
- package/dist/detectors/registry/requirement-lists.js.map +1 -0
- package/dist/detectors/registry/return-type.d.ts +3 -0
- package/dist/detectors/registry/return-type.d.ts.map +1 -0
- package/dist/detectors/registry/return-type.js +3 -0
- package/dist/detectors/registry/return-type.js.map +1 -0
- package/dist/detectors/registry/scaled-quantity-mismatch.d.ts +3 -0
- package/dist/detectors/registry/scaled-quantity-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/scaled-quantity-mismatch.js +3 -0
- package/dist/detectors/registry/scaled-quantity-mismatch.js.map +1 -0
- package/dist/detectors/registry/step-time-sum-mismatch.d.ts +3 -0
- package/dist/detectors/registry/step-time-sum-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/step-time-sum-mismatch.js +3 -0
- package/dist/detectors/registry/step-time-sum-mismatch.js.map +1 -0
- package/dist/detectors/registry/time-range-reversed.d.ts +3 -0
- package/dist/detectors/registry/time-range-reversed.d.ts.map +1 -0
- package/dist/detectors/registry/time-range-reversed.js +3 -0
- package/dist/detectors/registry/time-range-reversed.js.map +1 -0
- package/dist/detectors/registry/unlisted-item-used.d.ts +3 -0
- package/dist/detectors/registry/unlisted-item-used.d.ts.map +1 -0
- package/dist/detectors/registry/unlisted-item-used.js +3 -0
- package/dist/detectors/registry/unlisted-item-used.js.map +1 -0
- package/dist/detectors/registry/walk-time-distance-mismatch.d.ts +3 -0
- package/dist/detectors/registry/walk-time-distance-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/walk-time-distance-mismatch.js +3 -0
- package/dist/detectors/registry/walk-time-distance-mismatch.js.map +1 -0
- package/dist/detectors/rent-multiple-mismatch.d.ts +3 -0
- package/dist/detectors/rent-multiple-mismatch.d.ts.map +1 -0
- package/dist/detectors/rent-multiple-mismatch.js +39 -0
- package/dist/detectors/rent-multiple-mismatch.js.map +1 -0
- package/dist/detectors/requirement-lists.d.ts +3 -0
- package/dist/detectors/requirement-lists.d.ts.map +1 -0
- package/dist/detectors/requirement-lists.js +46 -0
- package/dist/detectors/requirement-lists.js.map +1 -0
- package/dist/detectors/return-type.d.ts +3 -0
- package/dist/detectors/return-type.d.ts.map +1 -0
- package/dist/detectors/return-type.js +24 -0
- package/dist/detectors/return-type.js.map +1 -0
- package/dist/detectors/scaled-quantity.d.ts +3 -0
- package/dist/detectors/scaled-quantity.d.ts.map +1 -0
- package/dist/detectors/scaled-quantity.js +37 -0
- package/dist/detectors/scaled-quantity.js.map +1 -0
- package/dist/detectors/signals.d.ts.map +1 -1
- package/dist/detectors/signals.js +3 -1
- package/dist/detectors/signals.js.map +1 -1
- package/dist/detectors/step-time-sum.d.ts +3 -0
- package/dist/detectors/step-time-sum.d.ts.map +1 -0
- package/dist/detectors/step-time-sum.js +46 -0
- package/dist/detectors/step-time-sum.js.map +1 -0
- package/dist/detectors/structure-tree.d.ts +2 -0
- package/dist/detectors/structure-tree.d.ts.map +1 -1
- package/dist/detectors/structure-tree.js +31 -6
- package/dist/detectors/structure-tree.js.map +1 -1
- package/dist/detectors/structure.js +1 -1
- package/dist/detectors/structure.js.map +1 -1
- package/dist/detectors/technical-docs.d.ts +5 -0
- package/dist/detectors/technical-docs.d.ts.map +1 -1
- package/dist/detectors/technical-docs.js +12 -0
- package/dist/detectors/technical-docs.js.map +1 -1
- package/dist/detectors/time-order.d.ts +2 -0
- package/dist/detectors/time-order.d.ts.map +1 -1
- package/dist/detectors/time-order.js +33 -5
- package/dist/detectors/time-order.js.map +1 -1
- package/dist/detectors/undefined-term.d.ts.map +1 -1
- package/dist/detectors/undefined-term.js +19 -3
- package/dist/detectors/undefined-term.js.map +1 -1
- package/dist/detectors/unit-consistency.d.ts +1 -1
- package/dist/detectors/unit-consistency.d.ts.map +1 -1
- package/dist/detectors/unit-consistency.js +46 -38
- package/dist/detectors/unit-consistency.js.map +1 -1
- package/dist/detectors/unlisted-items.d.ts +3 -0
- package/dist/detectors/unlisted-items.d.ts.map +1 -0
- package/dist/detectors/unlisted-items.js +57 -0
- package/dist/detectors/unlisted-items.js.map +1 -0
- package/dist/detectors/use-count-words.d.ts +8 -0
- package/dist/detectors/use-count-words.d.ts.map +1 -0
- package/dist/detectors/use-count-words.js +20 -0
- package/dist/detectors/use-count-words.js.map +1 -0
- package/dist/detectors/use-interval.d.ts +3 -0
- package/dist/detectors/use-interval.d.ts.map +1 -0
- package/dist/detectors/use-interval.js +39 -0
- package/dist/detectors/use-interval.js.map +1 -0
- package/dist/detectors/walk-time-distance-mismatch.d.ts +4 -0
- package/dist/detectors/walk-time-distance-mismatch.d.ts.map +1 -0
- package/dist/detectors/walk-time-distance-mismatch.js +38 -0
- package/dist/detectors/walk-time-distance-mismatch.js.map +1 -0
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +4 -1
- package/dist/document.js.map +1 -1
- package/dist/facts/approximate-tolerance.d.ts +7 -0
- package/dist/facts/approximate-tolerance.d.ts.map +1 -0
- package/dist/facts/approximate-tolerance.js +16 -0
- package/dist/facts/approximate-tolerance.js.map +1 -0
- package/dist/facts/item-amounts.d.ts +18 -0
- package/dist/facts/item-amounts.d.ts.map +1 -0
- package/dist/facts/item-amounts.js +67 -0
- package/dist/facts/item-amounts.js.map +1 -0
- package/dist/facts/labelled-facts.d.ts +4 -0
- package/dist/facts/labelled-facts.d.ts.map +1 -1
- package/dist/facts/labelled-facts.js +21 -6
- package/dist/facts/labelled-facts.js.map +1 -1
- package/dist/facts/measure-units.d.ts +5 -0
- package/dist/facts/measure-units.d.ts.map +1 -0
- package/dist/facts/measure-units.js +28 -0
- package/dist/facts/measure-units.js.map +1 -0
- package/dist/facts/measures.d.ts +23 -4
- package/dist/facts/measures.d.ts.map +1 -1
- package/dist/facts/measures.js +68 -19
- package/dist/facts/measures.js.map +1 -1
- package/dist/facts/retention-periods.d.ts +51 -0
- package/dist/facts/retention-periods.d.ts.map +1 -0
- package/dist/facts/retention-periods.js +148 -0
- package/dist/facts/retention-periods.js.map +1 -0
- package/dist/facts/table-facts.d.ts +2 -0
- package/dist/facts/table-facts.d.ts.map +1 -1
- package/dist/facts/table-facts.js +2 -0
- package/dist/facts/table-facts.js.map +1 -1
- package/dist/facts/unit-conflicts.d.ts +3 -2
- package/dist/facts/unit-conflicts.d.ts.map +1 -1
- package/dist/facts/unit-conflicts.js +15 -7
- package/dist/facts/unit-conflicts.js.map +1 -1
- package/dist/facts/unit-equivalents.d.ts +13 -0
- package/dist/facts/unit-equivalents.d.ts.map +1 -0
- package/dist/facts/unit-equivalents.js +56 -0
- package/dist/facts/unit-equivalents.js.map +1 -0
- package/dist/facts/unit-tolerance.d.ts +4 -0
- package/dist/facts/unit-tolerance.d.ts.map +1 -0
- package/dist/facts/unit-tolerance.js +13 -0
- package/dist/facts/unit-tolerance.js.map +1 -0
- package/dist/facts/unit-word.d.ts +8 -0
- package/dist/facts/unit-word.d.ts.map +1 -0
- package/dist/facts/unit-word.js +34 -0
- package/dist/facts/unit-word.js.map +1 -0
- package/dist/facts/written-precision.d.ts +10 -0
- package/dist/facts/written-precision.d.ts.map +1 -0
- package/dist/facts/written-precision.js +20 -0
- package/dist/facts/written-precision.js.map +1 -0
- package/dist/kana-spelling.d.ts +12 -0
- package/dist/kana-spelling.d.ts.map +1 -1
- package/dist/kana-spelling.js +23 -0
- package/dist/kana-spelling.js.map +1 -1
- package/dist/model-codes.d.ts +23 -0
- package/dist/model-codes.d.ts.map +1 -0
- package/dist/model-codes.js +81 -0
- package/dist/model-codes.js.map +1 -0
- package/dist/name-spelling-chars.d.ts +16 -0
- package/dist/name-spelling-chars.d.ts.map +1 -0
- package/dist/name-spelling-chars.js +14 -0
- package/dist/name-spelling-chars.js.map +1 -0
- package/dist/name-variants.d.ts +8 -2
- package/dist/name-variants.d.ts.map +1 -1
- package/dist/name-variants.js +72 -7
- package/dist/name-variants.js.map +1 -1
- package/dist/name-word-order.d.ts +49 -0
- package/dist/name-word-order.d.ts.map +1 -0
- package/dist/name-word-order.js +114 -0
- package/dist/name-word-order.js.map +1 -0
- package/dist/phone-numbers.d.ts.map +1 -1
- package/dist/phone-numbers.js +22 -5
- package/dist/phone-numbers.js.map +1 -1
- package/dist/place-names.d.ts +12 -5
- package/dist/place-names.d.ts.map +1 -1
- package/dist/place-names.js +34 -14
- package/dist/place-names.js.map +1 -1
- package/dist/plugin.d.ts +12 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/preamble-paragraphs.d.ts +2 -1
- package/dist/preamble-paragraphs.d.ts.map +1 -1
- package/dist/preamble-paragraphs.js +16 -1
- package/dist/preamble-paragraphs.js.map +1 -1
- package/dist/profile/parse.d.ts.map +1 -1
- package/dist/profile/parse.js +11 -0
- package/dist/profile/parse.js.map +1 -1
- package/dist/return-type.d.ts +33 -0
- package/dist/return-type.d.ts.map +1 -0
- package/dist/return-type.js +302 -0
- package/dist/return-type.js.map +1 -0
- package/dist/spacing-code.d.ts +6 -0
- package/dist/spacing-code.d.ts.map +1 -0
- package/dist/spacing-code.js +16 -0
- package/dist/spacing-code.js.map +1 -0
- package/dist/structure/amount-range.d.ts +2 -2
- package/dist/structure/amount-range.d.ts.map +1 -1
- package/dist/structure/amount-range.js +12 -5
- package/dist/structure/amount-range.js.map +1 -1
- package/dist/structure/capacity-count.d.ts +59 -0
- package/dist/structure/capacity-count.d.ts.map +1 -0
- package/dist/structure/capacity-count.js +118 -0
- package/dist/structure/capacity-count.js.map +1 -0
- package/dist/structure/connection-times.d.ts +56 -0
- package/dist/structure/connection-times.d.ts.map +1 -0
- package/dist/structure/connection-times.js +165 -0
- package/dist/structure/connection-times.js.map +1 -0
- package/dist/structure/counted-amounts.d.ts +6 -0
- package/dist/structure/counted-amounts.d.ts.map +1 -1
- package/dist/structure/counted-amounts.js +4 -4
- package/dist/structure/counted-amounts.js.map +1 -1
- package/dist/structure/date-order-tie.d.ts +13 -0
- package/dist/structure/date-order-tie.d.ts.map +1 -0
- package/dist/structure/date-order-tie.js +61 -0
- package/dist/structure/date-order-tie.js.map +1 -0
- package/dist/structure/date-order.d.ts +2 -2
- package/dist/structure/date-order.d.ts.map +1 -1
- package/dist/structure/date-order.js +26 -9
- package/dist/structure/date-order.js.map +1 -1
- package/dist/structure/date-outside-period.d.ts +8 -0
- package/dist/structure/date-outside-period.d.ts.map +1 -1
- package/dist/structure/date-outside-period.js +52 -3
- package/dist/structure/date-outside-period.js.map +1 -1
- package/dist/structure/date-range.d.ts +6 -2
- package/dist/structure/date-range.d.ts.map +1 -1
- package/dist/structure/date-range.js +37 -9
- package/dist/structure/date-range.js.map +1 -1
- package/dist/structure/deadline-after-event.d.ts +23 -0
- package/dist/structure/deadline-after-event.d.ts.map +1 -0
- package/dist/structure/deadline-after-event.js +42 -0
- package/dist/structure/deadline-after-event.js.map +1 -0
- package/dist/structure/definition-use.d.ts +1 -1
- package/dist/structure/definition-use.d.ts.map +1 -1
- package/dist/structure/definition-use.js +55 -2
- package/dist/structure/definition-use.js.map +1 -1
- package/dist/structure/due-date.d.ts.map +1 -1
- package/dist/structure/due-date.js +5 -27
- package/dist/structure/due-date.js.map +1 -1
- package/dist/structure/labelled-date-order.d.ts +38 -0
- package/dist/structure/labelled-date-order.d.ts.map +1 -0
- package/dist/structure/labelled-date-order.js +41 -0
- package/dist/structure/labelled-date-order.js.map +1 -0
- package/dist/structure/layout-codes.d.ts +68 -0
- package/dist/structure/layout-codes.d.ts.map +1 -0
- package/dist/structure/layout-codes.js +161 -0
- package/dist/structure/layout-codes.js.map +1 -0
- package/dist/structure/leg-times.d.ts +2 -0
- package/dist/structure/leg-times.d.ts.map +1 -1
- package/dist/structure/leg-times.js +13 -0
- package/dist/structure/leg-times.js.map +1 -1
- package/dist/structure/measured-amounts.d.ts +17 -0
- package/dist/structure/measured-amounts.d.ts.map +1 -0
- package/dist/structure/measured-amounts.js +110 -0
- package/dist/structure/measured-amounts.js.map +1 -0
- package/dist/structure/party-order.d.ts +33 -0
- package/dist/structure/party-order.d.ts.map +1 -0
- package/dist/structure/party-order.js +79 -0
- package/dist/structure/party-order.js.map +1 -0
- package/dist/structure/quantity-range.d.ts +8 -0
- package/dist/structure/quantity-range.d.ts.map +1 -0
- package/dist/structure/quantity-range.js +36 -0
- package/dist/structure/quantity-range.js.map +1 -0
- package/dist/structure/range-bands.d.ts +75 -0
- package/dist/structure/range-bands.d.ts.map +1 -0
- package/dist/structure/range-bands.js +244 -0
- package/dist/structure/range-bands.js.map +1 -0
- package/dist/structure/rent-multiple.d.ts +76 -0
- package/dist/structure/rent-multiple.d.ts.map +1 -0
- package/dist/structure/rent-multiple.js +186 -0
- package/dist/structure/rent-multiple.js.map +1 -0
- package/dist/structure/requirement-lists.d.ts +37 -0
- package/dist/structure/requirement-lists.d.ts.map +1 -0
- package/dist/structure/requirement-lists.js +89 -0
- package/dist/structure/requirement-lists.js.map +1 -0
- package/dist/structure/scaled-quantities.d.ts +50 -0
- package/dist/structure/scaled-quantities.d.ts.map +1 -0
- package/dist/structure/scaled-quantities.js +153 -0
- package/dist/structure/scaled-quantities.js.map +1 -0
- package/dist/structure/stamp-order.d.ts +16 -0
- package/dist/structure/stamp-order.d.ts.map +1 -0
- package/dist/structure/stamp-order.js +78 -0
- package/dist/structure/stamp-order.js.map +1 -0
- package/dist/structure/step-times.d.ts +49 -0
- package/dist/structure/step-times.d.ts.map +1 -0
- package/dist/structure/step-times.js +128 -0
- package/dist/structure/step-times.js.map +1 -0
- package/dist/structure/term-deadline.d.ts +19 -0
- package/dist/structure/term-deadline.d.ts.map +1 -0
- package/dist/structure/term-deadline.js +28 -0
- package/dist/structure/term-deadline.js.map +1 -0
- package/dist/structure/time-order.d.ts +21 -0
- package/dist/structure/time-order.d.ts.map +1 -1
- package/dist/structure/time-order.js +5 -6
- package/dist/structure/time-order.js.map +1 -1
- package/dist/structure/time-range.d.ts +16 -0
- package/dist/structure/time-range.d.ts.map +1 -0
- package/dist/structure/time-range.js +57 -0
- package/dist/structure/time-range.js.map +1 -0
- package/dist/structure/total-line.d.ts +16 -0
- package/dist/structure/total-line.d.ts.map +1 -0
- package/dist/structure/total-line.js +44 -0
- package/dist/structure/total-line.js.map +1 -0
- package/dist/structure/total.d.ts +7 -1
- package/dist/structure/total.d.ts.map +1 -1
- package/dist/structure/total.js +28 -5
- package/dist/structure/total.js.map +1 -1
- package/dist/structure/unlisted-items.d.ts +70 -0
- package/dist/structure/unlisted-items.d.ts.map +1 -0
- package/dist/structure/unlisted-items.js +152 -0
- package/dist/structure/unlisted-items.js.map +1 -0
- package/dist/structure/version-order.d.ts +2 -0
- package/dist/structure/version-order.d.ts.map +1 -1
- package/dist/structure/version-order.js +10 -0
- package/dist/structure/version-order.js.map +1 -1
- package/dist/structure/walk-time.d.ts +87 -0
- package/dist/structure/walk-time.d.ts.map +1 -0
- package/dist/structure/walk-time.js +195 -0
- package/dist/structure/walk-time.js.map +1 -0
- package/dist/surname-near.d.ts +6 -0
- package/dist/surname-near.d.ts.map +1 -0
- package/dist/surname-near.js +31 -0
- package/dist/surname-near.js.map +1 -0
- package/dist/table-cells.d.ts +13 -0
- package/dist/table-cells.d.ts.map +1 -0
- package/dist/table-cells.js +36 -0
- package/dist/table-cells.js.map +1 -0
- package/dist/table-names.d.ts +42 -0
- package/dist/table-names.d.ts.map +1 -0
- package/dist/table-names.js +94 -0
- package/dist/table-names.js.map +1 -0
- package/package.json +3 -3
- package/profiles/listing.yaml +20 -0
- package/rules/announced-count-mismatch.yaml +2 -2
- package/rules/capacity-runtime-mismatch.yaml +66 -0
- package/rules/connection-time-short.yaml +52 -0
- package/rules/contact-variant.yaml +76 -0
- package/rules/count-over-capacity.yaml +55 -0
- package/rules/date-outside-period.yaml +4 -4
- package/rules/date-stamp-order.yaml +82 -0
- package/rules/deadline-after-event.yaml +67 -0
- package/rules/defined-name-repeated.yaml +2 -2
- package/rules/due-before-issue.yaml +11 -7
- package/rules/duration-mismatch.yaml +7 -4
- package/rules/duration-product-mismatch.yaml +73 -0
- package/rules/fact-conflict.yaml +9 -4
- package/rules/heading-echo.yaml +2 -2
- package/rules/interval-count-mismatch.yaml +54 -0
- package/rules/latin-spacing.yaml +2 -2
- package/rules/layout-code-mismatch.yaml +68 -0
- package/rules/name-variant.yaml +14 -2
- package/rules/no-em-dash.yaml +2 -2
- package/rules/party-order.yaml +84 -0
- package/rules/preamble-length.yaml +2 -2
- package/rules/quantity-range-reversed.yaml +53 -0
- package/rules/range-band-mismatch.yaml +70 -0
- package/rules/rent-multiple-mismatch.yaml +61 -0
- package/rules/required-listed-as-preferred.yaml +102 -0
- package/rules/return-type-mismatch.yaml +79 -0
- package/rules/scaled-quantity-mismatch.yaml +69 -0
- package/rules/step-time-sum-mismatch.yaml +65 -0
- package/rules/time-range-reversed.yaml +48 -0
- package/rules/title-case-consistency.yaml +2 -2
- package/rules/total-mismatch.yaml +2 -2
- package/rules/undefined-term.yaml +21 -7
- package/rules/unit-mismatch.yaml +12 -4
- package/rules/unlisted-item-used.yaml +90 -0
- package/rules/unused-definition.yaml +2 -2
- package/rules/use-before-definition.yaml +2 -2
- package/rules/walk-time-distance-mismatch.yaml +55 -0
- package/src/announced-count.ts +6 -3
- package/src/contacts/addresses.ts +179 -0
- package/src/contacts/emails.ts +63 -0
- package/src/contacts/variants.ts +33 -0
- package/src/derived/battery-runtime.ts +284 -0
- package/src/derived/period-counts.ts +178 -0
- package/src/derived/session-hours.ts +62 -0
- package/src/derived/time-lengths.ts +229 -0
- package/src/derived/unit-counts.ts +18 -0
- package/src/derived/use-interval.ts +151 -0
- package/src/derived/working-hours.ts +97 -0
- package/src/detectors/acronym-expansion.ts +57 -2
- package/src/detectors/announced-count.ts +1 -0
- package/src/detectors/capacity-runtime.ts +128 -0
- package/src/detectors/capitalised-term.ts +147 -0
- package/src/detectors/contact-variant.ts +24 -0
- package/src/detectors/count-over-capacity.ts +37 -0
- package/src/detectors/date-outside-period.ts +5 -1
- package/src/detectors/date-stamp-order.ts +28 -0
- package/src/detectors/defined-term-form.ts +63 -7
- package/src/detectors/definition-use.ts +6 -2
- package/src/detectors/derived-numbers.ts +97 -24
- package/src/detectors/due-date.ts +10 -2
- package/src/detectors/en-shape.ts +11 -4
- package/src/detectors/event-deadline.ts +29 -0
- package/src/detectors/fact-consistency.ts +64 -3
- package/src/detectors/heading-case.ts +13 -4
- package/src/detectors/heading-echo.ts +17 -1
- package/src/detectors/layout-code.ts +174 -0
- package/src/detectors/measured-facts.ts +20 -0
- package/src/detectors/name-variant-model-codes.ts +27 -0
- package/src/detectors/name-variant.ts +99 -15
- package/src/detectors/orthographic-variant.ts +78 -9
- package/src/detectors/orthography.ts +16 -6
- package/src/detectors/party-order.ts +50 -0
- package/src/detectors/quantity-range.ts +47 -0
- package/src/detectors/range-band.ts +125 -0
- package/src/detectors/registry/capacity-runtime-mismatch.ts +4 -0
- package/src/detectors/registry/connection-time-short.ts +4 -0
- package/src/detectors/registry/contact-variant.ts +4 -0
- package/src/detectors/registry/count-over-capacity.ts +4 -0
- package/src/detectors/registry/date-stamp-order.ts +4 -0
- package/src/detectors/registry/duration-product-mismatch.ts +4 -0
- package/src/detectors/registry/event-deadline.ts +4 -0
- package/src/detectors/registry/interval-count-mismatch.ts +4 -0
- package/src/detectors/registry/layout-code-mismatch.ts +4 -0
- package/src/detectors/registry/party-order.ts +4 -0
- package/src/detectors/registry/quantity-range.ts +4 -0
- package/src/detectors/registry/range-band-mismatch.ts +4 -0
- package/src/detectors/registry/rent-multiple-mismatch.ts +4 -0
- package/src/detectors/registry/requirement-lists.ts +4 -0
- package/src/detectors/registry/return-type.ts +4 -0
- package/src/detectors/registry/scaled-quantity-mismatch.ts +4 -0
- package/src/detectors/registry/step-time-sum-mismatch.ts +4 -0
- package/src/detectors/registry/time-range-reversed.ts +4 -0
- package/src/detectors/registry/unlisted-item-used.ts +4 -0
- package/src/detectors/registry/walk-time-distance-mismatch.ts +4 -0
- package/src/detectors/rent-multiple-mismatch.ts +56 -0
- package/src/detectors/requirement-lists.ts +65 -0
- package/src/detectors/return-type.ts +30 -0
- package/src/detectors/scaled-quantity.ts +49 -0
- package/src/detectors/signals.ts +3 -1
- package/src/detectors/step-time-sum.ts +55 -0
- package/src/detectors/structure-tree.ts +42 -6
- package/src/detectors/structure.ts +1 -1
- package/src/detectors/technical-docs.ts +12 -0
- package/src/detectors/time-order.ts +45 -6
- package/src/detectors/undefined-term.ts +20 -3
- package/src/detectors/unit-consistency.ts +50 -38
- package/src/detectors/unlisted-items.ts +72 -0
- package/src/detectors/use-count-words.ts +32 -0
- package/src/detectors/use-interval.ts +51 -0
- package/src/detectors/walk-time-distance-mismatch.ts +45 -0
- package/src/document.ts +4 -1
- package/src/facts/approximate-tolerance.ts +19 -0
- package/src/facts/item-amounts.ts +94 -0
- package/src/facts/labelled-facts.ts +29 -7
- package/src/facts/measure-units.ts +31 -0
- package/src/facts/measures.ts +113 -25
- package/src/facts/retention-periods.ts +216 -0
- package/src/facts/table-facts.ts +3 -0
- package/src/facts/unit-conflicts.ts +22 -9
- package/src/facts/unit-equivalents.ts +70 -0
- package/src/facts/unit-tolerance.ts +17 -0
- package/src/facts/unit-word.ts +35 -0
- package/src/facts/written-precision.ts +23 -0
- package/src/kana-spelling.ts +25 -0
- package/src/model-codes.ts +104 -0
- package/src/name-spelling-chars.ts +34 -0
- package/src/name-variants.ts +83 -7
- package/src/name-word-order.ts +149 -0
- package/src/phone-numbers.ts +26 -6
- package/src/place-names.ts +53 -14
- package/src/plugin.ts +7 -0
- package/src/preamble-paragraphs.ts +21 -2
- package/src/profile/parse.ts +10 -0
- package/src/return-type.ts +361 -0
- package/src/spacing-code.ts +26 -0
- package/src/structure/amount-range.ts +16 -7
- package/src/structure/capacity-count.ts +196 -0
- package/src/structure/connection-times.ts +226 -0
- package/src/structure/counted-amounts.ts +5 -4
- package/src/structure/date-order-tie.ts +86 -0
- package/src/structure/date-order.ts +41 -14
- package/src/structure/date-outside-period.ts +77 -7
- package/src/structure/date-range.ts +45 -9
- package/src/structure/deadline-after-event.ts +67 -0
- package/src/structure/definition-use.ts +59 -2
- package/src/structure/due-date.ts +8 -32
- package/src/structure/labelled-date-order.ts +84 -0
- package/src/structure/layout-codes.ts +210 -0
- package/src/structure/leg-times.ts +15 -0
- package/src/structure/measured-amounts.ts +138 -0
- package/src/structure/party-order.ts +115 -0
- package/src/structure/quantity-range.ts +54 -0
- package/src/structure/range-bands.ts +316 -0
- package/src/structure/rent-multiple.ts +277 -0
- package/src/structure/requirement-lists.ts +145 -0
- package/src/structure/scaled-quantities.ts +225 -0
- package/src/structure/stamp-order.ts +100 -0
- package/src/structure/step-times.ts +169 -0
- package/src/structure/term-deadline.ts +35 -0
- package/src/structure/time-order.ts +8 -7
- package/src/structure/time-range.ts +64 -0
- package/src/structure/total-line.ts +63 -0
- package/src/structure/total.ts +41 -6
- package/src/structure/unlisted-items.ts +207 -0
- package/src/structure/version-order.ts +10 -0
- package/src/structure/walk-time.ts +285 -0
- package/src/surname-near.ts +31 -0
- package/src/table-cells.ts +41 -0
- package/src/table-names.ts +113 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
// range-band-mismatch: the bands of one table column or one list (7〜11歳, 12〜14歳, 15歳以上; under 7, 7 to 11, 12 and over)
|
|
2
|
+
// that overlap or leave a gap between neighbours. The words that bound a band and the units it is counted in come from the
|
|
3
|
+
// lexicons (range-band-word, range-band-unit, range-band-heading). Pure.
|
|
4
|
+
const NUMBER = /^(?:\d{1,3}(?:,\d{3})+|\d+)(?:\.\d+)?/u;
|
|
5
|
+
const LATIN_END = /[a-z]$/u;
|
|
6
|
+
const LETTER = /^[a-z]/u;
|
|
7
|
+
const SPACE = /^\s*/u;
|
|
8
|
+
const EMPHASIS = /[*_`]/gu;
|
|
9
|
+
/** The text without a note in brackets at its end (15歳以上(成人)), and the note. */
|
|
10
|
+
const splitNote = (text) => {
|
|
11
|
+
const open = text.lastIndexOf("(");
|
|
12
|
+
if (!text.endsWith(")") || open === -1)
|
|
13
|
+
return { bare: text, note: undefined };
|
|
14
|
+
return { bare: text.slice(0, open).trim(), note: text.slice(open + 1, -1).trim() };
|
|
15
|
+
};
|
|
16
|
+
const plainOf = (text) => text.normalize("NFKC").toLowerCase().replace(EMPHASIS, "").trim();
|
|
17
|
+
export const normalizeBandText = (text) => splitNote(plainOf(text)).bare;
|
|
18
|
+
const normalizeWord = (word) => word.normalize("NFKC").toLowerCase();
|
|
19
|
+
/** A unit compared across bands: years and year, kg and kgs are the same unit. */
|
|
20
|
+
const unitKey = (unit) => (unit.length > 2 && unit.endsWith("s") ? unit.slice(0, -1) : unit);
|
|
21
|
+
const skipSpace = (cursor) => ({ text: cursor.text, at: cursor.at + (SPACE.exec(cursor.text.slice(cursor.at))?.[0].length ?? 0) });
|
|
22
|
+
/** The longest word at the cursor; a Latin word must end at a word edge (to is not the start of total). */
|
|
23
|
+
const wordAt = (cursor, words) => words
|
|
24
|
+
.map(normalizeWord)
|
|
25
|
+
.filter((word) => word !== "" && cursor.text.startsWith(word, cursor.at))
|
|
26
|
+
.filter((word) => !LATIN_END.test(word) || !LETTER.test(cursor.text.slice(cursor.at + word.length)))
|
|
27
|
+
.reduce((best, word) => (best === undefined || word.length > best.length ? word : best), undefined);
|
|
28
|
+
const advance = (cursor, word) => word === undefined ? cursor : skipSpace({ text: cursor.text, at: cursor.at + word.length });
|
|
29
|
+
const numberAt = (cursor) => {
|
|
30
|
+
const written = NUMBER.exec(cursor.text.slice(cursor.at))?.[0];
|
|
31
|
+
if (written === undefined)
|
|
32
|
+
return undefined;
|
|
33
|
+
const digits = written.replaceAll(",", "");
|
|
34
|
+
return { value: { value: Number(digits), decimals: digits.split(".")[1]?.length ?? 0 }, cursor: advance(cursor, written) };
|
|
35
|
+
};
|
|
36
|
+
const unitsAt = (cursor, words, position) => {
|
|
37
|
+
const unit = wordAt(cursor, words.units.filter((entry) => entry.position === position).map((entry) => entry.pattern));
|
|
38
|
+
return { value: unit, cursor: advance(cursor, unit) };
|
|
39
|
+
};
|
|
40
|
+
const markerAt = (cursor, words, position) => {
|
|
41
|
+
const markers = words.markers.filter((marker) => marker.position === position);
|
|
42
|
+
const word = wordAt(cursor, markers.map((marker) => marker.pattern));
|
|
43
|
+
return { value: markers.find((marker) => normalizeWord(marker.pattern) === word), cursor: advance(cursor, word) };
|
|
44
|
+
};
|
|
45
|
+
const figureAt = (cursor, words) => {
|
|
46
|
+
const prefix = unitsAt(cursor, words, "before");
|
|
47
|
+
const number = prefix === undefined ? undefined : numberAt(prefix.cursor);
|
|
48
|
+
const suffix = number === undefined ? undefined : unitsAt(number.cursor, words, "after");
|
|
49
|
+
if (prefix === undefined || number === undefined || suffix === undefined)
|
|
50
|
+
return undefined;
|
|
51
|
+
const units = [prefix.value, suffix.value].filter((unit) => unit !== undefined);
|
|
52
|
+
return { value: { ...number.value, units }, cursor: suffix.cursor };
|
|
53
|
+
};
|
|
54
|
+
const boundOf = (figure, kind) => ({ value: figure.value, kind, decimals: figure.decimals });
|
|
55
|
+
const withMarker = (figure, marker) => ({
|
|
56
|
+
low: marker.side === "low" ? boundOf(figure, marker.kind) : undefined,
|
|
57
|
+
high: marker.side === "high" ? boundOf(figure, marker.kind) : undefined,
|
|
58
|
+
units: figure.units,
|
|
59
|
+
});
|
|
60
|
+
/** One end with its word: 15歳以上, 7 and over, under 7. */
|
|
61
|
+
const markedEnd = (cursor, words) => {
|
|
62
|
+
const before = markerAt(cursor, words, "before");
|
|
63
|
+
const figure = before === undefined ? undefined : figureAt(before.cursor, words);
|
|
64
|
+
const after = figure === undefined ? undefined : markerAt(figure.cursor, words, "after");
|
|
65
|
+
if (before === undefined || figure === undefined || after === undefined)
|
|
66
|
+
return undefined;
|
|
67
|
+
const marker = before.value ?? after.value;
|
|
68
|
+
if (marker === undefined || (before.value !== undefined && after.value !== undefined))
|
|
69
|
+
return undefined;
|
|
70
|
+
const unit = unitsAt(after.cursor, words, "after");
|
|
71
|
+
if (unit === undefined)
|
|
72
|
+
return undefined;
|
|
73
|
+
const parsed = withMarker(figure.value, marker);
|
|
74
|
+
return {
|
|
75
|
+
value: { parsed: { ...parsed, units: [...parsed.units, ...(unit.value === undefined ? [] : [unit.value])] }, side: marker.side },
|
|
76
|
+
cursor: unit.cursor,
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
/** 15歳以上, under 7, and both ends with their words: 7歳以上12歳未満. */
|
|
80
|
+
const markedBand = (cursor, words) => {
|
|
81
|
+
const first = markedEnd(cursor, words);
|
|
82
|
+
if (first === undefined)
|
|
83
|
+
return undefined;
|
|
84
|
+
const rest = first.value.side === "low" ? markedEnd(first.cursor, words) : undefined;
|
|
85
|
+
if (rest === undefined || rest.value.side !== "high")
|
|
86
|
+
return { value: first.value.parsed, cursor: first.cursor };
|
|
87
|
+
const units = [...first.value.parsed.units, ...rest.value.parsed.units];
|
|
88
|
+
return { value: { low: first.value.parsed.low, high: rest.value.parsed.high, units }, cursor: rest.cursor };
|
|
89
|
+
};
|
|
90
|
+
/** 7〜11歳, 7 to 11, 12歳〜, 〜6歳. */
|
|
91
|
+
const spannedBand = (cursor, words) => {
|
|
92
|
+
const leading = wordAt(cursor, words.openers);
|
|
93
|
+
const first = figureAt(advance(cursor, leading), words);
|
|
94
|
+
if (first === undefined)
|
|
95
|
+
return undefined;
|
|
96
|
+
if (leading !== undefined)
|
|
97
|
+
return { value: { low: undefined, high: boundOf(first.value, "loose"), units: first.value.units }, cursor: first.cursor };
|
|
98
|
+
const connector = wordAt(first.cursor, words.connectors);
|
|
99
|
+
if (connector === undefined)
|
|
100
|
+
return undefined;
|
|
101
|
+
const second = figureAt(advance(first.cursor, connector), words);
|
|
102
|
+
if (second === undefined)
|
|
103
|
+
return { value: { low: boundOf(first.value, "loose"), high: undefined, units: first.value.units }, cursor: advance(first.cursor, connector) };
|
|
104
|
+
return {
|
|
105
|
+
value: { low: boundOf(first.value, "loose"), high: boundOf(second.value, "loose"), units: [...first.value.units, ...second.value.units] },
|
|
106
|
+
cursor: second.cursor,
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
/** The band a cell or the head of a list item states, or undefined when the whole text is not one band in one unit. */
|
|
110
|
+
export const parseBand = (written, words) => {
|
|
111
|
+
const text = normalizeBandText(written);
|
|
112
|
+
const start = skipSpace({ text, at: 0 });
|
|
113
|
+
const begun = advance(start, wordAt(start, words.leads));
|
|
114
|
+
const read = [begun, start]
|
|
115
|
+
.flatMap((cursor) => [markedBand(cursor, words), spannedBand(cursor, words)])
|
|
116
|
+
.find((reading) => reading !== undefined && reading.cursor.at === text.length);
|
|
117
|
+
if (read === undefined)
|
|
118
|
+
return undefined;
|
|
119
|
+
const units = new Set(read.value.units.map(unitKey));
|
|
120
|
+
if (units.size > 1)
|
|
121
|
+
return undefined;
|
|
122
|
+
const { low, high } = read.value;
|
|
123
|
+
if (low !== undefined && high !== undefined && low.value >= high.value)
|
|
124
|
+
return undefined;
|
|
125
|
+
return { low, high, unit: [...units][0] ?? "" };
|
|
126
|
+
};
|
|
127
|
+
/** The kind of a unit, by the unit lexicon. */
|
|
128
|
+
export const unitKindOf = (unit, words) => words.units.find((entry) => unitKey(normalizeWord(entry.pattern)) === unit)?.kind;
|
|
129
|
+
/** What bare numbers under a column heading count: by a word of the heading lexicon, or a unit in brackets (体重(kg)). */
|
|
130
|
+
export const headingOf = (heading, words) => {
|
|
131
|
+
const { bare, note } = splitNote(plainOf(heading).replaceAll("[", "(").replaceAll("]", ")"));
|
|
132
|
+
const unit = note === undefined ? undefined : unitKey(note);
|
|
133
|
+
const unitKind = unit === undefined ? undefined : unitKindOf(unit, words);
|
|
134
|
+
if (unit !== undefined && unitKind !== undefined)
|
|
135
|
+
return { unit, kind: unitKind };
|
|
136
|
+
const named = words.headings.find((entry) => normalizeWord(entry.pattern) === bare);
|
|
137
|
+
return named === undefined ? undefined : { unit: "", kind: named.kind };
|
|
138
|
+
};
|
|
139
|
+
const POSITIVE = Number.POSITIVE_INFINITY;
|
|
140
|
+
const NEGATIVE = Number.NEGATIVE_INFINITY;
|
|
141
|
+
/** The band as the values it holds. An integer band's exclusive end is the next whole number in (7歳未満 holds up to 6). */
|
|
142
|
+
const spanOf = (band, integer) => {
|
|
143
|
+
const step = integer ? 1 : 0;
|
|
144
|
+
const inward = (bound) => (bound.kind === "exclusive" ? step : 0);
|
|
145
|
+
return {
|
|
146
|
+
low: band.low === undefined ? NEGATIVE : band.low.value + inward(band.low),
|
|
147
|
+
high: band.high === undefined ? POSITIVE : band.high.value - inward(band.high),
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
/** Bands written in one direction, each starting and ending past the one before. Nested tiers (〜100万円, 〜200万円) are not. */
|
|
151
|
+
const orderOf = (spans) => {
|
|
152
|
+
const pairs = spans.slice(1).flatMap((span, index) => {
|
|
153
|
+
const previous = spans[index];
|
|
154
|
+
return previous === undefined ? [] : [[previous, span]];
|
|
155
|
+
});
|
|
156
|
+
if (pairs.every(([a, b]) => a.low < b.low && a.high < b.high))
|
|
157
|
+
return "up";
|
|
158
|
+
if (pairs.every(([a, b]) => a.low > b.low && a.high > b.high))
|
|
159
|
+
return "down";
|
|
160
|
+
return undefined;
|
|
161
|
+
};
|
|
162
|
+
/** Smallest step the two numbers are written to (59 and 60: 1; 59.9 and 60: 0.1). */
|
|
163
|
+
const stepOf = (a, b) => 10 ** -Math.max(a.decimals, b.decimals);
|
|
164
|
+
const ROUNDING = 1e-9;
|
|
165
|
+
/** Whole numbers: the next band starts one past the end of the one below. */
|
|
166
|
+
const integerJunction = (below, above) => {
|
|
167
|
+
const distance = spanOf(above, true).low - spanOf(below, true).high;
|
|
168
|
+
if (distance <= 0)
|
|
169
|
+
return "overlap";
|
|
170
|
+
return distance > 1 ? "gap" : undefined;
|
|
171
|
+
};
|
|
172
|
+
/** At one number, an end included on both sides overlaps and one excluded on both sides leaves the number out. */
|
|
173
|
+
const sameNumber = (end, start) => {
|
|
174
|
+
if (start.kind === "inclusive" && end.kind === "inclusive")
|
|
175
|
+
return "overlap";
|
|
176
|
+
return start.kind === "exclusive" && end.kind === "exclusive" ? "gap" : undefined;
|
|
177
|
+
};
|
|
178
|
+
/** Values in between: a shared end with a range mark, or ends a written step apart, are contiguous. */
|
|
179
|
+
const continuousJunction = (end, start) => {
|
|
180
|
+
if (start.value < end.value)
|
|
181
|
+
return "overlap";
|
|
182
|
+
if (start.value === end.value)
|
|
183
|
+
return sameNumber(end, start);
|
|
184
|
+
if (start.kind === "exclusive" || end.kind === "exclusive")
|
|
185
|
+
return "gap";
|
|
186
|
+
return start.value - end.value > stepOf(start, end) + ROUNDING ? "gap" : undefined;
|
|
187
|
+
};
|
|
188
|
+
/** Where the band below ends and the band above starts. */
|
|
189
|
+
const junctionOf = (below, above, integer) => {
|
|
190
|
+
if (below.high === undefined || above.low === undefined)
|
|
191
|
+
return undefined;
|
|
192
|
+
return integer ? integerJunction(below, above) : continuousJunction(below.high, above.low);
|
|
193
|
+
};
|
|
194
|
+
const widthOf = (span, integer) => span.high - span.low + (integer ? 1 : 0);
|
|
195
|
+
/** How much the bands overlap or leave out, next to the narrower of the two. */
|
|
196
|
+
const junctionSize = (kind, below, above, integer) => {
|
|
197
|
+
const edge = integer ? 1 : 0;
|
|
198
|
+
const size = kind === "overlap" ? below.high - above.low + edge : above.low - below.high - edge;
|
|
199
|
+
return { kind, size, narrower: Math.min(widthOf(below, integer), widthOf(above, integer)) };
|
|
200
|
+
};
|
|
201
|
+
/** An overlap of more than half the narrower band is deliberate: a size guide whose bands share a range. */
|
|
202
|
+
const isDeliberate = (junction) => junction.kind === "overlap" && junction.size * 2 > junction.narrower;
|
|
203
|
+
/**
|
|
204
|
+
* The overlaps and gaps between neighbouring bands of one column or list. The bands must all be counted in one unit (bare
|
|
205
|
+
* numbers take the column's), written in one direction; the slip is reported at the later of the two in the document. A run
|
|
206
|
+
* with one deliberate overlap is a scale meant to overlap, and two bands alone are reported only when the hole or overlap is
|
|
207
|
+
* no wider than the narrower band.
|
|
208
|
+
*/
|
|
209
|
+
export const bandSlips = (bands, kind) => {
|
|
210
|
+
if (bands.length < 2)
|
|
211
|
+
return [];
|
|
212
|
+
const integer = kind === "integer" && bands.every(({ band }) => [band.low, band.high].every((bound) => bound === undefined || bound.decimals === 0));
|
|
213
|
+
const order = orderOf(bands.map(({ band }) => spanOf(band, integer)));
|
|
214
|
+
if (order === undefined)
|
|
215
|
+
return [];
|
|
216
|
+
const ascending = order === "up" ? [...bands] : [...bands].reverse();
|
|
217
|
+
const junctions = ascending.slice(1).flatMap((above, index) => {
|
|
218
|
+
const below = ascending[index];
|
|
219
|
+
const slip = below === undefined ? undefined : junctionOf(below.band, above.band, integer);
|
|
220
|
+
return below === undefined || slip === undefined
|
|
221
|
+
? []
|
|
222
|
+
: [{ below, above, ...junctionSize(slip, spanOf(below.band, integer), spanOf(above.band, integer), integer) }];
|
|
223
|
+
});
|
|
224
|
+
if (junctions.some(isDeliberate))
|
|
225
|
+
return [];
|
|
226
|
+
const pair = bands.length === 2;
|
|
227
|
+
return junctions
|
|
228
|
+
.filter((junction) => !pair || junction.size <= junction.narrower)
|
|
229
|
+
.map(({ below, above, kind: slip }) => {
|
|
230
|
+
const [earlier, later] = below.start < above.start ? [below, above] : [above, below];
|
|
231
|
+
return { kind: slip, earlier, later };
|
|
232
|
+
});
|
|
233
|
+
};
|
|
234
|
+
/** The unit and kind of a run of bands: one unit for all (bare numbers take the heading's), or undefined. */
|
|
235
|
+
export const runKindOf = (bands, heading, words) => {
|
|
236
|
+
const units = new Set([...bands.map((band) => band.unit), heading?.unit ?? ""].filter((unit) => unit !== ""));
|
|
237
|
+
if (units.size > 1)
|
|
238
|
+
return undefined;
|
|
239
|
+
const unit = [...units][0];
|
|
240
|
+
if (unit === undefined)
|
|
241
|
+
return heading?.kind;
|
|
242
|
+
return unitKindOf(unit, words);
|
|
243
|
+
};
|
|
244
|
+
//# sourceMappingURL=range-bands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range-bands.js","sourceRoot":"","sources":["../../src/structure/range-bands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { StructureIssue } from "./issues.ts";
|
|
2
|
+
/**
|
|
3
|
+
* rent-multiple-mismatch: a deposit, key money or guarantee given both as a number of months of rent and as an amount that
|
|
4
|
+
* is not that many months of the listing's rent (敷金 2か月(98,000円) with 賃料 98,000円; "Deposit: Six months' rent
|
|
5
|
+
* ($145,000)" with Rent $21,500). The rent is the nearest one stated before the deposit (several listings on one page each
|
|
6
|
+
* state their own); a document whose deposits come before any rent uses the rent only when it states one. When the document
|
|
7
|
+
* also states a fee beside the rent (管理費, service charge), the multiple may be of the rent alone or of the rent and the
|
|
8
|
+
* fee, since listings do both and seldom say which. A months count without an amount, an amount without a months count, a
|
|
9
|
+
* range of months, and two different pairs in one statement are not compared. The words come from the lexicons. Pure.
|
|
10
|
+
*/
|
|
11
|
+
/** One amount of money as read: its currency, its value, and the value of the word of scale written in it (万), if any. */
|
|
12
|
+
export type RentAmount = {
|
|
13
|
+
readonly offset: number;
|
|
14
|
+
readonly end: number;
|
|
15
|
+
readonly currency: string;
|
|
16
|
+
readonly value: number;
|
|
17
|
+
readonly scale: number | undefined;
|
|
18
|
+
};
|
|
19
|
+
export type RentMultipleWords = {
|
|
20
|
+
/** Labels of the monthly rent (賃料, Rent). */
|
|
21
|
+
readonly rents: readonly string[];
|
|
22
|
+
/** Labels of a monthly fee paid with the rent (管理費, Service charge). */
|
|
23
|
+
readonly fees: readonly string[];
|
|
24
|
+
/** Labels of an amount stated in months of rent (敷金, 礼金, Security deposit). */
|
|
25
|
+
readonly multiples: readonly string[];
|
|
26
|
+
/** The word of a month after a count (か月, months). */
|
|
27
|
+
readonly months: readonly string[];
|
|
28
|
+
/** Words that may stand between a label or a months count and its amount (は, 分, of, equal to). */
|
|
29
|
+
readonly links: readonly string[];
|
|
30
|
+
/** Words that say an amount is not per month (per week, 年額, per sq ft); a rent line with one is not read. */
|
|
31
|
+
readonly periods: readonly string[];
|
|
32
|
+
/** Words that make the amount something other than the plain multiple (税込, tax included). */
|
|
33
|
+
readonly skips: readonly string[];
|
|
34
|
+
/** Marks and words that join the two ends of a range (〜, to). */
|
|
35
|
+
readonly connectors: readonly string[];
|
|
36
|
+
/** Numbers written as words (six, 一) and their values. */
|
|
37
|
+
readonly numberWords: readonly {
|
|
38
|
+
readonly word: string;
|
|
39
|
+
readonly value: number;
|
|
40
|
+
}[];
|
|
41
|
+
};
|
|
42
|
+
/** An amount read as the interval its written digits allow (9.8万円 is anything from 97,500 to 98,500). */
|
|
43
|
+
export type Interval = {
|
|
44
|
+
readonly low: number;
|
|
45
|
+
readonly high: number;
|
|
46
|
+
};
|
|
47
|
+
/** A rent or fee as stated. range is undefined when the label has amounts that are not one monthly amount (a change, per week). */
|
|
48
|
+
type Stated = {
|
|
49
|
+
readonly offset: number;
|
|
50
|
+
readonly currency: string;
|
|
51
|
+
readonly range: Interval | undefined;
|
|
52
|
+
readonly written: string;
|
|
53
|
+
};
|
|
54
|
+
type Months = {
|
|
55
|
+
readonly start: number;
|
|
56
|
+
readonly end: number;
|
|
57
|
+
readonly count: number;
|
|
58
|
+
};
|
|
59
|
+
/** Whether only separators, bracketed words and link words stand in the gap (「 | 」, " (monthly): ", "の", "'s rent ("). */
|
|
60
|
+
export declare const isPlainGap: (gap: string, words: readonly string[]) => boolean;
|
|
61
|
+
/** The interval an amount's digits allow: a word of scale (9.8万) leaves half its last digit either way; plain digits are exact. */
|
|
62
|
+
export declare const intervalOf: (amount: RentAmount, written: string) => Interval;
|
|
63
|
+
/** The months counts in a piece of text (2か月, Six months), with the offset of the piece. */
|
|
64
|
+
export declare const monthsIn: (piece: string, offset: number, words: RentMultipleWords) => Months[];
|
|
65
|
+
/** The rent a statement at this offset is of: the nearest before it, or, before any, the one rent the document states. */
|
|
66
|
+
export declare const rentFor: <T extends Stated>(rents: readonly T[], offset: number) => T | undefined;
|
|
67
|
+
/** The fees of the listing a rent belongs to: those after it and before the next rent; for the first rent, else those before it. */
|
|
68
|
+
export declare const feesFor: <T extends Stated>(rent: Stated, rents: readonly Stated[], fees: readonly T[]) => T[];
|
|
69
|
+
/** The monthly amounts a multiple may be of: the rent alone, the rent with each fee, and the rent with every fee. */
|
|
70
|
+
export declare const monthlyBases: (rent: Interval, fees: readonly Interval[]) => Interval[];
|
|
71
|
+
/** Whether the amount is the count of months of one of the bases, within the written precision and a unit's rounding. */
|
|
72
|
+
export declare const isMultiple: (count: number, amount: Interval, bases: readonly Interval[]) => boolean;
|
|
73
|
+
/** Every multiple of rent whose amount is not that many months of the listing's rent (or of the rent and its fee). */
|
|
74
|
+
export declare const rentMultipleMismatches: (text: string, amounts: readonly RentAmount[], words: RentMultipleWords) => StructureIssue[];
|
|
75
|
+
export {};
|
|
76
|
+
//# sourceMappingURL=rent-multiple.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rent-multiple.d.ts","sourceRoot":"","sources":["../../src/structure/rent-multiple.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { escapeRegExp } from "../orthography.js";
|
|
2
|
+
/** Rounding to the currency's unit (a yen, a dollar) is allowed on top of the written precision. */
|
|
3
|
+
const UNIT_SLACK = 1;
|
|
4
|
+
const LATIN = /[A-Za-z]/u;
|
|
5
|
+
const SEPARATORS = /[\s||::==、,,・//'’()()[\][]-]/gu;
|
|
6
|
+
const PARENTHETICAL_WITHOUT_DIGITS = /[((][^()()0-90-9]*[))]/gu;
|
|
7
|
+
/** The possessive after a months count (2 months' rent, 1 month's rent). */
|
|
8
|
+
const POSSESSIVE = /['’]s?(?![A-Za-z])/gu;
|
|
9
|
+
const RANGE_START = /[0-90-9A-Za-z一二三四五六七八九十]\s*$/u;
|
|
10
|
+
const SENTENCE_END = /[。!?;;]|[.!?](?=\s|$)/u;
|
|
11
|
+
const DIGITS = "[0-90-9]+(?:[..][0-90-9]+)?";
|
|
12
|
+
const wordPattern = (word) => {
|
|
13
|
+
const edgeStart = LATIN.test(word.charAt(0)) ? "(?<![A-Za-z])" : "";
|
|
14
|
+
const edgeEnd = LATIN.test(word.charAt(word.length - 1)) ? "(?![A-Za-z])" : "";
|
|
15
|
+
return `${edgeStart}${escapeRegExp(word)}${edgeEnd}`;
|
|
16
|
+
};
|
|
17
|
+
/** One alternation of the words, longest first so 月額賃料 wins over 賃料. Undefined when there are none. */
|
|
18
|
+
const alternation = (words) => words.length === 0
|
|
19
|
+
? undefined
|
|
20
|
+
: words
|
|
21
|
+
.toSorted((left, right) => right.length - left.length)
|
|
22
|
+
.map(wordPattern)
|
|
23
|
+
.join("|");
|
|
24
|
+
const occurrences = (text, words) => {
|
|
25
|
+
const pattern = alternation(words);
|
|
26
|
+
if (pattern === undefined)
|
|
27
|
+
return [];
|
|
28
|
+
return [...text.matchAll(new RegExp(pattern, "giu"))].map((match) => ({ start: match.index, end: match.index + match[0].length }));
|
|
29
|
+
};
|
|
30
|
+
const withoutWords = (text, words) => {
|
|
31
|
+
const pattern = alternation(words);
|
|
32
|
+
return pattern === undefined ? text : text.replace(new RegExp(pattern, "giu"), "");
|
|
33
|
+
};
|
|
34
|
+
/** Whether only separators, bracketed words and link words stand in the gap (「 | 」, " (monthly): ", "の", "'s rent ("). */
|
|
35
|
+
export const isPlainGap = (gap, words) => withoutWords(gap.replace(PARENTHETICAL_WITHOUT_DIGITS, "").replace(POSSESSIVE, ""), words).replace(SEPARATORS, "") === "";
|
|
36
|
+
const decimalsOf = (written) => /[..]([0-90-9]+)/u.exec(written)?.[1]?.length ?? 0;
|
|
37
|
+
/** The interval an amount's digits allow: a word of scale (9.8万) leaves half its last digit either way; plain digits are exact. */
|
|
38
|
+
export const intervalOf = (amount, written) => {
|
|
39
|
+
const half = amount.scale === undefined ? 0 : (amount.scale * 10 ** -decimalsOf(written)) / 2;
|
|
40
|
+
return { low: amount.value - half, high: amount.value + half };
|
|
41
|
+
};
|
|
42
|
+
const lineBounds = (text, offset) => {
|
|
43
|
+
const end = text.indexOf("\n", offset);
|
|
44
|
+
return { start: text.lastIndexOf("\n", offset - 1) + 1, end: end === -1 ? text.length : end };
|
|
45
|
+
};
|
|
46
|
+
const amountsBetween = (amounts, start, end) => amounts.filter((amount) => amount.offset >= start && amount.end <= end);
|
|
47
|
+
/** A label preceded by a months count (2 months' rent, First month's rent) names a multiple, not the rent. */
|
|
48
|
+
const followsMonths = (before, words) => {
|
|
49
|
+
const trimmed = before.replace(/['’]s?\s*$/u, "").trimEnd();
|
|
50
|
+
return words.months.some((month) => trimmed.toLowerCase().endsWith(month.toLowerCase()));
|
|
51
|
+
};
|
|
52
|
+
/** The second end of a range that starts with this amount (85,000円〜90,000円), if one follows. */
|
|
53
|
+
const rangeEnd = (text, first, next, words) => {
|
|
54
|
+
if (next === undefined || next.currency !== first.currency || next.value < first.value)
|
|
55
|
+
return undefined;
|
|
56
|
+
const joint = text.slice(first.end, next.offset).trim();
|
|
57
|
+
return words.connectors.some((connector) => connector.toLowerCase() === joint.toLowerCase()) ? next : undefined;
|
|
58
|
+
};
|
|
59
|
+
/** Where a label's own amount must be: before the next label of any kind on its line (賃料 98,000円 管理費 6,000円). */
|
|
60
|
+
const labelledEnd = (text, from, lineEnd, words) => {
|
|
61
|
+
const [next] = occurrences(text.slice(from, lineEnd), [...words.rents, ...words.fees, ...words.multiples]);
|
|
62
|
+
return next === undefined ? lineEnd : from + next.start;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* A rent or fee stated with one amount or one range of amounts. With a second amount (a change from one to another, two
|
|
66
|
+
* units) or a word of another period on the line (per week, 年額), it is stated but its monthly amount is not known.
|
|
67
|
+
*/
|
|
68
|
+
const statedAt = (text, label, amounts, words) => {
|
|
69
|
+
const line = lineBounds(text, label.start);
|
|
70
|
+
const [first, second, ...rest] = amountsBetween(amounts, label.end, labelledEnd(text, label.end, line.end, words));
|
|
71
|
+
if (first === undefined || !isPlainGap(text.slice(label.end, first.offset), words.links))
|
|
72
|
+
return [];
|
|
73
|
+
if (followsMonths(text.slice(line.start, label.start), words))
|
|
74
|
+
return [];
|
|
75
|
+
const last = rangeEnd(text, first, second, words) ?? first;
|
|
76
|
+
const written = text.slice(first.offset, last.end);
|
|
77
|
+
const unclear = (second !== undefined && last !== second) || rest.length > 0 || occurrences(text.slice(line.start, line.end), words.periods).length > 0;
|
|
78
|
+
if (unclear)
|
|
79
|
+
return [{ offset: label.start, currency: first.currency, range: undefined, written }];
|
|
80
|
+
const range = { low: intervalOf(first, text.slice(first.offset, first.end)).low, high: intervalOf(last, text.slice(last.offset, last.end)).high };
|
|
81
|
+
return [{ offset: label.start, currency: first.currency, range, written }];
|
|
82
|
+
};
|
|
83
|
+
/** Each label of the kind followed on its line by an amount (賃料 | 98,000円, Rent: $1,600 to $1,700), in document order. */
|
|
84
|
+
const statedAmounts = (text, labels, amounts, words) => occurrences(text, labels).flatMap((label) => statedAt(text, label, amounts, words));
|
|
85
|
+
const numberWordValue = (word, words) => words.numberWords.find((entry) => entry.word.toLowerCase() === word.toLowerCase())?.value;
|
|
86
|
+
const countOf = (written, words) => numberWordValue(written, words) ?? Number(written.normalize("NFKC"));
|
|
87
|
+
/** The months counts in a piece of text (2か月, Six months), with the offset of the piece. */
|
|
88
|
+
export const monthsIn = (piece, offset, words) => {
|
|
89
|
+
const marker = alternation(words.months);
|
|
90
|
+
if (marker === undefined)
|
|
91
|
+
return [];
|
|
92
|
+
const numberWords = alternation(words.numberWords.map((entry) => entry.word));
|
|
93
|
+
const count = numberWords === undefined ? DIGITS : `${DIGITS}|${numberWords}`;
|
|
94
|
+
const pattern = new RegExp(`(?<![0-90-9.,,.])(${count})\\s?(?:${marker})`, "giu");
|
|
95
|
+
return [...piece.matchAll(pattern)].map((match) => ({
|
|
96
|
+
start: offset + match.index,
|
|
97
|
+
end: offset + match.index + match[0].length,
|
|
98
|
+
count: countOf(match[1] ?? "", words),
|
|
99
|
+
}));
|
|
100
|
+
};
|
|
101
|
+
/** Whether a months count is the upper end of a range (1〜2か月). */
|
|
102
|
+
const endsRange = (text, months, words) => {
|
|
103
|
+
const before = text.slice(Math.max(0, months.start - 12), months.start).trimEnd();
|
|
104
|
+
return words.connectors.some((connector) => before.endsWith(connector) && RANGE_START.test(before.slice(0, -connector.length)));
|
|
105
|
+
};
|
|
106
|
+
const gapBetween = (text, months, amount) => amount.offset >= months.end ? text.slice(months.end, amount.offset) : text.slice(amount.end, months.start);
|
|
107
|
+
/** A months count and an amount standing together, either way round (1か月(98,000円), $3,200 (2 months' rent)). */
|
|
108
|
+
const pairsIn = (text, months, amounts, words) => {
|
|
109
|
+
const between = [...words.links, ...words.rents];
|
|
110
|
+
return months.flatMap((count) => amounts
|
|
111
|
+
.filter((amount) => (amount.offset >= count.end || amount.end <= count.start) && isPlainGap(gapBetween(text, count, amount), between))
|
|
112
|
+
.map((amount) => ({ months: count, amount })));
|
|
113
|
+
};
|
|
114
|
+
/** Where the statement of one label ends: at the next label of its kind, the end of the sentence, or the end of the line. */
|
|
115
|
+
const statementEnd = (text, from, nextLabel) => {
|
|
116
|
+
const line = lineBounds(text, from);
|
|
117
|
+
const sentence = SENTENCE_END.exec(text.slice(from, line.end));
|
|
118
|
+
return Math.min(line.end, nextLabel ?? line.end, sentence === null ? line.end : from + sentence.index);
|
|
119
|
+
};
|
|
120
|
+
/** One label's months count and amount, when the statement holds exactly one such pair and no word that makes it another. */
|
|
121
|
+
const statementAt = (text, label, next, amounts, words) => {
|
|
122
|
+
const end = statementEnd(text, label.end, next);
|
|
123
|
+
const piece = text.slice(label.end, end);
|
|
124
|
+
if (occurrences(piece, words.skips).length > 0)
|
|
125
|
+
return [];
|
|
126
|
+
const months = monthsIn(piece, label.end, words);
|
|
127
|
+
if (months.some((count) => endsRange(text, count, words)))
|
|
128
|
+
return [];
|
|
129
|
+
const pairs = pairsIn(text, months, amountsBetween(amounts, label.end, end), words);
|
|
130
|
+
const [pair] = pairs;
|
|
131
|
+
const single = pairs.every((other) => other.months.count === pair?.months.count && other.amount.value === pair.amount.value);
|
|
132
|
+
return pair === undefined || !single ? [] : [{ label: label.start, pair }];
|
|
133
|
+
};
|
|
134
|
+
/** Every label of a multiple with one months count and one amount (敷金 | 2か月(98,000円)). */
|
|
135
|
+
const multipleStatements = (text, amounts, words) => {
|
|
136
|
+
const labels = occurrences(text, words.multiples);
|
|
137
|
+
return labels.flatMap((label, index) => statementAt(text, label, labels[index + 1]?.start, amounts, words));
|
|
138
|
+
};
|
|
139
|
+
/** The rent a statement at this offset is of: the nearest before it, or, before any, the one rent the document states. */
|
|
140
|
+
export const rentFor = (rents, offset) => {
|
|
141
|
+
const before = rents.filter((rent) => rent.offset < offset).at(-1);
|
|
142
|
+
if (before !== undefined)
|
|
143
|
+
return before;
|
|
144
|
+
const [first] = rents;
|
|
145
|
+
return rents.every((rent) => rent.range !== undefined && rent.range.low === first?.range?.low && rent.range.high === first.range.high) ? first : undefined;
|
|
146
|
+
};
|
|
147
|
+
/** The fees of the listing a rent belongs to: those after it and before the next rent; for the first rent, else those before it. */
|
|
148
|
+
export const feesFor = (rent, rents, fees) => {
|
|
149
|
+
const index = rents.indexOf(rent);
|
|
150
|
+
const next = rents[index + 1]?.offset ?? Number.POSITIVE_INFINITY;
|
|
151
|
+
const ofCurrency = fees.filter((fee) => fee.currency === rent.currency);
|
|
152
|
+
const after = ofCurrency.filter((fee) => fee.offset > rent.offset && fee.offset < next);
|
|
153
|
+
return after.length > 0 || index > 0 ? after : ofCurrency.filter((fee) => fee.offset < rent.offset);
|
|
154
|
+
};
|
|
155
|
+
const plus = (left, right) => ({ low: left.low + right.low, high: left.high + right.high });
|
|
156
|
+
/** The monthly amounts a multiple may be of: the rent alone, the rent with each fee, and the rent with every fee. */
|
|
157
|
+
export const monthlyBases = (rent, fees) => {
|
|
158
|
+
const withEach = fees.map((fee) => plus(rent, fee));
|
|
159
|
+
const withAll = fees.length > 1 ? [fees.reduce(plus, rent)] : [];
|
|
160
|
+
return [rent, ...withEach, ...withAll];
|
|
161
|
+
};
|
|
162
|
+
/** Whether the amount is the count of months of one of the bases, within the written precision and a unit's rounding. */
|
|
163
|
+
export const isMultiple = (count, amount, bases) => bases.some((base) => count * base.low - UNIT_SLACK <= amount.high && amount.low <= count * base.high + UNIT_SLACK);
|
|
164
|
+
const mismatchOf = (text, statement, rents, fees) => {
|
|
165
|
+
const rent = rentFor(rents, statement.label);
|
|
166
|
+
const { months, amount } = statement.pair;
|
|
167
|
+
if (rent?.range === undefined || rent.currency !== amount.currency)
|
|
168
|
+
return [];
|
|
169
|
+
const feeRanges = feesFor(rent, rents, fees).map((fee) => fee.range);
|
|
170
|
+
if (!feeRanges.every((range) => range !== undefined))
|
|
171
|
+
return [];
|
|
172
|
+
const bases = monthlyBases(rent.range, feeRanges);
|
|
173
|
+
if (isMultiple(months.count, intervalOf(amount, text.slice(amount.offset, amount.end)), bases))
|
|
174
|
+
return [];
|
|
175
|
+
const values = { months: text.slice(months.start, months.end), amount: text.slice(amount.offset, amount.end), rent: rent.written };
|
|
176
|
+
return [{ offset: Math.min(months.start, amount.offset), values }];
|
|
177
|
+
};
|
|
178
|
+
/** Every multiple of rent whose amount is not that many months of the listing's rent (or of the rent and its fee). */
|
|
179
|
+
export const rentMultipleMismatches = (text, amounts, words) => {
|
|
180
|
+
const rents = statedAmounts(text, words.rents, amounts, words);
|
|
181
|
+
if (rents.length === 0)
|
|
182
|
+
return [];
|
|
183
|
+
const fees = statedAmounts(text, words.fees, amounts, words);
|
|
184
|
+
return multipleStatements(text, amounts, words).flatMap((statement) => mismatchOf(text, statement, rents, fees));
|
|
185
|
+
};
|
|
186
|
+
//# sourceMappingURL=rent-multiple.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rent-multiple.js","sourceRoot":"","sources":["../../src/structure/rent-multiple.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { StructureIssue } from "./issues.ts";
|
|
2
|
+
/** A heading, a line standing alone (a label if it is one of the words), or one list item, in document order. */
|
|
3
|
+
export type RequirementBlock = {
|
|
4
|
+
readonly kind: "heading";
|
|
5
|
+
readonly depth: number;
|
|
6
|
+
readonly text: string;
|
|
7
|
+
readonly offset: number;
|
|
8
|
+
} | {
|
|
9
|
+
readonly kind: "line";
|
|
10
|
+
readonly text: string;
|
|
11
|
+
readonly offset: number;
|
|
12
|
+
} | {
|
|
13
|
+
readonly kind: "item";
|
|
14
|
+
readonly text: string;
|
|
15
|
+
readonly offset: number;
|
|
16
|
+
};
|
|
17
|
+
export type ValuedWord = {
|
|
18
|
+
readonly word: string;
|
|
19
|
+
readonly value: number;
|
|
20
|
+
};
|
|
21
|
+
export type RequirementWords = {
|
|
22
|
+
/** Headings and labels of what an applicant must have (必須, Required) and of what is welcome (歓迎, Preferred). */
|
|
23
|
+
readonly required: readonly string[];
|
|
24
|
+
readonly preferred: readonly string[];
|
|
25
|
+
/** Units of a length of experience, valued in months (年 12, month 1). */
|
|
26
|
+
readonly units: readonly ValuedWord[];
|
|
27
|
+
/** Words that stand before or after a length and belong to it (at least, 以上, of). */
|
|
28
|
+
readonly before: readonly string[];
|
|
29
|
+
readonly after: readonly string[];
|
|
30
|
+
/** Numbers written as words (three, 三). */
|
|
31
|
+
readonly numbers: readonly ValuedWord[];
|
|
32
|
+
/** Words that only end an item and are not the skill (の方, こと). */
|
|
33
|
+
readonly endings: readonly string[];
|
|
34
|
+
};
|
|
35
|
+
/** The preferred items that repeat a required item of the same document, once each, in document order. */
|
|
36
|
+
export declare const requiredListedAsPreferred: (blocks: readonly RequirementBlock[], words: RequirementWords) => StructureIssue[];
|
|
37
|
+
//# sourceMappingURL=requirement-lists.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requirement-lists.d.ts","sourceRoot":"","sources":["../../src/structure/requirement-lists.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,iHAAiH;AACjH,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9E,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,gHAAgH;IAChH,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,qFAAqF;IACrF,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,kEAAkE;IAClE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,CAAC;AA0GF,0GAA0G;AAC1G,eAAO,MAAM,yBAAyB,GAAI,QAAQ,SAAS,gBAAgB,EAAE,EAAE,OAAO,gBAAgB,KAAG,cAAc,EAUtH,CAAC"}
|