
    $HJj5                        d dl mZ d dlmZ ddlmZ ddlmZ ddlm	Z	 ddl
ZddlZddlZddlZddlZi  ed      d	 ed
      d	 ed      d ed      d ed      d ed      d ed      d ed      d ed      d ed      d ed      d ed      d ed      d ed      d ed      d  ed!      d" ed#      d$i  ed%      d& ed'      d( ed)      d* ed+      d, ed-      d. ed/      d0 ed1      d2 ed3      d4 ed5      d6 ed7      d8 ed9      d: ed;      d< ed=      d> ed?      d@ edA      dB edC      dD edE      d2i  edF      dG edH      d6 edI      dJ edK      dL edM      dN edO      dP edQ      dR edS      dT edU      dV edW      dX edY      dZ ed[      d\ ed]      d^ ed_      d` eda      db edc      dd ede      dfi  edg      dh edi      dj edk      dl edm      dn edo      dp edq      dr eds      dt edu      dv edw      dx edy      dz ed{      d| ed}      d~ ed      d ed      d ed      d ed      d ed      di  ed      d ed      d ed      d ed      d ed      d ed      d ed      d ed      d ed      d ed      d ed      d ed      d ed      d ed      d ed      d ed      d$Z ee      dk(  r ed  edd      D              sJ ej+                   ed      d ed      d ed      d ed      di        ee      dk(  r ed  edd      D              sJ ej+                  i  ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed!       ed      z   d ed!       ed      z   di  ed!       ed      z   d ed!       ed      z   d ed/       ed      z   d ed/       ed      z   d ed/       ed      z   dÓ ed/       ed      z   dē ed1       ed      z   dœ ed1       ed      z   dƓ ed1       ed      z   dǓ ed1       ed      z   dȓ edC       ed      z   dɓ edC       ed      z   dʓ edC       ed      z   d˓ edC       ed      z   d̓ edE       ed      z   dƓ edE       ed      z   dǓ edE       ed      z   dȓi  edF       ed      z   d͓ edF       ed      z   dΓ edF       ed      z   dϓ edF       ed      z   dГ edI       ed      z   dѓ edI       ed      z   dғ edK       ed      z   dӓ edK       ed      z   dԓ edM       ed      z   dՓ edO       ed      z   d֓ edS       ed      z   dד edS       ed      z   dؓ edS       ed      z   dٓ edS       ed      z   dړ eda       ed      z   dۓ eda       ed      z   dܓ eda       ed      z   dݓi  eda       ed      z   dޓ edc       ed      z   dߓ edc       ed      z   d edc       ed      z   d ede       ed      z   d ede       ed      z   d ede       ed      z   d edg       ed      z   d edg       ed      z   d edg       ed      z   d edg       ed      z   d edg       ed      z   d edg       ed      z   d ed{       ed      z   d ed{       ed      z   d ed{       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   d ed       ed      z   di        ee      dk(  sJ  eej/                               D ]'  \  ZZ ee      dk(  se\  ZZeev reev r J eef        ej+                  i ddddddddd ed      d ed      d ed      d  ed      ddddddddd	dd
