PinyinHelper.m 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. //
  2. //
  3. //
  4. // Created by kimziv on 13-9-14.
  5. //
  6. #include "ChineseToPinyinResource.h"
  7. #include "HanyuPinyinOutputFormat.h"
  8. #include "PinyinFormatter.h"
  9. #include "PinyinHelper.h"
  10. #define HANYU_PINYIN @"Hanyu"
  11. #define WADEGILES_PINYIN @"Wade"
  12. #define MPS2_PINYIN @"MPSII"
  13. #define YALE_PINYIN @"Yale"
  14. #define TONGYONG_PINYIN @"Tongyong"
  15. #define GWOYEU_ROMATZYH @"Gwoyeu"
  16. @implementation PinyinHelper
  17. + (NSArray *)toHanyuPinyinStringArrayWithChar:(unichar)ch {
  18. return [PinyinHelper getUnformattedHanyuPinyinStringArrayWithChar:ch];
  19. }
  20. + (NSArray *)toHanyuPinyinStringArrayWithChar:(unichar)ch
  21. withHanyuPinyinOutputFormat:(HanyuPinyinOutputFormat *)outputFormat {
  22. return [PinyinHelper getFormattedHanyuPinyinStringArrayWithChar:ch withHanyuPinyinOutputFormat:outputFormat];
  23. }
  24. + (NSArray *)getFormattedHanyuPinyinStringArrayWithChar:(unichar)ch
  25. withHanyuPinyinOutputFormat:(HanyuPinyinOutputFormat *)outputFormat {
  26. NSMutableArray *pinyinStrArray =[NSMutableArray arrayWithArray:[PinyinHelper getUnformattedHanyuPinyinStringArrayWithChar:ch]];
  27. if (nil != pinyinStrArray) {
  28. for (int i = 0; i < (int) [pinyinStrArray count]; i++) {
  29. [pinyinStrArray replaceObjectAtIndex:i withObject:[PinyinFormatter formatHanyuPinyinWithNSString:
  30. [pinyinStrArray objectAtIndex:i]withHanyuPinyinOutputFormat:outputFormat]];
  31. }
  32. return pinyinStrArray;
  33. }
  34. else return nil;
  35. }
  36. + (NSArray *)getUnformattedHanyuPinyinStringArrayWithChar:(unichar)ch {
  37. return [[ChineseToPinyinResource getInstance] getHanyuPinyinStringArrayWithChar:ch];
  38. }
  39. + (NSArray *)toTongyongPinyinStringArrayWithChar:(unichar)ch {
  40. return [PinyinHelper convertToTargetPinyinStringArrayWithChar:ch withPinyinRomanizationType: TONGYONG_PINYIN];
  41. }
  42. + (NSArray *)toWadeGilesPinyinStringArrayWithChar:(unichar)ch {
  43. return [PinyinHelper convertToTargetPinyinStringArrayWithChar:ch withPinyinRomanizationType: WADEGILES_PINYIN];
  44. }
  45. + (NSArray *)toMPS2PinyinStringArrayWithChar:(unichar)ch {
  46. return [PinyinHelper convertToTargetPinyinStringArrayWithChar:ch withPinyinRomanizationType: MPS2_PINYIN];
  47. }
  48. + (NSArray *)toYalePinyinStringArrayWithChar:(unichar)ch {
  49. return [PinyinHelper convertToTargetPinyinStringArrayWithChar:ch withPinyinRomanizationType: YALE_PINYIN];
  50. }
  51. + (NSArray *)convertToTargetPinyinStringArrayWithChar:(unichar)ch
  52. withPinyinRomanizationType:(NSString *)targetPinyinSystem {
  53. NSArray *hanyuPinyinStringArray = [PinyinHelper getUnformattedHanyuPinyinStringArrayWithChar:ch];
  54. if (nil != hanyuPinyinStringArray) {
  55. NSMutableArray *targetPinyinStringArray = [NSMutableArray arrayWithCapacity:hanyuPinyinStringArray.count];
  56. for (int i = 0; i < (int) [hanyuPinyinStringArray count]; i++) {
  57. }
  58. return targetPinyinStringArray;
  59. }
  60. else return nil;
  61. }
  62. + (NSArray *)toGwoyeuRomatzyhStringArrayWithChar:(unichar)ch {
  63. return [PinyinHelper convertToGwoyeuRomatzyhStringArrayWithChar:ch];
  64. }
  65. + (NSArray *)convertToGwoyeuRomatzyhStringArrayWithChar:(unichar)ch {
  66. NSArray *hanyuPinyinStringArray = [PinyinHelper getUnformattedHanyuPinyinStringArrayWithChar:ch];
  67. if (nil != hanyuPinyinStringArray) {
  68. NSMutableArray *targetPinyinStringArray =[NSMutableArray arrayWithCapacity:hanyuPinyinStringArray.count];
  69. for (int i = 0; i < (int) [hanyuPinyinStringArray count]; i++) {
  70. }
  71. return targetPinyinStringArray;
  72. }
  73. else return nil;
  74. }
  75. + (NSString *)toHanyuPinyinStringWithNSString:(NSString *)str
  76. withHanyuPinyinOutputFormat:(HanyuPinyinOutputFormat *)outputFormat
  77. withNSString:(NSString *)seperater {
  78. NSMutableString *resultPinyinStrBuf = [[NSMutableString alloc] init];
  79. for (int i = 0; i < str.length; i++) {
  80. NSString *mainPinyinStrOfChar = [PinyinHelper getFirstHanyuPinyinStringWithChar:[str characterAtIndex:i] withHanyuPinyinOutputFormat:outputFormat];
  81. if (nil != mainPinyinStrOfChar) {
  82. [resultPinyinStrBuf appendString:mainPinyinStrOfChar];
  83. if (i != [str length] - 1) {
  84. [resultPinyinStrBuf appendString:seperater];
  85. }
  86. }
  87. else {
  88. [resultPinyinStrBuf appendFormat:@"%C",[str characterAtIndex:i]];
  89. }
  90. }
  91. return resultPinyinStrBuf;
  92. }
  93. + (NSString *)getFirstHanyuPinyinStringWithChar:(unichar)ch
  94. withHanyuPinyinOutputFormat:(HanyuPinyinOutputFormat *)outputFormat {
  95. NSArray *pinyinStrArray = [PinyinHelper getFormattedHanyuPinyinStringArrayWithChar:ch withHanyuPinyinOutputFormat:outputFormat];
  96. if ((nil != pinyinStrArray) && ((int) [pinyinStrArray count] > 0)) {
  97. return [pinyinStrArray objectAtIndex:0];
  98. }
  99. else {
  100. return nil;
  101. }
  102. }
  103. - (id)init {
  104. return [super init];
  105. }
  106. @end