MCPcopy Index your code
hub / github.com/editablejs/editable / getWordRange

Function getWordRange

packages/editor/src/utils/text.ts:161–207  ·  view source on GitHub ↗
(text: string, offset: number)

Source from the content-addressed store, hash-verified

159}
160
161export const getWordRange = (text: string, offset: number) => {
162 if (!text) return [0, 0]
163 offset = Math.min(offset, text.length)
164
165 let previousChar = getCharFromGraphemeBreaker(text, offset, true)
166 let nextChar = getCharFromGraphemeBreaker(text, offset)
167
168 let backwardOffset = offset - 1
169 let forwardOffset = offset + 1
170 if (!nextChar) {
171 return [offset, offset]
172 }
173 if (previousChar && equalOfCharacterType(previousChar, nextChar)) {
174 for (; backwardOffset >= 0; ) {
175 const backwardChar = getCharFromGraphemeBreaker(text, backwardOffset, true)
176 if (equalOfCharacterType(previousChar, backwardChar)) {
177 backwardOffset -= backwardChar.length
178 } else break
179 }
180 } else {
181 backwardOffset = offset
182 }
183
184 for (; forwardOffset < text.length; ) {
185 const forwardChar = getCharFromGraphemeBreaker(text, forwardOffset)
186 if (equalOfCharacterType(nextChar, forwardChar)) {
187 forwardOffset += forwardChar.length
188 } else break
189 }
190 // split word
191 if (forwardOffset - backwardOffset > 1) {
192 const newText = text.substring(backwardOffset, forwardOffset)
193 const { text: wordText, offset: wordOffset } = splitTextOfWord(newText, segments => {
194 for (let i = segments.length - 1; i >= 0; i--) {
195 const segment = segments[i]
196 const wordStart = segment.index + backwardOffset
197 if (offset >= wordStart && offset < wordStart + segment.segment.length) {
198 return segment
199 }
200 }
201 return segments[0]
202 })
203 backwardOffset += wordOffset
204 forwardOffset = wordText.length + backwardOffset
205 }
206 return [backwardOffset, forwardOffset]
207}
208
209/**
210 * @zh-CN 获取在Text节点处鼠标点击坐标时的字符索引

Callers 1

withEditableFunction · 0.90

Calls 3

equalOfCharacterTypeFunction · 0.85
splitTextOfWordFunction · 0.85

Tested by

no test coverage detected