feat:add pick text for word count

pr675
黄云飞 4 years ago
parent f63a57a147
commit cf16ab9650

@ -1,7 +1,95 @@
import { IElement } from '../../../interface/Element' import { IElement } from '../../../interface/Element'
enum ElementType {
TEXT = 'text',
TABLE = 'table',
HYPERLINK = 'hyperlink',
CONTROL = 'control'
}
enum ControlComponent {
VALUE = 'value'
}
function pickText(elementList: IElement[]): string {
let text = ''
let e = 0
while (e < elementList.length) {
const element = elementList[e]
// 表格、超链接递归处理
if (element.type === ElementType.TABLE) {
if (element.trList) {
for (let t = 0; t < element.trList.length; t++) {
const tr = element.trList[t]
for (let d = 0; d < tr.tdList.length; d++) {
const td = tr.tdList[d]
text += pickText(td.value)
}
}
}
} else if (element.type === ElementType.HYPERLINK) {
const hyperlinkId = element.hyperlinkId
const valueList: IElement[] = []
while (e < elementList.length) {
const hyperlinkE = elementList[e]
if (hyperlinkId !== hyperlinkE.hyperlinkId) {
e--
break
}
delete hyperlinkE.type
valueList.push(hyperlinkE)
e++
}
text += pickText(valueList)
} else if (element.type === ElementType.CONTROL) {
const controlId = element.controlId
const valueList: IElement[] = []
while (e < elementList.length) {
const controlE = elementList[e]
if (controlId !== controlE.controlId) {
e--
break
}
if (controlE.controlComponent === ControlComponent.VALUE) {
delete controlE.type
valueList.push(controlE)
}
e++
}
text += pickText(valueList)
}
// 文本追加
if (!element.type || element.type === ElementType.TEXT) {
text += element.value
}
e++
}
return text
}
function groupText(text: string): string[] {
const textList: string[] = []
for (const t of text) {
textList.push(t)
}
return textList
}
onmessage = (evt) => { onmessage = (evt) => {
const elementList = <IElement[]>evt.data const elementList = <IElement[]>evt.data
// TODO:
postMessage(elementList.length) // 提取所有文本
const originText = pickText(elementList)
// 过滤文本
const ZERO = '\u200B'
const WRAP = '\n'
const filterText = originText
.replace(new RegExp(`^${ZERO}`), '')
.replace(new RegExp(ZERO, 'g'), WRAP)
// 英文或数字以逗号/换行符分隔为一个字数
const textGroup = groupText(filterText)
postMessage(textGroup.length)
} }

Loading…
Cancel
Save