package com.gzzm.lobster.parse;

import java.util.regex.Pattern;

/**
 * ParserSupport —— parser 包内共用的 markdown/YAML 转义工具 /
 * Shared escaping helpers for parsers.
 *
 * <p>提纯自 Word/Pdf/Sheet/Slide parser 里重复的小工具；不做策略，只做字符串处理。
 */
final class ParserSupport {

    /** markdown 表格单元格里需要转义的 pipe. */
    static final Pattern PIPE = Pattern.compile("\\|");
    /** 单元格/段落里的换行——压成 {@code <br>} 或空格由调用方决定. */
    static final Pattern NEWLINES = Pattern.compile("[\r\n]+");

    private ParserSupport() {}

    /** markdown table 单元格：pipe 转义. */
    static String escapeCell(String s) {
        if (s == null) return "";
        return PIPE.matcher(s).replaceAll("\\\\|");
    }

    /** YAML scalar：遇到冒号/井号/双引号就加引号，内部双引号反斜杠转义. */
    static String escapeYaml(String s) {
        if (s == null) return "";
        if (s.indexOf(':') >= 0 || s.indexOf('#') >= 0 || s.indexOf('"') >= 0) {
            return "\"" + s.replace("\"", "\\\"") + "\"";
        }
        return s;
    }

    /** 异常消息安全化：null 用类名；内部 {@code -->} 替换成 HTML 实体防污染 markdown 注释. */
    static String safeMsg(Throwable t) {
        String m = t.getMessage();
        return m == null ? t.getClass().getSimpleName() : m.replace("-->", "--&gt;");
    }
}
