add hw2
This commit is contained in:
		
							
								
								
									
										85
									
								
								node_modules/@iconify/utils/lib/emoji/regex/tree.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								node_modules/@iconify/utils/lib/emoji/regex/tree.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | ||||
| import { joinerEmoji } from "../data.js"; | ||||
| import { convertEmojiSequenceToUTF32 } from "../convert.js"; | ||||
| import { splitEmojiSequences } from "../cleanup.js"; | ||||
| import { createOptionalEmojiRegexItem, createSequenceEmojiRegexItem, createSetEmojiRegexItem, createUTF16EmojiRegexItem } from "./base.js"; | ||||
| import { createRegexForNumbersSequence } from "./numbers.js"; | ||||
| import { mergeSimilarItemsInSet } from "./similar.js"; | ||||
|  | ||||
| /** | ||||
| * Create tree | ||||
| */ | ||||
| function createEmojisTree(sequences) { | ||||
| 	const root = []; | ||||
| 	for (let i = 0; i < sequences.length; i++) { | ||||
| 		const split = splitEmojiSequences(convertEmojiSequenceToUTF32(sequences[i])); | ||||
| 		let parent = root; | ||||
| 		for (let j = 0; j < split.length; j++) { | ||||
| 			const regex = createRegexForNumbersSequence(split[j]); | ||||
| 			let item; | ||||
| 			const match = parent.find((item$1) => item$1.regex.regex === regex.regex); | ||||
| 			if (!match) { | ||||
| 				item = { regex }; | ||||
| 				parent.push(item); | ||||
| 			} else item = match; | ||||
| 			if (j === split.length - 1) { | ||||
| 				item.end = true; | ||||
| 				break; | ||||
| 			} | ||||
| 			parent = item.children || (item.children = []); | ||||
| 		} | ||||
| 	} | ||||
| 	return root; | ||||
| } | ||||
| /** | ||||
| * Parse tree | ||||
| */ | ||||
| function parseEmojiTree(items) { | ||||
| 	function mergeParsedChildren(items$1) { | ||||
| 		const parsedItems = []; | ||||
| 		const mapWithoutEnd = Object.create(null); | ||||
| 		const mapWithEnd = Object.create(null); | ||||
| 		for (let i = 0; i < items$1.length; i++) { | ||||
| 			const item = items$1[i]; | ||||
| 			const children = item.children; | ||||
| 			if (children) { | ||||
| 				const fullItem = item; | ||||
| 				const target = item.end ? mapWithEnd : mapWithoutEnd; | ||||
| 				const regex = children.regex; | ||||
| 				if (!target[regex]) target[regex] = [fullItem]; | ||||
| 				else target[regex].push(fullItem); | ||||
| 			} else parsedItems.push(item.regex); | ||||
| 		} | ||||
| 		[mapWithEnd, mapWithoutEnd].forEach((source) => { | ||||
| 			for (const regex in source) { | ||||
| 				const items$2 = source[regex]; | ||||
| 				const firstItem = items$2[0]; | ||||
| 				let childSequence = [createUTF16EmojiRegexItem([joinerEmoji]), firstItem.children]; | ||||
| 				if (firstItem.end) childSequence = [createOptionalEmojiRegexItem(createSequenceEmojiRegexItem(childSequence))]; | ||||
| 				let mergedRegex; | ||||
| 				if (items$2.length === 1) mergedRegex = firstItem.regex; | ||||
| 				else mergedRegex = mergeSimilarItemsInSet(createSetEmojiRegexItem(items$2.map((item) => item.regex))); | ||||
| 				const sequence = createSequenceEmojiRegexItem([mergedRegex, ...childSequence]); | ||||
| 				parsedItems.push(sequence); | ||||
| 			} | ||||
| 		}); | ||||
| 		if (parsedItems.length === 1) return parsedItems[0]; | ||||
| 		const set = createSetEmojiRegexItem(parsedItems); | ||||
| 		const result = mergeSimilarItemsInSet(set); | ||||
| 		return result; | ||||
| 	} | ||||
| 	function parseItemChildren(item) { | ||||
| 		const result = { | ||||
| 			regex: item.regex, | ||||
| 			end: !!item.end | ||||
| 		}; | ||||
| 		const children = item.children; | ||||
| 		if (!children) return result; | ||||
| 		const parsedChildren = children.map(parseItemChildren); | ||||
| 		result.children = mergeParsedChildren(parsedChildren); | ||||
| 		return result; | ||||
| 	} | ||||
| 	const parsed = items.map(parseItemChildren); | ||||
| 	return mergeParsedChildren(parsed); | ||||
| } | ||||
|  | ||||
| export { createEmojisTree, parseEmojiTree }; | ||||
		Reference in New Issue
	
	Block a user
	 nik
					nik