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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user