import factory from "../factory"; import { kanjiDigits } from "./lexical"; import type { WithErrorRule } from "../util"; import { circledDigitChars, irohaChars } from "../../../law/num"; const reStdParagraphNum = new RegExp(`^(?:○?[01234567890123456789]+|[${circledDigitChars}])`); export const $stdParagraphNum = factory .withName("stdParagraphNum") .regExp(reStdParagraphNum) // e.g. "1", "20", "○1", "○20", "①" ; export const $stdItemTitle = factory .withName("stdItemTitle") .regExp(new RegExp(`^[${kanjiDigits}]+(?:[のノ[${kanjiDigits}]+])*`)) // e.g. "十二", "一の二", "一の二の三" ; export const $stdSubitem1Title = factory .withName("stdSubitem1Title") .regExp(new RegExp(`^[${irohaChars}]`)) // e.g. "イ" ; export const $stdSubitem2Title = factory .withName("stdSubitem2Title") .regExp(new RegExp(`^[((](?:[${kanjiDigits}]+|[01234567890123456789]+)[))]`)) // e.g. "(十二)", "(10)", "(1)" ; export const $stdSubitem3Title = factory .withName("stdSubitem3Title") .regExp(/^[((][a-zA-Za-zA-Z]+[))]/) // e.g. "(a)", "(b)" ; const paragraphItemTitlePtn1 = "(?:[01234567890123456789]+|[a-zA-Za-zA-Z])[..]"; // e.g. "1.", "a." const paragraphItemTitlePtn2 = `[((](?:[01234567890123456789]+|[${irohaChars}]|[${kanjiDigits}]+|[a-zA-Za-zA-Z]+)[))]`; // e.g. "(十二)", "(イ)", "(10)", "(a)" const paragraphItemTitlePtn3 = `(?:[01234567890123456789]+|[${irohaChars}]|[${kanjiDigits}]+|[a-zA-Za-zA-Z]+|[${circledDigitChars}]|[⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇])`; // e.g. "10", "イ", "十一", "①", "⑴" const paragraphItemTitleFragmentPtn = `(?:${paragraphItemTitlePtn1}|${paragraphItemTitlePtn2}|${paragraphItemTitlePtn3})`; const paragraphItemTitlePtn = `^○?${paragraphItemTitleFragmentPtn}(?:[のノ](?:${paragraphItemTitleFragmentPtn}))*`; export const $paragraphItemTitle: WithErrorRule = factory .withName("paragraphItemTitle") .sequence(s => s .and(r => r.regExp(new RegExp(paragraphItemTitlePtn))) .action(({ text }) => { return { value: text(), errors: [], }; }) ) ; export default $paragraphItemTitle;