On Jul 31, 2023, at 8:54 AM, Paul Dupuis via use-livecode 
<use-livecode@lists.runrev.com> wrote:

Bob,

Here is a version of Mark's method, for trueWords, sentences, and paragraphs, 
with the added parameter of pDirection to get the char index of the start of 
the chunk or the end of the chunk containing the character position pChunkIndex.

Thanks, but whatever email app you sent from borked the code, putting asterisks 
before and after every keyword and running other words together. I always 
paste/copy my code in a generic text editor before sending to the list.

At any rate, I cleaned it up and here is the code. Not sure why you made it a 
private function but I removed the keyword PRIVATE so it could be used anywhere.

Thanks Mark for this effort. I think it should become part of the Master 
Library.

Bob S

function  rwCharIndex pText, pChunkType, pChunkIndex, pDirection
   -- pText is the full text
   -- pChunkType is once of: words|sentences|paragraphs
   -- pChunkIndex is the integer index in the indicated units. ie. "word",7 is 
the 7th word
   -- pDirection is one of: first|last meaning either the 1st character of the 
chunk or the last character
   -- error checking, empty is returned if an error occurs with the parameters
   if  pText is empty then return empty
   if  pChunkType is not among the items of "words,sentences,paragraphs" then 
return empty
   if  pChunkIndex is not an integer then return empty
   if  pDirection is not among the items of "first,last" then return empty
   local tL
   switch  pChunkType
      case  "words"
         switch  pDirection
            case  "first"
               put null into trueWord pChunkIndex to-1 of pText
               put codeunitOffset(null,pText) into N
               delete codeunit N to-1 of pText
               return (the number of chars in pText + 1)
               break
            case  "last"
               put length(trueWord pChunkIndex of pText) into tL
               put null into trueWord pChunkIndex to-1 of pText
               put codeunitOffset(null,pText) into N
               delete codeunit N to-1 of pText
               return (the number of characters in pText + tL)
               break
         end   switch
         break
      case  "sentences"
         switch  pDirection
            case  "first"
               put null into sentence pChunkIndex to-1 of pText
               put codeunitOffset(null,pText) into N
               delete codeunit N to-1 of pText
               return (the number of chars in pText + 1)
               break
            case  "last"
               put length(sentence pChunkIndex of pText) into tL
               put null into sentence pChunkIndex to-1 of pText
               put codeunitOffset(null,pText) into N
               delete codeunit N to-1 of pText
               return (the number of characters in pText + tL)
               break
         end   switch
         break
      case  "paragraphs"
         switch  pDirection
            case  "first"
               put null into paragraph pChunkIndex to-1 of pText
               put codeunitOffset(null,pText) into N
               delete codeunit N to-1 of pText
               return (the number of chars in pText + 1)
               break
            case  "last"
               put length(paragraph pChunkIndex of pText) into tL
               put null into paragraph pChunkIndex to-1 of pText
               put codeunitOffset(null,pText) into N
               delete codeunit N to-1 of pText
               return (the number of characters in pText + tL)
               break
         end   switch
         break
   end   switch
end rwCharIndex
_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to