# 右值表达式字符串提取 - Product Requirement Document

## Overview
- **Summary**: 修改 CSharpStringExtractor 类，使其能够正确处理赋值表达式左右两边都有字符串的情况，包括处理出现在 `=` 左边（左值表达式）的字符串，以及处理包含特殊符号的字符串。
- **Purpose**: 解决当前代码在处理赋值表达式的左值字符串和特殊字符字符串时出现的问题。
- **Target Users**: Unity 项目开发者，使用此工具进行 C# 代码国际化。

## Goals
- 正确处理赋值表达式 `=` 左边（左值表达式）的字符串
- 正确处理赋值表达式左右两边都有字符串的情况
- 保持正确处理赋值表达式 `=` 右边（右值表达式）的字符串
- 正确处理包含特殊符号的字符串（如 HTML 标签、单引号等）
- 保持现有功能不变

## Non-Goals (Out of Scope)
- 不修改字符串处理的核心逻辑
- 不改变已有的测试用例
- 不添加新的功能，除了修复当前问题

## Background & Context
- 测试用例位于 test/CSharpStringExtractor.test.ts:2493-2560
- 问题1：左值表达式中的字符串 originalIndex 不匹配
- 问题2：包含特殊字符的字符串提取了过多片段
- 问题3：赋值表达式两边都有字符串时，左值字符串的 originalIndex 不匹配

## Functional Requirements
- **FR-1**: 正确处理出现在赋值表达式 `=` 左边（左值表达式）的字符串
- **FR-2**: 正确处理赋值表达式左右两边都有字符串的情况
- **FR-3**: 正确处理包含特殊符号的字符串（如 HTML 标签、单引号等）

## Non-Functional Requirements
- **NFR-1**: 所有现有测试用例必须继续通过
- **NFR-2**: 性能不应受到明显影响
- **NFR-3**: 代码必须严格遵循 TypeScript 语法

## Constraints
- **Technical**: 使用 TypeScript，不使用 HTML 实体编码，不使用 arguments 等保留字段名
- **Business**: 必须通过指定的测试用例
- **Dependencies**: 依赖 Jest 测试框架

## Assumptions
- 左值表达式中的字符串主要出现在函数调用参数中
- 包含特殊字符的字符串应该被当作一个整体处理

## Acceptance Criteria

### AC-1: 处理赋值表达式左值的字符串
- **Given**: 有一个赋值表达式，`=` 左边的表达式中包含字符串
- **When**: extractStrings 方法被调用处理此代码
- **Then**: 左值表达式中的字符串被正确提取，originalIndex 正确
- **Verification**: `programmatic`

### AC-2: 处理赋值表达式两边都有字符串
- **Given**: 有一个赋值表达式，`=` 左右两边都包含字符串
- **When**: extractStrings 方法被调用处理此代码
- **Then**: 两边的字符串都被正确提取，顺序正确，originalIndex 正确
- **Verification**: `programmatic`

### AC-3: 处理包含特殊字符的字符串
- **Given**: 有一个包含特殊字符（如 HTML 标签、单引号）的字符串
- **When**: extractStrings 方法被调用处理此代码
- **Then**: 字符串被正确提取，片段数量正确
- **Verification**: `programmatic`

### AC-4: 保持现有功能不变
- **Given**: 所有现有的测试用例
- **When**: 运行测试
- **Then**: 所有现有的测试用例必须通过
- **Verification**: `programmatic`

## Open Questions
- 无
