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
/* ------------------------------------------------------------ PrettyGrammar Project.Github: "https://github.com/kerryeon/pretty-grammar" --------------------------------------------------------------- Author: Name: "kerryeon" Email: "besqer996@gnu.ac.kr" Github: "https://github.com/kerryeon" Generated: Date: "3/6/2019" ------------------------------------------------------------ */ /// Correct the string to match the grammar. /// /// # Examples /// /// ``` /// use pretty_grammar::*; /// /// let result = translate("kr", "철수<은> 영희<를> 좋아합니다.".to_owned()); /// assert_eq!("철수는 영희를 좋아합니다.", result); /// ``` /// /// # Panics /// You should not use unsupported `lang`s. /// pub fn translate(lang: &'static str, msg: String) -> String { for (target, func) in super::FILTER.iter() { if *target == lang { return func(msg) } } // Not Found panic!() } /// Correct `dynamic` string to match the grammar. /// /// # Examples /// /// ``` /// use pretty_grammar::*; /// /// let name = "철수"; /// let obj = "영희"; /// let format = "{name}<은> {obj}<를> 좋아합니다."; /// let result = translate!(format with /// lang: "kr", /// name: name, /// obj: obj, /// ); /// assert_eq!("철수는 영희를 좋아합니다.", result); /// ``` /// /// # Panics /// You should not use unsupported `lang`s. /// #[macro_export] macro_rules! translate { ($msg: tt with lang: $lang: tt, $($tag: ident: $arg: tt),* ) => ({ $crate::translate( $lang, format_dyn!($msg with $($tag: $arg),*) ) }); // For unnecessary comma ($msg: tt with lang: $lang: tt, $($tag: ident: $arg: tt),*, ) => ({ translate!($msg with lang: $lang, $($tag: $arg),*) }); } /// Creates a `String` using dynamic `format` and interpolation of runtime expressions. /// /// # Examples /// /// ``` /// use pretty_grammar::*; /// /// let name = "철수"; /// let obj = "영희"; /// let format = "{name}는 {obj}를 좋아합니다."; /// let result = format_dyn!(format with /// name: name, /// obj: obj, /// ); /// assert_eq!("철수는 영희를 좋아합니다.", result); /// ``` /// #[macro_export] macro_rules! format_dyn { // [Example] // {msg} with name: {name}, age: {age} ($msg: tt with $($tag: ident: $arg: tt),* ) => ({ let mut msg: String = $msg.to_owned(); $( msg = msg.replace(format!("{{{}}}", stringify!($tag)).as_str(), $arg); )* msg }); // For unnecessary comma ($msg: tt with $($tag: ident: $arg: tt),*, ) => ({ format_dyn!($msg with $($tag: $arg),*) }); }