@@ -547,6 +547,61 @@ impl<R, M> FluentBundle<R, M> {
547547            } ) , 
548548        } 
549549    } 
550+ 
551+     /// Adds the builtin functions described in the [FTL syntax guide] to the bundle, making them 
552+ /// available in messages. 
553+ /// 
554+ /// # Examples 
555+ /// 
556+ /// ``` 
557+ /// use fluent_bundle::{FluentArgs, FluentBundle, FluentResource, FluentValue}; 
558+ /// use unic_langid::langid; 
559+ /// 
560+ /// let ftl_string = String::from(r#"rank = { NUMBER($n, type: "ordinal") -> 
561+ ///     [1] first 
562+ ///     [2] second 
563+ ///     [3] third 
564+ ///     [one] {$n}st 
565+ ///     [two] {$n}nd 
566+ ///     [few] {$n}rd 
567+ ///     *[other] {$n}th 
568+ /// }"#); 
569+ /// let resource = FluentResource::try_new(ftl_string) 
570+ ///     .expect("Could not parse an FTL string."); 
571+ /// let langid_en = langid!("en-US"); 
572+ /// let mut bundle = FluentBundle::new(vec![langid_en]); 
573+ /// bundle.add_resource(&resource) 
574+ ///     .expect("Failed to add FTL resources to the bundle."); 
575+ /// 
576+ /// // Register the builtin functions (including NUMBER()) 
577+ /// bundle.add_builtins().expect("Failed to add builtins to the bundle."); 
578+ /// 
579+ /// let msg = bundle.get_message("rank").expect("Message doesn't exist."); 
580+ /// let mut errors = vec![]; 
581+ /// let pattern = msg.value().expect("Message has no value."); 
582+ /// 
583+ /// let mut args = FluentArgs::new(); 
584+ /// 
585+ /// args.set("n", 5); 
586+ /// let value = bundle.format_pattern(&pattern, Some(&args), &mut errors); 
587+ /// assert_eq!(&value, "\u{2068}5\u{2069}th"); 
588+ /// 
589+ /// args.set("n", 12); 
590+ /// let value = bundle.format_pattern(&pattern, Some(&args), &mut errors); 
591+ /// assert_eq!(&value, "\u{2068}12\u{2069}th"); 
592+ /// 
593+ /// args.set("n", 22); 
594+ /// let value = bundle.format_pattern(&pattern, Some(&args), &mut errors); 
595+ /// assert_eq!(&value, "\u{2068}22\u{2069}nd"); 
596+ /// ``` 
597+ /// 
598+ /// [FTL syntax guide]: https://projectfluent.org/fluent/guide/functions.html 
599+ pub  fn  add_builtins ( & mut  self )  -> Result < ( ) ,  FluentError >  { 
600+         self . add_function ( "NUMBER" ,  crate :: builtins:: NUMBER ) ?; 
601+         // TODO: DATETIME() 
602+ 
603+         Ok ( ( ) ) 
604+     } 
550605} 
551606
552607impl < R >  Default  for  FluentBundle < R ,  IntlLangMemoizer >  { 
0 commit comments