MessagePattern Demo

Sample output of demo code that parses MessageFormat pattern strings via the MessagePattern class and pretty-prints the parsed structure. Some of the patterns are formatted via a "mini formatter".

message: Hello!

0: MSG_START(0)@0

1: MSG_LIMIT(0)@6

message: Hel'lo!

autoQA: Hel''lo!

0: MSG_START(0)@0

1: INSERT_CHAR(39)@4

2: MSG_LIMIT(0)@7

message: Hel'{o

autoQA: Hel'{o'

0: MSG_START(0)@0

1: SKIP_SYNTAX(0)@3="'"

2: INSERT_CHAR(39)@6

3: MSG_LIMIT(0)@6

message: Hel'{'o

0: MSG_START(0)@0

1: SKIP_SYNTAX(0)@3="'"

2: SKIP_SYNTAX(0)@5="'"

3: MSG_LIMIT(0)@7

message: a'{bc''de'f

0: MSG_START(0)@0

1: SKIP_SYNTAX(0)@1="'"

2: SKIP_SYNTAX(0)@6="'"

3: SKIP_SYNTAX(0)@9="'"

4: MSG_LIMIT(0)@11

a{bc'def

message: a'{bc''de'f{0,number,g'hi''jk'l#}

0: MSG_START(0)@0

1: SKIP_SYNTAX(0)@1="'"

2: SKIP_SYNTAX(0)@6="'"

3: SKIP_SYNTAX(0)@9="'"

4: ARG_START(SIMPLE)@11="{"

5: ARG_NUMBER(0)@12="0"

6: ARG_TYPE(0)@14="number"

7: ARG_STYLE(0)@21="g'hi''jk'l#"

8: ARG_LIMIT(SIMPLE)@32="}"

9: MSG_LIMIT(0)@33

message: abc{0}def

0: MSG_START(0)@0

1: ARG_START(NONE)@3="{"

2: ARG_NUMBER(0)@4="0"

3: ARG_LIMIT(NONE)@5="}"

4: MSG_LIMIT(0)@9

message: abc{ arg }def

0: MSG_START(0)@0

1: ARG_START(NONE)@3="{"

2: ARG_NAME(0)@5="arg"

3: ARG_LIMIT(NONE)@9="}"

4: MSG_LIMIT(0)@13

message: abc{1}def{arg}ghi

0: MSG_START(0)@0

1: ARG_START(NONE)@3="{"

2: ARG_NUMBER(1)@4="1"

3: ARG_LIMIT(NONE)@5="}"

4: ARG_START(NONE)@9="{"

5: ARG_NAME(0)@10="arg"

6: ARG_LIMIT(NONE)@13="}"

7: MSG_LIMIT(0)@17

message: abc{2, number}ghi{3, select, xx {xxx} other {ooo}} xyz

0: MSG_START(0)@0

1: ARG_START(SIMPLE)@3="{"

2: ARG_NUMBER(2)@4="2"

3: ARG_TYPE(0)@7="number"

4: ARG_LIMIT(SIMPLE)@13="}"

5: ARG_START(SELECT)@17="{"

6: ARG_NUMBER(3)@18="3"

7: ARG_SELECTOR(0)@29="xx"

8: MSG_START(1)@32="{"

9: MSG_LIMIT(1)@36="}"

10: ARG_SELECTOR(0)@38="other"

11: MSG_START(1)@44="{"

12: MSG_LIMIT(1)@48="}"

13: ARG_LIMIT(SELECT)@49="}"

14: MSG_LIMIT(0)@54

message: abc{gender,select,other{His name is {person,XML,<entry name="PERSON">{$PERSON}</entry>}.}}xyz

0: MSG_START(0)@0

1: ARG_START(SELECT)@3="{"

2: ARG_NAME(0)@4="gender"

3: ARG_SELECTOR(0)@18="other"

4: MSG_START(1)@23="{"

5: ARG_START(SIMPLE)@36="{"

6: ARG_NAME(0)@37="person"

7: ARG_TYPE(0)@44="XML"

8: ARG_STYLE(0)@48="<entry name="PERSON">{$PERSON}</entry>"

9: ARG_LIMIT(SIMPLE)@86="}"

10: MSG_LIMIT(1)@88="}"

11: ARG_LIMIT(SELECT)@89="}"

12: MSG_LIMIT(0)@93

message: abc{num_people, plural, offset:17 few{fff} other {oooo}}xyz

0: MSG_START(0)@0

1: ARG_START(PLURAL)@3="{"

2: ARG_NAME(0)@4="num_people"

3: ARG_INT(17)@31="17"=17.0

4: ARG_SELECTOR(0)@34="few"

5: MSG_START(1)@37="{"

6: MSG_LIMIT(1)@41="}"

7: ARG_SELECTOR(0)@43="other"

8: MSG_START(1)@49="{"

9: MSG_LIMIT(1)@54="}"

10: ARG_LIMIT(PLURAL)@55="}"

11: MSG_LIMIT(0)@59

message: abc{ num , plural , offset: 2 =1 {1} =-1 {-1} =3.14 {3.14} other {oo} }xyz

0: MSG_START(0)@0

1: ARG_START(PLURAL)@3="{"

2: ARG_NAME(0)@5="num"

3: ARG_INT(2)@28="2"=2.0

4: ARG_SELECTOR(0)@30="=1"

5: ARG_INT(1)@31="1"=1.0

6: MSG_START(1)@33="{"

7: MSG_LIMIT(1)@35="}"

8: ARG_SELECTOR(0)@37="=-1"

9: ARG_INT(-1)@38="-1"=-1.0

10: MSG_START(1)@41="{"

11: MSG_LIMIT(1)@44="}"

12: ARG_SELECTOR(0)@46="=3.14"

13: ARG_DOUBLE(0)@47="3.14"=3.14

14: MSG_START(1)@52="{"

15: MSG_LIMIT(1)@57="}"

16: ARG_SELECTOR(0)@59="other"

17: MSG_START(1)@65="{"

18: MSG_LIMIT(1)@68="}"

19: ARG_LIMIT(PLURAL)@70="}"

20: MSG_LIMIT(0)@74

message: I don't {a,plural,other{w'{'on't #'#'}} and {b,select,other{shan't'}'}} '{'''know'''}' and {c,choice,0#can't'|'}{z,number,#'#'###.00'}'}.

autoQA: I don''t {a,plural,other{w'{'on''t #'#'}} and {b,select,other{shan''t'}'}} '{'''know'''}' and {c,choice,0#can''t'|'}{z,number,#'#'###.00'}'}.

0: MSG_START(0)@0

1: INSERT_CHAR(39)@6

2: ARG_START(PLURAL)@8="{"

3: ARG_NAME(0)@9="a"

4: ARG_SELECTOR(0)@18="other"

5: MSG_START(1)@23="{"

6: SKIP_SYNTAX(0)@25="'"

7: SKIP_SYNTAX(0)@27="'"

8: INSERT_CHAR(39)@31

9: REPLACE_NUMBER(0)@33="#"

10: SKIP_SYNTAX(0)@34="'"

11: SKIP_SYNTAX(0)@36="'"

12: MSG_LIMIT(1)@37="}"

13: ARG_LIMIT(PLURAL)@38="}"

14: ARG_START(SELECT)@44="{"

15: ARG_NAME(0)@45="b"

16: ARG_SELECTOR(0)@54="other"

17: MSG_START(1)@59="{"

18: INSERT_CHAR(39)@65

19: SKIP_SYNTAX(0)@66="'"

20: SKIP_SYNTAX(0)@68="'"

21: MSG_LIMIT(1)@69="}"

22: ARG_LIMIT(SELECT)@70="}"

23: SKIP_SYNTAX(0)@72="'"

24: SKIP_SYNTAX(0)@75="'"

25: SKIP_SYNTAX(0)@76="'"

26: SKIP_SYNTAX(0)@82="'"

27: SKIP_SYNTAX(0)@83="'"

28: SKIP_SYNTAX(0)@85="'"

29: ARG_START(CHOICE)@91="{"

30: ARG_NAME(0)@92="c"

31: ARG_INT(0)@101="0"=0.0

32: ARG_SELECTOR(0)@102="#"

33: MSG_START(1)@103

34: INSERT_CHAR(39)@107

35: SKIP_SYNTAX(0)@108="'"

36: SKIP_SYNTAX(0)@110="'"

37: MSG_LIMIT(1)@111

38: ARG_LIMIT(CHOICE)@111="}"

39: ARG_START(SIMPLE)@112="{"

40: ARG_NAME(0)@113="z"

41: ARG_TYPE(0)@115="number"

42: ARG_STYLE(0)@122="#'#'###.00'}'"

43: ARG_LIMIT(SIMPLE)@135="}"

44: MSG_LIMIT(0)@137

message: a_{0,choice,-∞ #-inf| 5≤ five | 99 # ninety'|'nine }_z

0: MSG_START(0)@0

1: ARG_START(CHOICE)@2="{"

2: ARG_NUMBER(0)@3="0"

3: ARG_DOUBLE(0)@12="-∞"=-Infinity

4: ARG_SELECTOR(0)@15="#"

5: MSG_START(1)@16

6: MSG_LIMIT(1)@20="|"

7: ARG_INT(5)@23="5"=5.0

8: ARG_SELECTOR(0)@24="≤"

9: MSG_START(1)@25

10: MSG_LIMIT(1)@31="|"

11: ARG_INT(99)@33="99"=99.0

12: ARG_SELECTOR(0)@36="#"

13: MSG_START(1)@37

14: SKIP_SYNTAX(0)@44="'"

15: SKIP_SYNTAX(0)@46="'"

16: MSG_LIMIT(1)@53

17: ARG_LIMIT(CHOICE)@53="}"

18: MSG_LIMIT(0)@56

message: a_{0,plural,other{num=#'#'=#'#'={1,number,##}!}}_z

0: MSG_START(0)@0

1: ARG_START(PLURAL)@2="{"

2: ARG_NUMBER(0)@3="0"

3: ARG_SELECTOR(0)@12="other"

4: MSG_START(1)@17="{"

5: REPLACE_NUMBER(0)@22="#"

6: SKIP_SYNTAX(0)@23="'"

7: SKIP_SYNTAX(0)@25="'"

8: REPLACE_NUMBER(0)@27="#"

9: SKIP_SYNTAX(0)@28="'"

10: SKIP_SYNTAX(0)@30="'"

11: ARG_START(SIMPLE)@32="{"

12: ARG_NUMBER(1)@33="1"

13: ARG_TYPE(0)@35="number"

14: ARG_STYLE(0)@42="##"

15: ARG_LIMIT(SIMPLE)@44="}"

16: MSG_LIMIT(1)@46="}"

17: ARG_LIMIT(PLURAL)@47="}"

18: MSG_LIMIT(0)@50

message: }}}{0}}

0: MSG_START(0)@0

1: ARG_START(NONE)@3="{"

2: ARG_NUMBER(0)@4="0"

3: ARG_LIMIT(NONE)@5="}"

4: MSG_LIMIT(0)@7

message: Hello {0}!

0: MSG_START(0)@0

1: ARG_START(NONE)@6="{"

2: ARG_NUMBER(0)@7="0"

3: ARG_LIMIT(NONE)@8="}"

4: MSG_LIMIT(0)@10

Hello Alice!

message: ++{0, select, female{{1} calls you her friend}other{{1} calls you '{their}' friend}male{{1} calls you his friend}}--

0: MSG_START(0)@0

1: ARG_START(SELECT)@2="{"

2: ARG_NUMBER(0)@3="0"

3: ARG_SELECTOR(0)@14="female"

4: MSG_START(1)@20="{"

5: ARG_START(NONE)@21="{"

6: ARG_NUMBER(1)@22="1"

7: ARG_LIMIT(NONE)@23="}"

8: MSG_LIMIT(1)@45="}"

9: ARG_SELECTOR(0)@46="other"

10: MSG_START(1)@51="{"

11: ARG_START(NONE)@52="{"

12: ARG_NUMBER(1)@53="1"

13: ARG_LIMIT(NONE)@54="}"

14: SKIP_SYNTAX(0)@66="'"

15: SKIP_SYNTAX(0)@74="'"

16: MSG_LIMIT(1)@82="}"

17: ARG_SELECTOR(0)@83="male"

18: MSG_START(1)@87="{"

19: ARG_START(NONE)@88="{"

20: ARG_NUMBER(1)@89="1"

21: ARG_LIMIT(NONE)@90="}"

22: MSG_LIMIT(1)@112="}"

23: ARG_LIMIT(SELECT)@113="}"

24: MSG_LIMIT(0)@116

++Alice calls you her friend--

message: ++{0, select, female{{1} calls you her friend}other{{1} calls you '{their}' friend}male{{1} calls you his friend}}--

0: MSG_START(0)@0

1: ARG_START(SELECT)@2="{"

2: ARG_NUMBER(0)@3="0"

3: ARG_SELECTOR(0)@14="female"

4: MSG_START(1)@20="{"

5: ARG_START(NONE)@21="{"

6: ARG_NUMBER(1)@22="1"

7: ARG_LIMIT(NONE)@23="}"

8: MSG_LIMIT(1)@45="}"

9: ARG_SELECTOR(0)@46="other"

10: MSG_START(1)@51="{"

11: ARG_START(NONE)@52="{"

12: ARG_NUMBER(1)@53="1"

13: ARG_LIMIT(NONE)@54="}"

14: SKIP_SYNTAX(0)@66="'"

15: SKIP_SYNTAX(0)@74="'"

16: MSG_LIMIT(1)@82="}"

17: ARG_SELECTOR(0)@83="male"

18: MSG_START(1)@87="{"

19: ARG_START(NONE)@88="{"

20: ARG_NUMBER(1)@89="1"

21: ARG_LIMIT(NONE)@90="}"

22: MSG_LIMIT(1)@112="}"

23: ARG_LIMIT(SELECT)@113="}"

24: MSG_LIMIT(0)@116

++Bob calls you his friend--

message: ++{0, select, female{{1} calls you her friend}other{{1} calls you '{their}' friend}male{{1} calls you his friend}}--

0: MSG_START(0)@0

1: ARG_START(SELECT)@2="{"

2: ARG_NUMBER(0)@3="0"

3: ARG_SELECTOR(0)@14="female"

4: MSG_START(1)@20="{"

5: ARG_START(NONE)@21="{"

6: ARG_NUMBER(1)@22="1"

7: ARG_LIMIT(NONE)@23="}"

8: MSG_LIMIT(1)@45="}"

9: ARG_SELECTOR(0)@46="other"

10: MSG_START(1)@51="{"

11: ARG_START(NONE)@52="{"

12: ARG_NUMBER(1)@53="1"

13: ARG_LIMIT(NONE)@54="}"

14: SKIP_SYNTAX(0)@66="'"

15: SKIP_SYNTAX(0)@74="'"

16: MSG_LIMIT(1)@82="}"

17: ARG_SELECTOR(0)@83="male"

18: MSG_START(1)@87="{"

19: ARG_START(NONE)@88="{"

20: ARG_NUMBER(1)@89="1"

21: ARG_LIMIT(NONE)@90="}"

22: MSG_LIMIT(1)@112="}"

23: ARG_LIMIT(SELECT)@113="}"

24: MSG_LIMIT(0)@116

++sushifan3 calls you {their} friend--

message: _'__{gender, select, female{Her n'ame is {person_name}.}other{His n'ame is {person_name}.}}__'_

autoQA: _''__{gender, select, female{Her n''ame is {person_name}.}other{His n''ame is {person_name}.}}__''_

0: MSG_START(0)@0

1: INSERT_CHAR(39)@2

2: ARG_START(SELECT)@4="{"

3: ARG_NAME(0)@5="gender"

4: ARG_SELECTOR(0)@21="female"

5: MSG_START(1)@27="{"

6: INSERT_CHAR(39)@34

7: ARG_START(NONE)@41="{"

8: ARG_NAME(0)@42="person_name"

9: ARG_LIMIT(NONE)@53="}"

10: MSG_LIMIT(1)@55="}"

11: ARG_SELECTOR(0)@56="other"

12: MSG_START(1)@61="{"

13: INSERT_CHAR(39)@68

14: ARG_START(NONE)@75="{"

15: ARG_NAME(0)@76="person_name"

16: ARG_LIMIT(NONE)@87="}"

17: MSG_LIMIT(1)@89="}"

18: ARG_LIMIT(SELECT)@90="}"

19: INSERT_CHAR(39)@94

20: MSG_LIMIT(0)@95

_'__Her n'ame is Alice.__'_

message: _'__{gender, select, female{Her n'ame is {person_name}.}other{His n'ame is {person_name}.}}__'_

autoQA: _''__{gender, select, female{Her n''ame is {person_name}.}other{His n''ame is {person_name}.}}__''_

0: MSG_START(0)@0

1: INSERT_CHAR(39)@2

2: ARG_START(SELECT)@4="{"

3: ARG_NAME(0)@5="gender"

4: ARG_SELECTOR(0)@21="female"

5: MSG_START(1)@27="{"

6: INSERT_CHAR(39)@34

7: ARG_START(NONE)@41="{"

8: ARG_NAME(0)@42="person_name"

9: ARG_LIMIT(NONE)@53="}"

10: MSG_LIMIT(1)@55="}"

11: ARG_SELECTOR(0)@56="other"

12: MSG_START(1)@61="{"

13: INSERT_CHAR(39)@68

14: ARG_START(NONE)@75="{"

15: ARG_NAME(0)@76="person_name"

16: ARG_LIMIT(NONE)@87="}"

17: MSG_LIMIT(1)@89="}"

18: ARG_LIMIT(SELECT)@90="}"

19: INSERT_CHAR(39)@94

20: MSG_LIMIT(0)@95

_'__His n'ame is Bob.__'_