1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00

Refactor: Pull more classes into baselib

This commit is contained in:
gnosygnu
2021-12-19 16:19:19 -05:00
parent 48559edffe
commit 0e80d7ef6d
7999 changed files with 1375876 additions and 1365947 deletions

View File

@@ -13,19 +13,22 @@ The terms of each license can be found in the source code repository:
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.gfml; import gplx.*;
import gplx.core.texts.*; /*CharStream*/
package gplx.gfml;
import gplx.core.texts.*; /*CharStream*/
import gplx.libs.dlgs.UsrMsg;
import gplx.types.basics.lists.Hash_adp;
import gplx.types.basics.lists.Hash_adp_;
public class GfmlBldr {
@gplx.Internal protected GfmlDoc Doc() {return gdoc;} GfmlDoc gdoc = GfmlDoc.new_();
@gplx.Internal protected GfmlFrame CurFrame() {return curFrame;} GfmlFrame curFrame;
@gplx.Internal protected GfmlFrame_nde CurNdeFrame() {return curNdeFrame;} GfmlFrame_nde curNdeFrame;
@gplx.Internal protected GfmlNde CurNde() {return curNdeFrame.CurNde();}
@gplx.Internal protected GfmlTypeMgr TypeMgr() {return typeMgr;} GfmlTypeMgr typeMgr = GfmlTypeMgr.new_();
@gplx.Internal protected Hash_adp Vars() {return vars;} Hash_adp vars = Hash_adp_.New();
@gplx.Internal protected int StreamPos() {return streamPos;} int streamPos;
@gplx.Internal protected void ThrowErrors_set(boolean v) {throwErrors = v;} private boolean throwErrors = true;
@gplx.Internal protected int PrvSymType() {return prvSymType;} @gplx.Internal protected void PrvSymType_set(int v) {prvSymType = v;} int prvSymType = GfmlNdeSymType.Null;
@gplx.Internal protected int ChainIdNext() {return chainIdNext++;} int chainIdNext = 1;
public GfmlDoc Doc() {return gdoc;} GfmlDoc gdoc = GfmlDoc.new_();
public GfmlFrame CurFrame() {return curFrame;} GfmlFrame curFrame;
public GfmlFrame_nde CurNdeFrame() {return curNdeFrame;} GfmlFrame_nde curNdeFrame;
public GfmlNde CurNde() {return curNdeFrame.CurNde();}
public GfmlTypeMgr TypeMgr() {return typeMgr;} GfmlTypeMgr typeMgr = GfmlTypeMgr.new_();
public Hash_adp Vars() {return vars;} Hash_adp vars = Hash_adp_.New();
public int StreamPos() {return streamPos;} int streamPos;
public void ThrowErrors_set(boolean v) {throwErrors = v;} private boolean throwErrors = true;
public int PrvSymType() {return prvSymType;} public void PrvSymType_set(int v) {prvSymType = v;} int prvSymType = GfmlNdeSymType.Null;
public int ChainIdNext() {return chainIdNext++;} int chainIdNext = 1;
public GfmlDoc XtoGfmlDoc(String raw) {
Init(raw);
CharStream stream = CharStream.pos0_(raw);
@@ -49,12 +52,12 @@ public class GfmlBldr {
curNdeFrame.NullArea_set(true);
curFrame = curNdeFrame;
}
@gplx.Internal protected void Frames_push(GfmlFrame newFrame) {
public void Frames_push(GfmlFrame newFrame) {
frameStack.Push(curFrame);
curFrame = newFrame;
if (curFrame.FrameType() == GfmlFrame_.Type_nde) curNdeFrame = GfmlFrame_nde_.as_(curFrame);
}
@gplx.Internal protected void Frames_end() {
public void Frames_end() {
if (frameStack.Count() == 0) {
UsrMsgs_fail(GfmlUsrMsgs.fail_Frame_danglingBgn());
return;
@@ -64,7 +67,7 @@ public class GfmlBldr {
oldFrame.Build_end(this, curFrame);
if (curFrame.FrameType() == GfmlFrame_.Type_nde) curNdeFrame = GfmlFrame_nde_.as_(curFrame);
}
@gplx.Internal protected void UsrMsgs_fail(UsrMsg um) {
public void UsrMsgs_fail(UsrMsg um) {
GfmlUsrMsgs.MakeErr(this, um, raw);
stopBldr = true;
}

View File

@@ -13,7 +13,9 @@ The terms of each license can be found in the source code repository:
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.gfml; import gplx.*;
package gplx.gfml;
import gplx.types.basics.lists.Hash_adp;
import gplx.types.basics.lists.Hash_adp_;
public interface GfmlBldrCmd {
String Key();
void Exec(GfmlBldr bldr, GfmlTkn tkn);

View File

@@ -13,7 +13,8 @@ The terms of each license can be found in the source code repository:
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.gfml; import gplx.*;
package gplx.gfml;
import gplx.types.basics.utls.StringUtl;
class GfmlBldrCmd_pendingTkns_add implements GfmlBldrCmd {
public String Key() {return "gfml.pendingTkns_add";}
public void Exec(GfmlBldr bldr, GfmlTkn tkn) {bldr.CurFrame().WaitingTkns().Add(tkn);}
@@ -38,7 +39,7 @@ class GfmlBldrCmd_ndeBody_bgn implements GfmlBldrCmd {
public String Key() {return "gfml.nodeBody_bgn";}
public void Exec(GfmlBldr bldr, GfmlTkn tkn) {
bldr.CurNdeFrame().NdeBody_bgn(tkn);
bldr.CurNdeFrame().BgnPos_set(bldr.StreamPos() - String_.Len(tkn.Raw()));// stream has already advanced tkn.len so subtract
bldr.CurNdeFrame().BgnPos_set(bldr.StreamPos() - StringUtl.Len(tkn.Raw()));// stream has already advanced tkn.len so subtract
}
public static final GfmlBldrCmd_ndeBody_bgn Instance = new GfmlBldrCmd_ndeBody_bgn(); GfmlBldrCmd_ndeBody_bgn() {}
}
@@ -78,7 +79,7 @@ class GfmlBldrCmd_frameBgn implements GfmlBldrCmd {
GfmlFrame newFrame = frame.MakeNew(lxr.SubLxr());
bldr.Frames_push(newFrame);
bldr.CurFrame().WaitingTkns().Add(tkn);
bldr.CurNdeFrame().BgnPos_set(bldr.StreamPos() - String_.Len(tkn.Raw()));// stream has already advanced tkn.len so subtract
bldr.CurNdeFrame().BgnPos_set(bldr.StreamPos() - StringUtl.Len(tkn.Raw()));// stream has already advanced tkn.len so subtract
}
GfmlLxr lxr; GfmlFrame frame;
public static GfmlBldrCmd_frameBgn new_(GfmlFrame frame, GfmlLxr lxr) {
@@ -97,7 +98,7 @@ class GfmlBldrCmd_frameEnd implements GfmlBldrCmd {
else
bldr.CurFrame().WaitingTkns().Add(tkn);
if (bldr.CurNdeFrame().CurNdeStartType() == GfmlNdeStartType.Prop
&& String_.Eq(tkn.Raw(), "}")) return;
&& StringUtl.Eq(tkn.Raw(), "}")) return;
bldr.Frames_end();
}
int ndeSymType;
@@ -112,7 +113,7 @@ class GfmlBldrCmd_whitespace implements GfmlBldrCmd {
public String Key() {return "gfml.whitespace_exec";}
public void Exec(GfmlBldr bldr, GfmlTkn tkn) {
if (bldr.CurNdeFrame().waitingTkns.Len() > 0) {
GfmlObj t = (GfmlObj)bldr.CurNdeFrame().waitingTkns.Get_at(bldr.CurNdeFrame().waitingTkns.Len() - 1);
GfmlObj t = (GfmlObj)bldr.CurNdeFrame().waitingTkns.GetAt(bldr.CurNdeFrame().waitingTkns.Len() - 1);
if (t.ObjType() == GfmlObj_.Type_nde)
bldr.CurNdeFrame().IdxNdeBgn_set(bldr.CurNdeFrame().WaitingTkns().Len() + 1);
}

View File

@@ -1,22 +1,22 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012-2017 gnosygnu@gmail.com
XOWA is licensed under the terms of the General Public License (GPL) Version 3,
or alternatively under the terms of the Apache License Version 2.0.
You may use XOWA according to either of these licenses as is most appropriate
for your project on a case-by-case basis.
The terms of each license can be found in the source code repository:
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012-2017 gnosygnu@gmail.com
XOWA is licensed under the terms of the General Public License (GPL) Version 3,
or alternatively under the terms of the Apache License Version 2.0.
You may use XOWA according to either of these licenses as is most appropriate
for your project on a case-by-case basis.
The terms of each license can be found in the source code repository:
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.gfml; import gplx.*;
class GfmlBldr_ {
@gplx.Internal protected static GfmlBldr new_() {return new GfmlBldr();}
@gplx.Internal protected static GfmlBldr default_() {
public static GfmlBldr new_() {return new GfmlBldr();}
public static GfmlBldr default_() {
GfmlBldr rv = new GfmlBldr();
GfmlLxr rootLxr = GfmlDocLxrs.Root_lxr();
GfmlDocLxrs.Default_lxr(rv.Doc().LxrRegy(), rootLxr);

View File

@@ -1,19 +1,21 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012-2017 gnosygnu@gmail.com
XOWA is licensed under the terms of the General Public License (GPL) Version 3,
or alternatively under the terms of the Apache License Version 2.0.
You may use XOWA according to either of these licenses as is most appropriate
for your project on a case-by-case basis.
The terms of each license can be found in the source code repository:
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.gfml; import gplx.*;
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012-2017 gnosygnu@gmail.com
XOWA is licensed under the terms of the General Public License (GPL) Version 3,
or alternatively under the terms of the Apache License Version 2.0.
You may use XOWA according to either of these licenses as is most appropriate
for your project on a case-by-case basis.
The terms of each license can be found in the source code repository:
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.gfml;
import gplx.types.errs.ErrUtl;
import gplx.types.basics.utls.StringUtl;
class GfmlFrame_ {
public static GfmlFrame comment_() {return new GfmlFrame_comment();}
public static GfmlFrame quote_() {return new GfmlFrame_quote();}
@@ -28,7 +30,7 @@ abstract class GfmlFrame_base implements GfmlFrame {
public GfmlLxr Lxr() {return lxr;} GfmlLxr lxr;
public abstract int FrameType();
public int BgnPos() {return bgnPos;} public void BgnPos_set(int v) {bgnPos = v;} int bgnPos;
public GfmlObjList WaitingTkns() {return waitingTkns;} @gplx.Internal protected final GfmlObjList waitingTkns = GfmlObjList.new_();
public GfmlObjList WaitingTkns() {return waitingTkns;} public final GfmlObjList waitingTkns = GfmlObjList.new_();
public GfmlFrame MakeNew(GfmlLxr newLxr) {GfmlFrame_base rv = MakeNew_hook(); rv.ctor_(newLxr); return rv;}
public abstract void Build_end(GfmlBldr bldr, GfmlFrame ownerFrame);
protected abstract GfmlFrame_base MakeNew_hook();
@@ -65,9 +67,9 @@ class GfmlFrame_eval extends GfmlFrame_base {
return new GfmlVarTkn("tkn:eval", composite.SubTkns(), evalContext, varKey);
}
static String[] ExtractContextKey(String raw) {
String[] ary = String_.Split(raw, ".");
String[] ary = StringUtl.Split(raw, ".");
if (ary.length == 2) return ary; // NOOP: elems already assigned; context = ary[0]; key = ary[1];
if (ary.length > 2) throw Err_.new_wo_type("invalid context key for eval frame; should have 0 or 1 dlms", "key", raw);
if (ary.length > 2) throw ErrUtl.NewArgs("invalid context key for eval frame; should have 0 or 1 dlms", "key", raw);
String[] rv = new String[2];
rv[0] = GfmlVarCtx_.DefaultKey;
rv[1] = ary[0];
@@ -75,7 +77,7 @@ class GfmlFrame_eval extends GfmlFrame_base {
}
}
class GfmlFrameUtl {
@gplx.Internal protected static void AddFrameTkn(GfmlFrame ownerFrame, GfmlTkn frameTkn) {
public static void AddFrameTkn(GfmlFrame ownerFrame, GfmlTkn frameTkn) {
GfmlFrame_nde nodeFrame = GfmlFrame_nde_.as_(ownerFrame);
if (nodeFrame != null) // ownerFrame is node: set frameTkn as dataTkn
nodeFrame.DatTkn_set(frameTkn);

View File

@@ -162,8 +162,8 @@ class GfmlFrame_nde extends GfmlFrame_base {
}
@Override protected GfmlFrame_base MakeNew_hook() {return new GfmlFrame_nde();}
public void IdxNdeBgn_set(int v) {tknMgr.IdxNdeBgn_set(v);}
@gplx.Internal protected void WaitingTkns_AddSym(GfmlTkn tkn, int type) {waitingTkns.Add(tkn); bldr.PrvSymType_set(type);}
@gplx.Internal protected void HndTkn_SetFromDatTkn() {
public void WaitingTkns_AddSym(GfmlTkn tkn, int type) {waitingTkns.Add(tkn); bldr.PrvSymType_set(type);}
public void HndTkn_SetFromDatTkn() {
GfmlTkn hndTkn = tknMgr.DatTkn_pop();
if (hndTkn != GfmlTkn_.Null)
nde.HndTkn_set(hndTkn);
@@ -201,22 +201,22 @@ class GfmlFrame_nde extends GfmlFrame_base {
class GfmlFrame_nde_ {
public static GfmlFrame_nde as_(Object obj) {return obj instanceof GfmlFrame_nde ? (GfmlFrame_nde)obj : null;}
public static GfmlFrame_nde node_(GfmlBldr bldr, GfmlNde newNde) {return GfmlFrame_nde.new_(bldr, newNde, bldr.CurFrame().Lxr());}
@gplx.Internal protected static GfmlFrame_nde root_(GfmlBldr bldr, GfmlNde newNde, GfmlLxr newLxr) {return GfmlFrame_nde.new_(bldr, newNde, newLxr);}
@gplx.Internal protected static final GfmlFrame_nde OwnerRoot_ = null;
@gplx.Internal protected static void TransferToNde(GfmlObjList waitingTkns, GfmlNde nde, int bgn) {
public static GfmlFrame_nde root_(GfmlBldr bldr, GfmlNde newNde, GfmlLxr newLxr) {return GfmlFrame_nde.new_(bldr, newNde, newLxr);}
public static final GfmlFrame_nde OwnerRoot_ = null;
public static void TransferToNde(GfmlObjList waitingTkns, GfmlNde nde, int bgn) {
int end = waitingTkns.Len();
for (int i = bgn; i < end; i++) {
GfmlObj tkn = waitingTkns.Get_at(i);
GfmlObj tkn = waitingTkns.GetAt(i);
nde.SubObjs_Add(tkn);
}
if (bgn != end) // ignore if bgn == end
waitingTkns.DelRange(bgn, end - 1);
}
@gplx.Internal protected static void TransferToAtr(GfmlObjList src, GfmlAtr trg, int bgn, int end) {
public static void TransferToAtr(GfmlObjList src, GfmlAtr trg, int bgn, int end) {
int len = end - bgn;
if (len <= 0 || end == -1) return; // -1 b/c calling proc passes end - 1, and end may be 0
for (int i = 0; i < len; i++)
trg.SubObjs_Add(src.Get_at(i + bgn));
trg.SubObjs_Add(src.GetAt(i + bgn));
src.DelRange(bgn, end - 1);
}
}

View File

@@ -13,13 +13,14 @@ The terms of each license can be found in the source code repository:
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.gfml; import gplx.*;
package gplx.gfml;
import gplx.types.basics.utls.StringUtl;
class GfmlFrame_ndeTknMgr {
public int IdxAtrBgn() {return idxAtrBgn;} int idxAtrBgn, idxAtrEnd;
public int IdxNdeBgn() {return idxNdeBgn;} public void IdxNdeBgn_set(int v) {idxNdeBgn = v;} int idxNdeBgn = 0;
void IdxAtr_clear() {idxAtrBgn = 0; idxAtrEnd = -1;}
@gplx.Internal protected void IdxAtrBgn_setHack(int v) {idxAtrBgn = v; idxAtrEnd = v + 1;}
@gplx.Internal protected void IdxNdeBgn_setToAtrBgn() {
public void IdxAtrBgn_setHack(int v) {idxAtrBgn = v; idxAtrEnd = v + 1;}
public void IdxNdeBgn_setToAtrBgn() {
if (idxAtrEnd == -1) return;
idxNdeBgn = idxAtrBgn;
this.IdxAtr_clear(); // newNode starting; old atr range no longer valid
@@ -29,7 +30,7 @@ class GfmlFrame_ndeTknMgr {
if (datTkn == GfmlTkn_.Null) return;
hndTkn = DatTkn_pop();
}
@gplx.Internal protected void HndTkn_setByDatTknOrFail() {
public void HndTkn_setByDatTknOrFail() {
if (datTkn == GfmlTkn_.Null) {bldr.UsrMsgs_fail(GfmlUsrMsgs.fail_DatTkn_notFound()); return;} // ex: < : >
if (hndTkn != GfmlTkn_.Null) {bldr.UsrMsgs_fail(GfmlUsrMsgs.fail_HndTkn_alreadyExists()); return;} // ex: < a:b: >
hndTkn = DatTkn_pop();
@@ -44,29 +45,29 @@ class GfmlFrame_ndeTknMgr {
if (keyTkn != GfmlTkn_.Null) {bldr.UsrMsgs_fail(GfmlUsrMsgs.fail_KeyTkn_alreadyExists()); return;} // ex: < a=[b=] >
keyTkn = DatTkn_pop();
}
@gplx.Internal protected GfmlTkn DatTkn_pop() {GfmlTkn rv = datTkn; datTkn = GfmlTkn_.Null; return rv;} GfmlTkn datTkn = GfmlTkn_.Null;
@gplx.Internal protected void DatTkn_set(GfmlTkn tkn) {
public GfmlTkn DatTkn_pop() {GfmlTkn rv = datTkn; datTkn = GfmlTkn_.Null; return rv;} GfmlTkn datTkn = GfmlTkn_.Null;
public void DatTkn_set(GfmlTkn tkn) {
this.ConsumeWaitingDatTkn(frame.CurNde());
idxAtrBgn = frame.waitingTkns.Len();
idxAtrEnd = idxAtrBgn + 1;
frame.waitingTkns.Add(tkn);
datTkn = tkn;
}
@gplx.Internal protected void ExecMakeAtr(GfmlTkn itmKeyTkn, GfmlTkn valTkn) {
public void ExecMakeAtr(GfmlTkn itmKeyTkn, GfmlTkn valTkn) {
frame.waitingTkns.Add(valTkn);
idxAtrEnd = frame.waitingTkns.Len();
this.MakeAtr(itmKeyTkn, valTkn);
}
@gplx.Internal protected void ExecXferTkns_ndeAll(GfmlNde nde) {ExecXferTkns(nde, 0);}
@gplx.Internal protected void ExecXferTkns_ndeBgn(GfmlNde nde) {ExecXferTkns(nde, this.IdxNdeBgn());}
public void ExecXferTkns_ndeAll(GfmlNde nde) {ExecXferTkns(nde, 0);}
public void ExecXferTkns_ndeBgn(GfmlNde nde) {ExecXferTkns(nde, this.IdxNdeBgn());}
void ExecXferTkns(GfmlNde nde, int from) {
this.ConsumeWaitingDatTkn(nde);
GfmlFrame_nde_.TransferToNde(frame.waitingTkns, nde, from);
}
@gplx.Internal protected void ConsumeWaitingDatTkn(GfmlNde nde) {
public void ConsumeWaitingDatTkn(GfmlNde nde) {
if (datTkn == GfmlTkn_.Null) return; // no datTkn; return;
if ( bldr.CurNdeFrame().CurNdeStartType() == GfmlNdeStartType.Dot
&& String_.Len_eq_0(nde.Hnd())) // if cur hnd is empty, use datTkn for hndTkn
&& StringUtl.IsNullOrEmpty(nde.Hnd())) // if cur hnd is empty, use datTkn for hndTkn
frame.HndTkn_SetFromDatTkn();
else
this.MakeAtr(GfmlTkn_.Null, this.DatTkn_pop());

View File

@@ -13,8 +13,13 @@ The terms of each license can be found in the source code repository:
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.gfml; import gplx.*;
import gplx.core.strings.*;
package gplx.gfml;
import gplx.types.basics.lists.List_adp;
import gplx.types.basics.lists.List_adp_;
import gplx.types.basics.utls.IntUtl;
import gplx.types.basics.utls.StringUtl;
import gplx.types.commons.String_bldr;
import gplx.types.commons.String_bldr_;
class GfmlStringHighlighter {
public String Raw() {return raw;} public GfmlStringHighlighter Raw_(String v) {raw = v; return this;} private String raw;
public int ExcerptLen() {return excerptLen;} public GfmlStringHighlighter ExcerptLen_(int v) {excerptLen = v; return this;} int excerptLen = 40;
@@ -31,24 +36,24 @@ class GfmlStringHighlighter {
String_bldr posBfr = String_bldr_.new_(), rawBfr = String_bldr_.new_(), symBfr = String_bldr_.new_();
List_adp symList = List_adp_.New();
int bgnPos = 0, endPos = 0;
int rawLen = String_.Len(raw); int rawLenDigits = Int_.DigitCount(rawLen);
int rawLen = StringUtl.Len(raw); int rawLenDigits = IntUtl.CountDigits(rawLen);
int rawBfrBgn = -1, marksLastIdx = marks.IdxLast();
for (int i = 0; i < marks.Len(); i++) {
GfmlStringHighlighterMarker curMark = (GfmlStringHighlighterMarker)marks.Get_at(i);
GfmlStringHighlighterMarker nxtMark = i == marksLastIdx ? GfmlStringHighlighterMarker.Null : (GfmlStringHighlighterMarker)marks.Get_at(i + 1);
GfmlStringHighlighterMarker curMark = (GfmlStringHighlighterMarker)marks.GetAt(i);
GfmlStringHighlighterMarker nxtMark = i == marksLastIdx ? GfmlStringHighlighterMarker.Null : (GfmlStringHighlighterMarker)marks.GetAt(i + 1);
// bgnPos
bgnPos = XtoBgnPos(curMark.Pos(), endPos);
if (i == 0) rawBfrBgn = bgnPos;
// endPos
int nxtMarkPos = nxtMark == GfmlStringHighlighterMarker.Null ? Int_.Max_value : nxtMark.Pos();
int nxtMarkPos = nxtMark == GfmlStringHighlighterMarker.Null ? IntUtl.MaxValue : nxtMark.Pos();
endPos = curMark.Pos() + excerptLen;
if (endPos >= nxtMarkPos) endPos = nxtMarkPos;
if (endPos > rawLen ) endPos = rawLen + 1;
// build bfrs
for (int j = bgnPos; j < endPos; j++) {
char rawChar = j == rawLen ? ' ' : String_.CharAt(raw, j);
char rawChar = j == rawLen ? ' ' : StringUtl.CharAt(raw, j);
if (rawChar == '\t') {posBfr.Add("t"); rawBfr.Add(" ");}
else if (rawChar == '\n') {posBfr.Add("n"); rawBfr.Add(" ");}
else {
@@ -64,27 +69,27 @@ class GfmlStringHighlighter {
int nxtMarkBgn = XtoBgnPos(nxtMark.Pos(), endPos);
int gap = nxtMarkBgn - endPos;
if (gap > 0) {
int gapDigits = Int_.DigitCount(gap);
posBfr.Add_fmt("[{0}]", Int_.To_str_pad_bgn_zero(gap, gapDigits));
rawBfr.Add_fmt("[{0}]", String_.Repeat(".", gapDigits));
symBfr.Add_fmt(" {0} ", String_.Repeat(" ", gapDigits));
int gapDigits = IntUtl.CountDigits(gap);
posBfr.AddFmt("[{0}]", IntUtl.ToStrPadBgnZero(gap, gapDigits));
rawBfr.AddFmt("[{0}]", StringUtl.Repeat(".", gapDigits));
symBfr.AddFmt(" {0} ", StringUtl.Repeat(" ", gapDigits));
}
if (curMark.Sym() != ' ')
symList.Add(String_.Format("[{0}] {1} {2}", Int_.To_str_pad_bgn_zero(curMark.Pos(), rawLenDigits), curMark.Sym(), curMark.Msg()));
symList.Add(StringUtl.Format("[{0}] {1} {2}", IntUtl.ToStrPadBgnZero(curMark.Pos(), rawLenDigits), curMark.Sym(), curMark.Msg()));
}
if (rawBfrBgn == 0) {
posBfr.Add_at(0, "<");
rawBfr.Add_at(0, " ");
symBfr.Add_at(0, " ");
posBfr.AddAt(0, "<");
rawBfr.AddAt(0, " ");
symBfr.AddAt(0, " ");
}
List_adp rv = List_adp_.New();
rv.Add(posBfr.To_str());
rv.Add(rawBfr.To_str());
rv.Add(symBfr.To_str());
rv.Add(posBfr.ToStr());
rv.Add(rawBfr.ToStr());
rv.Add(symBfr.ToStr());
if (symList.Len() > 0)
rv.Add("");
for (int i = 0; i < symList.Len(); i++)
rv.Add((String)symList.Get_at(i));
rv.Add((String)symList.GetAt(i));
return rv.ToStrAry();
}
List_adp marks = List_adp_.New();