Pulling Unicode Data from a DataGrid

Nicolas Cueto niconiko at gmail.com
Mon Mar 18 18:56:22 EDT 2013


For handling Japanese text, these functions (below) by Kenji Kojima have
served perfectly for years. (Many thanks again, Kenji!)

-- Nicolas Cueto



on mouseUp
   answer file "Open unicode file:"
   if it is empty then exit mouseUp
   put url ("binfile:" & it) into tURL
   set the useUnicode to true
   if baseConvert(charToNum(char 1 to 2 of tURL), 10, 16) = "FEFF" then
      delete char 1 to 2 of tURL
   end if
   replace (uniencode(CRLF)) with (uniencode(CR)) in tURL
   set the unicodeText of fld "theUnicodeText" to tURL
   put the number of lines in tURL into tLineCount
   repeat with tLineNum = 1 to tLineCount
      put unicodeGetChars(theUnicodeText,tLineNum,1,-1) into tTemp
      put unidecode(tTemp,japanese) into tSJIS
      set the itemDel to tab
      get item 2 of tSJIS
      put it & cr after tRez
   end repeat
   delete the last char of tRez
   set the unicodeText of fld "questionList" to uniencode(tRez,Japanese)
end mouseUp



-- START OF KENJI KOJIMA'S FUNCTIONS

function countUnicodeLines @tdata
  put number of characters of tdata into tlength
  set useunicode to true
  put 1 into tlinecount
  repeat with i = 1 to tlength step 2
    if chartonum(char i to i+1 of tdata) is 10 then add 1 to tlinecount
  end repeat
  return tlinecount
end countUnicodeLines

function UnicodeLineOffset @tdata,pWhichline
  put number of characters of tdata into tlength
  set useunicode to true
  put 1 into tlinecount
  put 1 into tlineoffset
  repeat with i = 1 to tlength step 2
    if tlinecount is pWhichline then exit repeat
    if chartonum(char i to i+1 of tdata) is 10 then
      add 1 to tlinecount
      put i+2 into tlineoffset
    end if
  end repeat
  if pWhichline > tlinecount then put tlength + 1 into tlineoffset
  return tlineoffset
end UnicodeLineOffset

function unicodeGetChars pFldname, pLineNum, pStartChar, pEndChar
  put the unicodetext of fld pFldname into tdata
  put UnicodeLineOffset(tdata,pLineNum) into startchar
  put UnicodeLineOffset(tdata,pLineNum+1) - 1 into endchar
  put (char startchar to endchar of tdata) into tLineData
  if pEndChar<0 then put (the num of chars of tLineData \
      + (pEndChar*2))/2 into pEndChar
  set the useunicode to true
  if pLineNum = countUnicodeLines(tdata) then
    repeat with i = (pStartChar*2-1) to (pEndChar)*2 step 2
      put char i to i+1 of tLineData after tString
    end repeat
  else
    repeat with i = (pStartChar*2-1) to (pEndChar-1)*2 step 2
      put char i to i+1 of tLineData after tString
    end repeat
  end if
  return tString
end unicodeGetChars

//////////   E N D /////////////////////////////////////////////



More information about the use-livecode mailing list