This commit is contained in:
Jason
2025-09-06 03:47:26 +09:00
parent 3e4cca92eb
commit 882bee2cb1

View File

@@ -64,6 +64,7 @@ const parsers: Array<ParserFn | { virtual: VirtualParserFn }> = [
parseVaalGemName, parseVaalGemName,
{ virtual: findInDatabase }, { virtual: findInDatabase },
// ----------- // -----------
parseFracturedText,
parseItemLevel, parseItemLevel,
parseRequirements, parseRequirements,
parseTalismanTier, parseTalismanTier,
@@ -136,6 +137,7 @@ export function parseClipboard(clipboard: string): Result<ParsedItem, string> {
parsed.value.rawText = clipboard; parsed.value.rawText = clipboard;
// each section can be parsed at most by one parser // each section can be parsed at most by one parser
// and each parser can only be used to parse one section
for (const parser of parsers) { for (const parser of parsers) {
if (typeof parser === "object") { if (typeof parser === "object") {
const error = parser.virtual(parsed.value); const error = parser.virtual(parsed.value);
@@ -146,8 +148,7 @@ export function parseClipboard(clipboard: string): Result<ParsedItem, string> {
const result = parser(section, parsed.value); const result = parser(section, parsed.value);
if (result === "SECTION_PARSED") { if (result === "SECTION_PARSED") {
sections = sections.filter((s) => s !== section); sections = sections.filter((s) => s !== section);
// we don't break here since another section may be parsed by the same parser break;
// this still adheres to the rule of one parser per section
} else if (result === "PARSER_SKIPPED") { } else if (result === "PARSER_SKIPPED") {
break; break;
} }
@@ -1151,6 +1152,13 @@ function parsePriceNote(section: string[], item: ParsedItem) {
return isParsed; return isParsed;
} }
function parseFracturedText(section: string[], _item: ParsedItem) {
for (const line of section) {
if (line === _$.FRACTURED_ITEM) return "SECTION_PARSED";
}
return "SECTION_SKIPPED";
}
function parseUnneededText(section: string[], item: ParsedItem) { function parseUnneededText(section: string[], item: ParsedItem) {
if ( if (
item.category !== ItemCategory.Quiver && item.category !== ItemCategory.Quiver &&
@@ -1168,8 +1176,7 @@ function parseUnneededText(section: string[], item: ParsedItem) {
item.category !== ItemCategory.Staff && item.category !== ItemCategory.Staff &&
item.category !== ItemCategory.Shield && item.category !== ItemCategory.Shield &&
item.category !== ItemCategory.Spear && item.category !== ItemCategory.Spear &&
item.category !== ItemCategory.Buckler && item.category !== ItemCategory.Buckler
item.category !== ItemCategory.Bow
) { ) {
return "PARSER_SKIPPED"; return "PARSER_SKIPPED";
} }
@@ -1184,8 +1191,7 @@ function parseUnneededText(section: string[], item: ParsedItem) {
line.startsWith(_$.SANCTUM_HELP) || line.startsWith(_$.SANCTUM_HELP) ||
line.startsWith(_$.PRECURSOR_TABLET_HELP) || line.startsWith(_$.PRECURSOR_TABLET_HELP) ||
line.startsWith(_$.LOGBOOK_HELP) || line.startsWith(_$.LOGBOOK_HELP) ||
line.startsWith(_$.GRANTS_SKILL) || line.startsWith(_$.GRANTS_SKILL)
line.startsWith(_$.FRACTURED_ITEM)
) { ) {
return "SECTION_PARSED"; return "SECTION_PARSED";
} }