All pastes #187263 Raw Edit

Mine

public text v1 · immutable
#187263 ·published 2006-09-30 23:21 UTC
rendered paste body
on *:TEXT:!jp *:#Admin:{
  ; Check if the db is open, if not open it!
  if (!$sqlite_is_valid_conn(%hiragana_db)) {
    set %hiragana_db $sqlite_open_memory(hiragana.db)
  }

  ; Do the magic
  var %i = 1, %len = $len($2), %jpname
  while (%i <= %len) {
    ; Ignore hyphen
    if ($mid($2,%i,1) == -) continue

    ; Check for double consonant
    if ($mid($2,%i,1) == $mid($2,$calc(1+%i),1) && $mid($2,%i,1) !isin aeiouy) {
      ; Double consonant
      %jpname = %jpname $+ $+($chr(227),$chr(129),$chr(163))
      inc %i
    }

    var %sql = SELECT sym, length(seq) AS len FROM hiragana WHERE seq IN ( $sqlite_qt($mid($2,%i,1)) , $sqlite_qt($mid($2,%i,2)) , $sqlite_qt($mid($2,%i,3)) ) ORDER BY len DESC LIMIT 1
    var %res = $sqlite_query(%hiragana_db, %sql)
    if ($sqlite_fetch_row(%res, hiragana)) {
      %jpname = %jpname $+ $hget(hiragana, sym)
      inc %i $hget(hiragana, len)

      ; Check for double vowels
      while ($mid($2,$calc(-1+%i),1) == $mid($2,%i,1) && $mid($2,%i,1) isin aeiouy) {
        ; Double vowel
        %jpname = %jpname $+ $+($chr(227),$chr(131),$chr(188))
        inc %i
      }
    }
    else {
      %jpname = $null
    }
    sqlite_free %res
    if (!%jpname) break
  }

  if (%jpname) {
    msg $chan Success: %jpname
  }
  else {
    msg $chan Failure
  }
}