ddddddddddd ed       ed      ddd       g dZ ed  e edd      e      D              sJ eD  ci c]  } | d   | d     c} Zej<                  j?                  ed      5 Z  e!e D ch c]  }|jE                          c}      Z#ddd       d Z$ e!d      Z% e!d      Z&e G d d             Z'e G d d             Z( G d  d!      Z)yc c} w c c}w # 1 sw Y   XxY w("     )data)Convert    )	dataclass)Tagger)TupleNiA0  aiB0  iC0  iiD0  iE0  u   ɯiF0  iG0  eiH0  iI0  oiJ0  iK0  kaiL0  u   ɡaiM0  u   kʲiiN0  u   ɡʲiiO0  u   kɯiP0  u   ɡɯiQ0  keiR0  u   ɡeiS0  koiT0  u   ɡoiU0  saiV0  u   ʣaiW0  u   ɕiiX0  u   ʥiiY0  u   sɨiZ0  u   zɨi[0  sei\0  u   ʣei]0  soi^0  u   ʣoi_0  tai`0  daia0  u   ʨiib0  id0  u   ʦɨie0  if0  teig0  deih0  toii0  doij0  naik0  u   ɲiil0  u   nɯim0  nein0  noio0  haip0  baiq0  pair0  u   çiis0  u   bʲiit0  u   pʲiiu0  u   ɸɯiv0  u   bɯiw0  u   pɯix0  heiy0  beiz0  pei{0  hoi|0  boi}0  poi~0  mai0  u   mʲii0  u   mɯi0  mei0  moi0  jai0  i0  u   jɯi0  i0  joi0  i0  u   ɾai0  u   ɾʲii0  u   ɾɯi0  u   ɾei0  u   ɾoi0  u   βai0  i0  i0  i0  i0  u   vɯi0  i0  T   c              #   J   K   | ]  }|d v xs t        |      t        v   yw)>   c0  0  NchrHEPBURN.0r
   s     W/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/misaki/cutlet.py	<genexpr>r4   f   s)     !hTgq!~"5"JQ79J"JTgs   !#i0  i0  vai0  u   vʲii0  vei0  voX   c              #   >   K   | ]  }t        |      t        v   y wNr.   r1   s     r3   r4   r4   n   s     !Q=P#a&G"3=Ps   i0  jeu   βiu   βeu   βou   kʲeu   kʲau   kʲɨu   kʲou   ɡʲau   ɡʲɨu   ɡʲou   kᵝau   kᵝiu   kᵝeu   kᵝou   ɡᵝau   ɡᵝiu   ɡᵝeu   ɡᵝou   ɕeu   ɕau   ɕɨu   ɕou   ʥeu   ʥau   ʥɨu   ʥou   ʨeu   ʨau   ʨɨu   ʨou   ʦau   ʦʲiu   ʦeu   ʦou   tʲiu   tʲɨu   dʲiu   dʲɨu   tɯu   dɯu   ɲeu   ɲau   ɲɨu   ɲou   çeu   çau   çɨu   çou   bʲau   bʲɨu   bʲou   pʲau   pʲɨu   pʲou   ɸau   ɸʲiu   ɸeu   ɸou   ɸʲɨu   ɸʲou   mʲau   mʲɨu   mʲou   ɾʲau   ɾʲɨu   ɾʲo      u   。.u   、,u   ？?u   ！!u   「i   u   」i   u   『u   』u   ：:u   ；;u   （(u   ）)u   《u   》u   【[u   】]u   ・    — )u   ，u   ～u   〜rI      «   »u   ゚u   ゙)u   ㇰクu   ㇱシu   ㇲスu   ㇳトu   ㇴヌu   ㇵハu   ㇶヒu   ㇷフu   ㇸヘu   ㇹホu   ㇺムu   ㇻラu   ㇼリu   ㇽルu   ㇾレu   ㇿロc              #   D   K   | ]  \  }}t        |      |d    k(    yw)r   N)r/   )r2   r
   kks      r3   r4   r4      s#     
