private void Arg_itm_end( Xop_ctx ctx, Arg_nde_tkn nde, Arg_itm_tkn itm, int ws_bgn_idx, int ws_end_idx, int subs_len, int lxr_bgn, int wkr_typ, boolean key_exists, boolean cur_itm_is_key, boolean itm_is_static, byte[] src, int arg_idx) { // PURPOSE: mark tkns Ignore; find dat_bgn, dat_end int dat_bgn = itm.Src_bgn(), dat_end = lxr_bgn; boolean trim = false; // trim ws at bgn boolean wkr_is_not_prm = wkr_typ != Xop_arg_wkr_.Typ_prm; if (ws_bgn_idx != -1) { // ignore ws if (ws_found_at_bgn && (tmpl_arg || (lnki_arg && key))); lnki_arg && // val does not ignore at bgn; EX: [[alt= a b c]] -> " a b c" switch (wkr_typ) { case Xop_arg_wkr_.Typ_prm: trim = arg_idx == 0; break; case Xop_arg_wkr_.Typ_tmpl: trim = key_exists || arg_idx == 0; break; case Xop_arg_wkr_.Typ_lnki: trim = cur_itm_is_key || !key_exists; break; // NOTE: trim if "a= b"; skip if " a=b" or " a" } if (trim) { for (int i = 0; i <= ws_bgn_idx; i++) { Xop_tkn_itm sub_tkn = itm.Subs_get(i); // NOTE: tknTypeId should be space, newline, or tab if (wkr_is_not_prm) sub_tkn.Ignore_y_grp_(ctx, itm, i); // mark tkn ignore unless wkr is prm; SEE:NOTE_1 if (i == ws_bgn_idx) dat_bgn = sub_tkn.Src_end_grp(itm, i); // if last_tkn, set dat_bgn to bgn } } } // trim ws at end if (ws_end_idx != -1) { // ignore ws if (ws_found_at_end && (tmpl_arg || (lnki_arg && val))); lnki_arg && // key does not ignore at end; EX: [[alt =a b c]] -> unrecognized nde ("alt ") trim = false; switch (wkr_typ) { case Xop_arg_wkr_.Typ_prm: trim = arg_idx == 0; break; case Xop_arg_wkr_.Typ_tmpl: trim = key_exists || arg_idx == 0; break; // NOTE: never set "trim = true"; // PAGE:fr.w:Histoire_de_la_marine_française_sous_Louis_XV_et_Louis_XVI // DATE:2015-11-17 case Xop_arg_wkr_.Typ_lnki: trim = !cur_itm_is_key; break; } if (trim) { for (int i = ws_end_idx; i < subs_len; i++) { Xop_tkn_itm sub_tkn = itm.Subs_get(i); // NOTE: tknTypeId should be space, newline, or tab if (wkr_is_not_prm) sub_tkn.Ignore_y_grp_(ctx, itm, i); // mark tkn ignore unless wkr is prm; SEE:NOTE_1 if (i == ws_end_idx) dat_end = sub_tkn.Src_bgn_grp(itm, i); // if 1st_tkn; set dat_end to bgn } } } itm.Src_end_(lxr_bgn); nde.Src_end_(lxr_bgn); // NOTE: src_end is lxr_bgn; EX: {{a}} has src_end at 3; lxr_bgn for }} itm.Dat_rng_( dat_bgn, dat_end); // always set dat, even if itm has dynamic parts; EX: {{{ a{{{1}}}b }}} has 4,13, // not 3,14 (ignore ws) // if (itm_is_static) // itm.Dat_ary_(dat_end == dat_bgn ? Bry_.Empty : Bry_.Mid(src, dat_bgn, dat_end)); itm.Itm_static_(itm_is_static); }