rExtractSummary function
Implementation
String rExtractSummary(String txt) {
String content = rExtract(txt, '> summary(ds)');
// Normalize line endings for platform independence.
if (Platform.isWindows) {
content = content.replaceAll('\r\n', '\n');
}
// Extract variable names from the dataset.
List<VariableInfo> vars = extractVariables(txt);
List<String> varNames = vars.map((v) => v.name).toList();
// Add a blank line between each sub-table.
List<String> lines = content.split('\n');
// Process each line to add spacing between variable summaries.
for (int i = 0; i < lines.length; i++) {
// Check if this appears to be a variable headers row by comparing with known variable names.
if (i > 0 &&
lines[i].trim().isNotEmpty &&
!lines[i].trim().startsWith('> ')) {
if (isHeaderRowWithVariables(lines[i], varNames)) {
// Add an empty line before the variable header row.
lines[i] = '\n${lines[i]}';
continue;
}
}
}
// Join lines with platform-appropriate line endings.
String separator = Platform.isWindows ? '\r\n' : '\n';
content = lines.join(separator);
// Replace multiple empty lines with a single empty line.
if (Platform.isWindows) {
content = content.replaceAll(RegExp(r'\r\n\s*\r\n\s*\r\n+'), '\r\n\r\n');
} else {
content = content.replaceAll(RegExp(r'\n\s*\n\s*\n+'), '\n\n');
}
// Clean the result.
content = cleanString(content);
return content;
}