_(^uq"3q6RU?(^s    i1  i 2  zja_words.txtc                 N    	 dj                  |       }d|   S # t        $ r Y yw xY w)z6Given a kana (single-character string), add a dakuten.u<   かきくけこさしすせそたちつてとはひふへほu<   がぎぐげござじずぜぞだぢづでどばびぶべぼN)index
ValueError)rN   iis     r3   add_dakutenrS      s5    KQQRTUMbQQ s    	$$u   ゃゅょぁぃぅぇぉu   〃々ゝゞヽc                   ,    e Zd ZU eed<   eed<   eed<   y)Wordsurfacehira	char_typeN)__name__
__module____qualname__str__annotations__int     r3   rU   rU      s    L
INr`   rU   c                   (    e Zd ZU eed<   eed<   d Zy)TokenrV   spacec                 B    | j                   rdnd}| j                   | S )NrH   rJ   )rc   rV   )selfsps     r3   __str__zToken.__str__  s"    JJSB,,t$$r`   N)rY   rZ   r[   r\   r]   boolrg   r_   r`   r3   rb   rb      s    LK%r`   rb   c                   @    e Zd Zd Zdeedf   fdZd Zd Zd Z	d Z
y)	Cutletc                 X    t               | _        t        t              | _        i | _        y r:   )r   taggerdictr0   table
exceptions)re   s    r3   __init__zCutlet.__init__  s    h']
r`   returnNc           
         |sy| j                  |      }| j                  |      D cg c]  }t        |j                  t	        j
                  |j                  j                  xs$ |j                  j                  xs |j                        |j                  dk(  s|j                  sdn|j                         }}| j                  |      }dj                  |D cg c]  }t        |       c}      }t        j                  dd|j!                               j#                  dd      j#                  d	d
      }t        j                  dd|      }|dfS c c}w c c}w )z(Build a complete string from input text.)rJ   N      rJ   z\s+rH   rD   rK   rE   rL   u5   (?<![!",.:;?»—…”]) (?=ʔ)|(?<=ʔ) (?!["«“])N)_normalize_textrl   rU   rV   jaconv	kata2hirafeaturepronkanarX   is_unk_romaji_tokensjoinr\   resubstripreplace)re   textwwordstokenstokoutpss           r3   __call__zCutlet.__call__  s'    ##D)
 ;;t$	& %a	 IIQYY^^Jqyy~~JK!Aq{{
 %	 	 &
 $$U+gg626Cs3x623VVFC-55c4@HHdSVVLbRTU4x& 3s   BEEc           	         t        j                  dd|      }t        j                         D ]  \  }}|j	                  ||      } t        j                  d|      }t        j                  |d      }t        j                  |dd      }dj                  t        j                  d|      D cg c]"  }|j                         rd	t        |      z   n|$ c}      S c c}w )
a-  Given text, normalize variations in Japanese.

        This specifically removes variations that are meaningless for romaji
        conversion using the following steps:

        - Unicode NFKC normalization
        - Full-width Latin to half-width
        - Half-width katakana to full-width
        u   [〜～](?=\d)u   からNFKCF)rz   )digitasciirJ   z\d+|\D+rH   )r~   r   Katakana_Phonetic_Extensionsitemsr   unicodedata	normalizemojimoji
zen_to_han
han_to_zenr}   findallisdigitr   )re   r   kvts        r3   ru   zCutlet._normalize_text  s     vv'480668DAq<<1%D 9$$VT2""4e4""4uEBww

S]_cHdeHd1AIIKWQZQ>Hdeffes   .'Cc           
         g }dt              k  rt        fdt        dz   t                    D        t                    }t        fdt        |d      D        d      }||j                     g       dz  n|j                  |        |t              k  r|D cg c]H  }t	        dj                  d |D              dj                  d	 |D              |d   j                        J c}g }t              D ]  \  }}|r|d   nd}	|dkD  r|dz
     nd}
|t              dz
  k  r|dz      nd}| j                  |      }t        |d
      }|j                  }|dv s|dv r
|	r5d|	_        n-|dv s|dv r|	rd
|	_        d|_        n|dk(  rd
|_        nd|_        |j                  |        |D ]#  }|j                  j                  dd      |_
        % |S c c}w )z(Build a list of tokens from input nodes.r   c              3   b   K   | ]&  }|   j                      j                   k7  s#| ( y wr:   )rX   )r2   zr
   r   s     r3   r4   z(Cutlet._romaji_tokens.<locals>.<genexpr>7  s2     d!7A58;M;MQVWXQYQcQc;ca!7s   $//r   c              3   f   K   | ](  }d j                  d | D              t        v s%| * yw)rJ   c              3   4   K   | ]  }|j                     y wr:   rV   r2   r   s     r3   r4   z2Cutlet._romaji_tokens.<locals>.<genexpr>.<genexpr>8  s     ;Zz!AIIz   N)r}   JA_WORDS)r2   jr
   r   s     r3   r4   z(Cutlet._romaji_tokens.<locals>.<genexpr>8  s1     gABGG;ZuUVWXz;Z4Z^f4fas   &11NrJ   c              3   4   K   | ]  }|j                     y wr:   r   r   s     r3   r4   z(Cutlet._romaji_tokens.<locals>.<genexpr>@  s     )q!AIIqr   c              3   4   K   | ]  }|j                     y wr:   )rW   r   s     r3   r4   z(Cutlet._romaji_tokens.<locals>.<genexpr>A  s     &AqAFFAr   Fu   「『«z([Tu   」』»z]).,?!:rH      っ)lennextrangeappendrU   r}   rX   	enumerate_romaji_wordrb   rV   rc   r   )re   r   groupsr   r   gr   wiwordr$   pwnwromar   rV   r
   s    `             @r3   r|   zCutlet._romaji_tokens2  s   #e*ndqsCJ!7dfijofpqAgq!RgimnAyuQxj)QeAaj) #e*n 	 a	 GG)q))GG&A&&aDNN
 	
 !%(HBRTB"$q&rAvdB"$s5zA~"5rAv4B$$T*De$CllG*$#BHJ&$)*;$BH 	!	 	JJsO' )* C++--eR8CK 
;s   1AG,c                     |j                   }| j                  v r j                  |   S |j                         rJ |       |j                         r|S |j                  dk(  rdj                  t         fd|            S |j                  dk7  ryd}|j                  }t        |      D ]E  \  }}|t        |      dz
  k  r||dz      nd}|dkD  r||dz
     nd}| j                  |||      z  }G |S )z+Return the romaji for a single word (node).   rJ   c                 <    j                   j                  | |       S r:   )rn   get)cre   s    r3   <lambda>z%Cutlet._romaji_word.<locals>.<lambda>g  s    1)=r`   rt   r   Nr   )rV   ro   r   isasciirX   r}   maprW   r   r   _get_single_mapping)	re   r   rV   r   rW   kicharnkpks	   `        r3   r   zCutlet._romaji_word^  s    ,,doo%??7++??$-g-$??N>>Q773=wGHH^^q yy!$HB!#c$i!m!3b1fB!#ab1fTB4++Bb99C ( 
