dmetaphone.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #include "platform.h"
  2. #include <time.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include "dmetaphone.hpp"
  6. #include "metaphone.h"
  7. #define DMETAPHONE_VERSION "DMETAPHONE 1.1.05"
  8. static const char * compatibleVersions[] = {
  9. "DMETAPHONE 1.1.05 [0e64c86ec1d5771d4ce0abe488a98a2a]",
  10. "DMETAPHONE 1.1.05",
  11. NULL };
  12. DMETAPHONE_API bool getECLPluginDefinition(ECLPluginDefinitionBlock *pb)
  13. {
  14. if (pb->size == sizeof(ECLPluginDefinitionBlockEx))
  15. {
  16. ECLPluginDefinitionBlockEx * pbx = (ECLPluginDefinitionBlockEx *) pb;
  17. pbx->compatibleVersions = compatibleVersions;
  18. }
  19. else if (pb->size != sizeof(ECLPluginDefinitionBlock))
  20. return false;
  21. pb->magicVersion = PLUGIN_VERSION;
  22. pb->version = DMETAPHONE_VERSION;
  23. pb->moduleName = "lib_metaphone";
  24. pb->ECL = NULL; // Definition is in lib_metaphone.ecllib
  25. pb->flags = PLUGIN_IMPLICIT_MODULE;
  26. pb->description = "Metaphone library";
  27. return true;
  28. }
  29. namespace nsDmetaphone {
  30. IPluginContext * parentCtx = NULL;
  31. }
  32. using namespace nsDmetaphone;
  33. DMETAPHONE_API void setPluginContext(IPluginContext * _ctx) { parentCtx = _ctx; }
  34. DMETAPHONE_API void DMETAPHONE_CALL mpDMetaphone1(size32_t & __ret_len,char * & __ret_str,unsigned _len_instr,const char * instr)
  35. {
  36. cString metaph;
  37. cString metaph2;
  38. MString ms;
  39. ms.Set(instr, _len_instr);
  40. ms.DoubleMetaphone(metaph, metaph2);
  41. __ret_len = strlen((char*) metaph);
  42. __ret_str = (char *) CTXMALLOC(parentCtx, __ret_len+1);
  43. strcpy(__ret_str, (char*) metaph);
  44. }
  45. DMETAPHONE_API void DMETAPHONE_CALL mpDMetaphone2(size32_t & __ret_len,char * & __ret_str,unsigned _len_instr,const char * instr)
  46. {
  47. cString metaph;
  48. cString metaph2;
  49. MString ms;
  50. ms.Set(instr, _len_instr);
  51. ms.DoubleMetaphone(metaph, metaph2);
  52. __ret_len = strlen((char*) metaph2);
  53. __ret_str = (char *) CTXMALLOC(parentCtx, __ret_len+1);
  54. strcpy(__ret_str, (char*) metaph2);
  55. }
  56. DMETAPHONE_API void DMETAPHONE_CALL mpDMetaphoneBoth(size32_t & __ret_len,char * & __ret_str,unsigned _len_instr,const char * instr)
  57. {
  58. cString metaph;
  59. cString metaph2;
  60. MString ms;
  61. ms.Set(instr, _len_instr);
  62. ms.DoubleMetaphone(metaph, metaph2);
  63. __ret_len = strlen((char*) metaph) + strlen((char*) metaph2);
  64. __ret_str = (char *) CTXMALLOC(parentCtx, __ret_len+1);
  65. strcpy(__ret_str, (char*) metaph);
  66. strcat(__ret_str, (char*) metaph2);
  67. }
  68. DMETAPHONE_API void DMETAPHONE_CALL mpDMetaphone1_20(char * __ret_str,unsigned _len_instr,const char * instr)
  69. {
  70. cString metaph;
  71. cString metaph2;
  72. MString ms;
  73. ms.Set(instr, _len_instr);
  74. ms.DoubleMetaphone(metaph, metaph2);
  75. memset(__ret_str, ' ', 20);
  76. size32_t metaph_len = strlen((char*) metaph);
  77. strncpy(__ret_str, (char*) metaph, (metaph_len > 20)?20:metaph_len);
  78. }
  79. DMETAPHONE_API void DMETAPHONE_CALL mpDMetaphone2_20(char * __ret_str,unsigned _len_instr,const char * instr)
  80. {
  81. cString metaph;
  82. cString metaph2;
  83. MString ms;
  84. ms.Set(instr, _len_instr);
  85. ms.DoubleMetaphone(metaph, metaph2);
  86. memset(__ret_str, ' ', 20);
  87. size32_t metaph2_len = strlen((char*) metaph2);
  88. strncpy(__ret_str, (char*) metaph2, (metaph2_len > 20)?20:metaph2_len);
  89. }
  90. DMETAPHONE_API void DMETAPHONE_CALL mpDMetaphoneBoth_40(char * __ret_str,unsigned _len_instr,const char * instr)
  91. {
  92. cString metaph;
  93. cString metaph2;
  94. MString ms;
  95. ms.Set(instr, _len_instr);
  96. ms.DoubleMetaphone(metaph, metaph2);
  97. memset(__ret_str, ' ', 40);
  98. size32_t metaph_len = strlen((char*) metaph);
  99. strncpy(__ret_str, (char*) metaph, (metaph_len > 20)?20:metaph_len);
  100. size32_t metaph2_len = strlen((char*) metaph2);
  101. strncpy(__ret_str+metaph_len, (char*) metaph2, (metaph2_len > 20)?20:metaph2_len);
  102. }