1 use crate::constants::{HIRAGANA_START, KATAKANA_START};
2 use crate::utils::is_char_hiragana::*;
3 use crate::utils::is_char_long_dash::*;
4 use crate::utils::is_char_slash_dot::*;
5 use std;
6 
7 /// Convert [Hiragana](https://en.wikipedia.org/wiki/Hiragana) to [Katakana](https://en.wikipedia.org/wiki/Katakana)
8 ///
9 /// Passes through any non-hiragana chars
10 ///
11 /// # Examples
12 ///
13 ///
14 /// hiragana_to_katakana('ひらがな')
15 ///
16 /// // => "ヒラガナ"
17 ///
18 /// hiragana_to_katakana('ひらがな is a type of kana')
19 ///
20 /// // => "ヒラガナ is a type of kana"
21 ///
22 
hiragana_to_katakana(input: &str) -> String23 pub fn hiragana_to_katakana(input: &str) -> String {
24     let mut kata = vec![];
25     for char in input.chars() {
26         // Short circuit to avoid incorrect codeshift for 'ー' and '・'
27         if is_char_long_dash(char) || is_char_slash_dot(char) {
28             kata.push(char);
29         } else if is_char_hiragana(char) {
30             // Shift charcode.
31             let code = char as i32 + (KATAKANA_START as i32 - HIRAGANA_START as i32);
32             // let kata_char = String.from_char_code(code);
33             let kata_char = std::char::from_u32(code as u32).unwrap();
34             kata.push(kata_char);
35         } else {
36             // Pass non-hiragana chars through
37             kata.push(char);
38         }
39     }
40     kata.into_iter().collect()
41 }
42