r`   c                 H   |t         v r.|dv r|r|S y|dv r |syt        |      }|r| j                  |   S yy|r#||z   | j                  v r| j                  ||z      S |r||z   | j                  v ry|r0|t        v r(|dk(  ry| j                  |   dd | j                  |   z   S |t        v ry|dk(  ry|dk(  ry	|d
k(  rK| j                  j	                  |      r-d   dv ryd   dv ryt        fddD              ryd   dv ryy| j                  j	                  |d      S )z@Given a single kana and its neighbors, return the mapped romaji.u   ゝヽrJ   u   ゞヾr   Nr   u   ーu   ːu   ʔu   んr   mpbmu   kɡu   ŋc              3   @   K   | ]  }j                  |        y wr:   )
startswith)r2   ptnks     r3   r4   z-Cutlet._get_single_mapping.<locals>.<genexpr>  s     E4Dq*4Ds   )   ɲu   ʨu   ʥr   u   ntdɾznu   ɴ)ODORIrS   rn   SUTEGANAr   any)re   r   rN   r   vvr   s        @r3   r   zCutlet._get_single_mappingr  sK    ;X~byX~" _djjn, 27tzz)::b2g&&27tzz)".U{2::b>#2&B77>;; ; **..$Cq6U?Vu_E4DEEVx'zz~~b"%%r`   )rY   rZ   r[   rp   r   r\   r   ru   r|   r   r   r_   r`   r3   rj   rj     s2    
c4i 0 "g**X(5&r`   rj   )*rJ   r   num2kanar   dataclassesr   fugashir   typingr   importlib.resources	importlibrv   r   r~   r   r/   r0   r   allr   updatelistr   r   r   r	   br   zip	resources	open_textr	frozensetr   r   rS   r   r   rU   rb   rj   )rN   lines   00r3   <module>r      s     !      	 W E
3W E
3W E
3W E
3	W
 E
