Translation.xs.svn-base
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:1k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "EXTERN.h"
  4. #include "perl.h"
  5. #include "XSUB.h"
  6. #include "translator.h"
  7. #include "utils.h"
  8. MODULE = Translation     PACKAGE = Translation
  9. PROTOTYPES: ENABLE
  10. void
  11. _load(file)
  12. char *file
  13. INIT:
  14. Translator *translator;
  15. CODE:
  16. try {
  17. translator = new Translator (file);
  18. XSRETURN_IV ((IV) translator);
  19. } catch (...) {
  20. XSRETURN_UNDEF;
  21. }
  22. void
  23. _unload(translator)
  24. IV translator
  25. CODE:
  26. delete (Translator *) translator;
  27. void
  28. _translate(translator, message)
  29. IV translator
  30. SV *message
  31. INIT:
  32. SV *msg;
  33. const char *translation;
  34. unsigned int len;
  35. CODE:
  36. if (!message || !SvOK (message) || SvTYPE (message) != SVt_RV || translator == 0)
  37. XSRETURN_EMPTY;
  38. msg = SvRV (message);
  39. if (!msg || !SvOK (msg))
  40. XSRETURN_EMPTY;
  41. translation = ((Translator *) translator)->translate (SvPV_nolen (msg), len);
  42. if (translation != NULL) {
  43. sv_setpvn (msg, translation, len);
  44. SvUTF8_on (msg);
  45. }
  46. char *
  47. getLocaleCharset()
  48. CODE:
  49. // Casting const char to char will work because the value will
  50. // internally be copied by Perl anyway. Perl will not touch the
  51. // original string.
  52. RETVAL = (char *) get_locale_charset();
  53. OUTPUT:
  54. RETVAL