diff --git a/modules/rpgmakermvmz.py b/modules/rpgmakermvmz.py index 20768b1..adc7efe 100644 --- a/modules/rpgmakermvmz.py +++ b/modules/rpgmakermvmz.py @@ -2480,33 +2480,63 @@ def batchList(input_list, batch_size): return [input_list[i : i + batch_size] for i in range(0, len(input_list), batch_size)] -def createContext(fullPromptFlag, subbedT, format): - # Helper to extract (term, line) pairs from VOCAB only once - def parseVocab(vocab_text): - pairs = [] - seen = set() - for line in vocab_text.splitlines(): - line = line.strip() - if not line or line.startswith('#') or line.startswith('```'): - continue - m = re.match(r'^(.+?)(?:\s?[\(–])', line) # term is everything before space + '(' or '–' - if m: - term = m.group(1) - if term not in seen: - pairs.append((term, line)) - seen.add(term) - return pairs +def parseVocabWithCategories(vocabText): + """Parse vocabulary text and extract terms with their categories.""" + pairs = [] + seen = set() + currentCategory = None + + for line in vocabText.splitlines(): + line = line.strip() + if not line or line.startswith('```'): + continue + + # Check if this is a category header + if line.startswith('#'): + currentCategory = line + continue + + # Parse vocabulary term + m = re.match(r'^(.+?)(?:\s?[\(–])', line) # term is everything before space + '(' or '–' + if m: + term = m.group(1) + if term not in seen: + pairs.append((term, line, currentCategory)) + seen.add(term) + + return pairs - matchedVocabLines = [] - vocabPairs = parseVocab(VOCAB) + +def buildMatchedVocabText(vocabPairs, subbedT): + """Build formatted vocabulary text with matched terms organized by category.""" + matchedCategories = {} # Use word boundaries for Japanese if appropriate, or allow substring as before. - for term, line in vocabPairs: + for term, line, category in vocabPairs: # "term in subbedT" could be false positive; can use regex but Japanese doesn't always have spaces. if term in subbedT: - matchedVocabLines.append(line) + if category not in matchedCategories: + matchedCategories[category] = [] + matchedCategories[category].append(line) - matchedVocabText = f"```\n{'\n'.join(matchedVocabLines)}\n```" if matchedVocabLines else "" + # Format matched vocabulary with categories + if matchedCategories: + formattedLines = ["Here are some vocabulary and terms so that you know the proper spelling and translation.\n"] + for category, lines in matchedCategories.items(): + if category: # Only add category header if it exists + formattedLines.append(category) + formattedLines.extend(lines) + formattedLines.append("") # Add blank line between categories + matchedVocabText = f"```\n{chr(10).join(formattedLines).rstrip()}\n```" + else: + matchedVocabText = "" + + return matchedVocabText + + +def createContext(fullPromptFlag, subbedT, format): + vocabPairs = parseVocabWithCategories(VOCAB) + matchedVocabText = buildMatchedVocabText(vocabPairs, subbedT) if fullPromptFlag: system = PROMPT + matchedVocabText diff --git a/vocab.txt b/vocab.txt index b14447e..35500e5 100644 --- a/vocab.txt +++ b/vocab.txt @@ -1,6 +1,7 @@ Here are some vocabulary and terms so that you know the proper spelling and translation. ``` # Game Characters +イルヴィナ (Illyan) - Female コヴァ – Kova ビビン – Bibin グリッド – Grid