# C#字符串特殊字符处理 - Product Requirement Document

## Overview
- **Summary**: 修复CSharpStringExtractor处理C#字符串中包含特殊字符时的边界识别和捕获问题
- **Purpose**: 解决工具在处理包含特殊字符（如`_+|:"<>?`）的C#字符串时错误地添加`.TR()`调用的问题，确保字符串边界识别的准确性
- **Target Users**: 使用UnityI18N工具扫描和转换C#代码的开发人员

## Goals
- 修复C#字符串中特殊字符导致错误添加`.TR()`的bug
- 确保所有类型的C#字符串（普通字符串、插值字符串等）中的特殊字符都能被正确处理
- 通过现有的测试用例 `should handle special characters in string expression 2`

## Non-Goals (Out of Scope)
- 不修改其他不相关的测试用例
- 不改变工具的整体架构
- 不添加新的转换功能

## Background & Context
- 当前工具在处理包含特殊字符（特别是`_+`模式）的C#字符串时，会错误地在字符串内部添加`.TR()`调用
- 测试用例中展示了在多种C#语句（对象初始化器、变量赋值、函数调用、返回语句、成员变量等）中的字符串都需要正确处理
- 问题可能出在字符串边界识别逻辑上，特殊字符被错误地识别为字符串结束或其他语法结构

## Functional Requirements
- **FR-1**: 正确识别包含所有特殊字符的C#字符串边界
- **FR-2**: 普通字符串（双引号包裹）中的所有特殊字符都能被正确保留
- **FR-3**: 插值字符串（`$"`）中的所有特殊字符都能被正确处理
- **FR-4**: 不应该在字符串内部错误地添加`.TR()`调用

## Non-Functional Requirements
- **NFR-1**: 所有现有测试用例继续通过（除被注释掉的）
- **NFR-2**: 保持工具的性能，不显著增加处理时间

## Constraints
- **Technical**: 必须使用TypeScript，保持与现有代码库风格一致
- **Dependencies**: 仅修改`CSharpStringExtractor.ts`文件
- **Business**: 必须在不破坏现有功能的情况下修复问题

## Assumptions
- 测试用例中的期望输出是正确的行为
- 问题仅出在字符串边界识别和处理逻辑中
- 不需要修改测试用例本身

## Acceptance Criteria

### AC-1: 正确处理普通字符串中的特殊字符
- **Given**: C#代码中包含带有各种特殊字符的普通字符串（如`_+|:"<>?`）
- **When**: CSharpStringExtractor处理该代码
- **Then**: 字符串被完整识别，不添加多余的`.TR()`调用
- **Verification**: `programmatic`
- **Notes**: 通过测试用例验证

### AC-2: 正确处理对象初始化器中的字符串
- **Given**: C#对象初始化器中的属性赋值包含特殊字符的字符串
- **When**: CSharpStringExtractor处理该代码
- **Then**: 字符串被正确提取和处理
- **Verification**: `programmatic`
- **Notes**: 测试用例中的第1个和第6、7个snippet

### AC-3: 正确处理变量赋值中的字符串
- **Given**: C#变量赋值语句包含特殊字符的字符串
- **When**: CSharpStringExtractor处理该代码
- **Then**: 字符串被正确处理
- **Verification**: `programmatic`
- **Notes**: 测试用例中的第2个snippet

### AC-4: 正确处理插值字符串
- **Given**: C#插值字符串（`$"`）包含变量和特殊字符
- **When**: CSharpStringExtractor处理该代码
- **Then**: 插值字符串被正确转换为Tr.Format
- **Verification**: `programmatic`
- **Notes**: 测试用例中的第3个snippet

### AC-5: 正确处理函数调用中的字符串
- **Given**: C#函数调用参数包含特殊字符的字符串
- **When**: CSharpStringExtractor处理该代码
- **Then**: 字符串被正确处理
- **Verification**: `programmatic`
- **Notes**: 测试用例中的第4个snippet

### AC-6: 正确处理返回语句中的字符串
- **Given**: C#返回语句包含特殊字符的字符串
- **When**: CSharpStringExtractor处理该代码
- **Then**: 字符串被正确处理
- **Verification**: `programmatic`
- **Notes**: 测试用例中的第5个snippet

### AC-7: 测试通过
- **Given**: 运行指定的测试用例
- **When**: 执行 `npx jest test/CSharpStringExtractor.test.ts -t "should handle special characters in string expression 2"`
- **Then**: 测试完全通过
- **Verification**: `programmatic`

## Open Questions
- 无
