chaffjs 0.30.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/time-lengths.d.ts.map +1 -1
- package/dist/derived/time-lengths.js +12 -9
- package/dist/derived/time-lengths.js.map +1 -1
- 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/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/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 +2 -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 +9 -1
- package/dist/detectors/derived-numbers.d.ts.map +1 -1
- package/dist/detectors/derived-numbers.js +2 -2
- 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 +25 -4
- 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/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/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/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/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/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/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 +22 -5
- 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 +1 -0
- package/dist/detectors/time-order.d.ts.map +1 -1
- package/dist/detectors/time-order.js +3 -1
- package/dist/detectors/time-order.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/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/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 +3 -2
- package/dist/name-variants.d.ts.map +1 -1
- package/dist/name-variants.js +4 -7
- package/dist/name-variants.js.map +1 -1
- 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 +5 -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/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/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-outside-period.d.ts +3 -1
- package/dist/structure/date-outside-period.d.ts.map +1 -1
- package/dist/structure/date-outside-period.js +8 -5
- package/dist/structure/date-outside-period.js.map +1 -1
- package/dist/structure/date-range.d.ts +1 -0
- package/dist/structure/date-range.d.ts.map +1 -1
- package/dist/structure/date-range.js +1 -1
- 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/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/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/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-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/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/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/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/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 +8 -2
- package/rules/no-em-dash.yaml +2 -2
- 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/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/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/time-lengths.ts +12 -9
- package/src/derived/use-interval.ts +151 -0
- package/src/detectors/announced-count.ts +1 -0
- package/src/detectors/capacity-runtime.ts +128 -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 +2 -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 +3 -3
- 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 +32 -6
- package/src/detectors/orthographic-variant.ts +78 -9
- package/src/detectors/orthography.ts +16 -6
- 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/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/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/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/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/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 +30 -5
- package/src/detectors/structure.ts +1 -1
- package/src/detectors/technical-docs.ts +12 -0
- package/src/detectors/time-order.ts +5 -1
- 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/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/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 +8 -7
- package/src/phone-numbers.ts +26 -6
- package/src/place-names.ts +53 -14
- package/src/plugin.ts +2 -0
- package/src/preamble-paragraphs.ts +21 -2
- package/src/profile/parse.ts +10 -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/counted-amounts.ts +5 -4
- package/src/structure/date-outside-period.ts +11 -6
- package/src/structure/date-range.ts +1 -1
- 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/measured-amounts.ts +138 -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/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-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/walk-time.ts +285 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { escapeRegExp } from "../orthography.js";
|
|
2
|
+
import { linesOf } from "../structure/lines.js";
|
|
3
|
+
import { cellsOf, tablesOf } from "../facts/table-facts.js";
|
|
4
|
+
import { asciiDigits, isLimited, lastIndexAtOrBefore, periodCounts, windowStart, } from "./period-counts.js";
|
|
5
|
+
const MINUTES_PER_HOUR = 60;
|
|
6
|
+
const lower = (text) => text.toLowerCase();
|
|
7
|
+
const SENTENCE_END = /[。.!?!?\n]|\.(?=\s|$)/u;
|
|
8
|
+
/** How far after a length its sentence is read, in characters. */
|
|
9
|
+
const SENTENCE_REACH = 120;
|
|
10
|
+
const sentenceAround = (text, span) => {
|
|
11
|
+
const end = SENTENCE_END.exec(text.slice(span.end, span.end + SENTENCE_REACH));
|
|
12
|
+
return { start: windowStart(text, span.start, []), end: end === null ? Math.min(text.length, span.end + SENTENCE_REACH) : span.end + end.index };
|
|
13
|
+
};
|
|
14
|
+
const hasWord = (text, word) => new RegExp(`(?<![a-z])${escapeRegExp(lower(word))}(?![a-z])`, "u").test(lower(text));
|
|
15
|
+
/** 4時間以上, at least 4 hours: a length with a minimum mark beside it and an interval word in its sentence. */
|
|
16
|
+
const isMinimumInterval = (text, length, words) => {
|
|
17
|
+
const sentence = sentenceAround(text, length);
|
|
18
|
+
const before = lower(text.slice(sentence.start, length.start)).trimEnd();
|
|
19
|
+
const after = lower(text.slice(length.end, sentence.end)).trimStart();
|
|
20
|
+
const marked = words.minimum.some((mark) => (mark.position ?? "after") === "after" ? after.startsWith(lower(mark.pattern)) : before.endsWith(lower(mark.pattern)));
|
|
21
|
+
return marked && words.cues.some((cue) => hasWord(text.slice(sentence.start, sentence.end), cue));
|
|
22
|
+
};
|
|
23
|
+
const inside = (scope) => (span) => span.start >= scope.start && span.end <= scope.end;
|
|
24
|
+
const statementIn = (scope, counts, intervals) => {
|
|
25
|
+
const [inCounts, inIntervals] = [counts.filter(inside(scope)), intervals.filter(inside(scope))];
|
|
26
|
+
const [count, interval] = [inCounts[0], inIntervals[0]];
|
|
27
|
+
return inCounts.length === 1 && inIntervals.length === 1 && count !== undefined && interval !== undefined ? { count, interval } : undefined;
|
|
28
|
+
};
|
|
29
|
+
const HEADING = /^ {0,3}#{1,6}\s/u;
|
|
30
|
+
const plain = (cell) => lower(asciiDigits(cell).normalize("NFKC").replace(/[*_`]/gu, "").trim());
|
|
31
|
+
const COUNT_CELL = /^(\d+)(?:\s*[〜~\-–]\s*(\d+))?$/u;
|
|
32
|
+
/** A cell that holds only a count: 3, 3回, 2〜3回, three, twice. The larger end of a range. */
|
|
33
|
+
const cellCount = (cell, words) => {
|
|
34
|
+
const text = plain(cell);
|
|
35
|
+
const counter = words.counters.find((word) => text.endsWith(lower(word)));
|
|
36
|
+
const bare = counter === undefined ? text : text.slice(0, -counter.length).trim();
|
|
37
|
+
const digits = COUNT_CELL.exec(bare);
|
|
38
|
+
if (digits !== null)
|
|
39
|
+
return Number(digits[2] ?? digits[1]);
|
|
40
|
+
return words.numberWords.find((word) => lower(word.pattern) === bare)?.value;
|
|
41
|
+
};
|
|
42
|
+
/** The largest count of each counted column, in every table. */
|
|
43
|
+
const tableCountsOf = (lines, words) => tablesOf(lines).flatMap(({ header, rows }) => cellsOf(header).flatMap((cell, index) => {
|
|
44
|
+
const column = words.columns.find((word) => plain(word.pattern) === plain(cell.text));
|
|
45
|
+
const values = rows.flatMap((row) => {
|
|
46
|
+
const value = cellCount(cellsOf(row)[index]?.text ?? "", words);
|
|
47
|
+
return value === undefined ? [] : [value];
|
|
48
|
+
});
|
|
49
|
+
if (column === undefined || values.length === 0)
|
|
50
|
+
return [];
|
|
51
|
+
return [{ at: header.start, column: cell.text.trim(), count: Math.max(...values), hours: column.hours }];
|
|
52
|
+
}));
|
|
53
|
+
const layoutOf = (text, words) => {
|
|
54
|
+
const lines = linesOf(text);
|
|
55
|
+
return { headings: lines.filter((line) => HEADING.test(line.text)).map((line) => line.start), tables: tableCountsOf(lines, words), length: text.length };
|
|
56
|
+
};
|
|
57
|
+
/** The heading-delimited section that holds at. */
|
|
58
|
+
const sectionOf = (layout, at) => {
|
|
59
|
+
const index = lastIndexAtOrBefore(layout.headings, at);
|
|
60
|
+
return { start: layout.headings[index] ?? 0, end: layout.headings[index + 1] ?? layout.length };
|
|
61
|
+
};
|
|
62
|
+
const tableMismatch = (layout, count) => {
|
|
63
|
+
const section = sectionOf(layout, count.start);
|
|
64
|
+
const tables = layout.tables.filter((table) => table.at >= section.start && table.at < section.end && table.hours === count.hours);
|
|
65
|
+
const table = tables[0];
|
|
66
|
+
if (tables.length !== 1 || table === undefined || table.count === count.amount)
|
|
67
|
+
return undefined;
|
|
68
|
+
return { kind: "table", count, column: table.column, tableCount: table.count };
|
|
69
|
+
};
|
|
70
|
+
const mismatchOf = (layout, statement) => {
|
|
71
|
+
const { count, interval } = statement;
|
|
72
|
+
const neededMinutes = (count.amount - 1) * interval.minutes;
|
|
73
|
+
if (neededMinutes >= count.hours * MINUTES_PER_HOUR)
|
|
74
|
+
return { kind: "interval", count, interval, neededHours: neededMinutes / MINUTES_PER_HOUR };
|
|
75
|
+
return tableMismatch(layout, count);
|
|
76
|
+
};
|
|
77
|
+
/** Limited counts that a minimum interval in the same paragraph, or the table of the section, contradicts. */
|
|
78
|
+
export const intervalCountMismatches = (written, scopes, lengths, words) => {
|
|
79
|
+
const text = asciiDigits(written);
|
|
80
|
+
const all = periodCounts(text, words);
|
|
81
|
+
const takenEnds = all.map((count) => count.end);
|
|
82
|
+
const counts = all.filter((count) => isLimited(text, count, windowStart(text, count.start, takenEnds), words));
|
|
83
|
+
const intervals = lengths.filter((length) => isMinimumInterval(text, length, words));
|
|
84
|
+
if (counts.length === 0 || intervals.length === 0)
|
|
85
|
+
return [];
|
|
86
|
+
const layout = layoutOf(text, words);
|
|
87
|
+
return scopes.flatMap((scope) => {
|
|
88
|
+
const statement = statementIn(scope, counts, intervals);
|
|
89
|
+
const found = statement === undefined ? undefined : mismatchOf(layout, statement);
|
|
90
|
+
return found === undefined ? [] : [found];
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=use-interval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-interval.js","sourceRoot":"","sources":["../../src/derived/use-interval.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"announced-count.d.ts","sourceRoot":"","sources":["../../src/detectors/announced-count.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"announced-count.d.ts","sourceRoot":"","sources":["../../src/detectors/announced-count.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,cAAc,CAAC;AAoCrE,uDAAuD;AACvD,eAAO,MAAM,cAAc,EAAE,QAM5B,CAAC"}
|
|
@@ -6,6 +6,7 @@ const countWordsOf = (doc) => ({
|
|
|
6
6
|
anchors: patternsOf(doc, "count-anchor"),
|
|
7
7
|
numbers: patternsOf(doc, "count-number"),
|
|
8
8
|
counters: patternsOf(doc, "count-counter"),
|
|
9
|
+
frames: patternsOf(doc, "count-frame"),
|
|
9
10
|
hedgesBefore: patternsOf(doc, "count-hedge", "before"),
|
|
10
11
|
hedgesAfter: patternsOf(doc, "count-hedge", "after"),
|
|
11
12
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"announced-count.js","sourceRoot":"","sources":["../../src/detectors/announced-count.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"announced-count.js","sourceRoot":"","sources":["../../src/detectors/announced-count.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Detector, ProseDocument } from "../plugin.ts";
|
|
2
|
+
import { type BatteryWords } from "../derived/battery-runtime.ts";
|
|
3
|
+
type Lexicons = ProseDocument["lexicons"];
|
|
4
|
+
export declare const batteryWordsOf: (lexicons: Lexicons) => BatteryWords;
|
|
5
|
+
export declare const capacityRuntime: Detector;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=capacity-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacity-runtime.d.ts","sourceRoot":"","sources":["../../src/detectors/capacity-runtime.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAW,aAAa,EAAE,MAAM,cAAc,CAAC;AAGrE,OAAO,EAML,KAAK,YAAY,EAKlB,MAAM,+BAA+B,CAAC;AAMvC,KAAK,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;AAO1C,eAAO,MAAM,cAAc,GAAI,UAAU,QAAQ,KAAG,YAanD,CAAC;AA+DF,eAAO,MAAM,eAAe,EAAE,QAqB7B,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { cellsOf, tablesOf } from "../facts/table-facts.js";
|
|
2
|
+
import { linesOf } from "../structure/lines.js";
|
|
3
|
+
import { capacityRuntimeMismatches, isPeakHeading, labelOf, splitCondition, valueOf, } from "../derived/battery-runtime.js";
|
|
4
|
+
import { quoteAt } from "./structure-tree.js";
|
|
5
|
+
const FAMILIES = ["charge", "current", "energy", "power"];
|
|
6
|
+
const isFamily = (group) => FAMILIES.some((family) => family === group);
|
|
7
|
+
const markersOf = (lexicons, id, group) => (lexicons[id] ?? [])
|
|
8
|
+
.filter((entry) => group === undefined || entry.group === group)
|
|
9
|
+
.map((entry) => ({ pattern: entry.pattern, position: entry.position ?? "before" }));
|
|
10
|
+
export const batteryWordsOf = (lexicons) => {
|
|
11
|
+
const labels = (lexicons["battery-label"] ?? []).map((entry) => ({ pattern: entry.pattern, group: entry.group ?? "" }));
|
|
12
|
+
const bounds = markersOf(lexicons, "battery-label", "bound");
|
|
13
|
+
return {
|
|
14
|
+
electric: (lexicons["battery-unit"] ?? []).flatMap((entry) => isFamily(entry.group) ? [{ pattern: entry.pattern, weight: entry.weight ?? 1, family: entry.group }] : []),
|
|
15
|
+
time: (lexicons["unit-time"] ?? []).map((entry) => ({ pattern: entry.pattern, weight: entry.weight ?? 1 })),
|
|
16
|
+
approximate: markersOf(lexicons, "approximate-marker").filter((marker) => !bounds.some((bound) => bound.pattern === marker.pattern)),
|
|
17
|
+
bounds,
|
|
18
|
+
connectors: (lexicons["range-connector"] ?? []).map((entry) => entry.pattern),
|
|
19
|
+
labels,
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
const EMPHASIS = /[*`]/gu;
|
|
23
|
+
const plain = (text) => text.replace(EMPHASIS, "");
|
|
24
|
+
const entryOf = (label, value, words, columnPeak) => {
|
|
25
|
+
const named = labelOf(plain(label), words);
|
|
26
|
+
const text = plain(value.text).trim();
|
|
27
|
+
const read = named === undefined ? undefined : valueOf(text, named.role, words);
|
|
28
|
+
if (named === undefined || read === undefined)
|
|
29
|
+
return undefined;
|
|
30
|
+
const lead = value.text.length - value.text.trimStart().length;
|
|
31
|
+
return {
|
|
32
|
+
...named,
|
|
33
|
+
peak: named.peak || read.peak || columnPeak,
|
|
34
|
+
condition: named.condition === "" ? splitCondition(text).condition : named.condition,
|
|
35
|
+
reading: read.reading,
|
|
36
|
+
start: value.start + lead,
|
|
37
|
+
text,
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
const sectionAt = (doc, offset) => doc.sections.findLastIndex((section) => section.span.start <= offset);
|
|
41
|
+
const TWO_COLUMNS = 2;
|
|
42
|
+
const tableSlots = (doc, words) => tablesOf(linesOf(doc.source)).flatMap((table) => {
|
|
43
|
+
const headings = cellsOf(table.header);
|
|
44
|
+
const wide = headings.length > TWO_COLUMNS;
|
|
45
|
+
return table.rows.flatMap((row) => {
|
|
46
|
+
const [label, ...values] = cellsOf(row);
|
|
47
|
+
if (label === undefined)
|
|
48
|
+
return [];
|
|
49
|
+
return values.flatMap((value, index) => {
|
|
50
|
+
const column = index + 1;
|
|
51
|
+
const peak = wide && isPeakHeading(plain(headings[column]?.text ?? ""), words);
|
|
52
|
+
const entry = entryOf(label.text, value, words, peak);
|
|
53
|
+
const key = wide ? `table ${table.header.start} ${column}` : `section ${sectionAt(doc, row.start)}`;
|
|
54
|
+
return entry === undefined || (!wide && column > 1) ? [] : [{ key, entry }];
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
const LIST_MARKER = /^\s*(?:[-*+]|\d+[.)])\s+/u;
|
|
59
|
+
const COLON = /[::]/u;
|
|
60
|
+
const MAX_LABEL = 80;
|
|
61
|
+
/** "Battery life: up to 10 hours", "- 消費電流:500 mA". */
|
|
62
|
+
const lineSlot = (doc, line, words) => {
|
|
63
|
+
const body = line.text.slice(LIST_MARKER.exec(line.text)?.[0].length ?? 0);
|
|
64
|
+
const colon = COLON.exec(body)?.index;
|
|
65
|
+
if (colon === undefined)
|
|
66
|
+
return [];
|
|
67
|
+
const label = body.slice(0, colon).trim();
|
|
68
|
+
const value = body.slice(colon + 1).trim();
|
|
69
|
+
if (label === "" || label.length > MAX_LABEL || value === "")
|
|
70
|
+
return [];
|
|
71
|
+
const start = line.start + line.text.lastIndexOf(value);
|
|
72
|
+
const entry = entryOf(label, { start, end: start + value.length, text: value }, words, false);
|
|
73
|
+
return entry === undefined ? [] : [{ key: `section ${sectionAt(doc, line.start)}`, entry }];
|
|
74
|
+
};
|
|
75
|
+
const HOUR_DECIMALS = 100;
|
|
76
|
+
export const capacityRuntime = (doc) => {
|
|
77
|
+
const words = batteryWordsOf(doc.lexicons);
|
|
78
|
+
const lines = linesOf(doc.prose ?? doc.source).filter((line) => !line.text.includes("|"));
|
|
79
|
+
const slots = [...tableSlots(doc, words), ...lines.flatMap((line) => lineSlot(doc, line, words))];
|
|
80
|
+
const keys = [...new Set(slots.map((slot) => slot.key))];
|
|
81
|
+
return keys
|
|
82
|
+
.flatMap((key) => capacityRuntimeMismatches(slots.filter((slot) => slot.key === key).map((slot) => slot.entry)))
|
|
83
|
+
.map((mismatch) => ({
|
|
84
|
+
rule: "capacity-runtime-mismatch",
|
|
85
|
+
severity: "warning",
|
|
86
|
+
line: 0,
|
|
87
|
+
column: 0,
|
|
88
|
+
quote: quoteAt(doc.source, mismatch.runtime.start),
|
|
89
|
+
values: {
|
|
90
|
+
capacity: mismatch.capacity.text,
|
|
91
|
+
consumption: mismatch.consumption.text,
|
|
92
|
+
runtime: mismatch.runtime.text,
|
|
93
|
+
expected: Math.round(mismatch.idealHours * HOUR_DECIMALS) / HOUR_DECIMALS,
|
|
94
|
+
offset: mismatch.runtime.start,
|
|
95
|
+
},
|
|
96
|
+
}));
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=capacity-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacity-runtime.js","sourceRoot":"","sources":["../../src/detectors/capacity-runtime.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAa,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,OAAO,EAAa,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EACL,yBAAyB,EACzB,aAAa,EACb,OAAO,EACP,cAAc,EACd,OAAO,GAMR,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,QAAQ,GAAsB,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC7E,MAAM,QAAQ,GAAG,CAAC,KAAyB,EAAmB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;AAI7G,MAAM,SAAS,GAAG,CAAC,QAAkB,EAAE,EAAU,EAAE,KAAc,EAAY,EAAE,CAC7E,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;KACjB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC;KAC/D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC;AAExF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAkB,EAAgB,EAAE;IACjE,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACxH,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IAC7D,OAAO;QACL,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAkB,EAAE,CAC3E,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAC1G;QACD,IAAI,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3G,WAAW,EAAE,SAAS,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC;QACpI,MAAM;QACN,UAAU,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;QAC7E,MAAM;KACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC;AAC1B,MAAM,KAAK,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAInE,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,KAAW,EAAE,KAAmB,EAAE,UAAmB,EAAqB,EAAE;IAC1G,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChF,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC;IAC/D,OAAO;QACL,GAAG,KAAK;QACR,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,UAAU;QAC3C,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS;QACpF,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI;QACzB,IAAI;KACL,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,GAAkB,EAAE,MAAc,EAAU,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;AAExI,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,MAAM,UAAU,GAAG,CAAC,GAAkB,EAAE,KAAmB,EAAU,EAAE,CACrE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;IAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC;IAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAChC,MAAM,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAU,EAAE;YAC7C,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAC/E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,WAAW,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACpG,OAAO,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,MAAM,WAAW,GAAG,2BAA2B,CAAC;AAChD,MAAM,KAAK,GAAG,OAAO,CAAC;AACtB,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,uDAAuD;AACvD,MAAM,QAAQ,GAAG,CAAC,GAAkB,EAAE,IAAU,EAAE,KAAmB,EAAU,EAAE;IAC/E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IACtC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IACxE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC9F,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9F,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B,MAAM,CAAC,MAAM,eAAe,GAAa,CAAC,GAAG,EAAa,EAAE;IAC1D,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1F,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAClG,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,IAAI;SACR,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SAC/G,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClB,IAAI,EAAE,2BAA2B;QACjC,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QAClD,MAAM,EAAE;YACN,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI;YAChC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI;YACtC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI;YAC9B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,GAAG,aAAa,CAAC,GAAG,aAAa;YACzE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK;SAC/B;KACF,CAAC,CAAC,CAAC;AACR,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contact-variant.d.ts","sourceRoot":"","sources":["../../src/detectors/contact-variant.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAW,MAAM,cAAc,CAAC;AAYtD,eAAO,MAAM,cAAc,EAAE,QAK5B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// contact-variant: one email address or postal address written two ways in one document (contacts/emails.ts,
|
|
2
|
+
// contacts/addresses.ts). The address labels come from the language's address-label lexicon.
|
|
3
|
+
import { addressVariants } from "../contacts/addresses.js";
|
|
4
|
+
import { emailVariants } from "../contacts/emails.js";
|
|
5
|
+
import { quoteAt } from "./structure-tree.js";
|
|
6
|
+
const findingOf = (source, { writing, other }, variant) => ({
|
|
7
|
+
rule: "",
|
|
8
|
+
severity: "info",
|
|
9
|
+
line: 0,
|
|
10
|
+
column: 0,
|
|
11
|
+
quote: quoteAt(source, writing.offset),
|
|
12
|
+
values: { written: writing.written, other: other.written, offset: writing.offset },
|
|
13
|
+
...(variant === undefined ? {} : { variant }),
|
|
14
|
+
});
|
|
15
|
+
export const contactVariant = (doc, options) => {
|
|
16
|
+
const text = doc.prose ?? doc.source;
|
|
17
|
+
const emails = emailVariants(text).map((found) => findingOf(doc.source, found));
|
|
18
|
+
const addresses = addressVariants(text, options.lexicon ?? []).map(({ variant, found }) => findingOf(doc.source, found, variant));
|
|
19
|
+
return [...emails, ...addresses].toSorted((a, b) => Number(a.values?.["offset"]) - Number(b.values?.["offset"]));
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=contact-variant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contact-variant.js","sourceRoot":"","sources":["../../src/detectors/contact-variant.ts"],"names":[],"mappings":"AAAA,6GAA6G;AAC7G,6FAA6F;AAC7F,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAoB,EAAE,OAAgB,EAAW,EAAE,CAAC,CAAC;IACtG,IAAI,EAAE,EAAE;IACR,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;IAClF,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;CAC9C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAa,CAAC,GAAG,EAAE,OAAO,EAAa,EAAE;IAClE,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC;IACrC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAClI,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACnH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"count-over-capacity.d.ts","sourceRoot":"","sources":["../../src/detectors/count-over-capacity.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,cAAc,CAAC;AAkBrE,yFAAyF;AACzF,eAAO,MAAM,iBAAiB,EAAE,QAY3B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// A stated capacity smaller than a stated number registered, invited or attending (count-over-capacity). The words come
|
|
2
|
+
// from the language package: capacity-label, headcount-label, headcount-unit and capacity-exception.
|
|
3
|
+
import { countsOverCapacity } from "../structure/capacity-count.js";
|
|
4
|
+
import { proseAndTablesOf } from "../table-text.js";
|
|
5
|
+
import { quoteAt } from "./structure-tree.js";
|
|
6
|
+
const marksOf = (doc, lexicon) => (doc.lexicons[lexicon] ?? []).map((entry) => ({ pattern: entry.pattern, position: entry.position, group: entry.group }));
|
|
7
|
+
const exceptionsOf = (doc, group) => (doc.lexicons["capacity-exception"] ?? []).filter((entry) => entry.group === group).map((entry) => entry.pattern);
|
|
8
|
+
const capacityWords = (doc) => ({
|
|
9
|
+
capacities: marksOf(doc, "capacity-label"),
|
|
10
|
+
counts: marksOf(doc, "headcount-label"),
|
|
11
|
+
units: marksOf(doc, "headcount-unit"),
|
|
12
|
+
overflows: exceptionsOf(doc, "overflow"),
|
|
13
|
+
perSession: exceptionsOf(doc, "per-session"),
|
|
14
|
+
otherOccasions: exceptionsOf(doc, "other-occasion"),
|
|
15
|
+
negations: exceptionsOf(doc, "negation"),
|
|
16
|
+
});
|
|
17
|
+
/** The prose with its tables put back, so code is not read; offsets are the source's. */
|
|
18
|
+
export const countOverCapacity = (doc) => countsOverCapacity(proseAndTablesOf(doc), capacityWords(doc), doc.sections.map((section) => section.span)).map((issue) => ({
|
|
19
|
+
rule: "count-over-capacity",
|
|
20
|
+
severity: "warning",
|
|
21
|
+
line: 0,
|
|
22
|
+
column: 0,
|
|
23
|
+
quote: quoteAt(doc.source, issue.offset),
|
|
24
|
+
values: { ...issue.values, offset: issue.offset },
|
|
25
|
+
}));
|
|
26
|
+
//# sourceMappingURL=count-over-capacity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"count-over-capacity.js","sourceRoot":"","sources":["../../src/detectors/count-over-capacity.ts"],"names":[],"mappings":"AAAA,wHAAwH;AACxH,qGAAqG;AACrG,OAAO,EAAE,kBAAkB,EAAsC,MAAM,gCAAgC,CAAC;AACxG,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,MAAM,OAAO,GAAG,CAAC,GAAkB,EAAE,OAAe,EAAe,EAAE,CACnE,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAE3H,MAAM,YAAY,GAAG,CAAC,GAAkB,EAAE,KAAa,EAAY,EAAE,CACnE,CAAC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAEpH,MAAM,aAAa,GAAG,CAAC,GAAkB,EAAiB,EAAE,CAAC,CAAC;IAC5D,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC1C,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAC;IACvC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC;IACrC,SAAS,EAAE,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC;IACxC,UAAU,EAAE,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC;IAC5C,cAAc,EAAE,YAAY,CAAC,GAAG,EAAE,gBAAgB,CAAC;IACnD,SAAS,EAAE,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC;CACzC,CAAC,CAAC;AAEH,yFAAyF;AACzF,MAAM,CAAC,MAAM,iBAAiB,GAAa,CAAC,GAAG,EAAa,EAAE,CAC5D,kBAAkB,CAChB,gBAAgB,CAAC,GAAG,CAAC,EACrB,aAAa,CAAC,GAAG,CAAC,EAClB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAC5C,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChB,IAAI,EAAE,qBAAqB;IAC3B,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IACxC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;CAClD,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-outside-period.d.ts","sourceRoot":"","sources":["../../src/detectors/date-outside-period.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"date-outside-period.d.ts","sourceRoot":"","sources":["../../src/detectors/date-outside-period.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,cAAc,CAAC;AAyBrE,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,EAAE,QAe/B,CAAC"}
|
|
@@ -3,13 +3,14 @@ import { datesOutsidePeriod } from "../structure/date-outside-period.js";
|
|
|
3
3
|
import { rangeFrameOf } from "../structure/date-range.js";
|
|
4
4
|
import { quoteAt } from "./structure-tree.js";
|
|
5
5
|
const patternsOf = (doc, lexicon) => (doc.lexicons[lexicon] ?? []).map((entry) => entry.pattern);
|
|
6
|
-
/**
|
|
6
|
+
/** 期間の語、期間の外に置く語、文書の仕事の期間の語、締め切りの語、期間の後に来てよい仕事の語、概要の節の見出しの語、範囲の記号(range-connector、range-opener、range-frame の間の語)、月と曜日の名は語彙表から取る。 */
|
|
7
7
|
const wordsOf = (doc) => ({
|
|
8
8
|
labels: patternsOf(doc, "period-label"),
|
|
9
9
|
terms: patternsOf(doc, "period-term-label"),
|
|
10
10
|
asides: patternsOf(doc, "period-aside"),
|
|
11
11
|
deadlines: patternsOf(doc, "period-deadline"),
|
|
12
12
|
overviews: patternsOf(doc, "period-overview-heading"),
|
|
13
|
+
afterTerm: patternsOf(doc, "period-after-term"),
|
|
13
14
|
connectors: [
|
|
14
15
|
...patternsOf(doc, "range-connector"),
|
|
15
16
|
...patternsOf(doc, "range-opener"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-outside-period.js","sourceRoot":"","sources":["../../src/detectors/date-outside-period.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAqB,MAAM,qCAAqC,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,UAAU,GAAG,CAAC,GAAkB,EAAE,OAAe,EAAY,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAElI,
|
|
1
|
+
{"version":3,"file":"date-outside-period.js","sourceRoot":"","sources":["../../src/detectors/date-outside-period.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAqB,MAAM,qCAAqC,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,UAAU,GAAG,CAAC,GAAkB,EAAE,OAAe,EAAY,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAElI,oIAAoI;AACpI,MAAM,OAAO,GAAG,CAAC,GAAkB,EAAgB,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,cAAc,CAAC;IACvC,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,mBAAmB,CAAC;IAC3C,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,cAAc,CAAC;IACvC,SAAS,EAAE,UAAU,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAC7C,SAAS,EAAE,UAAU,CAAC,GAAG,EAAE,yBAAyB,CAAC;IACrD,SAAS,EAAE,UAAU,CAAC,GAAG,EAAE,mBAAmB,CAAC;IAC/C,UAAU,EAAE;QACV,GAAG,UAAU,CAAC,GAAG,EAAE,iBAAiB,CAAC;QACrC,GAAG,UAAU,CAAC,GAAG,EAAE,cAAc,CAAC;QAClC,GAAG,UAAU,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;KAC3F;IACD,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,YAAY,CAAC;IACrC,QAAQ,EAAE,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC;CACrC,CAAC,CAAC;AAEH,gDAAgD;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAa,CAAC,GAAG,EAAa,EAAE;IAC5D,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5D,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAClH,CAAC;IACF,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;IAC5C,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjE,OAAO,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC9F,IAAI,EAAE,qBAAqB;QAC3B,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACxC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;KAClD,CAAC,CAAC,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-stamp-order.d.ts","sourceRoot":"","sources":["../../src/detectors/date-stamp-order.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAW,MAAM,cAAc,CAAC;AAMtD,eAAO,MAAM,cAAc,EAAE,QAmB5B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { inDocumentOrder } from "../structure/issues.js";
|
|
2
|
+
import { stampOrderIssues } from "../structure/stamp-order.js";
|
|
3
|
+
import { proseAndTablesOf } from "../table-text.js";
|
|
4
|
+
import { quoteAt } from "./structure-tree.js";
|
|
5
|
+
export const dateStampOrder = (doc, options) => {
|
|
6
|
+
if (doc.structure === undefined)
|
|
7
|
+
return [];
|
|
8
|
+
const labels = options.lexicon ?? [];
|
|
9
|
+
const wordsOf = (group) => labels.filter((entry) => entry.group === group).map((entry) => entry.pattern);
|
|
10
|
+
const dates = inDocumentOrder(doc.structure).flatMap((node) => node.kind === "date" ? [{ offset: node.span.start, end: node.span.end, value: String(node.attrs["value"]) }] : []);
|
|
11
|
+
return stampOrderIssues(proseAndTablesOf(doc), dates, { established: wordsOf("established"), updated: wordsOf("updated") }).map(({ offset, values }) => {
|
|
12
|
+
const { side, ...dated } = values;
|
|
13
|
+
return {
|
|
14
|
+
rule: "",
|
|
15
|
+
severity: "info",
|
|
16
|
+
line: 0,
|
|
17
|
+
column: 0,
|
|
18
|
+
quote: quoteAt(doc.source, offset),
|
|
19
|
+
values: { ...dated, offset },
|
|
20
|
+
...(side === undefined ? {} : { variant: String(side) }),
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=date-stamp-order.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-stamp-order.js","sourceRoot":"","sources":["../../src/detectors/date-stamp-order.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,CAAC,MAAM,cAAc,GAAa,CAAC,GAAG,EAAE,OAAO,EAAa,EAAE;IAClE,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,CAAC,KAAa,EAAY,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3H,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5D,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAClH,CAAC;IACF,OAAO,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;QACrJ,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;QAClC,OAAO;YACL,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;YAClC,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE;YAC5B,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;SACzD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defined-term-form.d.ts","sourceRoot":"","sources":["../../src/detectors/defined-term-form.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuC,KAAK,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAMvG,OAAO,KAAK,EAAE,QAAQ,EAAW,aAAa,EAAE,QAAQ,EAAe,MAAM,cAAc,CAAC;AAgC5F,mGAAmG;AACnG,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,EAAE,WAAW,MAAM,KAAG,MAAM,EASxG,CAAC;AAWL,mIAAmI;AACnI,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAAyE,CAAC;AAEtH;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,EAAE,WAAW,MAAM,EAAE,OAAO,MAAM,KAAG,MAAM,EAS7H,CAAC;AA8FF,eAAO,MAAM,eAAe,EAAE,QAgB7B,CAAC;AAaF,uHAAuH;AACvH,eAAO,MAAM,UAAU,GAAI,UAAU,QAAQ,EAAE,SAAS,MAAM,KAAG,MAAM,GAAG,SAWzE,CAAC;AAuBF,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"defined-term-form.d.ts","sourceRoot":"","sources":["../../src/detectors/defined-term-form.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuC,KAAK,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAMvG,OAAO,KAAK,EAAE,QAAQ,EAAW,aAAa,EAAE,QAAQ,EAAe,MAAM,cAAc,CAAC;AAgC5F,mGAAmG;AACnG,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,EAAE,WAAW,MAAM,KAAG,MAAM,EASxG,CAAC;AAWL,mIAAmI;AACnI,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAAyE,CAAC;AAEtH;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,EAAE,WAAW,MAAM,EAAE,OAAO,MAAM,KAAG,MAAM,EAS7H,CAAC;AA8FF,eAAO,MAAM,eAAe,EAAE,QAgB7B,CAAC;AAaF,uHAAuH;AACvH,eAAO,MAAM,UAAU,GAAI,UAAU,QAAQ,EAAE,SAAS,MAAM,KAAG,MAAM,GAAG,SAWzE,CAAC;AAuBF,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAqE5H;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,UAAS,SAAS,MAAM,EAAO,KAAG,OAI3G,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,KAAK,aAAa,EAAE,OAAO,SAAS,WAAW,EAAE,KAAG,YAAY,EAkB7F,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAK3B,CAAC"}
|
|
@@ -19,8 +19,8 @@ const finding = (doc, rule, offset, variant, values) => ({
|
|
|
19
19
|
});
|
|
20
20
|
const OPENING_QUOTES = new Set(["「", "『", '"', "“"]);
|
|
21
21
|
const CLOSING_QUOTES = new Set(["」", "』", '"', "”"]);
|
|
22
|
-
/** A quoted term right before these is defined again (「X」とは, "X" means), which duplicate-definition reads. */
|
|
23
|
-
const DEFINING_AFTER = /^(
|
|
22
|
+
/** A quoted term right before these is defined again (「X」とは, 「X」といいます, "X" means), which duplicate-definition reads. */
|
|
23
|
+
const DEFINING_AFTER = /^(?:とは|という|といい(?:ます)?(?=[。、,))\s]|$)|\s+(?:means|shall mean|refers to|has the meaning))/u;
|
|
24
24
|
/** The ending a use may carry past the term: a plural or a possessive (Services, Service's). */
|
|
25
25
|
const WORD_ENDING = /^(?:e?s|['’]s?)/u;
|
|
26
26
|
/** The first definition of each term, with the spans of all its definitions. */
|
|
@@ -198,14 +198,63 @@ const bracketBefore = (source, definition) => {
|
|
|
198
198
|
const at = Math.max(before.lastIndexOf("("), before.lastIndexOf("("));
|
|
199
199
|
return at === -1 ? -1 : Math.max(0, definition.start - 2) + at;
|
|
200
200
|
};
|
|
201
|
-
/**
|
|
202
|
-
const
|
|
201
|
+
/** How many characters a line may add to the long name and still be a line that only names the party. */
|
|
202
|
+
const SLACK = 12;
|
|
203
|
+
/** A field label on its own line, after a list marker (Attention:, 宛先:): short, and not a sentence. */
|
|
204
|
+
const FIELD_LABEL = /^(?:[-*+]\s+)?[^::。.]{1,20}[::]\s*/u;
|
|
205
|
+
/**
|
|
206
|
+
* What may follow the name in an address field: nothing, a comma and the next part (, Member Support), or a space and a part
|
|
207
|
+
* that does not go on in lower case (株式会社みなと 総務部). A particle or a verb (は支払う, shall pay) makes the line a sentence.
|
|
208
|
+
*/
|
|
209
|
+
const NEXT_PART = /^\.?(?:$|\s*[,、,]|\s+(?!\p{Ll}))/u;
|
|
210
|
+
const CLOSES_SENTENCE = /[.。!?!?]$/u;
|
|
211
|
+
/** A field whose value is the name and a little more, not a sentence (Attention: Hibari Lab Inc., Member Support). */
|
|
212
|
+
const isNameField = (line, name) => {
|
|
213
|
+
const label = FIELD_LABEL.exec(line);
|
|
214
|
+
const value = label === null ? "" : line.slice(label[0].length);
|
|
215
|
+
const rest = value.slice(name.length);
|
|
216
|
+
return value.startsWith(name) && NEXT_PART.test(rest) && [...rest].length <= SLACK * 2 && !CLOSES_SENTENCE.test(rest.slice(1));
|
|
217
|
+
};
|
|
218
|
+
/** A contact field's label: after a bullet or a number (1. 連絡先:), and as long as a label in English runs (Privacy Contact:). */
|
|
219
|
+
const CONTACT_LABEL = /^(?:(?:[-*+]|\d+[.)])\s+)?([^::。.]{1,40})[::]\s*/u;
|
|
220
|
+
const LABEL_MARKS = /[*_\s]+/gu;
|
|
221
|
+
/** After the name in a contact field, the next part after a space or a comma (, Tokyo), or the bracket that holds it (お問い合わせ窓口(株式会社みなと)). */
|
|
222
|
+
const NEXT_CONTACT_PART = /^\.?(?:$|[))]|\s*,?\s+(?!\p{Ll}))/u;
|
|
223
|
+
/** A comma that goes on in lower case or 、 may also start a clause (, which may; 株式会社みなと、平日に受け付ける): the address field's bound. */
|
|
224
|
+
const COMMA_PART = /^\.?\s*[,、,]/u;
|
|
225
|
+
const endsWithContactLabel = (label, contactLabels) => {
|
|
226
|
+
const bare = label.replaceAll(LABEL_MARKS, "").toLowerCase();
|
|
227
|
+
return contactLabels.some((contact) => contact !== "" && bare.endsWith(contact.toLowerCase()));
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* A field whose label ends with a contact label (窓口:, Attention:): the value names the party in full however long it is and
|
|
231
|
+
* wherever the name sits in it, unless the name goes on as a sentence (連絡先:株式会社みなとは、…).
|
|
232
|
+
*/
|
|
233
|
+
const isContactField = (line, name, contactLabels) => {
|
|
234
|
+
const label = CONTACT_LABEL.exec(line);
|
|
235
|
+
if (label === null || !endsWithContactLabel(label[1] ?? "", contactLabels))
|
|
236
|
+
return false;
|
|
237
|
+
const value = line.slice(label[0].length);
|
|
238
|
+
const at = value.indexOf(name);
|
|
239
|
+
if (at === -1)
|
|
240
|
+
return false;
|
|
241
|
+
const rest = value.slice(at + name.length);
|
|
242
|
+
const continues = NEXT_CONTACT_PART.test(rest) || (COMMA_PART.test(rest) && [...rest].length <= SLACK * 2);
|
|
243
|
+
return continues && !CLOSES_SENTENCE.test(rest.slice(1));
|
|
244
|
+
};
|
|
245
|
+
/**
|
|
246
|
+
* A line that holds the short name too (甲 株式会社みなと), little else than the long name (a signature block names both),
|
|
247
|
+
* or a field whose value is the name (Attention: …, 宛先:…): an address gives the name in full.
|
|
248
|
+
*/
|
|
249
|
+
const isNameLine = (source, offset, name, term, contactLabels) => {
|
|
203
250
|
const start = source.lastIndexOf("\n", offset - 1) + 1;
|
|
204
251
|
const end = source.indexOf("\n", offset);
|
|
205
252
|
const line = source.slice(start, end === -1 ? source.length : end).trim();
|
|
206
|
-
const SLACK = 12;
|
|
207
253
|
// The short name inside the long one ("Pinecone" in "Pinecone Software Ltd") is not the short name written beside it.
|
|
208
|
-
return line.replaceAll(name, "").includes(term) ||
|
|
254
|
+
return (line.replaceAll(name, "").includes(term) ||
|
|
255
|
+
[...line].length <= [...name].length + SLACK ||
|
|
256
|
+
isNameField(line, name) ||
|
|
257
|
+
isContactField(line, name, contactLabels));
|
|
209
258
|
};
|
|
210
259
|
/** A name inside a longer word (東京大学 in 東京大学大学院, Acme in Acmeware) is part of another name. */
|
|
211
260
|
const WORD_CHAR = /[\p{Script=Han}\p{Script=Katakana}\p{Script=Latin}\p{N}ー]/u;
|
|
@@ -225,6 +274,7 @@ export const standsAlone = (source, offset, name, joiners = []) => {
|
|
|
225
274
|
export const repeatedNames = (doc, terms) => {
|
|
226
275
|
const defined = new Set(terms.map((term) => term.term));
|
|
227
276
|
const joiners = (doc.lexicons["enumeration-joiner"] ?? []).map((entry) => entry.pattern);
|
|
277
|
+
const contactLabels = (doc.lexicons["contact-label"] ?? []).map((entry) => entry.pattern);
|
|
228
278
|
return terms
|
|
229
279
|
.filter((term) => term.inline)
|
|
230
280
|
.flatMap((term) => {
|
|
@@ -237,7 +287,7 @@ export const repeatedNames = (doc, terms) => {
|
|
|
237
287
|
return doc.sentences
|
|
238
288
|
.filter((later) => later.span.start > term.span.end)
|
|
239
289
|
.flatMap((later) => [...later.text.matchAll(pattern)].map((match) => later.span.start + match.index))
|
|
240
|
-
.filter((offset) => standsAlone(doc.source, offset, name, joiners) && !isNameLine(doc.source, offset, name, term.term))
|
|
290
|
+
.filter((offset) => standsAlone(doc.source, offset, name, joiners) && !isNameLine(doc.source, offset, name, term.term, contactLabels))
|
|
241
291
|
.map((offset) => ({ offset, name, term: term.term, line: term.line }));
|
|
242
292
|
});
|
|
243
293
|
};
|