AMADEUS html plain
import java.util.*;
import java.awt.*;
import java.io.*;
class BaseLanguageGRUPID extends BaseLanguage
static AmFrame frame;
raam, millele dialoogiaken
static AmCanvas c;
BaseLanguageGRUPID()
Sketch veateade(String veateade)
tagastatakse veateate moodulskeemi sisaldav tulemus-skeem
Branch b = new Branch(Scheme.SIMPLE,
new BaseLanguageGRUPID());
Sketch tulem = new Sketch(Scheme.SIMPLE, b,
new BaseLanguageGRUPID());
teen vea moodulskeemi (üks haru)
Branch haru = new Branch(Scheme.SIMPLE,
new BaseLanguageGRUPID());
Sketch lause = new Sketch(Scheme.MODULE, haru,
new BaseLanguageGRUPID());
lause.comment = new Row(AmLocale.Error(), Default.conditionColor);
veateade moodulskeemi sisse
Text veaTekst = new Text();
* int j = 1; ; j++
int i = veateade.indexOf("\n");
? i == -1
<======
String osa = veateade.substring(0, i);
veaTekst.insert(new Row(osa.trim(), Default.conditionColor), j);
veateade = veateade.substring(i+1);
veaTekst.remove(0);
PrimitiveMember pm =
new PrimitiveMember(Primitive.SIMPLE, veaTekst);
haru.insert(pm, 0);
haru.removeMember(haru.body.size() - 1);
panen selle skeemi tulemuse harusse (b)
b.insert(lause, 0);
esikohale
eemaldan esialgse tühja primitiivliikme
b.removeMember(b.body.size() - 1);
<======tulem
public boolean sketchify(SketchyText skt0,
main = source
SketchyText skt1,
main = new
AmFrame dialogTargetFrame)
Antud: 1) skeemtekst skt0
taval. jooksvas aknas;
2) skeemtekst skt1, selle juurskeem (skt1.main) on
tühi üheharuline lihtskeem - tulemuse "juur",
vastab mitteterminalile "tekst"
Tulemus: analüüsitud lausetest saadud moodulskeemid
lisatud skeemi skt1.main sisse (haru liikmeteks)
skt0 viia välja liht-tekstifailina (skt0 ==> fnimi0)
String fnimi0 = Default.tempSketchifyXmlSource;
las olla see
skt0.file = new AmFile(skt0);
skt0.file.name = fnimi0;
skt0.file.writeTextFile(fnimi0);
skeemistada fnimi0
Sketch s = null;
parser: fnimi0 ==> Sketch s
!!
s = Grupid.sketchify(fnimi0);
! (FileNotFoundException e)
System.out.println(e.getMessage());
System.exit(0);
! (ParseException e)
String viga = e.getMessage();
System.out.println("baseLanguageGRUPID:" + viga);
s = veateade(viga);
veateatega moodulskeemi sisaldav
lisada veel vigane rida skeemi s algusesse
rea number
int i = viga.indexOf(" line ");
? i == -1
<==========
String reaNr = viga.substring(i+6);
StringTokenizer st = new StringTokenizer(reaNr, ", ");
reaNr = st.nextToken();
int reanr = new Integer(reaNr).intValue() - 1;
veeru number
i = viga.indexOf(" column ");
? i == -1
<==========
String veeruNr = viga.substring(i+8);
st = new StringTokenizer(veeruNr, "., ");
veeruNr = st.nextToken();
int veerunr = new Integer(veeruNr).intValue();
PrimitiveMember pm =
(PrimitiveMember)(skt0.main.branch(0).member(reanr));
String ps = pm.text.toString();
ps on vigase rea tekst
Text t = new Text();
String eel = " ";
eel: eeltühikud reanumbrile
? reanr > 999
eel = "";
neljakohaline
<======
? reanr > 99
eel = " ";
kolmekohaline
<======
? reanr > 9
eel = " ";
kahekohaline
String rn = "" +(char)184+(char)182;
realõpp: return ja uusrida
Row r = new Row(eel+reaNr+": "+ps+rn, Default.foregroundColor);
r on vigane rida koos reanumbriga
return ja uusrida halliks
int j = r.elements.size() -1;
r.getElement(j-1);
r.sy.color = Default.selectionColor;
r.getElement(j);
r.sy.color = Default.selectionColor;
reanumber halliks
* int k = 1; k < 6; k++
r.getElement(k);
r.sy.color = Default.selectionColor;
vigase osa algussümbol punaseks
r.getElement(veerunr + 6);
r.sy.color = Default.conditionColor;
lisada rida teksti
t.insert(r, 0);
t.remove(1);
lisada tekst skeemi s
s.branch(0).insert(
new PrimitiveMember(Primitive.SIMPLE, t),0);
s on nüüd mudelile vastav, teksti kujutav lihtskeem (või veateade)
skt1 <== s
s ainuke haru panna skt1.main haruks
skt1.main.insert(s.branch(0), 0);
lisada uus haru
skt1.main.removeMember(1);
eemaldada vana (tühi) haru
skt1.main.baseLanguage =
BaseLanguage.newBaseLanguage(BaseLanguage.GRUPID);
<======true
normalize
boolean normalize(SketchyText skt0, SketchyText skt1,
AmFrame f)
System.out.println("BaseLangGRUPID!!!!");
<======false
REDUCE praegu: XML oma
* static
skeemi ja haru päisest saadavad (<== checkHead()):
üldskeemi atribuudid
byte gotType;
skeemi tüüp
BaseLanguage gotBaseLanguage;
baaskeel
byte gotViewType;
vaade
boolean gotIcon;
ikoniseerituse tunnus
segmendi atribuudid
String gotFace;
int gotSize;
int gotStyle;
int gotColorR;
int gotColorG;
int gotColorB;
PICTURE attribuudid:
String gotSrc;
int gotAlign;
gotIcon on juba ülevalpool
String comment;
Row row;
Vector heads;
Vector branches;
void reduce(Sketch s)
//redutseeritakse ainult normaliseeritut
<==========
static void reduceRek(Sketch s)
skeemi algus, kui on s normaliseeritud
getAttributes(s);
eemaldab ka olnud päised
s.type = gotType;
View.newView(gotViewType, s);
s.baseLanguage = gotBaseLanguage;
s.icon = gotIcon;
s.comment = new Row("", Default.commentColor);
Branch br = s.branch(0);
int n = br.body.size();
* int i = 0; i < n; i++
töödeldaSkeemiLiige(s, (Sketch)(br.member(0)));
s.removeMember(0);
private static void getAttributes(Scheme s)
gotType = 0;
gotBaseLanguage = BaseLanguage.newBaseLanguage((byte)0);
gotViewType = 0;
gotIcon = false;
int n = s.head.size();
* int i = 0; i < n ; i++
PrimitiveHead he = s.primitiveHead(0);
String r = he.text.toString();
? r.indexOf("type=\"") == 0
gotType = (byte)(r.charAt(6) - '0');
<======
? r.indexOf("base=\"") == 0
byte b = (byte)(r.charAt(6) - '0');
gotBaseLanguage = BaseLanguage.newBaseLanguage(b);
<======
? r.indexOf("view=\"") == 0
gotViewType = (byte)(r.charAt(6) - '0');
<======
? r.indexOf("icon=\"") == 0
? r.indexOf("\"no\"") == 5
gotIcon = false;
<======
s.removePrimitiveHead(0);
static void töödeldaSkeemiLiige(Sketch s, Sketch sk)
s - peremees-skeem, sk - töödeldav skeem
String comm = sk.comment.toString();
? comm.equals("COMMENT")
s.comment = getComment(sk);
<======
? comm.equals("PRIMITIVE_HEAD")
s.insert(getPrimitiveHead(sk, true), s.head.size());
<======
? comm.equals("BRANCH")
Branch newBr = getBranch(sk);
s.insert(newBr, s.body.size());
static Row getComment(Sketch sk)
Row r = getRow(sk);
//r.setColor(Default.commentColor);
<======r
static PrimitiveHead getPrimitiveHead(Sketch sk, boolean isSketchHead)
sk on skeem kommentaariga PRIMITIVE_HEAD
päise tüüp:
int type = 0;
? sk.head.size() != 0
String str = sk.primitiveHead(0).text.row(0).toString();
type = Integer.parseInt(str.substring(6,7));
Branch br = sk.branch(0);
Sketch sktxt = (Sketch)(br.member(0));
TEXT
sk.remove();
Text t = getText(sktxt);
String comm = sk.comment.toString();
? isSketchHead
t.setColor(Default.sketchHeadColor);
<======
t.setColor(Default.branchHeadColor);
<======new PrimitiveHead((byte)type, t)
static PrimitiveMember getPrimitive(Sketch sk)
sk on skeem kommentaariga PRIMITIVE
primitiivi tüüp:
int type = Primitive.SIMPLE;
? sk.head.size() != 0
String str = sk.primitiveHead(0).text.row(0).toString();
type = Integer.parseInt(str.substring(6,7));
Branch br = sk.branch(0);
Sketch sktxt = (Sketch)(br.member(0));
TEXT
sk.remove();
Text t = getText(sktxt);
? type == Primitive.CONDITION
t.setColor(Default.conditionColor);
<======new PrimitiveMember((byte)type, t)
static Arrow getArrow(Sketch sk)
sk on skeem kommentaariga ARROW
noole tüüp ja tase:
int type = Primitive.STRONG_ARROW;
int level = 0;
kompil.
String str;
? sk.head.size() == 2
str = sk.primitiveHead(0).text.row(0).toString();
type = Integer.parseInt(str.substring(6,7));
str = sk.primitiveHead(1).text.row(0).toString();
//level = Integer.parseInt(str.substring(7,8));
<======
on ainult tase
str = sk.primitiveHead(0).text.row(0).toString();
//level = Integer.parseInt(str.substring(7,8));
String str1 = str.substring(7, str.lastIndexOf("\""));
level = Integer.parseInt(str1);
Branch br = sk.branch(0);
Sketch sktxt = (Sketch)(br.member(0));
TEXT
sk.remove();
Text t = getText(sktxt);
Arrow ar = new Arrow((byte)type, level);
ar.text = t;
<======ar
static Text getText(Sketch sk)
sk on skeem kommentaariga TEXT
Text res = new Text();
Branch br = sk.branch(0);
int n = br.body.size();
int j = 0;
rea number
* int i = 0; i < n; i++
Sketch ask = (Sketch)(br.member(0));
Row r = getRow(ask);
//
? r.elements.size() > 1
r.getElement(1);
Symbol x = r.sy;
System.out.println("BLXML:getRow():row="+
row.toString());
System.out.println("BLXML:getRow():col="+
x.color);
? ask.comment.toString().equals("ROW")
res.insert(r, j++);
<======
//r.setColor(Default.commentColor);
res.comment = r;
res.remove(res.rows.size()-1);
sk.remove();
<======res
static Row getRow(Sketch sk)
sk on skeem kommentaariga ROW või COMMENT
Branch br = sk.branch(0);
sk.remove();
Color leadingColor = null;
comment = sk.comment.toString();
? comment.equals("ROW")
leadingColor = Default.foregroundColor;
<======
leadingColor = Default.commentColor;
? br.body.size() == 0
on tühi rida
<======new Row(leadingColor)
? !isRichRow(sk)
on plain row
PrimitiveMember p = (PrimitiveMember)(br.member(0));
row = p.text.row(0);
String r = row.toString();
kui on CDATA
? r.indexOf("
? r.lastIndexOf("]]>") == r.length() - 3
eemaldada 3 viimast
* int i = 0; i < 3; i++
row.remove(row.elements.size()-1);
eemaldada 9 esimest
* int i = 0; i < 9; i++
]]> asendada ]]> -ga:
r = row.toString();
int k = r.indexOf("]]>");
? k < 0
<======
k++;
reas on imdeks 1 võrra suurem kui sõnes
row.getElement(k);
Symbol sym = row.sy;
eemaldada 15 kohalt k
* int i = 0; i < 15; i++
lisada ]]>
row.insert(new Symbol('>', sym.font, sym.color), k);
row.insert(new Symbol(']', sym.font, sym.color), k);
row.insert(new Symbol(']', sym.font, sym.color), k);
<==========row
on rich row
row = new Row(leadingColor);
row: kuhu hakatakse elemente lisama
int n = br.body.size();
* int i = 0; i < n; i++
Sketch ask = (Sketch)(br.member(0));
comment = ask.comment.toString();
? comment.equals("SEGM")
addElementsFromSegment(ask, row);
<======
? comment.equals("PICTURE")
addElementPicture(ask, row);
<======
? comment.equals("HYPERELEM")
addElementFromHyperElem(ask, row)
row.planSize();
//res.remove(res.rows.size()-1);
//sk.remove();
<======row
static Branch getBranch(Sketch sk)
sk on skeem kommentaariga BRANCH
haru algus:
getAttributes(sk);
eemaldab ka olnud päised
Branch res = new Branch(gotType, gotBaseLanguage);
View.newView(gotViewType, res);
res.icon = gotIcon;
Branch br = sk.branch(0);
int n = br.body.size();
* int i = 0; i < n; i++
töödeldaHaruLiige(res, (Sketch)(br.member(0)));
res.removeMember(0);
sk.remove();
<======res
static void töödeldaHaruLiige(Branch b, Sketch sk)
b - peremees - loodav haru, sk - töödeldav skeem (BRANCH)
String comm = sk.comment.toString();
? comm.equals("COMMENT")
b.comment = getComment(sk);
<======
? comm.equals("PRIMITIVE_HEAD")
b.insert(getPrimitiveHead(sk, false), b.head.size());
<======
? comm.equals("PRIMITIVE")
PrimitiveMember p = getPrimitive(sk);
b.insert(p, b.body.size());
<======
? comm.equals("ARROW")
Arrow ar = getArrow(sk);
b.insert(ar, b.body.size());
<======
? comm.equals("SKETCH")
reduceRek(sk);
sk.remove();
b.insert(sk, b.body.size());
static boolean isRichRow(Sketch sk)
sk on skeem kommentaariga ROW või COMMENT
true, kui sk sisaldab mingit alamskeemi
Branch br = sk.branch(0);
int n = br.body.size();
* int i = 0; i < n; i++
otsida alamskeemi
Object o = br.member(i);
? o instanceof Sketch
<==========true
<======false
private static void getSegmentAttributes(Sketch s)
gotFace = "TimesRoman";
gotSize = 16;
gotStyle = 0;
gotColorR = 0;
gotColorG = 0;
gotColorB = 0;
int n = s.head.size();
* int i = 0; i < n ; i++
PrimitiveHead he = s.primitiveHead(0);
String r = he.text.toString();
? r.indexOf("face=\"") == 0
gotFace = r.substring(6, r.length() - 1);
<======
? r.indexOf("size=\"") == 0
gotSize =
new Integer(r.substring(6, r.length() - 1)).intValue();
<======
? r.indexOf("style=\"") == 0
gotStyle =
new Integer(r.substring(7, r.length() - 1)).intValue();
<======
? r.indexOf("color=\"") == 0
StringTokenizer st = new StringTokenizer(r, "\",");
st.nextToken();
color=
gotColorR = new Integer(st.nextToken()).intValue();
gotColorG = new Integer(st.nextToken()).intValue();
gotColorB = new Integer(st.nextToken()).intValue();
s.removePrimitiveHead(0);
static void addElementsFromSegment(Sketch sk, Row givenRow)
sk on skeem kommentaariga SEGM, givenRow tuleb täiendada
getSegmentAttributes(sk);
Branch br = sk.branch(0);
PrimitiveMember p = null;
kompil
skeemistamisel kahjuks tühiku(te)st koosnev rida jääb ära
? br.body.size() == 0
p = new PrimitiveMember(Primitive.SIMPLE, new Text());
<======
p = (PrimitiveMember)(br.member(0));
sk.remove();
Row rida = p.text.row(0);
String r = rida.toString();
r on segmendis sk olevate sümbolite järjend
kui on CDATA
? r.indexOf("
? r.lastIndexOf("]]>") == r.length() - 3
rida-s ]]> asendada ]]> -ga:
r = rida.toString();
int k = r.indexOf("]]>");
? k < 0
<======
k++;
reas on indeks 1 võrra suurem kui sõnes
rida.getElement(k);
Symbol sym = rida.sy;
eemaldada 15 kohalt k
* int i = 0; i < 15; i++
lisada ]]>
rida.insert(new Symbol('>', sym.font, sym.color), k);
rida.insert(new Symbol(']', sym.font, sym.color), k);
rida.insert(new Symbol(']', sym.font, sym.color), k);
r-s eemaldada 9 esimest ja 3 viimast:
r = rida.toString();
r = r.substring(9, r.length() - 3);
r = replaceCharEntities(r);
r on korrastatud, sealt sümbolid lisada givenRow-sse
Color col = new Color(gotColorR, gotColorG, gotColorB);
Font font = new Font(gotFace, gotStyle, gotSize);
AmFrame fr = (AmFrame)(Am.frames.elementAt(0));
AmCanvas c = (AmCanvas)(fr.viewArea);
Graphics g = c.getGraphics();
* int i = 0; i < r.length(); i++
col = AmFont.color[AmFont.No(col)];
font = AmFont.font[AmFont.No(font, g)];
Symbol sm = new Symbol(r.charAt(i), font, col);
givenRow.append(sm);
//sk.remove();
static String replaceCharEntities(String r)
asendab sümbolitega suuremad kui 127
String res = "";
r on see, kust (veel) kanda tulemusse
int i = r.indexOf("");
? i<0
enam pole olemeid
<==========res + r
r = xxxxyyyyyy
res += r.substring(0, i);
kuni sümbololemini
r = r.substring(i);
r = yyyyyy
int j = r.indexOf(";");
sümbololemi lõpp
? j < 0
pole (enam) ";"
<==========res+r
on ";" r = yyy;zzzzzzzz
kas asendada on vaja?
String olemiSisu = r.substring(2, j);
int sisu = -1;
kompil
boolean vaja = true;
kas vaja?
!!
sisu = new Integer(olemiSisu).intValue();
? sisu < 128
vaja = false;
! (NumberFormatException e)
? vaja
char c = (char)sisu;
res += c;
asendatud sümbol tulemusse
r = r.substring(j+1);
r algus ära kuni semikoolonini
<======
res += r.substring(0, j+1);
asendamata osa tulemusse
r = r.substring(j+1);
r = zzzzz
static void addElementPicture(Sketch sk, Row givenRow)
sk on skeem kommentaariga PICTURE
getPictureAttributes(sk);
Branch br = sk.branch(0);
sk.remove();
int i = givenRow.elements.size();
Am.pictureBoard.processIMGs(givenRow, i, gotSrc);
panna veel align ja icon
givenRow.getElement(i);
givenRow.im.align = gotAlign;
givenRow.im.icon = gotIcon;
private static void getPictureAttributes(Sketch s)
gotSrc = "";
gotIcon = false;
gotAlign = AmImage.ALIGN_BOTTOM;
int n = s.head.size();
* int i = 0; i < n ; i++
PrimitiveHead he = s.primitiveHead(0);
String r = he.text.toString();
? r.indexOf("src=\"") == 0
gotSrc = r.substring(5, r.length() - 1);
<======
? r.indexOf("align=\"") == 0
gotAlign =
new Integer(r.substring(7, r.length() - 1)).intValue();
<======
? r.indexOf("icon=\"") == 0
? r.indexOf("\"no\"") == 5
gotIcon = false;
<======
s.removePrimitiveHead(0);
TEXTUALIZE AR 05.2003
(reapuhverdus: JK 06.06.03)
* static
Branch br1;
String clb;
--------------------------- JK 06.06.03
int REAPIKKUS;
StringBuffer reapuhver;
rea korjamiseks
--------------------------- JK 06.06.03.
boolean textualize(SketchyText skt0, SketchyText skt1,
AmFrame dialogTargetFrame)
frame = dialogTargetFrame;
Sketch sNew = skt1.main;
Sketch s = skt0.main;
sNew.baseLanguage = new BaseLanguageGRUPID();
sNew.branch(0).baseLanguage = new BaseLanguageGRUPID();
Branch br = s.branch(0);
br1 = sNew.branch(0);
br1.body.removeElementAt(0);
REAPIKKUS = 45;
--------------------------- JK 06.06.03.
reapuhver = new StringBuffer();
--------------------------- JK 06.06.03.
* int i = 0; i < br.body.size(); i++
Object o = br.member(i);
? o instanceof PrimitiveMember
<------
--------------------------- JK 06.06.03
viimane puhver välja:
REAPIKKUS = 0;
insertLine(" ");
--------------------------- JK 06.06.03.
<======true
private void textualize(Sketch sk)
insertLine("(");
Branch br = sk.branch(0);
* int i = 0; i < br.body.size(); i++
Object o = br.member(i);
? o instanceof PrimitiveMember
PrimitiveMember p= (PrimitiveMember) o;
insertLine(p.text.toString().trim());
<------
insertLine(")");
private void insertLine(String str)
--------------------------- JK 06.06.03
reapuhver.append(str);
? reapuhver.length() < REAPIKKUS
<======
str = reapuhver.toString();
--------------------------- JK 06.06.03.
Text newT = new Text();
newT.rows.removeElementAt(0);
newT.rows.addElement(
new Row(str, Default.foregroundColor));
br1.body.addElement(
new PrimitiveMember(Primitive.SIMPLE, newT));
reapuhver.setLength(0);
prepareTex
void prepareTex(Sketch s)
System.out.println("BaseLangXML!!!!");
<======
nextPrimitiveHeadType
byte nextPrimitiveHeadType(Scheme s, byte prev)
yledefineeritud
s - skeem, mille pa"is, prev - pa"ise tyyp
? (s instanceof Sketch)
??prev
? PrimitiveHead.SIMPLE:
<==============PrimitiveHead.LOOP
<==============PrimitiveHead.SWITCH
<==============PrimitiveHead.TRY
<==============PrimitiveHead.SIMPLE
<======
Branch haru korral lubab koiki pa"ise tyype
soltumata skeemi pa"isest
??prev
? PrimitiveHead.SIMPLE:
<==============PrimitiveHead.LOOP
<==============PrimitiveHead.SWITCH
..case
? PrimitiveHead.SWITCH:
<==============PrimitiveHead.CASE
<==============PrimitiveHead.DEFAULT
<==============PrimitiveHead.TRY
..cse
? PrimitiveHead.TRY:
<==============PrimitiveHead.CATCH
..case
? PrimitiveHead.CATCH:
<==============PrimitiveHead.FINALLY
<==============PrimitiveHead.SIMPLE
<======prev