Unicode-Japanese

 view release on metacpan or  search on metacpan

memmap_common.c  view on Meta::CPAN

 * ----------------------------------------------------------------------------
 * Mastering programed by YAMASHINA Hio
 * ----------------------------------------------------------------------------
 * $Id: memmap_common.c 4697 2007-09-14 06:17:00Z pho $
 * ------------------------------------------------------------------------- */

#include "Japanese.h"

/* SJIS <=> UTF8 mapping table      */
/* (ja:) SJIS <=> UTF8 変換テーブル */
/* index is in 0..0xffff            */
UJ_UINT8 const* g_u2s_table;
UJ_UINT8 const* g_s2u_table;

/* i-mode/j-sky/dot-i絵文字 <=> UTF8 変換テーブル */
UJ_UINT32 const* g_ei2u1_table;
UJ_UINT32 const* g_ei2u2_table;
UJ_UINT16 const* g_eu2i1_table;
UJ_UINT16 const* g_eu2i2_table;
UJ_UINT32 const* g_ej2u1_table;
UJ_UINT32 const* g_ej2u2_table;
UJ_UINT8  const* g_eu2j1_table; /* char [][5] */
UJ_UINT8  const* g_eu2j2_table; /* char [][5] */
UJ_UINT32 const* g_ed2u_table;
UJ_UINT16 const* g_eu2d_table;

/* i-mode/j-sky/dot-i絵文字 <=> UTF8 変換テーブルの要素数 */
/* バイト数でなく要素数                                   */
int g_ei2u1_size;
int g_ei2u2_size;
int g_eu2i1_size;
int g_eu2i2_size;
int g_ej2u1_size;
int g_ej2u2_size;
int g_eu2j1_size;
int g_eu2j2_size;
int g_ed2u_size;
int g_eu2d_size;

/* au <=> ut8 */
UJ_UINT32 const* g_ea2u1_table;
int              g_ea2u1_size;
UJ_UINT32 const* g_ea2u2_table;
int              g_ea2u2_size;
UJ_UINT16 const* g_eu2a1_table;
int              g_eu2a1_size;
UJ_UINT16 const* g_eu2a2_table;
int              g_eu2a2_size;
/* au(s) <=> ut8 */
UJ_UINT32 const* g_ea2u1s_table;
int              g_ea2u1s_size;
UJ_UINT32 const* g_ea2u2s_table;
int              g_ea2u2s_size;
UJ_UINT16 const* g_eu2a1s_table;
int              g_eu2a1s_size;
UJ_UINT16 const* g_eu2a2s_table;
int              g_eu2a2s_size;


/* ----------------------------------------------------------------------------
 * split mapping table.
 */
void
do_memmap_set(const char* mmap_pmfile, int mmap_pmfile_size)
{
  HV* hv_table;
  int headlen, proglen;
  
  assert( mmap_pmfile!=NULL );
  assert( mmap_pmfile_size!=0 );
  
  {
    SV* sv;
    sv = get_sv("Unicode::Japanese::PurePerl::HEADLEN",0);
    assert( sv!=NULL && "HEADLEN is not NULL");
    headlen = SvIV(sv);
    assert( headlen>0 );
    sv = get_sv("Unicode::Japanese::PurePerl::PROGLEN",0);
    assert( sv!=NULL && "PROGLEN is not NULL");
    proglen = SvIV(sv);
    assert( proglen>0 );
  }
  
  {
    /* get offset table for embeded data */
    SV* sv_hvref_table = get_sv("Unicode::Japanese::PurePerl::TABLE",0);
    assert(sv_hvref_table!=NULL);
    assert(SvROK(sv_hvref_table));
    hv_table = (HV*)SvRV(sv_hvref_table);
    assert(hv_table!=NULL);
    assert(SvTYPE((SV*)hv_table)==SVt_PVHV);
  }
  
  {
    int dummy;
    struct
    {
      const char*      filename;
      const UJ_UINT8** data_ptr;
      int*             size_ptr;
    } *ptr, embeded[] = 
    {
      /* sjis<=>utf-8 */
      { "jcode/s2u.dat", &g_s2u_table, &dummy, },
      { "jcode/u2s.dat", &g_u2s_table, &dummy, },
      /* i-mode */
      { "jcode/emoji2/eu2i.dat", (const UJ_UINT8**)&g_eu2i1_table, &g_eu2i1_size, },
      { "jcode/emoji2/ei2u.dat", (const UJ_UINT8**)&g_ei2u1_table, &g_ei2u1_size, },
      { "jcode/emoji2/eu2i2.dat",(const UJ_UINT8**)&g_eu2i2_table, &g_eu2i2_size, },
      { "jcode/emoji2/ei2u2.dat",(const UJ_UINT8**)&g_ei2u2_table, &g_ei2u2_size, },
      /* vodafone */
      { "jcode/emoji2/eu2j.dat", (const UJ_UINT8**)&g_eu2j1_table, &g_eu2j1_size, },
      { "jcode/emoji2/ej2u.dat", (const UJ_UINT8**)&g_ej2u1_table, &g_ej2u1_size, },
      { "jcode/emoji2/eu2j2.dat",(const UJ_UINT8**)&g_eu2j2_table, &g_eu2j2_size, },
      { "jcode/emoji2/ej2u2.dat",(const UJ_UINT8**)&g_ej2u2_table, &g_ej2u2_size, },
      /* dot-i */
      { "jcode/emoji2/eu2d.dat", (const UJ_UINT8**)&g_eu2d_table,  &g_eu2d_size, },
      { "jcode/emoji2/ed2u.dat", (const UJ_UINT8**)&g_ed2u_table,  &g_ed2u_size, },
      /* au */
      { "jcode/emoji2/eu2a.dat", (const UJ_UINT8**)&g_eu2a1_table, &g_eu2a1_size, },
      { "jcode/emoji2/ea2u.dat", (const UJ_UINT8**)&g_ea2u1_table, &g_ea2u1_size, },



( run in 0.841 second using v1.01-cache-2.11-cpan-71847e10f99 )