parseEnvironment method
Parses an environment
Implementation
LatexNode? parseEnvironment() {
final beginToken = tokenStream.advance();
if (beginToken is! BeginEnvironmentToken) return null;
final envName = beginToken.name;
final startOffset = beginToken.range.start;
// HLog.d(_tag, "解析环境: $envName");
LatexNode result;
switch (envName) {
case "matrix":
case "pmatrix":
case "bmatrix":
case "Bmatrix":
case "vmatrix":
case "Vmatrix":
case "matrix*":
case "pmatrix*":
case "bmatrix*":
case "Bmatrix*":
case "vmatrix*":
case "Vmatrix*":
result = _parseMatrix(envName, isSmall: false);
break;
case "smallmatrix":
case "smallmatrix*":
result = _parseMatrix(envName, isSmall: true);
break;
case "array":
result = _parseArray();
break;
case "subarray":
result = _parseSubarray();
break;
case "tabular":
result = _parseTabular();
break;
case "align":
case "aligned":
case "align*":
case "gather":
case "gathered":
case "gather*":
case "flalign":
case "flalign*":
result = _parseAligned(envName);
break;
case "alignat":
case "alignat*":
case "alignedat":
result = _parseAlignat(envName);
break;
case "split":
result = _parseSplit();
break;
case "multline":
case "multline*":
result = _parseMultline(envName);
break;
case "eqnarray":
case "eqnarray*":
result = _parseEqnarray(envName);
break;
case "subequations":
result = _parseSubequations();
break;
case "cases":
case "cases*":
result = _parseCases(envName, CasesStyle.normal);
break;
case "dcases":
case "dcases*":
result = _parseCases(envName, CasesStyle.display);
break;
case "rcases":
case "rcases*":
result = _parseCases(envName, CasesStyle.right);
break;
case "equation":
case "equation*":
case "displaymath":
final content = _parseEnvironmentContent(envName);
result = EnvironmentNode(envName, content);
break;
case "RTL":
final content = _parseEnvironmentContent("RTL");
result = TextDirectionNode(content, TextDirectionType.rtl);
break;
case "LTR":
final content = _parseEnvironmentContent("LTR");
result = TextDirectionNode(content, TextDirectionType.ltr);
break;
default:
// Check if it's a custom environment
final customEnv = context.customEnvironments[envName];
if (customEnv != null) {
result = _parseCustomEnvironment(envName, customEnv);
} else {
final content = _parseEnvironmentContent(envName);
result = EnvironmentNode(envName, content);
}
break;
}
// Supplement the sourceRange for environment nodes that lack it
if (result.sourceRange == null) {
final range = tokenStream.rangeFrom(startOffset);
return result.withSourceRange(range);
}
return result;
}