import { Component } from 'react';
import { Input } from 'antd';
// import Taro from "@tarojs/taro";
// import {
// View,
// Text,
// Image,
// Button,
// Input,
// Editor,
// Textarea,
// } from "@tarojs/components";
import './APP.scss';
// import { AtTabBar } from "taro-ui";
import React, { useCallback, useEffect, useState } from 'react';
// import { AtGrid } from "taro-ui";
// import { Swiper, SwiperItem } from "@tarojs/components";
// import { AtCard } from "taro-ui";
// import { AtImagePicker } from "taro-ui";
// import { AtButton } from "taro-ui";
// import { AtSearchBar } from "taro-ui";
// import { Picker } from "@tarojs/components";
// import { AtList, AtListItem } from "taro-ui";
// import { AtNavBar } from "taro-ui";
// import { AtModal, AtModalHeader, AtModalContent, AtModalAction } from "taro-ui";
// import { AtToast } from "taro-ui";
// import { AtIcon } from "taro-ui";
import see from '../../images/see.png';
import group from '../../images/group.png';
import { marked } from 'marked';
// import _ from "lodash";
import OriginMark from './conpoments/OriginMark/index';
import TextArea from 'antd/es/input/TextArea';
// marked.use(`marked-code-jsx-renderer`);
// marked.use(`marked-extended-tables`);
// 
const markTextStr = `
## 标题
> 测试引用桔子的样子
随便测试普通的文本,要不要来个\`内敛\`的字符串
---
- 无序列表1
个人有看看
- 无序列表2
- [ ] 任务列表
- [x] 完成任务
1. 测试111
恶魔女哪里的请
2. 你好啊
3. iefw4t43t43t
永远不要相信一个
---
相信我
`;
let tablecellArr = [];
let tableRowArr = [];
let maxLengthCell = null;
let bodydata = null;
let headerdata = null;
let maxWidths = null;
marked.setOptions({
breaks: true, // 是否回车换行
gfm: true, //使用经批准的 GitHub Flavored Markdown (GFM) 规范
// pedantic: true, //严格模式
// highlight(code:any, lang:any) {
// // 语法高亮
// let val = code;
// if (lang) {
// val = hljs.highlight(lang, code).value;
// } else {
// val = hljs.highlightAuto(code).value;
// }
// return val;
// },
});
// 符号
// 🔥❓👉
// 0️⃣1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣🔟
// ©️⭐🔍〰️➖
// 修改 marked 的解析规则
const block = marked.Lexer.rules.block;
// block.gfm.hr = /^( *[-*_]){3,} *(?:\n+|$)/;
// 自定义水平线规则,确保它们在文档中被正确识别
block.gfm.hr =
/^ {0,3}(?:(?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/;
const renderer = new marked.Renderer();
// const originRenderer = _.cloneDeep(renderer);
// 图片调整300px
renderer.image = function (href, title, text) {
// console.log("href, title, text", href, title, text);
//
${text}
return `
`;
};
// let listSinbal="▫️ "
let listSinbal = '🔸';
// 有序列表
renderer.list = function (body, ordered, start) {
// console.log("body,ordered, start", body, ordered, start);
const type = ordered ? 'ol' : 'ul';
// console.log("type===>", type);
const startatt = ordered && start !== 1 ? ' start="' + start + '"' : '';
// 正则取值
// const regex = /▫️\s*(.*?)
/g;
const regex = /([^<]*)
/g;
const input = body;
const matches = [...input.matchAll(regex)];
const texts = matches.map((match) => match[1]);
// 不含▫️的元素数量
// const diffcCount=texts.length-texts.filter(item => item.includes('▫️')).length;
// console.log("texts===>", texts); // 输出: ["测试111", "测试222", "if"]
const newArray = texts.filter((item) => item.includes(listSinbal));
// 0️⃣',
const numbers = ['1️⃣', '2️⃣', '3️⃣', '4️⃣', '5️⃣', '6️⃣', '7️⃣', '8️⃣', '9️⃣', '🔟'];
const string = texts
.map((value, index) => {
// console.log("value, index==>", value, index);
// ${ value.indexOf("▫️ ") === -1 ? '
111' : ""}
return value.indexOf(listSinbal) !== -1
? `${
type === 'ol' ? numbers[newArray.indexOf(value)] : listSinbal
}${value.replace(listSinbal, '')}
`
: `\t${value}
`;
})
.join('');
// return `1️⃣`
// console.log("string===>", string);
return `${string}`;
};
// 无序列表 ▫️
renderer.listitem = function (text, task, checked) {
// return `${text}\n`;
return `${listSinbal}${text}
`;
// return `➖${text}
`;
};
// 任务列表
renderer.checkbox = function (checked) {
// ✅❌
return !!checked ? '✅' : '❌';
return (
''
);
};
// 标题
renderer.heading = function (text, level, raw) {
console.log('text, level, raw', text, level, raw);
// ignore IDs
// return `📋${text}
`;
return `🔥${text}
`;
// return `🔥${text}\n`;
// return `🔥${text}
`;
};
renderer.text = function (text) {
return text;
};
// 分隔符
renderer.hr = function () {
// return '
\n';
// return '➖➖➖➖➖
';
return '➖➖➖➖➖';
};
// 自定义分隔线解析规则
// marked.Lexer.rules.block.gfm.hr = /^(\*{3,}|-{3,}|_{3,})(?:\s*)$/;
// hr = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/;
// 内联样式,使用直角引号「」
renderer.codespan = function (text) {
// return `「${text}」`;
return `『${text}』`;
};
// 引用符号
renderer.blockquote = function (quote) {
// console.log("quote", quote);
let content = null;
var regex = /(.*?)<\/p>/;
var str = quote;
var match = regex.exec(str);
if (match != null) {
content = match[1]; // 获取第一个捕获组的内容
// console.log(content);
}
//
//
return `\t 👉${content}
`;
};
renderer.table = function (header, body) {
if (body) body = `${body}`;
return (
'📊 表格 📊
\n' +
'\n' +
header +
'\n' +
body +
'
\n'
);
};
renderer.tablerow = function (content) {
return `\n${content}
\n`;
};
renderer.tablecell = function (content, flags) {
const type = flags.header ? 'th' : 'td';
const tag = flags.align ? `<${type} align="${flags.align}">` : `<${type}>`;
return tag + `|${content}` + `${type}>\n`;
};
function cleanUrl(href: any) {
try {
href = encodeURI(href).replace(/%25/g, '%');
} catch (e) {
return null;
}
return href;
}
renderer.link = function (href, title, text) {
const cleanHref = cleanUrl(href);
if (cleanHref === null) {
return text;
}
href = cleanHref;
let out = '' + `🌐` + text + '';
// out += ">" +`🌐`+ text + ""+`(${href})`;
return out;
};
renderer.paragraph = function (text) {
return `${text}
\n`;
// return `${text}
`;
};
renderer.br = function () {
return '
';
};
renderer.html = function (html, block) {
return html;
};
// 使用拓展
marked.use({ renderer });
// export default class Index extends Component {
const Index = () => {
const [inputValue, setinputValue] = useState('');
const [markText, setmarkText] = useState(``);
const [oldmarkText, setoldmarkText] = useState(null);
const [currentRender, setcurrentRender] = useState(null);
const [markdownTable, setmarkdownTable] = useState();
const [tablecellArr, settablecellArr] = useState([]);
const onConfirm = (onConfirmtxt: any) => {
console.log('onConfirmtxt--->', onConfirmtxt.detail.value);
};
const onBlur = (onBlurtxt: any) => {
console.log('onBlurtxt--->', onBlurtxt.detail.value);
if (onBlurtxt.detail.value) {
setmarkText(onBlurtxt.detail.value);
}
};
const onInput = (onInputtxt: any) => {
console.log('onInputtxt--->', onInputtxt?.target?.value);
setinputValue(onInputtxt.target.value);
// console.log('inputValue',inputValue)
let value = onInputtxt?.target?.value;
if (value) {
setmarkText(value);
}
};
useEffect(() => {}, []);
return (
{/* {markText ? (
) : null} */}
{/*
*/}
);
};
export default Index;