ymoks_GfmlTkn_mok.java 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. XOWA: the XOWA Offline Wiki Application
  3. Copyright (C) 2012-2017 gnosygnu@gmail.com
  4. XOWA is licensed under the terms of the General Public License (GPL) Version 3,
  5. or alternatively under the terms of the Apache License Version 2.0.
  6. You may use XOWA according to either of these licenses as is most appropriate
  7. for your project on a case-by-case basis.
  8. The terms of each license can be found in the source code repository:
  9. GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
  10. Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
  11. */
  12. package gplx.gfml; import gplx.*;
  13. class GfmlTkn_mok {
  14. public String Raw() {return raw;} public GfmlTkn_mok Raw_(String v) {raw = v; return this;} private String raw;
  15. public List_adp Subs() {return list;} List_adp list = List_adp_.New();
  16. public GfmlTkn_mok Subs_(GfmlTkn_mok... ary) {
  17. for (GfmlTkn_mok itm : ary)
  18. list.Add(itm);
  19. return this;
  20. }
  21. // statics
  22. public static GfmlTkn_mok new_() {return new GfmlTkn_mok();} GfmlTkn_mok() {}
  23. public static GfmlTkn_mok gfmlNde_(GfmlNde nde) {
  24. GfmlTkn_mok rv = new GfmlTkn_mok();
  25. InitItm(rv, nde);
  26. return rv;
  27. }
  28. static void InitItm(GfmlTkn_mok rv, GfmlItm owner) {
  29. for (int i = 0; i < owner.SubObjs_Count(); i++) {
  30. GfmlObj subTkn = (GfmlObj)owner.SubObjs_GetAt(i);
  31. GfmlTkn_mok subMok = GfmlTkn_mok.new_();
  32. rv.Subs_(subMok);
  33. GfmlItm subItm = GfmlItm_.as_(subTkn);
  34. if (subItm != null)
  35. InitItm(subMok, subItm);
  36. else
  37. InitTkn(subMok, (GfmlTkn)subTkn);
  38. }
  39. }
  40. static void InitTkn(GfmlTkn_mok mok, GfmlTkn tkn) {
  41. if (tkn.SubTkns().length == 0) // leafTkn; no subs; simply set
  42. mok.Raw_(tkn.Raw());
  43. else { // compTkn; createTkn and iterate
  44. for (int i = 0; i < tkn.SubTkns().length; i++) {
  45. GfmlTkn subTkn = (GfmlTkn)tkn.SubTkns()[i];
  46. GfmlTkn_mok subMok = GfmlTkn_mok.new_();
  47. InitTkn(subMok, subTkn);
  48. mok.Subs_(subMok);
  49. }
  50. }
  51. }
  52. public static GfmlTkn_mok[] Xto_bry(String... ary) {
  53. GfmlTkn_mok[] rv = new GfmlTkn_mok[ary.length];
  54. for (int i = 0; i < rv.length; i++)
  55. rv[i] = GfmlTkn_mok.new_().Raw_(ary[i]);
  56. return rv;
  57. }
  58. public static void tst(TfdsTstr_fxt tstr, GfmlTkn_mok expd, GfmlTkn_mok actl) {
  59. expd = NullObj(expd); actl = NullObj(actl);
  60. if (expd.Raw() != null) tstr.Eq_str(expd.Raw(), actl.Raw(), "raw");
  61. int max = tstr.List_Max(expd.Subs(), actl.Subs());
  62. for (int i = 0; i < max; i++) {
  63. GfmlTkn_mok expdSub = (GfmlTkn_mok)tstr.List_FetchAtOrNull(expd.Subs(), i);
  64. GfmlTkn_mok actlSub = (GfmlTkn_mok)tstr.List_FetchAtOrNull(actl.Subs(), i);
  65. tstr.SubName_push(Int_.To_str(i));
  66. tst(tstr, expdSub, actlSub);
  67. tstr.SubName_pop();
  68. }
  69. }
  70. static GfmlTkn_mok NullObj(GfmlTkn_mok v) {return v == null ? GfmlTkn_mok.new_().Raw_(String_.Null_mark) : v;}
  71. }