1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966

/// An enum to represent all characters in the HalfwidthandFullwidthForms block.
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum HalfwidthandFullwidthForms {
    /// \u{ff01}: '!'
    FullwidthExclamationMark,
    /// \u{ff02}: '"'
    FullwidthQuotationMark,
    /// \u{ff03}: '#'
    FullwidthNumberSign,
    /// \u{ff04}: '$'
    FullwidthDollarSign,
    /// \u{ff05}: '%'
    FullwidthPercentSign,
    /// \u{ff06}: '&'
    FullwidthAmpersand,
    /// \u{ff07}: '''
    FullwidthApostrophe,
    /// \u{ff08}: '('
    FullwidthLeftParenthesis,
    /// \u{ff09}: ')'
    FullwidthRightParenthesis,
    /// \u{ff0a}: '*'
    FullwidthAsterisk,
    /// \u{ff0b}: '+'
    FullwidthPlusSign,
    /// \u{ff0c}: ','
    FullwidthComma,
    /// \u{ff0d}: '-'
    FullwidthHyphenDashMinus,
    /// \u{ff0e}: '.'
    FullwidthFullStop,
    /// \u{ff0f}: '/'
    FullwidthSolidus,
    /// \u{ff10}: '0'
    FullwidthDigitZero,
    /// \u{ff11}: '1'
    FullwidthDigitOne,
    /// \u{ff12}: '2'
    FullwidthDigitTwo,
    /// \u{ff13}: '3'
    FullwidthDigitThree,
    /// \u{ff14}: '4'
    FullwidthDigitFour,
    /// \u{ff15}: '5'
    FullwidthDigitFive,
    /// \u{ff16}: '6'
    FullwidthDigitSix,
    /// \u{ff17}: '7'
    FullwidthDigitSeven,
    /// \u{ff18}: '8'
    FullwidthDigitEight,
    /// \u{ff19}: '9'
    FullwidthDigitNine,
    /// \u{ff1a}: ':'
    FullwidthColon,
    /// \u{ff1b}: ';'
    FullwidthSemicolon,
    /// \u{ff1c}: '<'
    FullwidthLessDashThanSign,
    /// \u{ff1d}: '='
    FullwidthEqualsSign,
    /// \u{ff1e}: '>'
    FullwidthGreaterDashThanSign,
    /// \u{ff1f}: '?'
    FullwidthQuestionMark,
    /// \u{ff20}: '@'
    FullwidthCommercialAt,
    /// \u{ff21}: 'A'
    FullwidthLatinCapitalLetterA,
    /// \u{ff22}: 'B'
    FullwidthLatinCapitalLetterB,
    /// \u{ff23}: 'C'
    FullwidthLatinCapitalLetterC,
    /// \u{ff24}: 'D'
    FullwidthLatinCapitalLetterD,
    /// \u{ff25}: 'E'
    FullwidthLatinCapitalLetterE,
    /// \u{ff26}: 'F'
    FullwidthLatinCapitalLetterF,
    /// \u{ff27}: 'G'
    FullwidthLatinCapitalLetterG,
    /// \u{ff28}: 'H'
    FullwidthLatinCapitalLetterH,
    /// \u{ff29}: 'I'
    FullwidthLatinCapitalLetterI,
    /// \u{ff2a}: 'J'
    FullwidthLatinCapitalLetterJ,
    /// \u{ff2b}: 'K'
    FullwidthLatinCapitalLetterK,
    /// \u{ff2c}: 'L'
    FullwidthLatinCapitalLetterL,
    /// \u{ff2d}: 'M'
    FullwidthLatinCapitalLetterM,
    /// \u{ff2e}: 'N'
    FullwidthLatinCapitalLetterN,
    /// \u{ff2f}: 'O'
    FullwidthLatinCapitalLetterO,
    /// \u{ff30}: 'P'
    FullwidthLatinCapitalLetterP,
    /// \u{ff31}: 'Q'
    FullwidthLatinCapitalLetterQ,
    /// \u{ff32}: 'R'
    FullwidthLatinCapitalLetterR,
    /// \u{ff33}: 'S'
    FullwidthLatinCapitalLetterS,
    /// \u{ff34}: 'T'
    FullwidthLatinCapitalLetterT,
    /// \u{ff35}: 'U'
    FullwidthLatinCapitalLetterU,
    /// \u{ff36}: 'V'
    FullwidthLatinCapitalLetterV,
    /// \u{ff37}: 'W'
    FullwidthLatinCapitalLetterW,
    /// \u{ff38}: 'X'
    FullwidthLatinCapitalLetterX,
    /// \u{ff39}: 'Y'
    FullwidthLatinCapitalLetterY,
    /// \u{ff3a}: 'Z'
    FullwidthLatinCapitalLetterZ,
    /// \u{ff3b}: '['
    FullwidthLeftSquareBracket,
    /// \u{ff3c}: '\'
    FullwidthReverseSolidus,
    /// \u{ff3d}: ']'
    FullwidthRightSquareBracket,
    /// \u{ff3e}: '^'
    FullwidthCircumflexAccent,
    /// \u{ff3f}: '_'
    FullwidthLowLine,
    /// \u{ff40}: '`'
    FullwidthGraveAccent,
    /// \u{ff41}: 'a'
    FullwidthLatinSmallLetterA,
    /// \u{ff42}: 'b'
    FullwidthLatinSmallLetterB,
    /// \u{ff43}: 'c'
    FullwidthLatinSmallLetterC,
    /// \u{ff44}: 'd'
    FullwidthLatinSmallLetterD,
    /// \u{ff45}: 'e'
    FullwidthLatinSmallLetterE,
    /// \u{ff46}: 'f'
    FullwidthLatinSmallLetterF,
    /// \u{ff47}: 'g'
    FullwidthLatinSmallLetterG,
    /// \u{ff48}: 'h'
    FullwidthLatinSmallLetterH,
    /// \u{ff49}: 'i'
    FullwidthLatinSmallLetterI,
    /// \u{ff4a}: 'j'
    FullwidthLatinSmallLetterJ,
    /// \u{ff4b}: 'k'
    FullwidthLatinSmallLetterK,
    /// \u{ff4c}: 'l'
    FullwidthLatinSmallLetterL,
    /// \u{ff4d}: 'm'
    FullwidthLatinSmallLetterM,
    /// \u{ff4e}: 'n'
    FullwidthLatinSmallLetterN,
    /// \u{ff4f}: 'o'
    FullwidthLatinSmallLetterO,
    /// \u{ff50}: 'p'
    FullwidthLatinSmallLetterP,
    /// \u{ff51}: 'q'
    FullwidthLatinSmallLetterQ,
    /// \u{ff52}: 'r'
    FullwidthLatinSmallLetterR,
    /// \u{ff53}: 's'
    FullwidthLatinSmallLetterS,
    /// \u{ff54}: 't'
    FullwidthLatinSmallLetterT,
    /// \u{ff55}: 'u'
    FullwidthLatinSmallLetterU,
    /// \u{ff56}: 'v'
    FullwidthLatinSmallLetterV,
    /// \u{ff57}: 'w'
    FullwidthLatinSmallLetterW,
    /// \u{ff58}: 'x'
    FullwidthLatinSmallLetterX,
    /// \u{ff59}: 'y'
    FullwidthLatinSmallLetterY,
    /// \u{ff5a}: 'z'
    FullwidthLatinSmallLetterZ,
    /// \u{ff5b}: '{'
    FullwidthLeftCurlyBracket,
    /// \u{ff5c}: '|'
    FullwidthVerticalLine,
    /// \u{ff5d}: '}'
    FullwidthRightCurlyBracket,
    /// \u{ff5e}: '~'
    FullwidthTilde,
    /// \u{ff5f}: '⦅'
    FullwidthLeftWhiteParenthesis,
    /// \u{ff60}: '⦆'
    FullwidthRightWhiteParenthesis,
    /// \u{ff61}: '。'
    HalfwidthIdeographicFullStop,
    /// \u{ff62}: '「'
    HalfwidthLeftCornerBracket,
    /// \u{ff63}: '」'
    HalfwidthRightCornerBracket,
    /// \u{ff64}: '、'
    HalfwidthIdeographicComma,
    /// \u{ff65}: '・'
    HalfwidthKatakanaMiddleDot,
    /// \u{ff66}: 'ヲ'
    HalfwidthKatakanaLetterWo,
    /// \u{ff67}: 'ァ'
    HalfwidthKatakanaLetterSmallA,
    /// \u{ff68}: 'ィ'
    HalfwidthKatakanaLetterSmallI,
    /// \u{ff69}: 'ゥ'
    HalfwidthKatakanaLetterSmallU,
    /// \u{ff6a}: 'ェ'
    HalfwidthKatakanaLetterSmallE,
    /// \u{ff6b}: 'ォ'
    HalfwidthKatakanaLetterSmallO,
    /// \u{ff6c}: 'ャ'
    HalfwidthKatakanaLetterSmallYa,
    /// \u{ff6d}: 'ュ'
    HalfwidthKatakanaLetterSmallYu,
    /// \u{ff6e}: 'ョ'
    HalfwidthKatakanaLetterSmallYo,
    /// \u{ff6f}: 'ッ'
    HalfwidthKatakanaLetterSmallTu,
    /// \u{ff70}: 'ー'
    HalfwidthKatakanaDashHiraganaProlongedSoundMark,
    /// \u{ff71}: 'ア'
    HalfwidthKatakanaLetterA,
    /// \u{ff72}: 'イ'
    HalfwidthKatakanaLetterI,
    /// \u{ff73}: 'ウ'
    HalfwidthKatakanaLetterU,
    /// \u{ff74}: 'エ'
    HalfwidthKatakanaLetterE,
    /// \u{ff75}: 'オ'
    HalfwidthKatakanaLetterO,
    /// \u{ff76}: 'カ'
    HalfwidthKatakanaLetterKa,
    /// \u{ff77}: 'キ'
    HalfwidthKatakanaLetterKi,
    /// \u{ff78}: 'ク'
    HalfwidthKatakanaLetterKu,
    /// \u{ff79}: 'ケ'
    HalfwidthKatakanaLetterKe,
    /// \u{ff7a}: 'コ'
    HalfwidthKatakanaLetterKo,
    /// \u{ff7b}: 'サ'
    HalfwidthKatakanaLetterSa,
    /// \u{ff7c}: 'シ'
    HalfwidthKatakanaLetterSi,
    /// \u{ff7d}: 'ス'
    HalfwidthKatakanaLetterSu,
    /// \u{ff7e}: 'セ'
    HalfwidthKatakanaLetterSe,
    /// \u{ff7f}: 'ソ'
    HalfwidthKatakanaLetterSo,
    /// \u{ff80}: 'タ'
    HalfwidthKatakanaLetterTa,
    /// \u{ff81}: 'チ'
    HalfwidthKatakanaLetterTi,
    /// \u{ff82}: 'ツ'
    HalfwidthKatakanaLetterTu,
    /// \u{ff83}: 'テ'
    HalfwidthKatakanaLetterTe,
    /// \u{ff84}: 'ト'
    HalfwidthKatakanaLetterTo,
    /// \u{ff85}: 'ナ'
    HalfwidthKatakanaLetterNa,
    /// \u{ff86}: 'ニ'
    HalfwidthKatakanaLetterNi,
    /// \u{ff87}: 'ヌ'
    HalfwidthKatakanaLetterNu,
    /// \u{ff88}: 'ネ'
    HalfwidthKatakanaLetterNe,
    /// \u{ff89}: 'ノ'
    HalfwidthKatakanaLetterNo,
    /// \u{ff8a}: 'ハ'
    HalfwidthKatakanaLetterHa,
    /// \u{ff8b}: 'ヒ'
    HalfwidthKatakanaLetterHi,
    /// \u{ff8c}: 'フ'
    HalfwidthKatakanaLetterHu,
    /// \u{ff8d}: 'ヘ'
    HalfwidthKatakanaLetterHe,
    /// \u{ff8e}: 'ホ'
    HalfwidthKatakanaLetterHo,
    /// \u{ff8f}: 'マ'
    HalfwidthKatakanaLetterMa,
    /// \u{ff90}: 'ミ'
    HalfwidthKatakanaLetterMi,
    /// \u{ff91}: 'ム'
    HalfwidthKatakanaLetterMu,
    /// \u{ff92}: 'メ'
    HalfwidthKatakanaLetterMe,
    /// \u{ff93}: 'モ'
    HalfwidthKatakanaLetterMo,
    /// \u{ff94}: 'ヤ'
    HalfwidthKatakanaLetterYa,
    /// \u{ff95}: 'ユ'
    HalfwidthKatakanaLetterYu,
    /// \u{ff96}: 'ヨ'
    HalfwidthKatakanaLetterYo,
    /// \u{ff97}: 'ラ'
    HalfwidthKatakanaLetterRa,
    /// \u{ff98}: 'リ'
    HalfwidthKatakanaLetterRi,
    /// \u{ff99}: 'ル'
    HalfwidthKatakanaLetterRu,
    /// \u{ff9a}: 'レ'
    HalfwidthKatakanaLetterRe,
    /// \u{ff9b}: 'ロ'
    HalfwidthKatakanaLetterRo,
    /// \u{ff9c}: 'ワ'
    HalfwidthKatakanaLetterWa,
    /// \u{ff9d}: 'ン'
    HalfwidthKatakanaLetterN,
    /// \u{ff9e}: '゙'
    HalfwidthKatakanaVoicedSoundMark,
    /// \u{ff9f}: '゚'
    HalfwidthKatakanaSemiDashVoicedSoundMark,
    /// \u{ffa0}: 'ᅠ'
    HalfwidthHangulFiller,
    /// \u{ffa1}: 'ᄀ'
    HalfwidthHangulLetterKiyeok,
    /// \u{ffa2}: 'ᄁ'
    HalfwidthHangulLetterSsangkiyeok,
    /// \u{ffa3}: 'ᆪ'
    HalfwidthHangulLetterKiyeokDashSios,
    /// \u{ffa4}: 'ᄂ'
    HalfwidthHangulLetterNieun,
    /// \u{ffa5}: 'ᆬ'
    HalfwidthHangulLetterNieunDashCieuc,
    /// \u{ffa6}: 'ᆭ'
    HalfwidthHangulLetterNieunDashHieuh,
    /// \u{ffa7}: 'ᄃ'
    HalfwidthHangulLetterTikeut,
    /// \u{ffa8}: 'ᄄ'
    HalfwidthHangulLetterSsangtikeut,
    /// \u{ffa9}: 'ᄅ'
    HalfwidthHangulLetterRieul,
    /// \u{ffaa}: 'ᆰ'
    HalfwidthHangulLetterRieulDashKiyeok,
    /// \u{ffab}: 'ᆱ'
    HalfwidthHangulLetterRieulDashMieum,
    /// \u{ffac}: 'ᆲ'
    HalfwidthHangulLetterRieulDashPieup,
    /// \u{ffad}: 'ᆳ'
    HalfwidthHangulLetterRieulDashSios,
    /// \u{ffae}: 'ᆴ'
    HalfwidthHangulLetterRieulDashThieuth,
    /// \u{ffaf}: 'ᆵ'
    HalfwidthHangulLetterRieulDashPhieuph,
    /// \u{ffb0}: 'ᄚ'
    HalfwidthHangulLetterRieulDashHieuh,
    /// \u{ffb1}: 'ᄆ'
    HalfwidthHangulLetterMieum,
    /// \u{ffb2}: 'ᄇ'
    HalfwidthHangulLetterPieup,
    /// \u{ffb3}: 'ᄈ'
    HalfwidthHangulLetterSsangpieup,
    /// \u{ffb4}: 'ᄡ'
    HalfwidthHangulLetterPieupDashSios,
    /// \u{ffb5}: 'ᄉ'
    HalfwidthHangulLetterSios,
    /// \u{ffb6}: 'ᄊ'
    HalfwidthHangulLetterSsangsios,
    /// \u{ffb7}: 'ᄋ'
    HalfwidthHangulLetterIeung,
    /// \u{ffb8}: 'ᄌ'
    HalfwidthHangulLetterCieuc,
    /// \u{ffb9}: 'ᄍ'
    HalfwidthHangulLetterSsangcieuc,
    /// \u{ffba}: 'ᄎ'
    HalfwidthHangulLetterChieuch,
    /// \u{ffbb}: 'ᄏ'
    HalfwidthHangulLetterKhieukh,
    /// \u{ffbc}: 'ᄐ'
    HalfwidthHangulLetterThieuth,
    /// \u{ffbd}: 'ᄑ'
    HalfwidthHangulLetterPhieuph,
    /// \u{ffbe}: 'ᄒ'
    HalfwidthHangulLetterHieuh,
    /// \u{ffc2}: 'ᅡ'
    HalfwidthHangulLetterA,
    /// \u{ffc3}: 'ᅢ'
    HalfwidthHangulLetterAe,
    /// \u{ffc4}: 'ᅣ'
    HalfwidthHangulLetterYa,
    /// \u{ffc5}: 'ᅤ'
    HalfwidthHangulLetterYae,
    /// \u{ffc6}: 'ᅥ'
    HalfwidthHangulLetterEo,
    /// \u{ffc7}: 'ᅦ'
    HalfwidthHangulLetterE,
    /// \u{ffca}: 'ᅧ'
    HalfwidthHangulLetterYeo,
    /// \u{ffcb}: 'ᅨ'
    HalfwidthHangulLetterYe,
    /// \u{ffcc}: 'ᅩ'
    HalfwidthHangulLetterO,
    /// \u{ffcd}: 'ᅪ'
    HalfwidthHangulLetterWa,
    /// \u{ffce}: 'ᅫ'
    HalfwidthHangulLetterWae,
    /// \u{ffcf}: 'ᅬ'
    HalfwidthHangulLetterOe,
    /// \u{ffd2}: 'ᅭ'
    HalfwidthHangulLetterYo,
    /// \u{ffd3}: 'ᅮ'
    HalfwidthHangulLetterU,
    /// \u{ffd4}: 'ᅯ'
    HalfwidthHangulLetterWeo,
    /// \u{ffd5}: 'ᅰ'
    HalfwidthHangulLetterWe,
    /// \u{ffd6}: 'ᅱ'
    HalfwidthHangulLetterWi,
    /// \u{ffd7}: 'ᅲ'
    HalfwidthHangulLetterYu,
    /// \u{ffda}: 'ᅳ'
    HalfwidthHangulLetterEu,
    /// \u{ffdb}: 'ᅴ'
    HalfwidthHangulLetterYi,
    /// \u{ffdc}: 'ᅵ'
    HalfwidthHangulLetterI,
    /// \u{ffe0}: '¢'
    FullwidthCentSign,
    /// \u{ffe1}: '£'
    FullwidthPoundSign,
    /// \u{ffe2}: '¬'
    FullwidthNotSign,
    /// \u{ffe3}: ' ̄'
    FullwidthMacron,
    /// \u{ffe4}: '¦'
    FullwidthBrokenBar,
    /// \u{ffe5}: '¥'
    FullwidthYenSign,
    /// \u{ffe6}: '₩'
    FullwidthWonSign,
    /// \u{ffe8}: '│'
    HalfwidthFormsLightVertical,
    /// \u{ffe9}: '←'
    HalfwidthLeftwardsArrow,
    /// \u{ffea}: '↑'
    HalfwidthUpwardsArrow,
    /// \u{ffeb}: '→'
    HalfwidthRightwardsArrow,
    /// \u{ffec}: '↓'
    HalfwidthDownwardsArrow,
    /// \u{ffed}: '■'
    HalfwidthBlackSquare,
    /// \u{ffee}: '○'
    HalfwidthWhiteCircle,
}

