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
//! Convert input to [Katakana](https://en.wikipedia.org/wiki/Katakana)
//!
//! # Examples
//! ```
//! use wana_kana::to_katakana::to_katakana_with_opt;
//! use wana_kana::to_katakana::to_katakana;
//! use wana_kana::Options;
//! assert_eq!(
//!     to_katakana("toukyou,おおさか"),
//!     "トウキョウ、オオサカ"
//! );
//! assert_eq!(
//!     to_katakana_with_opt(
//!         "only かな",
//!         Options {
//!             pass_romaji: true,
//!             ..Default::default()
//!         }
//!     ),
//!     "only カナ"
//! );
//! assert_eq!(to_katakana("wi"), "ウィ");
//! assert_eq!(to_katakana_with_opt("wi", Options {use_obsolete_kana: true, ..Default::default() }),"ヰ");
//! ```

use is_romaji::*;
use is_mixed::*;
use utils::hiragana_to_katakana::*;
use utils::romaji_to_hiragana::*;
use options::Options;

pub fn to_katakana(input: &str) -> String {
    to_katakana_with_opt(input, Options::default())
}
pub fn to_katakana_with_opt(input: &str, options: Options) -> String {
    let config = options;
    if config.pass_romaji {
        return hiragana_to_katakana(input);
    }
    if is_romaji(input) || is_mixed(input) {
        let romaji = romaji_to_hiragana(input, config);
        return hiragana_to_katakana(&romaji);
    }
    return hiragana_to_katakana(input);
}