4W E
4W E
3W E
3W E
3W E
3W E
4W E
5W E
6W E
7W E
5W  E
6!W" E
4#W$ E
5%W& E
4'W( E
5)W* E
4+W, E
5-W. E
5/W0 E
51W2 E
53W4 E
55W6 E
47W8 E
59W: E
4;W< E
5=W> E
4?W@ E
4AWB E
5CWD E
5EWH E
6IWJ E
5KWL E
4MWN E
4OWP E
4QWR E
4SWT E
4UWV E
5WWX E
5YWZ E
4[W\ E
4]W^ E
4_W` E
4aWb E
4cWd E
5eWf E
6gWh E
6iWj E
6kWl E
5mWn E
5oWp E
4qWr E
4sWt E
4uWv E
4wWx E
4yWz E
4{W| E
4}W~ E
6W@ E
5AWB E
4CWD E
4EWF E
4GWH E
4IWJ E
5KWL E
5MWN E
4OWP E
4QWR E
5SWT E
7UWV E
6WWX E
5YWZ E
5[W\ E
5]W^ E
5_W` E
3aWb E
3cWd E
3eWh E
5iWj E
4kWl E
4mWp 7|rc!hTYZ_afTg!hh hh  E
4 E
6 E
4 E
4	  7|rc!QU5%=P!QQ QQ  M E
3u: dM E
3u: eM E
3u: eM E
3u: e	M
 E
3u: fM E
3u: fM E
3u: gM E
3u: fM E
3u: gM E
3u: hM E
3u: gM E
3u: gM E
3u: gM E
3u: gM E
3u: gM  E
3u: h!M" E
3u: h#M$ E
3u: h%M& E
3u: h'M( E
3u: e)M* E
3u: e+M, E
3u: f-M. E
3u: e/M0 E
3u: e1M2 E
3u: e3M4 E
3u: f5M6 E
3u: e7M8 E
3u: e9M: E
3u: e;M< E
3u: f=M> E
3u: e?M@ E
3u: eAMB E
3u: fCMD E
3u: eEMF E
3u: eGMH E
3u: gIMJ E
3u: eKML E
3u: eMMN E
3u: fOMP E
3u: gQMR E
3u: fSMT E
3u: gUMV E
3u: eWMX E
3u: eYMZ E
3u: e[M\ E
3u: e]M^ E
3u: f_M` E
3u: eaMb E
3u: ecMd E
3u: eeMf E
3u: fgMh E
3u: eiMj E
3u: fkMl E
3u: gmMn E
3u: foMp E
3u: fqMr E
3u: gsMt E
3u: fuMv E
3u: ewMx E
3u: gyMz E
3u: e{M| E
3u: e}M~ E
3u: hM@ E
3u: gAMB E
3u: fCMD E
3u: gEMF E
3u: fGMH E
3u: gIMJ E
3u: h E
3u: g E
3u: d E
3u: f E
3u: d E
3u: d E
3u: g E
3u: fYM M\ 7|s !DAq
1v{1G|W4q!f4, "
   s s	
 s s s4y s4y s4y s4y s s s s s  s!" s#$ s%& s'( 	$i	$i 
	; @  q 

_E%,?A](^
__ __7ST7S1r!u7ST ""48A1514$**,156H 9 /0#$
  
 % % %a& a&?  U 6 98s$   j7kj<
#k<kk