impl Into<char> for HalfwidthandFullwidthForms {
    fn into(self) -> char {
        match self {
            HalfwidthandFullwidthForms::FullwidthExclamationMark => '!',
            HalfwidthandFullwidthForms::FullwidthQuotationMark => '"',
            HalfwidthandFullwidthForms::FullwidthNumberSign => '#',
            HalfwidthandFullwidthForms::FullwidthDollarSign => '$',
            HalfwidthandFullwidthForms::FullwidthPercentSign => '%',
            HalfwidthandFullwidthForms::FullwidthAmpersand => '&',
            HalfwidthandFullwidthForms::FullwidthApostrophe => ''',
            HalfwidthandFullwidthForms::FullwidthLeftParenthesis => '(',
            HalfwidthandFullwidthForms::FullwidthRightParenthesis => ')',
            HalfwidthandFullwidthForms::FullwidthAsterisk => '*',
            HalfwidthandFullwidthForms::FullwidthPlusSign => '+',
            HalfwidthandFullwidthForms::FullwidthComma => ',',
            HalfwidthandFullwidthForms::FullwidthHyphenDashMinus => '-',
            HalfwidthandFullwidthForms::FullwidthFullStop => '.',
            HalfwidthandFullwidthForms::FullwidthSolidus => '/',
            HalfwidthandFullwidthForms::FullwidthDigitZero => '0',
            HalfwidthandFullwidthForms::FullwidthDigitOne => '1',
            HalfwidthandFullwidthForms::FullwidthDigitTwo => '2',
            HalfwidthandFullwidthForms::FullwidthDigitThree => '3',
            HalfwidthandFullwidthForms::FullwidthDigitFour => '4',
            HalfwidthandFullwidthForms::FullwidthDigitFive => '5',
            HalfwidthandFullwidthForms::FullwidthDigitSix => '6',
            HalfwidthandFullwidthForms::FullwidthDigitSeven => '7',
            HalfwidthandFullwidthForms::FullwidthDigitEight => '8',
            HalfwidthandFullwidthForms::FullwidthDigitNine => '9',
            HalfwidthandFullwidthForms::FullwidthColon => ':',
            HalfwidthandFullwidthForms::FullwidthSemicolon => ';',
            HalfwidthandFullwidthForms::FullwidthLessDashThanSign => '<',
            HalfwidthandFullwidthForms::FullwidthEqualsSign => '=',
            HalfwidthandFullwidthForms::FullwidthGreaterDashThanSign => '>',
            HalfwidthandFullwidthForms::FullwidthQuestionMark => '?',
            HalfwidthandFullwidthForms::FullwidthCommercialAt => '@',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterA => 'A',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterB => 'B',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterC => 'C',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterD => 'D',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterE => 'E',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterF => 'F',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterG => 'G',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterH => 'H',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterI => 'I',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterJ => 'J',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterK => 'K',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterL => 'L',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterM => 'M',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterN => 'N',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterO => 'O',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterP => 'P',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterQ => 'Q',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterR => 'R',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterS => 'S',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterT => 'T',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterU => 'U',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterV => 'V',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterW => 'W',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterX => 'X',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterY => 'Y',
            HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterZ => 'Z',
            HalfwidthandFullwidthForms::FullwidthLeftSquareBracket => '[',
            HalfwidthandFullwidthForms::FullwidthReverseSolidus => '\',
            HalfwidthandFullwidthForms::FullwidthRightSquareBracket => ']',
            HalfwidthandFullwidthForms::FullwidthCircumflexAccent => '^',
            HalfwidthandFullwidthForms::FullwidthLowLine => '_',
            HalfwidthandFullwidthForms::FullwidthGraveAccent => '`',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterA => 'a',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterB => 'b',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterC => 'c',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterD => 'd',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterE => 'e',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterF => 'f',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterG => 'g',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterH => 'h',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterI => 'i',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterJ => 'j',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterK => 'k',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterL => 'l',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterM => 'm',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterN => 'n',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterO => 'o',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterP => 'p',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterQ => 'q',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterR => 'r',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterS => 's',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterT => 't',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterU => 'u',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterV => 'v',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterW => 'w',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterX => 'x',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterY => 'y',
            HalfwidthandFullwidthForms::FullwidthLatinSmallLetterZ => 'z',
            HalfwidthandFullwidthForms::FullwidthLeftCurlyBracket => '{',
            HalfwidthandFullwidthForms::FullwidthVerticalLine => '|',
            HalfwidthandFullwidthForms::FullwidthRightCurlyBracket => '}',
            HalfwidthandFullwidthForms::FullwidthTilde => '~',
            HalfwidthandFullwidthForms::FullwidthLeftWhiteParenthesis => '⦅',
            HalfwidthandFullwidthForms::FullwidthRightWhiteParenthesis => '⦆',
            HalfwidthandFullwidthForms::HalfwidthIdeographicFullStop => '。',
            HalfwidthandFullwidthForms::HalfwidthLeftCornerBracket => '「',
            HalfwidthandFullwidthForms::HalfwidthRightCornerBracket => '」',
            HalfwidthandFullwidthForms::HalfwidthIdeographicComma => '、',
            HalfwidthandFullwidthForms::HalfwidthKatakanaMiddleDot => '・',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterWo => 'ヲ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallA => 'ァ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallI => 'ィ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallU => 'ゥ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallE => 'ェ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallO => 'ォ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallYa => 'ャ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallYu => 'ュ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallYo => 'ョ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallTu => 'ッ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaDashHiraganaProlongedSoundMark => 'ー',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterA => 'ア',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterI => 'イ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterU => 'ウ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterE => 'エ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterO => 'オ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterKa => 'カ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterKi => 'キ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterKu => 'ク',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterKe => 'ケ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterKo => 'コ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSa => 'サ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSi => 'シ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSu => 'ス',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSe => 'セ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSo => 'ソ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterTa => 'タ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterTi => 'チ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterTu => 'ツ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterTe => 'テ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterTo => 'ト',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterNa => 'ナ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterNi => 'ニ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterNu => 'ヌ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterNe => 'ネ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterNo => 'ノ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterHa => 'ハ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterHi => 'ヒ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterHu => 'フ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterHe => 'ヘ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterHo => 'ホ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterMa => 'マ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterMi => 'ミ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterMu => 'ム',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterMe => 'メ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterMo => 'モ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterYa => 'ヤ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterYu => 'ユ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterYo => 'ヨ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterRa => 'ラ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterRi => 'リ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterRu => 'ル',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterRe => 'レ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterRo => 'ロ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterWa => 'ワ',
            HalfwidthandFullwidthForms::HalfwidthKatakanaLetterN => 'ン',
            HalfwidthandFullwidthForms::HalfwidthKatakanaVoicedSoundMark => '゙',
            HalfwidthandFullwidthForms::HalfwidthKatakanaSemiDashVoicedSoundMark => '゚',
            HalfwidthandFullwidthForms::HalfwidthHangulFiller => 'ᅠ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterKiyeok => 'ᄀ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterSsangkiyeok => 'ᄁ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterKiyeokDashSios => 'ᆪ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterNieun => 'ᄂ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterNieunDashCieuc => 'ᆬ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterNieunDashHieuh => 'ᆭ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterTikeut => 'ᄃ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterSsangtikeut => 'ᄄ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterRieul => 'ᄅ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterRieulDashKiyeok => 'ᆰ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterRieulDashMieum => 'ᆱ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterRieulDashPieup => 'ᆲ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterRieulDashSios => 'ᆳ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterRieulDashThieuth => 'ᆴ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterRieulDashPhieuph => 'ᆵ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterRieulDashHieuh => 'ᄚ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterMieum => 'ᄆ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterPieup => 'ᄇ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterSsangpieup => 'ᄈ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterPieupDashSios => 'ᄡ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterSios => 'ᄉ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterSsangsios => 'ᄊ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterIeung => 'ᄋ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterCieuc => 'ᄌ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterSsangcieuc => 'ᄍ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterChieuch => 'ᄎ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterKhieukh => 'ᄏ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterThieuth => 'ᄐ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterPhieuph => 'ᄑ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterHieuh => 'ᄒ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterA => 'ᅡ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterAe => 'ᅢ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterYa => 'ᅣ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterYae => 'ᅤ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterEo => 'ᅥ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterE => 'ᅦ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterYeo => 'ᅧ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterYe => 'ᅨ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterO => 'ᅩ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterWa => 'ᅪ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterWae => 'ᅫ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterOe => 'ᅬ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterYo => 'ᅭ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterU => 'ᅮ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterWeo => 'ᅯ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterWe => 'ᅰ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterWi => 'ᅱ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterYu => 'ᅲ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterEu => 'ᅳ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterYi => 'ᅴ',
            HalfwidthandFullwidthForms::HalfwidthHangulLetterI => 'ᅵ',
            HalfwidthandFullwidthForms::FullwidthCentSign => '¢',
            HalfwidthandFullwidthForms::FullwidthPoundSign => '£',
            HalfwidthandFullwidthForms::FullwidthNotSign => '¬',
            HalfwidthandFullwidthForms::FullwidthMacron => ' ̄',
            HalfwidthandFullwidthForms::FullwidthBrokenBar => '¦',
            HalfwidthandFullwidthForms::FullwidthYenSign => '¥',
            HalfwidthandFullwidthForms::FullwidthWonSign => '₩',
            HalfwidthandFullwidthForms::HalfwidthFormsLightVertical => '│',
            HalfwidthandFullwidthForms::HalfwidthLeftwardsArrow => '←',
            HalfwidthandFullwidthForms::HalfwidthUpwardsArrow => '↑',
            HalfwidthandFullwidthForms::HalfwidthRightwardsArrow => '→',
            HalfwidthandFullwidthForms::HalfwidthDownwardsArrow => '↓',
            HalfwidthandFullwidthForms::HalfwidthBlackSquare => '■',
            HalfwidthandFullwidthForms::HalfwidthWhiteCircle => '○',
        }
    }
}

impl std::convert::TryFrom<char> for HalfwidthandFullwidthForms {
    type Error = ();
    fn try_from(c: char) -> Result<Self, Self::Error> {
        match c {
            '!' => Ok(HalfwidthandFullwidthForms::FullwidthExclamationMark),
            '"' => Ok(HalfwidthandFullwidthForms::FullwidthQuotationMark),
            '#' => Ok(HalfwidthandFullwidthForms::FullwidthNumberSign),
            '$' => Ok(HalfwidthandFullwidthForms::FullwidthDollarSign),
            '%' => Ok(HalfwidthandFullwidthForms::FullwidthPercentSign),
            '&' => Ok(HalfwidthandFullwidthForms::FullwidthAmpersand),
            ''' => Ok(HalfwidthandFullwidthForms::FullwidthApostrophe),
            '(' => Ok(HalfwidthandFullwidthForms::FullwidthLeftParenthesis),
            ')' => Ok(HalfwidthandFullwidthForms::FullwidthRightParenthesis),
            '*' => Ok(HalfwidthandFullwidthForms::FullwidthAsterisk),
            '+' => Ok(HalfwidthandFullwidthForms::FullwidthPlusSign),
            ',' => Ok(HalfwidthandFullwidthForms::FullwidthComma),
            '-' => Ok(HalfwidthandFullwidthForms::FullwidthHyphenDashMinus),
            '.' => Ok(HalfwidthandFullwidthForms::FullwidthFullStop),
            '/' => Ok(HalfwidthandFullwidthForms::FullwidthSolidus),
            '0' => Ok(HalfwidthandFullwidthForms::FullwidthDigitZero),
            '1' => Ok(HalfwidthandFullwidthForms::FullwidthDigitOne),
            '2' => Ok(HalfwidthandFullwidthForms::FullwidthDigitTwo),
            '3' => Ok(HalfwidthandFullwidthForms::FullwidthDigitThree),
            '4' => Ok(HalfwidthandFullwidthForms::FullwidthDigitFour),
            '5' => Ok(HalfwidthandFullwidthForms::FullwidthDigitFive),
            '6' => Ok(HalfwidthandFullwidthForms::FullwidthDigitSix),
            '7' => Ok(HalfwidthandFullwidthForms::FullwidthDigitSeven),
            '8' => Ok(HalfwidthandFullwidthForms::FullwidthDigitEight),
            '9' => Ok(HalfwidthandFullwidthForms::FullwidthDigitNine),
            ':' => Ok(HalfwidthandFullwidthForms::FullwidthColon),
            ';' => Ok(HalfwidthandFullwidthForms::FullwidthSemicolon),
            '<' => Ok(HalfwidthandFullwidthForms::FullwidthLessDashThanSign),
            '=' => Ok(HalfwidthandFullwidthForms::FullwidthEqualsSign),
            '>' => Ok(HalfwidthandFullwidthForms::FullwidthGreaterDashThanSign),
            '?' => Ok(HalfwidthandFullwidthForms::FullwidthQuestionMark),
            '@' => Ok(HalfwidthandFullwidthForms::FullwidthCommercialAt),
            'A' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterA),
            'B' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterB),
            'C' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterC),
            'D' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterD),
            'E' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterE),
            'F' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterF),
            'G' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterG),
            'H' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterH),
            'I' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterI),
            'J' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterJ),
            'K' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterK),
            'L' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterL),
            'M' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterM),
            'N' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterN),
            'O' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterO),
            'P' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterP),
            'Q' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterQ),
            'R' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterR),
            'S' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterS),
            'T' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterT),
            'U' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterU),
            'V' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterV),
            'W' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterW),
            'X' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterX),
            'Y' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterY),
            'Z' => Ok(HalfwidthandFullwidthForms::FullwidthLatinCapitalLetterZ),
            '[' => Ok(HalfwidthandFullwidthForms::FullwidthLeftSquareBracket),
            '\' => Ok(HalfwidthandFullwidthForms::FullwidthReverseSolidus),
            ']' => Ok(HalfwidthandFullwidthForms::FullwidthRightSquareBracket),
            '^' => Ok(HalfwidthandFullwidthForms::FullwidthCircumflexAccent),
            '_' => Ok(HalfwidthandFullwidthForms::FullwidthLowLine),
            '`' => Ok(HalfwidthandFullwidthForms::FullwidthGraveAccent),
            'a' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterA),
            'b' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterB),
            'c' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterC),
            'd' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterD),
            'e' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterE),
            'f' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterF),
            'g' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterG),
            'h' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterH),
            'i' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterI),
            'j' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterJ),
            'k' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterK),
            'l' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterL),
            'm' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterM),
            'n' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterN),
            'o' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterO),
            'p' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterP),
            'q' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterQ),
            'r' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterR),
            's' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterS),
            't' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterT),
            'u' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterU),
            'v' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterV),
            'w' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterW),
            'x' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterX),
            'y' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterY),
            'z' => Ok(HalfwidthandFullwidthForms::FullwidthLatinSmallLetterZ),
            '{' => Ok(HalfwidthandFullwidthForms::FullwidthLeftCurlyBracket),
            '|' => Ok(HalfwidthandFullwidthForms::FullwidthVerticalLine),
            '}' => Ok(HalfwidthandFullwidthForms::FullwidthRightCurlyBracket),
            '~' => Ok(HalfwidthandFullwidthForms::FullwidthTilde),
            '⦅' => Ok(HalfwidthandFullwidthForms::FullwidthLeftWhiteParenthesis),
            '⦆' => Ok(HalfwidthandFullwidthForms::FullwidthRightWhiteParenthesis),
            '。' => Ok(HalfwidthandFullwidthForms::HalfwidthIdeographicFullStop),
            '「' => Ok(HalfwidthandFullwidthForms::HalfwidthLeftCornerBracket),
            '」' => Ok(HalfwidthandFullwidthForms::HalfwidthRightCornerBracket),
            '、' => Ok(HalfwidthandFullwidthForms::HalfwidthIdeographicComma),
            '・' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaMiddleDot),
            'ヲ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterWo),
            'ァ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallA),
            'ィ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallI),
            'ゥ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallU),
            'ェ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallE),
            'ォ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallO),
            'ャ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallYa),
            'ュ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallYu),
            'ョ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallYo),
            'ッ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSmallTu),
            'ー' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaDashHiraganaProlongedSoundMark),
            'ア' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterA),
            'イ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterI),
            'ウ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterU),
            'エ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterE),
            'オ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterO),
            'カ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterKa),
            'キ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterKi),
            'ク' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterKu),
            'ケ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterKe),
            'コ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterKo),
            'サ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSa),
            'シ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSi),
            'ス' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSu),
            'セ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSe),
            'ソ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterSo),
            'タ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterTa),
            'チ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterTi),
            'ツ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterTu),
            'テ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterTe),
            'ト' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterTo),
            'ナ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterNa),
            'ニ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterNi),
            'ヌ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterNu),
            'ネ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterNe),
            'ノ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterNo),
            'ハ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterHa),
            'ヒ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterHi),
            'フ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterHu),
            'ヘ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterHe),
            'ホ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterHo),
            'マ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterMa),
            'ミ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterMi),
            'ム' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterMu),
            'メ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterMe),
            'モ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterMo),
            'ヤ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterYa),
            'ユ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterYu),
            'ヨ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterYo),
            'ラ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterRa),
            'リ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterRi),
            'ル' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterRu),
            'レ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterRe),
            'ロ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterRo),
            'ワ' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterWa),
            'ン' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaLetterN),
            '゙' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaVoicedSoundMark),
            '゚' => Ok(HalfwidthandFullwidthForms::HalfwidthKatakanaSemiDashVoicedSoundMark),
            'ᅠ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulFiller),
            'ᄀ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterKiyeok),
            'ᄁ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterSsangkiyeok),
            'ᆪ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterKiyeokDashSios),
            'ᄂ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterNieun),
            'ᆬ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterNieunDashCieuc),
            'ᆭ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterNieunDashHieuh),
            'ᄃ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterTikeut),
            'ᄄ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterSsangtikeut),
            'ᄅ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterRieul),
            'ᆰ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterRieulDashKiyeok),
            'ᆱ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterRieulDashMieum),
            'ᆲ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterRieulDashPieup),
            'ᆳ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterRieulDashSios),
            'ᆴ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterRieulDashThieuth),
            'ᆵ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterRieulDashPhieuph),
            'ᄚ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterRieulDashHieuh),
            'ᄆ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterMieum),
            'ᄇ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterPieup),
            'ᄈ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterSsangpieup),
            'ᄡ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterPieupDashSios),
            'ᄉ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterSios),
            'ᄊ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterSsangsios),
            'ᄋ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterIeung),
            'ᄌ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterCieuc),
            'ᄍ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterSsangcieuc),
            'ᄎ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterChieuch),
            'ᄏ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterKhieukh),
            'ᄐ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterThieuth),
            'ᄑ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterPhieuph),
            'ᄒ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterHieuh),
            'ᅡ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterA),
            'ᅢ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterAe),
            'ᅣ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterYa),
            'ᅤ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterYae),
            'ᅥ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterEo),
            'ᅦ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterE),
            'ᅧ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterYeo),
            'ᅨ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterYe),
            'ᅩ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterO),
            'ᅪ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterWa),
            'ᅫ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterWae),
            'ᅬ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterOe),
            'ᅭ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterYo),
            'ᅮ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterU),
            'ᅯ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterWeo),
            'ᅰ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterWe),
            'ᅱ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterWi),
            'ᅲ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterYu),
            'ᅳ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterEu),
            'ᅴ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterYi),
            'ᅵ' => Ok(HalfwidthandFullwidthForms::HalfwidthHangulLetterI),
            '¢' => Ok(HalfwidthandFullwidthForms::FullwidthCentSign),
            '£' => Ok(HalfwidthandFullwidthForms::FullwidthPoundSign),
            '¬' => Ok(HalfwidthandFullwidthForms::FullwidthNotSign),
            ' ̄' => Ok(HalfwidthandFullwidthForms::FullwidthMacron),
            '¦' => Ok(HalfwidthandFullwidthForms::FullwidthBrokenBar),
            '¥' => Ok(HalfwidthandFullwidthForms::FullwidthYenSign),
            '₩' => Ok(HalfwidthandFullwidthForms::FullwidthWonSign),
            '│' => Ok(HalfwidthandFullwidthForms::HalfwidthFormsLightVertical),
            '←' => Ok(HalfwidthandFullwidthForms::HalfwidthLeftwardsArrow),
            '↑' => Ok(HalfwidthandFullwidthForms::HalfwidthUpwardsArrow),
            '→' => Ok(HalfwidthandFullwidthForms::HalfwidthRightwardsArrow),
            '↓' => Ok(HalfwidthandFullwidthForms::HalfwidthDownwardsArrow),
            '■' => Ok(HalfwidthandFullwidthForms::HalfwidthBlackSquare),
            '○' => Ok(HalfwidthandFullwidthForms::HalfwidthWhiteCircle),
            _ => Err(()),
        }
    }
}

impl Into<u32> for HalfwidthandFullwidthForms {
    fn into(self) -> u32 {
        let c: char = self.into();
        let hex = c
            .escape_unicode()
            .to_string()
            .replace("\\u{", "")
            .replace("}", "");
        u32::from_str_radix(&hex, 16).unwrap()
    }
}

impl std::convert::TryFrom<u32> for HalfwidthandFullwidthForms {
    type Error = ();
    fn try_from(u: u32) -> Result<Self, Self::Error> {
        if let Ok(c) = char::try_from(u) {
            Self::try_from(c)
        } else {
            Err(())
        }
    }
}

impl Iterator for HalfwidthandFullwidthForms {
    type Item = Self;
    fn next(&mut self) -> Option<Self> {
        let index: u32 = (*self).into();
        use std::convert::TryFrom;
        Self::try_from(index + 1).ok()
    }
}

impl HalfwidthandFullwidthForms {
    /// The character with the lowest index in this unicode block
    pub fn new() -> Self {
        HalfwidthandFullwidthForms::FullwidthExclamationMark
    }

    /// The character's name, in sentence case
    pub fn name(&self) -> String {
        let s = std::format!("HalfwidthandFullwidthForms{:#?}", self);
        string_morph::to_sentence_case(&s)
    }
}