public void Process_lnki_category( Xop_ctx ctx, Xop_root_tkn root, byte[] src, int pos, int src_len) { // REF.MW:Parser.php|replaceInternalLinks2|Strip the whitespace Category links // produce; if (!para_enabled) return; int subs_len = root.Subs_len(); for (int i = subs_len - 2; i > -1; i--) { // -2: -1 b/c subs_len is invalid; -1 to skip current lnki Xop_tkn_itm sub_tkn = root.Subs_get(i); switch (sub_tkn.Tkn_tid()) { case Xop_tkn_itm_ .Tid_para: // nl found; note this means that BOL -> [[Category:]] is all ws; if (prv_ws_bgn > 0) { // line begins with ws a if (sub_tkn.Src_bgn() != 0) // do not ignore BOS para; needed b/c it is often <p>; needed for test; sub_tkn.Ignore_y_(); // ignore nl (pretty-printing only) prv_ws_bgn = 0; // remove ws if (ctx.Stack_has( Xop_tkn_itm_ .Tid_list)) { // HACK: if in list, set prv_nl_pos to EOL; only here for one test // to pass int nl_at_eol = -1; for (int j = pos; j < src_len; j++) { // check if rest of line is ws byte b = src[j]; switch (b) { case Byte_ascii.Space: case Byte_ascii.Tab: break; // ignore space / tab case Byte_ascii.Nl: nl_at_eol = j; j = src_len; break; default: // something else besides ws; stop j = src_len; break; } if (nl_at_eol != -1) prv_nl_pos = nl_at_eol + 1; // SEE:NOTE_2 } } } return; default: // exit if anything except para / nl in front of [[Category:]] i = -1; break; } } // if (para_found) // BOS exit; just remove prv_ws_bgn prv_ws_bgn = 0; }