function _array_like_to_array(arr, len) {
    if (len == null || len > arr.length) len = arr.length;
    for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
    return arr2;
}
function _array_with_holes(arr) {
    if (Array.isArray(arr)) return arr;
}
function _class_call_check(instance, Constructor) {
    if (!(instance instanceof Constructor)) {
        throw new TypeError("Cannot call a class as a function");
    }
}
function _defineProperties(target, props) {
    for(var i = 0; i < props.length; i++){
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        if ("value" in descriptor) descriptor.writable = true;
        Object.defineProperty(target, descriptor.key, descriptor);
    }
}
function _create_class(Constructor, protoProps, staticProps) {
    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
    if (staticProps) _defineProperties(Constructor, staticProps);
    return Constructor;
}
function _iterable_to_array_limit(arr, i) {
    var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
    if (_i == null) return;
    var _arr = [];
    var _n = true;
    var _d = false;
    var _s, _e;
    try {
        for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
            _arr.push(_s.value);
            if (i && _arr.length === i) break;
        }
    } catch (err) {
        _d = true;
        _e = err;
    } finally{
        try {
            if (!_n && _i["return"] != null) _i["return"]();
        } finally{
            if (_d) throw _e;
        }
    }
    return _arr;
}
function _non_iterable_rest() {
    throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _sliced_to_array(arr, i) {
    return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
}
function _unsupported_iterable_to_array(o, minLen) {
    if (!o) return;
    if (typeof o === "string") return _array_like_to_array(o, minLen);
    var n = Object.prototype.toString.call(o).slice(8, -1);
    if (n === "Object" && o.constructor) n = o.constructor.name;
    if (n === "Map" || n === "Set") return Array.from(n);
    if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
}
/* eslint-disable no-useless-escape */ /**
 * 格式化 Markdown 文本
 * 1. 规范化段落之间的换行符（确保段落之间只有两个换行符）
 * 2. 添加盘古之白（中英文之间添加空格）
 */ export var MarkdownFormatter = /*#__PURE__*/ function() {
    "use strict";
    function MarkdownFormatter() {
        _class_call_check(this, MarkdownFormatter);
    }
    _create_class(MarkdownFormatter, null, [
        {
            key: "normalizeParagraphs",
            value: /**
   * 规范化段落之间的换行符
   * @param text Markdown 文本
   * @returns 格式化后的文本
   */ function normalizeParagraphs(text) {
                var _text_replace, _result_join;
                // 将所有的换行符统一为 \n
                var normalizedText = text === null || text === void 0 ? void 0 : (_text_replace = text.replace(/\r\n/g, '\n')) === null || _text_replace === void 0 ? void 0 : _text_replace.replace(/\r/g, '\n');
                // 清理开头和结尾的空白字符
                normalizedText = normalizedText.trim();
                // 将连续的空白行（包括只包含空格的行）替换为单个换行符
                normalizedText = normalizedText === null || normalizedText === void 0 ? void 0 : normalizedText.replace(/\n[\s\n]+/g, '\n');
                // 保护表格内容：识别表格行并保持它们的单行换行符
                var lines = normalizedText.split('\n');
                var result = [];
                for(var i = 0; i < lines.length; i++){
                    var currentLine = lines[i];
                    result.push(currentLine);
                    // 如果不是最后一行，决定添加什么样的换行符
                    if (i < lines.length - 1) {
                        var nextLine = lines[i + 1];
                        // 检查当前行和下一行是否是表格行
                        var isCurrentTableRow = /^\s*\|.*\|\s*$/.test(currentLine);
                        var isNextTableRow = /^\s*\|.*\|\s*$/.test(nextLine);
                        // 如果当前行和下一行都是表格行，只添加一个换行符
                        // 否则添加两个换行符（段落分隔）
                        if (isCurrentTableRow && isNextTableRow) {
                        // 表格行之间保持单换行符
                        // 不添加额外的换行符，join会自动添加一个
                        } else {
                            // 段落之间添加额外的空行
                            result.push('');
                        }
                    }
                }
                return (_result_join = result.join('\n')) === null || _result_join === void 0 ? void 0 : _result_join.replace(/\n+$/, '');
            }
        },
        {
            key: "addPanguSpacing",
            value: /**
   * 在中英文之间添加空格（盘古之白）
   * @param text Markdown 文本
   * @returns 格式化后的文本
   */ function addPanguSpacing(text) {
                var _text_replace_replace_replace_replace_replace, _text_replace_replace_replace_replace, _text_replace_replace_replace, _text_replace_replace, _text_replace, _preservedText_replace_replace_replace_replace_replace_replace, _preservedText_replace_replace_replace_replace_replace, _preservedText_replace_replace_replace_replace, _preservedText_replace_replace_replace, _preservedText_replace_replace, _preservedText_replace;
                // 保存 HTML 内容、Markdown 特殊语法
                var placeholders = {};
                var counter = 0;
                // 临时替换需要保护的内容
                var preservedText = text === null || text === void 0 ? void 0 : (_text_replace = text.replace(/```[\s\S]*?```/g, function(match) {
                    var placeholder = "__CODEBLOCK_".concat(counter, "__");
                    placeholders[placeholder] = match;
                    counter++;
                    return placeholder;
                })) === null || _text_replace === void 0 ? void 0 : (_text_replace_replace = _text_replace.replace(/(<!--[\s\S]*?-->)/g, function(match) {
                    var placeholder = "__COMMENT_".concat(counter, "__");
                    placeholders[placeholder] = match;
                    counter++;
                    return placeholder;
                })) === null || _text_replace_replace === void 0 ? void 0 : (_text_replace_replace_replace = _text_replace_replace.replace(/\[([^\]]*<[^>]+>[^\]]*)\]\([^)]+\)/g, function(match) {
                    var placeholder = "__LINK_HTML_".concat(counter, "__");
                    placeholders[placeholder] = match;
                    counter++;
                    return placeholder;
                })) === null || _text_replace_replace_replace === void 0 ? void 0 : (_text_replace_replace_replace_replace = _text_replace_replace_replace.replace(/(<[^>]+>.*?<\/[^>]+>|<[^>]+>)/g, function(match) {
                    var placeholder = "__HTML_".concat(counter, "__");
                    placeholders[placeholder] = match;
                    counter++;
                    return placeholder;
                })) === null || _text_replace_replace_replace_replace === void 0 ? void 0 : (_text_replace_replace_replace_replace_replace = _text_replace_replace_replace_replace.replace(/(\[([^\]]+)\]\([^)]+\))/g, function(match) {
                    var placeholder = "__LINK_".concat(counter, "__");
                    placeholders[placeholder] = match;
                    counter++;
                    return placeholder;
                })) === null || _text_replace_replace_replace_replace_replace === void 0 ? void 0 : _text_replace_replace_replace_replace_replace.replace(/(`[^`]+`)/g, function(match) {
                    var placeholder = "__CODE_".concat(counter, "__");
                    placeholders[placeholder] = match;
                    counter++;
                    return placeholder;
                });
                // 添加空格
                var spacedText = preservedText === null || preservedText === void 0 ? void 0 : (_preservedText_replace = preservedText.replace(/([\u4e00-\u9fa5])([A-Za-z])/g, '$1 $2')) === null || _preservedText_replace === void 0 ? void 0 : (_preservedText_replace_replace = _preservedText_replace.replace(/([A-Za-z])([\u4e00-\u9fa5])/g, '$1 $2')) === null || _preservedText_replace_replace === void 0 ? void 0 : (_preservedText_replace_replace_replace = _preservedText_replace_replace.replace(/([\u4e00-\u9fa5])(\d+)/g, '$1 $2')) === null || _preservedText_replace_replace_replace === void 0 ? void 0 : (_preservedText_replace_replace_replace_replace = _preservedText_replace_replace_replace.replace(/(\d+)([\u4e00-\u9fa5])/g, '$1 $2')) === null || _preservedText_replace_replace_replace_replace === void 0 ? void 0 : (_preservedText_replace_replace_replace_replace_replace = _preservedText_replace_replace_replace_replace.replace(/([\u4e00-\u9fa5])([\(\)])/g, '$1 $2')) === null || _preservedText_replace_replace_replace_replace_replace === void 0 ? void 0 : (_preservedText_replace_replace_replace_replace_replace_replace = _preservedText_replace_replace_replace_replace_replace.replace(/([\(\)])([\u4e00-\u9fa5])/g, '$1 $2')) === null || _preservedText_replace_replace_replace_replace_replace_replace === void 0 ? void 0 : _preservedText_replace_replace_replace_replace_replace_replace.replace(/([^\s\n])\s+([^\s\n])/g, '$1 $2');
                // 还原所有保护的内容
                Object.entries(placeholders).forEach(function(param) {
                    var _param = _sliced_to_array(param, 2), placeholder = _param[0], original = _param[1];
                    spacedText = spacedText === null || spacedText === void 0 ? void 0 : spacedText.replace(new RegExp("(\\s*)".concat(placeholder, "(\\s*)")), function(_, before, after) {
                        // 确保特殊语法前后有空格
                        var needSpaceBefore = before === '' && /[\u4e00-\u9fa5]$/.test(spacedText.split(placeholder)[0]);
                        var needSpaceAfter = after === '' && /^[\u4e00-\u9fa5]/.test(spacedText.split(placeholder)[1]);
                        return "".concat(needSpaceBefore ? ' ' : '').concat(original).concat(needSpaceAfter ? ' ' : '');
                    });
                });
                return spacedText;
            }
        },
        {
            key: "format",
            value: /**
   * 格式化 Markdown 文本
   * @param text Markdown 文本
   * @returns 格式化后的文本
   */ function format(text) {
                var _this = this;
                // 首先保存代码块内容
                var codeBlocks = {};
                var counter = 0;
                if (!text) {
                    return '';
                }
                // 保存代码块内容
                var textWithoutCodeBlocks = text === null || text === void 0 ? void 0 : text.replace(/```[\s\S]*?```/g, function(match) {
                    var placeholder = "__CODEBLOCK_".concat(counter, "__");
                    codeBlocks[placeholder] = match;
                    counter++;
                    return placeholder;
                });
                // 处理段落格式
                var paragraphsFixed = this.normalizeParagraphs(textWithoutCodeBlocks);
                // 添加盘古之白，按行处理以保持换行格式
                var lines = paragraphsFixed.split('\n');
                var formattedLines = lines.map(function(line) {
                    return _this.addPanguSpacing(line);
                });
                var result = formattedLines.join('\n');
                // 还原代码块内容
                Object.entries(codeBlocks).forEach(function(param) {
                    var _param = _sliced_to_array(param, 2), placeholder = _param[0], original = _param[1];
                    result = result === null || result === void 0 ? void 0 : result.replace(placeholder, original);
                });
                return result || '';
            }
        }
    ]);
    return MarkdownFormatter;
}();
export default MarkdownFormatter;
