1234567891011121314151617181920212223242526272829 |
- import React, { cloneElement, Fragment } from 'react';
- var tagRe = /<(\w+)>(.*?)<\/\1>|<(\w+)\/>/;
- var nlRe = /(?:\r\n|\r|\n)/g;
- function getElements(parts) {
- if (!parts.length)
- return [];
- var _a = parts.slice(0, 4), paired = _a[0], children = _a[1], unpaired = _a[2], after = _a[3];
- return [
- [(paired || unpaired), children || '', after],
- ].concat(getElements(parts.slice(4, parts.length)));
- }
- export default function formatElements(value, elements) {
- if (elements === void 0) { elements = []; }
- var parts = value.replace(nlRe, '').split(tagRe);
- if (parts.length === 1)
- return value;
- var tree = [];
- var before = parts.shift();
- if (before)
- tree.push(before);
- getElements(parts).forEach(function (_a, realIndex) {
- var key = _a[0], children = _a[1], after = _a[2];
- var element = elements[key] || React.createElement(Fragment, null);
- tree.push(cloneElement(element, { key: realIndex }, children ? formatElements(children, elements) : element.props.children));
- if (after)
- tree.push(after);
- });
- return tree;
- }
|