AMADEUS html plain
This sketchy text is generated by AMADEUS
import java.util.*;
import java.awt.*;
-------------------18.06.2003
class BaseLanguageJava
class BaseLanguageJava extends BaseLanguage
BaseLanguageJava
BaseLanguageJava()
nextPrimitiveHeadType
byte nextPrimitiveHeadType(byte prev)
muudatused ainult koos skeemi tyybi muutmisega
<======prev
Sketchify ==================================================
Eeldab:
ainuke direktiiv if/for jne järel ei ole if/for jne
else järel samas reas ei ole muud if, kui (else) if
static AmFrame frame;
static Vector labels;
selle teeb labelTable()
sketchify
public boolean sketchify(SketchyText skt0,
main = source
SketchyText skt1,
main = new
AmFrame dialogTargetFrame)
frame = dialogTargetFrame;
Sketch sNew = skt1.main;
sNew.baseLanguage = new BaseLanguageJava();
sNew.branch(0).baseLanguage = new BaseLanguageJava();
Sketch s = skt0.main;
ko~ik (teksti)primitiivid uude skeemteksti
Branch br = s.branch(0);
Branch br1 = sNew.branch(0);
transferPrimitives(br, br1);
comments(br1);
colorLiterals(br1);
joinElseIf(sNew);
..try
!!
..catch
! (RuntimeException e)
AmDialog d = new AmDialog(frame,
AmLocale.Source_syntax_error(),
AmDialog.B_OK, "'}' " + AmLocale.missing());
<==========false
System.out.println("Sketchify: comments braces2simple OK");
clean(sNew);
System.out.println("Sketchify: comments clean OK");
docComments2simple(sNew);
System.out.println("Sketchify: comments docComments2simple OK");
semicolons(sNew);
System.out.println("Sketchify: comments semicolons OK");
keywords(sNew);
System.out.println("Sketchify: comments keywords OK");
extraBlocks(sNew);
System.out.println("Sketchify: comments extraBlocks OK");
makeBlockHeads(sNew);
System.out.println("Sketchify: comments makeBlockHeads OK");
controlSketches(sNew);
System.out.println("Sketchify: comments controlSketches OK");
extraControlSketches(sNew);
System.out.println("Sketchify: comments extraControlSketches OK");
controlSketches(sNew);
labelTable(sNew);
System.out.println("Sketchify: comments controlSketches OK");
breaks(sNew);
System.out.println("Sketchify: comments breaks OK");
clean(sNew);
joinHeads(sNew);
eemaldab ka sulud for ja switch pa"ises
ja while -> for ; t :
System.out.println("Sketchify: comments clean OK");
setBranchHeadColor(sNew);
openParenthInConditions(sNew);
<======true
transferPrimitives
execute
public static void transferPrimitives(Branch br, Branch br1)
kasutab ka BaseLanguageJava5
..for
* int i = 0; i < br.body.size(); i++
PrimitiveMember p = (PrimitiveMember)(br.member(i));
PrimitiveMember p1 = p.makeCopy();
p1.text.trim();
br1.insert(p1,i);
br1.insert(p.makeCopy(),i);
p.text.trim();
comments
transferPrimitives
public static void comments(Branch br)
kasutab ka BaseLanguageJava5
endComments(br);
blockComments(br);
blokk-kommentaarid ----------------------------------
static Cursor cursor1;
commentStartcursor;
static Cursor cursor2 = null;
commentEndcursor
static boolean inString;
static boolean inChar;
blockComments
private static void blockComments(Branch br)
cursor2 = null;
..while
* ;gotoCommentStart(br);
? gotoCommentEnd(br)
multiLineComment();
gotoCommentStart
private static boolean gotoCommentStart(Branch br)
char prev, curr = ' ';
..if
? cursor2 == null
algatada
cursor1 = new Cursor(br);
cursor1.moveToBody();
<======
cursor1 = cursor2.makeCopy();
..for
* ;;
yle liikmete
inString = false;
inChar = false;
..while
* ;cursor1.scanRow();
moo"da (ainukest) rida
Symbol sy = cursor1.row.sy;
prev = curr;
curr = sy.c;
? (!inString) && (!inChar)
arvestatav
..if
? (prev == '/') && (curr == '*')
cursor1.text.splitRow(cursor1.rowNo(), cursor1.noInRow-2);
cursor1.primitive.split(br, 1);
cursor1.moveToNextElement();
<==================true
..if
? curr == '"'
inString = true;
<======
? curr == '\''
inChar = true;
<------
pole arvestatav
? inString && (curr == '"') && (prev != '\\')
inString = false;
<------
? (curr == '\'') && (prev != '\\')
inChar = false;
arvestatav
pole arvestatav
while
edasi:
? !cursor1.moveToNextElement()
<======;
curr = ' ';
reavahetusega /* ei ole komm algus
<======false
gotoCommentEnd
private static boolean gotoCommentEnd(Branch br)
cursor2 = cursor1.makeCopy();
char prev, curr = ' ';
..for
* ;;
yle liikmete
..while
* ;cursor2.scanRow();
moo"da (ainukest) rida
Symbol sy = cursor2.row.sy;
prev = curr;
curr = sy.c;
? (prev == '*') && (curr == '/')
cursor2.text.splitRow(cursor2.rowNo(), cursor2.noInRow);
cursor2.primitive.split(br, 1);
<==============true
while
edasi:
? !cursor2.moveToNextElement()
<======;
curr = ' ';
reavahetusega ei ole komm lopp
<======false
multiLineComment
private static void multiLineComment()
////System.out.println("AmSketchify: leitud multiLineComment");
tekstiread kommentaariks:
kursor1 ..> kursor2
..for
* ;;
Row comm = cursor1.text.comment;
Row r = cursor1.row;
r -> komm:
..for
* int i = 1; i < r.elements.size(); i++
r.getElement(i);
comm.insert(new Symbol(
r.sy.c, r.sy.font, Default.commentColor), i);
comm.planSize();
rida tyhjaks:
r.removeAll();
r.planSize();
jrgm rida:
? cursor1.row == cursor2.row
<======;
cursor1.moveToNextElement();
for
docComments2simple
private static void docComments2simple(Sketch s)
int istart, iend;
Selection selection = new Selection(null, null);
PrimitiveMember p;
Branch br = (Branch)(s.member(0));
haru
AmGroup gr = new AmGroup(br);
..for
* int i=0; i < br.body.size(); i++
haru iga liikme korral
Object o = br.member(i);
? o instanceof Sketch
docComments2simple((Sketch)o);
<------
primitiivi korral
p = (PrimitiveMember)o;
String t1 = p.text.comment.toString();
////System.out.println("AmSketchify: docComments, i, rida ="+i+','+t1);
JK 04.07.03 if(t1.indexOf("/**") >= 0){// on doc komm algus
? t1.trim().startsWith("/**")
on doc komm algus
selection.start = new Cursor(br, p);
istart = i;
..if
? t1.indexOf("/**") == 0
poleks vaja kontrollida
algusest /** a"ra
p.text.comment.remove(1);
p.text.comment.remove(1);
p.text.comment.remove(1);
p.text.comment.planSize();
selection.start = new Cursor(br, p);
ns.text.comment.deleteRowelem(0);
ns.text.comment.deleteRowelem(0);
if
//System.out.println("Sketchify: doc2SIMPLE:leitud doc komm algus, ="+i);
i--;
..for
* ;;
minna loppu
i++;
p = (PrimitiveMember)(br.member(i));
String t2 = p.text.comment.toString();
//System.out.println("Sketchify: doc2SIMPLE:komm tekst="+t2);
? t2.indexOf("*/") >= 0
on doc komm lopp
selection.end = new Cursor(br, p);
iend = i;
//System.out.println("Sketchify: doc2SIMPLE:leitud doc komm lopp, ="+i+1);
int d1=1; int d2 = 1;
..if
? t1.length() > 3
alguses veel midagi (/2TARNI xxx)
d1 = 0;
..if
? t2.length() > 2
lopus veel midagi (xxx TARN/)
d2 = 0;
int l = p.text.comment.elements.size()-1;
p.text.comment.remove(l);
p.text.comment.remove(l-1);
p.text.comment.planSize();
selection.end = new Cursor(br, p);
ns.text.comment.deleteRowelem(l-1);
//System.out.println("Sketchify: doc2SIMPLE:start,end="+selection.start.primitive+
", "+selection.end.primitive);
Sketch newMember =
selection.convert2simple(d1, d2, new BaseLanguageJava());
newMember.comment =
new Row("Javadoc", Default.commentColor);
newMember.icon = true;
newMember.type = Scheme.MODULE;
i -= iend - istart;
<======;
for minna loppu
on doc comm algus
ns korral
for haru iga liikme korral
endComments
docComments2simple
/*
blokk-kommentaarid -----------------------------------.
*/
lopukommentaarid -------------------------------------
private static void endComments(Branch br)
boolean inEndComment;
char prev, curr;
cursor1 = new Cursor(br);
cursor1.moveToBody();
..for
* ;;
yle liikmete
inString = false;
inChar = false;
inEndComment = false;
curr = ' ';
int ic = 0;
indeks kommentaaril
..while
* ;cursor1.scanRow();
moo"da (ainukest) rida
otsida rea lo~pukommentaari algus
Symbol sy = cursor1.row.sy;
prev = curr;
curr = sy.c;
kas lopukomm algus?
? (!inString) && (!inChar)
arvestatav
..if
? (prev == '/') && (curr == '/')
algus leitud
inEndComment = true;
cursor1.moveLeft();
scan to~ttu
cursor1.moveLeft();
<==========;
pole algus
..if
? curr == '"'
inString = true;
<======
? curr == '\''
inChar = true;
<------
pole arvestatav
? inString && (curr == '"') && (prev != '\\')
inString = false;
<------
? (curr == '\'') && (prev != '\\')
inChar = false;
arvestatav
pole arvestatav
while
..if
? inEndComment
eemaldada reast kaks esimest (//):
cursor1.moveLeft(); // kuna scan oli edasi viinud
cursor1.row.remove(cursor1.noInRow);
cursor1.row.remove(cursor1.noInRow);
..while
* ;cursor1.scanRow();
Symbol sy = cursor1.row.sy;
viia cursor1 alates kommentaarisse:
cursor1.text.comment.insert(sy, ++ic);
sy.color = Default.commentColor;
eemaldada reast:
cursor1.moveLeft();
kuna scan oli edasi viinud
cursor1.row.remove(cursor1.noInRow);
cursor1.row.planSize();
cursor1.text.comment.planSize();
if inEndComment
? !cursor1.moveToNextElement()
<======;
for
clean
static void clean(Sketch s)
tühjad read/tekstid maha -----------------------------
Branch br = s.branch(0);
..for
* int i = 0; i < br.body.size(); i++
Object o = br.member(i);
? o instanceof Sketch
clean((Sketch)o);
<------
PrimitiveMember p = (PrimitiveMember)o;
? p.type == Primitive.SIMPLE
p.text.trim();
? p.text.row(0).elements.size() == 1
? p.text.comment.elements.size() == 1
br.removeMember(i);
i--;
else
joinElseIf
static void joinElseIf(Sketch s)
else if ühele reale; tehakse enne braces2simple ja docComments
Branch br = s.branch(0);
* int i = 0; i < br.body.size(); i++
Object o = br.member(i);
PrimitiveMember p = (PrimitiveMember)o;
normElseIf(p);
String t = p.text.toString(Default.literalColor).trim();
PrimitiveMember pp = null;
int k= -1;
? t.equals("else")||t.endsWith(" else")||t.endsWith(";else")||
t.endsWith("\telse")||t.endsWith("}else")
lõpus on else, kas järgmine mittekomm algab "if"
* int j = i+1; j < br.body.size(); j++
o = br.member(j);
pp = (PrimitiveMember)o;
t = pp.text.toString(Default.literalColor).trim();
? t.length() == 0
ainult kommentaar?
<------
? t.equals("if")||t.startsWith("if ")||
t.startsWith("if\t")||t.startsWith("if(")
k = j;
<======
<==========
vahetu järgmine ei alga if...
k on vahetu järgmine, mis algab if...
Row r = p.text.row(0);
Row rr = pp.text.row(0);
r.trim();
rr.trim();
rr.insert(new Symbol(' ', Default.foregroundColor),1);
p.text.insert(rr, 1);
tuleks veel pp comment tõsta p komm lõppu ??
...ei ole mõtet. Praegu rr comm läheb lihtsalt kaduma.
p.text.joinRow(1);
br.removeMember(k);
i--;
private static void normElseIf(Primitive p)
kasutab: joinElseIf()
selles reas else if vahele parajasti 1 tühik
boolean ridaMuudetud = true;
* ;ridaMuudetud;
ridaMuudetud = false;
Row prida = p.text.row(0);
String rida = prida.toString();
StringTokenizer st = new StringTokenizer(rida, " \t(;",true);
String token = "";
int i = 0;
int iElse = 0;
int iIf = 0;
boolean elseFound = false;
* ;st.hasMoreTokens();
token = st.nextToken();
? !elseFound
prida.getElement(i+1);
? token.equals("else")
? prida.sy.color != Default.literalColor
iElse = i;
elseFound = true;
<======
prida.getElement(i+1);
? token.equals("if")
? prida.sy.color != Default.literalColor
iIf = i;
String vahe = rida.substring(iElse+4, iIf);
? vahe.trim().length() == 0
? vahe.length() > 1
asendada vahe tegelikus reas ühe tühikuga:
prida.getElement(iElse+4+1);
prida.sy.c = ' ';
* int j = iElse+5+1; j < (iIf+1); j++
ridaMuudetud = true;
<==================
braces2simple
------------------------------------------------------.
lopukommentaarid -------------------------------------.
looksulud lihtskeemideks ----------------------------
private static void braces2simple (Branch br)
Cursor cursor = new Cursor(br);
cursor.moveToBody();
char prev, curr = ' ';
int balance = 0;
sulgude bilanss
..for
* ;;
yle liikmete
..while
* ;cursor.scanRow();
moo"da (ainukest) rida
Symbol sy = cursor.row.sy;
prev = curr;
curr = sy.c;
? sy.color != Default.literalColor
arvestatav
----------------- 18.06.2003
värvida sulgude sees olevad looksulud -- nimeta klass!
neid pärast (findEndBrace) ei arvesta
if((balance != 0)&&((sy.c == '{') || (sy.c == '}'))){
..if
? balance != 0
sy.color = Default.literalColor;
----------------- 18.06.2003.
..if
? (balance == 0)&&
((sy.c == '{') || (sy.c == '}'))
cursor.text.splitRow(cursor.rowNo(), cursor.noInRow-1);
cursor.moveDown();
cursor.moveDown();
cursor.text.splitRow(cursor.rowNo(), 2);
cursor.moveDown();
cursor.moveDown();
cursor.primitive.split(br,2);
cursor.primitive.split(br,1);
cursor.moveToNextElement();
cursor.moveToNextElement();
pole looksulg
..if
? curr == '('
balance++;
----------------- 18.06.2003.
<======
? curr == ')'
balance--;
? balance == 0
sy.color = Default.foregroundColor;
arvestatav
while
edasi:
? !cursor.moveToNextElement()
<======;
curr = ' ';
reavahetusega
for
braces2sk(br);
static Selection selection = new Selection(null, null);
braces2sk
static void braces2sk(Branch s)
eeldusel, et iga looksulg on omaette liige
..while
* ;findStartBrace(s);
findEndBrace(s);
Sketch newMember = selection.convert2simple(new BaseLanguageJava());
? newMember != null
newMember.comment = new Row("..block", Default.commentColor);
braces2sk((Branch)(newMember.member(0)));
<------
ei leitud lo~pu }-gu
selection.start.primitive.text =
new Text();
selection.start.primitive.text.row(0).insert(
new Symbol('{'), 1);
selection.start.primitive.text.row(0).planSize();
selection.start.primitive.text.comment =
new Row(" *** NOT CLOSED! ***", Default.conditionColor);
throw new RuntimeException("Closing brace not found!");
while
findStartBrace
braces2sk()
static boolean findStartBrace(Branch s)
eeldab, et nimeta klassi keha algus "{" pole reas esimene
..for
* int i=0; i < s.body.size(); i++
iga liikme korral
Object o = s.member(i);
? o instanceof PrimitiveMember
PrimitiveMember p = (PrimitiveMember)o;
////System.out.println("AmSketchify: firstSy() entered");
Row r = p.text.row(0);
? r.elements.size() > 1
r.getElement(1);
char c = r.sy.c;
? (c == '{')&&(r.sy.color != Default.literalColor)
selection.start = new Cursor(s, p);
r.remove(1);
et ei segaks
r.planSize();
<==========true
<======false
findEndBrace
findStartBrace
static boolean findEndBrace(Branch s)
eeldab, et nimeta klassi keha lopp "}" pole reas esimene
// ----------------- 18.06.2003 seda enam ei eelda, on värvitud
int count = 1;
alguse leidmisel kadus yks {
..for
* int i=0; i < s.body.size(); i++
iga liikme korral
Object o = s.member(i);
? o instanceof PrimitiveMember
PrimitiveMember p = (PrimitiveMember)o;
Row r = p.text.row(0);
? r.elements.size() > 1
r.getElement(1);
char c = r.sy.c;
----------------- 02.07.2003
..if
? (c == '{')&&(r.sy.color != Default.literalColor)
count++;
<======
? (c == '}')&&(r.sy.color != Default.literalColor)
count--;
? count == 0
selection.end = new Cursor(s, p);
r.remove(1);
et ei segaks
r.planSize();
<==============true
<======false
bloki paised ----------------------------------------
static boolean isControlSketch;
static boolean isClassSketch;
static boolean isMethodSketch;
makeBlockHeads
private static void makeBlockHeads(Sketch s)
Sketch block;
..for
* ;;
block = findBlock(s);
? block == null
<==========
makeHead(s, block);
makeBlockHeads(block);
for
findBlock
makeBlockHeads
private static Sketch findBlock(Sketch s)
Branch br = (Branch)(s.member(0));
haru
..for
* int i=0; i < br.body.size(); i++
haru iga liikme korral
Object o = br.member(i);
? o instanceof Sketch
liikmeks on skeem
Sketch member = (Sketch)o;
? member.comment.toString().compareTo("..block")==0
leitud
<==========member
<======null
makeHead
findBlock
private static void makeHead(Sketch parent, Sketch block)
antud on block, skeemi parent (ainukeses) harus
eelnevad read (primitive, ei lope semikooloniga)
panna paiseks
String komm = new String();
String w = new String();
String wprev = new String("x");
isControlSketch = false;
isClassSketch = false;
isMethodSketch = false;
PrimitiveMember p = null;
Selection selection = new Selection(null, null);
Branch br = (Branch)(parent.member(0));
haru
leida bloki indeks:
int ind;
..for
* ind = 0; ind < br.body.size(); ind++
Object o = br.body.elementAt(ind);
? o instanceof Sketch
? (Sketch)o == block
<======;
int i = ind;
String keyword = findHeadGroup(br, i, selection);
/System.out.println("BaseLanguageJava.java: keyword = " + keyword + ".");
? selection.kind() == Selection.NONE
bloki ees pole liikmeryhma-pa"ist
block.comment = new Row("non-control", Default.commentColor);
<======
grupp on
..if
? keyword.compareTo("class")==0
teha kommentaar
StringTokenizer st =
new StringTokenizer(selection.toString(Default.literalColor));
..for
* ;;
w = st.nextToken();
? w.compareTo("class") == 0
<======;
komm = "class " + st.nextToken();
block.comment = new Row(komm, Default.commentColor);
selection.convert2head(PrimitiveHead.SIMPLE);
block.type = Scheme.MODULE;
<======
? keyword.compareTo("interface")==0
teha kommentaar
StringTokenizer st =
new StringTokenizer(selection.toString(Default.literalColor));
..for
* ;;
w = st.nextToken();
? w.compareTo("interface") == 0
<======;
komm = "interface " + st.nextToken();
block.comment = new Row(komm, Default.commentColor);
selection.convert2head(PrimitiveHead.SIMPLE);
block.type = Scheme.MODULE;
<======
? keyword.compareTo("for")==0
teha kommentaar
komm = "for";
block.comment = new Row(komm, Default.commentColor);
block.type = Sketch.LOOP;
tyyp
selection.convert2head(PrimitiveHead.LOOP);
kui 2 pa"ist ja teine ainult ')', siis koondada
..if
? block.head.size() == 2
Text t1 = block.primitiveHead(1).text;
? t1.rows.size() == 1
Row r1 = t1.row(0);
? r1.elements.size() == 2
r1.getElement(1);
? r1.sy.c == ')'
Text t0 = block.primitiveHead(0).text;
Row r0 = t0.row(0);
r0.insert
((Symbol)(r1.element(1)), r0.elements.size());
block.removePrimitiveHead(1);
votmesona maha:
Text t = block.primitiveHead(0).text;
Row r = t.row(0);
r.getElement(1);
..if
? r.sy.c == 'f'
..for
* int k = 0; k < 3; k++
r.planSize();
<======
? keyword.compareTo("while")==0
teha kommentaar
komm = "while";
block.comment = new Row(komm, Default.commentColor);
block.type = Sketch.LOOP;
tyyp
selection.convert2head(PrimitiveHead.LOOP);
votmesona maha:
Text t = (block.primitiveHead(0)).text;
Row r = t.row(0);
r.getElement(1);
..if
? r.sy.c == 'w'
..for
* int k = 0; k < 5; k++
r.planSize();
<======
? keyword.compareTo("do")==0
teha kommentaar
komm = "do";
block.comment = new Row(komm, Default.commentColor);
block.type = Sketch.LOOP;
tyyp
selection.convert2head(PrimitiveHead.LOOP);
block.head.removeAllElements();
do korral tyhi pais
<======
? keyword.compareTo("if")==0
teha kommentaar
komm = "if";
block.comment = new Row(komm, Default.commentColor);
selection.convert2head(PrimitiveHead.SIMPLE);
votmesona maha:
Text t = block.primitiveHead(0).text;
Row r = t.row(0);
..for
* int k = 0; k < 2; k++
r.planSize();
<======
? keyword.compareTo("else")==0
teha kommentaar
komm = "else";
block.comment = new Row(komm, Default.commentColor);
selection.convert2head(PrimitiveHead.SIMPLE);
block.head.removeAllElements();
else korral tyhi pais
<======
? keyword.compareTo("elseif")==0
teha kommentaar
komm = "elseif";
block.comment = new Row(komm, Default.commentColor);
selection.convert2head(PrimitiveHead.SIMPLE);
votmesona maha:
Text t = block.primitiveHead(0).text;
Row r = t.row(0);
..for
* int k = 0; k < 7; k++
r.remove(1);
7, kui [else tyhik if]
r.planSize();
<======
? keyword.compareTo("switch")==0
teha kommentaar
komm = "switch";
block.comment = new Row(komm, Default.commentColor);
block.type = Sketch.SIMPLE;
tyyp
selection.convert2head(PrimitiveHead.SWITCH);
votmesona maha:
Text t = block.primitiveHead(0).text;
Row r = t.row(0);
..for
* int k = 0; k < 6; k++
r.planSize();
<======
? keyword.compareTo("case")==0
teha kommentaar
komm = "case";
block.comment = new Row(komm, Default.commentColor);
selection.convert2head(PrimitiveHead.CASE);
votmesona maha:
..for
* int hi = 0; hi < block.head.size(); hi++
Text t = block.primitiveHead(hi).text;
? t.rows.size() == 0
<------;
Row r = t.row(0);
int l = r.elements.size();
? l == 1
<------;
..for
* int m = 0; m < l; l++
eemaldada algustyhikud
r.getElement(1);
? r.sy.c == ' '
r.remove(1);
<------
tuli mittetyhik
..if
? r.sy.c == 'c'
..for
* int k = 0; k < 4; k++
<======;
r.planSize();
<======
? keyword.compareTo("default")==0
teha kommentaar
komm = "default";
block.comment = new Row(komm, Default.commentColor);
selection.convert2head(PrimitiveHead.CASE);
votmesona maha:
Text t = block.primitiveHead(0).text;
Row r = t.row(0);
..for
* int k = 0; k < 7; k++
r.planSize();
<======
? keyword.compareTo("try")==0
teha kommentaar
komm = "try";
block.comment = new Row(komm, Default.commentColor);
block.type = Sketch.SIMPLE;
tyyp
selection.convert2head(PrimitiveHead.TRY);
votmesona maha:
Text t = block.primitiveHead(0).text;
Row r = t.row(0);
..for
* int k = 0; k < 3; k++
r.planSize();
<======
? keyword.compareTo("catch")==0
teha kommentaar
komm = "catch";
block.comment = new Row(komm, Default.commentColor);
selection.convert2head(PrimitiveHead.CASE);
votmesona maha:
Text t = block.primitiveHead(0).text;
Row r = t.row(0);
..for
* int k = 0; k < 5; k++
r.planSize();
<======
? keyword.compareTo("finally")==0
teha kommentaar
komm = "finally";
block.comment = new Row(komm, Default.commentColor);
selection.convert2head(PrimitiveHead.CASE);
votmesona maha:
Text t = block.primitiveHead(0).text;
Row r = t.row(0);
..for
* int k = 0; k < 7; k++
r.planSize();
<======
meetod vo~i muu
StringTokenizer st =
JK 04.07.03 tab
new StringTokenizer(selection.toString(Default.literalColor)," \t(", true);
String prev = "";
String curr = "";
////System.out.println
("AmSketchify: makeHEad: text="+gr.toString(AmDefault.literalColor));
..for
* ;st.hasMoreTokens();
JK 04.07.03 tab
..if
? (curr.compareTo(" ") != 0)&&curr.compareTo("\t")!=0
prev = curr;
curr = st.nextToken();
? curr.compareTo("(") == 0
<======;
? curr.compareTo("(") == 0
meetod
selection.convert2head(PrimitiveHead.SIMPLE);
komm = new String(prev);
..if
? komm.compareTo("synchronized") == 0
block.comment = new Row("non-control", Default.commentColor);
<======
block.comment = new Row(komm, Default.commentColor);
block.type = Scheme.MODULE;
<======
block.comment = new Row("non-control", Default.commentColor);
JK 02.07.03 ------------------------------------------------------
JK 02.07.03 ------------------------------------------------------.
findHeadGroup
makeHead
private static String findHeadGroup(Branch parent, int i, Selection sel)
vaatab la"bi liikmed i-1, i-2 ... grupi parent-is
maa"rates sel start/end (kui on grupp)
tagastab leitud votmesona (voi "")
String keywords =
lisatud " interface" JK 02.07.03
" interface class for while do if then else switch case default try catch finally ";
String keyword = "";
int balance = 0;
int prevbalance = 0;
seni eelmistes ridades
int gr_start = 0, gr_end = -1;
ALL:
non-control
<======ALL;
return keyword; // gruppi pole
sel.end =
new Cursor(parent, (PrimitiveMember)parent.member(i-1));
gr_end = i-1;
..for
* int j = i-1;;j--
eelmised liikmed
//System.out.println("BaseLanguageJava.java keyword = " + keyword +"x");
? j == -1
gr_start = j+1;
sel.start =
new Cursor(parent, (PrimitiveMember)parent.member(j+1));
<==========ALL;
return keyword; //gruppi (rohkem) pole
Object o = parent.member(j);
? o instanceof Sketch
sel.start =
new Cursor(parent, (PrimitiveMember)parent.member(j+1));
gr_start = j+1;
<==========ALL;
return keyword; //gruppi (rohkem) pole
eelmine on mitteskeem,
PrimitiveMember p= (PrimitiveMember)o;
jrk. eelmine
Row r = p.text.row(0);
//System.out.println("BaseLanguageJava.java: r = " + r + ".");
? r.elements.size() == 2
r.getElement(1);
? r.sy.c == ' '
sel.start =
new Cursor(parent, (PrimitiveMember)parent.member(j+1));
gr_start = j+1;
<==========ALL;
return keyword; //gruppi (rohkem) pole
StringTokenizer st1 =
new StringTokenizer(r.toString(Default.literalColor),"()",true);
prevbalance = balance;
..for
* ;st1.hasMoreTokens();
String t = st1.nextToken();
? t.compareTo("(")==0
balance++;
<------
? t.compareTo(")")==0
balance--;
if(r.lastSy().c ==';')
r.getElement(r.elements.size()-1);
? r.sy.c == ';'
? prevbalance == 0
sel.start =
new Cursor(parent, (PrimitiveMember)parent.member(j+1));
gr_start = j+1;
<==========ALL;
return keyword; //gruppi (rohkem) pole
..if
? keyword.length() > 0
..if
? (keyword.compareTo("class") != 0)
&&
(keyword.compareTo("interface") != 0) &&
(keyword.compareTo("case") != 0) &&
(keyword.compareTo("default") != 0)
sel.start =
new Cursor(parent, (PrimitiveMember)parent.member(j+1));
gr_start = j+1;
<==================ALL;
return keyword; // leitud if/else/ ...(rea alguses)
<--------------;
ainult grupi alguse otsimine
StringTokenizer st =
JK 02.07.03 lisatud tab (\t) eraldajaks
new StringTokenizer(r.toString(Default.literalColor),": (\t");
String w = "";
String prevw = "";
String prevkeyword = "";
..for
* ; st.hasMoreTokens();
prevw = w;
w = st.nextToken();
? keywords.indexOf(" "+w+" ") > -1
///System.out.println("AmSketchify: token2="+w);
keyword = w;
prevkeyword = prevw;
for
////System.out.println("AmSketchify: keyword="+keyword);
////System.out.println("AmSketchify: prew="+prevw);
? (keyword.compareTo("if")==0) && (prevkeyword.compareTo("else")==0)
keyword = "elseif";
for eelmised liikmed
ALL
selection.start = null;
selection.end = null;
..if
? gr_start <= gr_end
sel.start =
new Cursor(parent, (PrimitiveMember)parent.member(gr_start));
sel.end =
new Cursor(parent, (PrimitiveMember)parent.member(gr_end));
<======keyword
colorLiterals
findHeadGroup
bloki paised ----------------------------------------.
private static void colorLiterals(Branch br)
char prev, curr = ' ';
algatada
cursor1 = new Cursor(br);
cursor1.moveToBody();
..for
* ;;
yle liikmete
inString = false;
inChar = false;
..while
* ;cursor1.scanRow();
moo"da (ainukest) rida
Symbol sy = cursor1.row.sy;
prev = curr;
curr = sy.c;
? (!inString) && (!inChar)
arvestatav
..if
? curr == '"'
sy.color = Default.literalColor;
inString = true;
<======
? curr == '\''
sy.color = Default.literalColor;
inChar = true;
<------
pole arvestatav
sy.color = Default.literalColor;
? inString && (curr == '"') && (prev != '\\')
inString = false;
<------
on inChar
JK 04.07.03 ------------------------------------
et leiaks '\\'
? (curr == '\\') && (prev == '\\')
curr = 'x';
<------
? (curr == '\'') && (prev != '\\')
inChar = false;
JK 04.07.03 ------------------------------------.
on inChar
arvestatav
pole arvestatav
while
edasi:
? !cursor1.moveToNextElement()
<======;
curr = ' ';
reavahetusega /* ei ole komm algus
semicolons
colorLiterals
public static void semicolons(Sketch s)
poolitada read viimase semikooloni ja kooloni ja"relt
Cursor cursor;
int iSemicolon;
PrimitiveMember p;
Branch br = (Branch)(s.member(0));
..for
* int i = 0; i < br.body.size(); i++
yle liikmete
Object o = br.member(i);
? o instanceof Sketch
semicolons((Sketch)o);
<------
on primitiiv (yks rida)
p = (PrimitiveMember)o;
cursor = new Cursor(br, p);
? cursor.row.elements.size() == 1
<------;
iSemicolon = -1;
..while
* ;cursor.scanRow();
moo"da (ainukest) rida
Symbol sy = cursor.row.sy;
? sy.color != Default.literalColor
arvestatav
..if
? (sy.c == ';') || (sy.c == ':')
iSemicolon = cursor.noInRow-1;
? sy.c == ':'
<======;
while
? (iSemicolon >= 0)&&
(iSemicolon != cursor.row.elements.size()-1)
leitud, poolitada
cursor.text.splitRow(0, iSemicolon+1);
p.split(br, 1);
i++;
leitud
else
for i
keywords
semicolons
public static void keywords(Sketch s)
poolitada read vo~tmesona eest
eeld: rea alguses pole tyhikuid
String keyWords =
" if else while for do break continue return ";
/ ??? switch case deafult try catch finally
int ikeyword;
PrimitiveMember p;
Branch br = (Branch)(s.member(0));
..for
* int i = 0; i < br.body.size(); i++
Object o = br.member(i);
? o instanceof Sketch
keywords((Sketch)o);
<------
primitiiv (yks rida)
p = (PrimitiveMember)o;
Row r = (Row)(p.text.row(0));
? r.elements.size() == 1
<------;
leida esimene votmesona (mis pole rea alguses)
String t = r.toString();
JK 04.07.03 tab
StringTokenizer st = new StringTokenizer(t, " \t;()", true);
int iToken = 1;
ikeyword = -1;
..for
* ;st.hasMoreTokens();
String token = st.nextToken();
? keyWords.indexOf(" "+token+" ") >= 0
leitud votmesona
r.getElement(iToken);
Symbol sy = (Symbol)(r.element(iToken));
Symbol sy = r.sy;
? sy.color != Default.literalColor
pole literaal
..if
? (token.compareTo("if") == 0)
&& (t.indexOf("else ") == 0)
iToken += token.length();
<----------;
else if ei poolita
? iToken > 1
pole rea alguses
ikeyword = iToken;
<======;
iToken += token.length();
for
? ikeyword > 0
leitud
poolitada tegelikult
p.text.splitRow(0, ikeyword);
Row rr = (Row)(p.text.row(0));
while(rr.lastSy().c == ' '){// eemaldada loputyhik
rr.remove(rr.elements.size()-1);
}
eemaldada loputyhikud
int n = rr.elements.size();
..for
* ;;
//System.out.println("Sketchify:keywords:n="+n);
rr.getElement(n-1);
? rr.sy.c != ' '
<======;
rr.planSize();
p.split(br, 1);
i++;
//System.out.println("Sketchify:keywords:i="+i);
//System.out.println("Sketchify:keywords:i(1)="+i);
else // on NonSketch (primitiiv, yks rida)
for i
controlSketches
keywords
juhtskeemid ---------------------------------------
Eeldus: on tehtud paisega skeemideks
public static void controlSketches(Sketch s)
..for
* int brnr = 0; brnr < s.body.size(); brnr++
Branch br = (Branch)(s.body.elementAt(0)); // (1.)haru
Branch br = (Branch)(s.body.elementAt(brnr));
jrk haru
Sketch sk;
jrk. alamskeem harus
String sss = s.comment.toString();
too"delda s:
..if
? s.comment.toString().compareTo("if") == 0
"if"
s.comment = new Row("..if", Default.commentColor);
pais tingimuseks:
teha tingimus-liige
PrimitiveMember newns = new PrimitiveMember(Primitive.CONDITION,
new Text());
newns.text.rows.removeElementAt(0);
..for
* int i = 0; i < s.head.size(); i++
PrimitiveHead h = s.primitiveHead(i);
newns.text.insert(h.text.row(0), i);
for
s.head.removeAllElements();
lisada esimeseks liikmeks
br.insert(newns, 0);
newns.text.setColor(Default.conditionColor);
ja"rgnevad else(if)-skeemid liikmeteks s/br loppu:
int j = s.parent.body.indexOf(s) + 1;
jrgm. liikme indeks (br-s)
..for
* ;;
? j >= s.parent.body.size()
<======;
Object o = s.parent.body.elementAt(j);
..if
? o instanceof PrimitiveMember
PrimitiveMember ns = (PrimitiveMember)o;
..if
<==============;
<--------------;
Sketch ske = (Sketch)o;
String t = ske.comment.toString();
? t.indexOf("else") == 0
teha
nool:
br.body.addElement(new Arrow(Arrow.STRONG, s.level()));
ske pais panna tingimuseks s/br-s
teha tingimus-liige
..if
? ske.head.size() > 0
pais on
newns = new PrimitiveMember(Primitive.CONDITION,
new Text());
newns.text.rows.removeElementAt(0);
int m = 0;
..for
* Enumeration e = ske.head.elements(); e.hasMoreElements();
PrimitiveHead h = ( PrimitiveHead)(e.nextElement());
newns.text.insert((Row)(h.text.rows.elementAt(0)),
m++);
for
br.body.addElement(newns);
newns.text.setColor(Default.conditionColor);
pais on
ske liikmed s s/br loppu
Branch skeBr = (Branch)(ske.body.elementAt(0));
..for
* Enumeration e = skeBr.body.elements(); e.hasMoreElements();
o = e.nextElement();
? o instanceof Sketch
Sketch skk = (Sketch)o;
br.body.addElement(skk);
skk.parent = br;
oli skeBr
<------
PrimitiveMember skk = (PrimitiveMember)o;
br.body.addElement(skk);
eemaldada ske
s.parent.body.removeElementAt(j);
s.parent.removeMember(j);
<------;
<======;
for
<======
? s.comment.toString().compareTo("..if") == 0
"if" teisel korral
pais tingimuseks:
ja"rgnevad else(if)-skeemid liikmeteks s/br loppu:
int j = s.parent.body.indexOf(s) + 1;
jrgm. liikme indeks (br-s)
..for
* ;;
? j >= s.parent.body.size()
<======;
Object o = s.parent.body.elementAt(j);
..if
? o instanceof PrimitiveMember
PrimitiveMember ns = (PrimitiveMember)o;
..if
<==============;
<--------------;
Sketch ske = (Sketch)o;
String t = ske.comment.toString();
? t.indexOf("else") == 0
teha
nool:
br.body.addElement(new Arrow(Arrow.STRONG, s.level()));
ske pais panna tingimuseks s/br-s
teha tingimus-liige
..if
? ske.head.size() > 0
pais on
PrimitiveMember newns = new PrimitiveMember(Primitive.CONDITION,
new Text());
newns.text.rows.removeElementAt(0);
int m = 0;
..for
* Enumeration e = ske.head.elements(); e.hasMoreElements();
PrimitiveHead h = ( PrimitiveHead)(e.nextElement());
newns.text.insert((Row)(h.text.rows.elementAt(0)),
m++);
for
br.body.addElement(newns);
newns.text.setColor(Default.conditionColor);
pais on
ske liikmed s s/br loppu
Branch skeBr = (Branch)(ske.body.elementAt(0));
..for
* Enumeration e = skeBr.body.elements(); e.hasMoreElements();
o = e.nextElement();
? o instanceof Sketch
Sketch skk = (Sketch)o;
br.body.addElement(skk);
skk.parent = br;
oli skeBr
<------
PrimitiveMember skk = (PrimitiveMember)o;
br.body.addElement(skk);
eemaldada ske
s.parent.removeMember(j);
<------;
<======;
for
<======
? s.comment.toString().compareTo("try") == 0
katsend
s.comment = new Row("..try", Default.commentColor);
ja"rgnevad catch/finally-skeemid harudeks:
int i = s.parent.body.indexOf(s)+1;
..for
* ;i < s.parent.body.size();i++
ja"rgmised skeemid
Object o = s.parent.body.elementAt(i);
? o instanceof Sketch
jrgm. on skeem
sk = (Sketch)o;
..if
? (sk.comment.toString().compareTo("catch")!=0) &&
(sk.comment.toString().compareTo("finally")!=0)
mingi muu skeem
<==========;
..if
? sk.comment.toString().compareTo("catch")==0
jrk catch
sk panna s haruks:
sk panna uueks haruks
Branch newBr = new Branch(Scheme.SIMPLE,
new BaseLanguageJava());
!!!! Java
newBr.setView1();
newBr.parent = s;
newBr.comment = sk.comment;
Symbol sy = new Symbol('.',Default.commentColor);
newBr.comment.insert(sy, 1);
newBr.comment.insert(sy, 1);
newBr.comment.planSize();
newBr.head = sk.head;
newBr.primitiveHead(0).type = PrimitiveHead.CATCH;
Branch skBr = (Branch)(sk.body.elementAt(0));
..for
* Enumeration e = skBr.body.elements();e.hasMoreElements();
o = e.nextElement();
? o instanceof Sketch
((Sketch)o).parent = newBr;
newBr.body.addElement((Sketch)o);
<------
newBr.body.addElement((PrimitiveMember)o);
for
s.body.addElement(newBr);
votta sk esimesest harust maha
s.parent.body.removeElementAt(i);
i--;
<======
? sk.comment.toString().compareTo("finally")==0
jrk catch
sk panna s haruks:
sk panna uueks haruks
Branch newBr = new Branch(Scheme.SIMPLE,
new BaseLanguageJava());
!!!! Java
newBr.setView1();
newBr.parent = s;
newBr.comment = sk.comment;
Symbol sy = new Symbol('.',Default.commentColor);
newBr.comment.insert(sy, 1);
newBr.comment.insert(sy, 1);
newBr.comment.planSize();
newBr.head = sk.head;
newBr.primitiveHead(0).type = PrimitiveHead.FINALLY;
Branch skBr = (Branch)(sk.body.elementAt(0));
..for
* Enumeration e = skBr.body.elements();e.hasMoreElements();
o = e.nextElement();
? o instanceof Sketch
((Sketch)o).parent = newBr;
newBr.body.addElement((Sketch)o);
<------
newBr.body.addElement((PrimitiveMember)o);
for
s.body.addElement(newBr);
votta sk esimesest harust maha
s.parent.body.removeElementAt(i);
i--;
jrk. catch
jrk. finally
jrgm. on skeem
ja"rgmised skeemid
<======
? s.comment.toString().compareTo("do") == 0
do esimesel korral
s.comment = new Row("..do", Default.commentColor);
<======
? s.comment.toString().compareTo("..do") == 0
do teisel korral
ja"rgnev while-skeem loppu tingimuseks:
int i = s.parent.body.indexOf(s)+1;
..for
* ;i < s.parent.body.size();i++
ja"rgmised liikmed
Object o = s.parent.body.elementAt(i);
? o instanceof Sketch
jrgm. on skeem
sk = (Sketch)o;
..if
? (sk.comment.toString().compareTo("while")==0) ||
(sk.comment.toString().compareTo("..while")==0)
jrk on while
sk pais panna s/br loppu tingimuseks:
teha tingimus-liige
if(ske.head.size() > 0){// pais on
PrimitiveMember newns =
new PrimitiveMember(PrimitiveMember.CONDITION,
new Text());
newns.text.rows.removeElementAt(0);
int m = 0;
..for
* Enumeration e = sk.head.elements(); e.hasMoreElements();
PrimitiveHead h = (PrimitiveHead)(e.nextElement());
newns.text.insert((Row)(h.text.rows.elementAt(0)), m++);
h.text.rows.removeElementAt(0);
for
br.body.addElement(newns);
newns.text.setColor(Default.conditionColor);
votta sk esimesest harust maha
s.parent.body.removeElementAt(i);
i--;
jrk. on while
<======;
ja"rgmised liikmed
<======
? s.comment.toString().compareTo("switch") == 0
lyliti
s.comment = new Row("..switch", Default.commentColor);
case-skeemid harudeks:
..for
* int i=0; i < br.body.size(); i++
1. haru iga liikme korral
Object o = br.body.elementAt(i);
? o instanceof Sketch
jrk alamskeem
sk = (Sketch)o;
? (sk.comment.toString().compareTo("case") == 0) ||
(sk.comment.toString().compareTo("default") == 0)
sk panna uueks haruks
Branch newBr = new Branch(Scheme.SIMPLE,
new BaseLanguageJava());
newBr.setView1();
newBr.parent = s;
newBr.comment = sk.comment;
Symbol sy = new Symbol('.',Default.commentColor);
newBr.comment.insert(sy, 1);
newBr.comment.insert(sy, 1);
newBr.comment.planSize();
newBr.head = sk.head;
newBr.primitiveHead(0).type = PrimitiveHead.CASE;
Branch skBr = (Branch)(sk.body.elementAt(0));
..for
* Enumeration e = skBr.body.elements();e.hasMoreElements();
o = e.nextElement();
? o instanceof Sketch
((Sketch)o).parent = newBr;
newBr.body.addElement((Sketch)o);
<------
newBr.body.addElement((PrimitiveMember)o);
for
s.body.addElement(newBr);
votta sk esimesest harust maha
br.body.removeElementAt(i);
i--;
jrk alamskeem
for haru iga liikme korral
koristada esimene haru, kui tyhi ja pole ainuke?
br = (Branch)(s.body.elementAt(0));
..if
? s.body.size() > 1
? br.body.size() == 0
s.body.removeElementAt(0);
<======
? s.comment.toString().compareTo("for") == 0
"for"
s.comment = new Row("..for", Default.commentColor);
<======
? s.comment.toString().compareTo("while") == 0
"while"
s.comment = new Row("..while", Default.commentColor);
"if"
"..if"
katsend
do
lyliti
"for"
"while
..for
* int i=0; i < br.body.size(); i++
haru iga liikme korral
Object o = br.member(i);
? o instanceof Sketch
controlSketches((Sketch)o);
for haru iga liikme korral
for brnr
extraControlSketches
controlSketches
public static void extraControlSketches(Sketch s)
juhtskeemid on tehtud, too"delda need, mis veel vaja
final String NONE = "";
final String IF = "if";
final String ELSEIF = "elseif";
final String ELSE = "else";
final String WHILE = "while";
final String FOR = "for";
final String BREAK = "break";
final String CONTINUE = "continue";
final String RETURN = "return";
final String DO = "do";
int gr_start = -1, gr_end = 0;
..for
* int is = 0; is < s.body.size(); is++
iga haru korral
Branch br = (Branch)(s.body.elementAt(is));
(1.)haru
Sketch sk;
jrk. alamskeem harus
Sketch newMember = null;
String key;
too"delda s:
..for
* int i=0; i < br.body.size(); i++
haru iga liikme korral
Object o = br.body.elementAt(i);
? o instanceof Sketch
extraControlSketches((Sketch)o);
<------
on mitteskeem
PrimitiveMember ns = (PrimitiveMember)o;
String t = ns.text.toString(Default.literalColor);
System.out.println("Sketchify java: extraControlBlocks(): t = " + t +"x");
/* JK 07.07.03
key = NONE;
if(t.indexOf("if")==0) key = IF;
else if (t.indexOf("else if")==0) key = ELSEIF;
else if (t.indexOf("else")==0) key = ELSE;
else if (t.indexOf("while")==0) key = WHILE;
else if (t.indexOf("for")==0) key = FOR;
else if (t.indexOf("break")==0) key = BREAK;
else if (t.indexOf("continue")==0) key = CONTINUE;
else if (t.indexOf("return")==0) key = RETURN;
else if (t.indexOf("do ")==0) key = DO; ??? milleks tühik
*/
et võtmesõnaga algav sõna ei segaks:
key = NONE;
..if
? t.equals("if")||t.startsWith("if ")||t.startsWith("if(")||t.startsWith("if\t")
key = IF;
<======
? t.equals("else if")||t.startsWith("else if(")||t.startsWith("else if ")||t.startsWith("else if\t")
key = ELSEIF;
<======
? t.equals("else")||t.startsWith("else;")||t.startsWith("else ")||t.startsWith("else\t")
key = ELSE;
<======
? t.equals("while")||t.startsWith("while(")||t.startsWith("while ")||t.startsWith("while\t")
key = WHILE;
<======
? t.equals("for")||t.startsWith("for ")||t.startsWith("for(")||t.startsWith("for\t")
key = FOR;
<======
? t.equals("break")||t.startsWith("break;")||t.startsWith("break ")||t.startsWith("break\t")
key = BREAK;
<======
? t.equals("continue")||t.startsWith("continue;")||t.startsWith("continue ")||t.startsWith("continue\t")
key = CONTINUE;
<======
? t.equals("return")||t.startsWith("return(")||t.startsWith("return;")||t.startsWith("return ")||t.startsWith("return\t")
key = RETURN;
<======
? t.equals("do")||t.startsWith("do;")||t.startsWith("do ")||t.startsWith("do\t")
key = DO;
System.out.println("Sketchify java: extraControlBlocks(): key = " + key +"x");
..if
? key.length() != 0
vaja teha
newMember = null;
leida ryhm kuni esimese semikoolonini
Selection selection = new Selection(null, null);
gr_start = i;
selection.start = new Cursor(br, ns);
int balanse = 0;
sulgude bilanss
..for
* int j = i; j < br.body.size(); j++
o = br.body.elementAt(j);
? o instanceof Sketch
kui jargneb skeem
gr_end = j;
selection.end = new Cursor(br);
selection.end = new Cursor((Sketch)o);
<======;
? o instanceof PrimitiveMember
mitteskeem
PrimitiveMember nsk = (PrimitiveMember)o;
Row r = (Row)(nsk.text.rows.elementAt(0));
t = r.toString(Default.literalColor);
System.out.println("Sketchify java: extraControlBlocks(): tr = " + t +"x");
..for
* int u = 0; u < t.length(); u++
muuta sulgude bilanssi
? t.charAt(u) == '('
balanse++;
<------
? t.charAt(u) == ')'
balanse--;
for u
? (t.length()>0)&&
(t.charAt(t.length()-1) == ';')&&
(balanse == 0)
arvestada sulgudeva"list ;
gr_end = j;
selection.end = new Cursor(br, nsk);
<======;
for j
newMember = selection.convert2simple(0,0,new BaseLanguageJava());
newMember.comment
= new Row(key,Default.commentColor);
..if
? key.compareTo("do")==0
newMember.comment
= new Row(".."+key,Default.commentColor);
..if
? (key.compareTo(FOR) == 0) ||
(key.compareTo(DO) == 0) ||
(key.compareTo(WHILE) == 0)
newMember.type = Scheme.LOOP;
suluavaldis pa"isesse (else jt sulgudeta korral erinevalt):
Branch newBr = (Branch)(newMember.body.elementAt(0));
..if
? (key.compareTo(ELSE) != 0) &&
(key.compareTo(BREAK) != 0) &&
(key.compareTo(CONTINUE) != 0) &&
(key.compareTo(DO) != 0) &&
(key.compareTo(RETURN) != 0)
eemaldada esimes(t)est kuni avava suluni
..for
* ;;
PrimitiveMember nsk = (PrimitiveMember)(newBr.body.elementAt(0));
Text txt = nsk.text;
Row r = (Row)(txt.rows.elementAt(0));
t = r.toString();
System.out.println("Sketchify java: extraControlBlocks(): t = " + t +"x");
? t.indexOf("(") < 0
reas pole sulgu
newBr.body.removeElementAt(0);
<------;
on sulg
eemaldada eelnevad
while(r.firstSy().c != '(')
..while
* ;((Symbol)(r.element(1))).c != '(';
r.planSize();
<======;
for
suluavaldis pa"isesse
int balance = 0;
..for
* ;;
jargnevad (yherealised) tekstid
o = newBr.body.elementAt(0);
..if
? o instanceof Sketch
System.exit(0);
PrimitiveMember nsk = (PrimitiveMember)o;
Row r = (Row)(nsk.text.rows.elementAt(0));
t = r.toString(Default.literalColor);
byte type = PrimitiveHead.SIMPLE;
..if
? (key.compareTo(FOR) == 0) ||
(key.compareTo(WHILE) == 0)
type = PrimitiveHead.LOOP;
PrimitiveHead h =
new PrimitiveHead
(type, new Text());
paiserea tegmine:
Row hrow = new Row(Default.sketchHeadColor);
h.text.rows.removeElementAt(0);
tyhi rida a"ra
int n = r.elements.size();
..for
* int m=1; m < n; m++
Symbol sy = (Symbol)(r.elements.elementAt(1));
hrow.insert(sy, m);
..if
? (sy.c == '(')&&(sy.color != Default.literalColor)
balance++;
<======
? (sy.c == ')')&&(sy.color != Default.literalColor)
balance--;
r.remove(1);
? balance == 0
eemaldada sulule ) jargnenud tyhikud:
..while
* ;(r.elements.size()>1)&& ((((Symbol)(r.element(1))).c == ' '));
<======;
r.planSize();
hrow.planSize();
hrow.setColor(Default.sketchHeadColor);
h.text.rows.addElement(hrow);
newMember.head.addElement(h);
..if
? r.elements.size() == 1
newBr.body.removeElementAt(0);
? balance == 0
<======;
for
<======
key == ELSE/CONTINUE/BREK/RETURN/DO
eemaldada else ja ja"rgnevad tyhikud
PrimitiveMember nsk = (PrimitiveMember)(newBr.body.elementAt(0));
Text txt = nsk.text;
Row r = (Row)(txt.rows.elementAt(0));
eemaldada else
..for
* int jj = 0; jj < key.length(); jj++
eemaldada tyhikud
..while
* ;(r.elements.size()>1) &&((((Symbol)(r.element(1))).c == ' '));
(r.firstSy().c == ' '))
r.remove(1);
r.planSize();
kui rida sai tyhjaks eemaldada kogu nonsketch
? r.elements.size()==1
newBr.body.removeElementAt(0);
key != ELSE/CONTINUE/BREK/RETURN/DO
key == ELSE/CONTINUE/BREK/RETURN/DO
vaja teha
? newMember != null
extraControlSketches(newMember);
on mitteskeem
for i
for is
extraBlocks
extraControlSketches
public static void extraBlocks(Sketch s)
moodustada lisaryhmad, juhtskeemid on veel tegemata
Branch br = (Branch)(s.member(0));
(1.)haru
PrimitiveMember p;
Selection selection = new Selection(null, null);
int gr_start=0, gr_end=0;
..for
* int i=0; i < br.body.size(); i++
haru iga liikme korral
selection.start = null;
selection.end = null;
Object o = br.member(i);
..if
? o instanceof Sketch
extraBlocks((Sketch)o);
<======
on mitteskeem
kui on case/default, siis alates jrgm. on ryhm
p = (PrimitiveMember)o;
String t = p.text.toString(Default.literalColor);
JK 04.07.03 ---------------------------------------------------
StringTokenizer st = new StringTokenizer(t, " \t:");
String ss = "";
..for
* ;st.hasMoreTokens();
ss = st.nextToken();
? ss.equals("case") || ss.equals("default")
<======;
JK 04.07.03 ---------------------------------------------------.
? ss.equals("case") || ss.equals("default")
kas algus
if((t.indexOf("case")>-1) || (t.indexOf("default")>-1)){//kas algus
System.out.println("JavaSketchify: t = " + t + "x");
gr_start = i+1;
selection.start = new Cursor(br, p);
selection.start.moveToNextElement();
selection.end = new Cursor(br, p);
otsida ryhma lopp
i++;
int countMembersInGroup = 0;
..for
* ;i < br.body.size();i++
selection.end.moveToNextElement();
o = br.member(i);
? o instanceof Sketch
countMembersInGroup++;
<------;
primitiiv
kui on case/default, siis alates on ryhm loppenud
p = (PrimitiveMember)o;
t = p.text.toString(Default.literalColor);
? (t.indexOf("case")>-1) || (t.indexOf("default")>-1)
..if
? countMembersInGroup == 0
selection.start.moveToNextElement();
gr_start++;
<----------;
selection.start.moveToNextElement();
selection.end.moveToPreviousElement();
gr_end = i-1;
selection.end = new Cursor(br, p);
selection.end.moveToPreviousElement();
<======;
pole case/default
countMembersInGroup++;
for
selection.start.moveToNextElement();
..if
? countMembersInGroup == 0
loppu tyhi skeem
Sketch newMember = new Sketch(Scheme.SIMPLE,
new Branch(Scheme.SIMPLE, new BaseLanguageJava()),
new BaseLanguageJava());
newMember.parent = br;
br.insert(newMember, br.body.size());
<==============;
on mitteskeem
? gr_start <= gr_end
? (selection.start != null) && (selection.end != null)
Sketch newSk = selection.convert2simple(0,0,new BaseLanguageJava());
newSk.comment = new Row("..block", Default.commentColor);
extraBlocks(newSk);
i -= gr_end - gr_start;
i--;
for haru iga liikme korral
labelTable
extraBlocks
juhtskeemid ---------------------------------------.
public static void labelTable(Sketch s)
labels = new Vector();
lableTableRec(s);
System.out.println("BAseLAngJava: leitud "+labels.size()/2+" margendit");
for(int i = 0; i < labels.size(); i+=2){
System.out.println("BAseLAngJava margend:"+
(String)(labels.elementAt(i))+".");
}
lableTableRec
lableTable
public static void lableTableRec(Sketch s)
..for
* int i = 0; i < s.body.size(); i++
iga haru korral
Branch br = (Branch)(s.body.elementAt(i));
jrk haru
..for
* int j = 0; j < br.body.size(); j++
iga haru liikme korral
Object o = br.member(j);
? o instanceof Sketch
lableTableRec((Sketch)o);
jrk. alamskeem harus
<------
? o instanceof PrimitiveMember
PrimitiveMember p = (PrimitiveMember)o;
? (p.type == PrimitiveMember.SIMPLE) &&
(p.text.rows.size() == 1)
String str = p.text.row(0).toString();
int len = str.length();
? (len > 1) && (str.charAt(len-1) == ':')
on ma"rgend
leida ja"rgnev liikmesskeem
..for
* int k = j+1; ; k++
<======;
ei ja"rgne skeemi
o = br.member(k);
? o instanceof Sketch
ja"rgnev skeem leitud
labels.addElement(
str.substring(0,len-1).trim());
labels.addElement(o);
<======;
lihtliige
iga haru liikme korral
iga haru korral
breaks
lableTableRec
public static void breaks(Sketch s)
panna nooled return, break, continue skeemidesse
..if
? s.comment.toString().compareTo("return") == 0
s.comment = new Row("..return", Default.commentColor);
Branch br = (Branch)(s.body.elementAt(0));
ko~ik yherealised primtiivid harus br la"hevad
return-noole tekstiks:
Text t = new Text();
t.remove(0);
int ip;
String pstr;
..for
* ip = 0; ip < br.body.size() - 1; ip++
pstr =
((PrimitiveMember)(br.member(ip))).text.toString();
t.insert(new Row(pstr, Default.foregroundColor), ip);
viimane ilma semikoolonita
pstr =
((PrimitiveMember)(br.member(ip))).text.toString();
pstr = pstr.substring(0,pstr.length()-1);
t.insert(new Row(pstr, Default.foregroundColor), ip);
eemaldada viimane (tyhi)
t.remove(t.rows.size() - 1);
vea koht: ?
PrimitiveMember ns = (PrimitiveMember)(br.body.elementAt(0));
Text t = ns.text;
otsida noole otsatase
Sketch x = (Sketch)(s.parent.parent);
boolean error = false;
..try
!!
..while
* ;x.type != Scheme.MODULE;
x = (Sketch)(x.parent.parent);
..catch
! (NullPointerException e)
ns.text.comment = new Row("*** RETURN OUTSIDE OF METHODS! ***",
Default.conditionColor);
error = true;
AmDialog d =
new AmDialog
(frame, AmLocale.Source_syntax_error(),AmDialog.B_OK,
AmLocale.Illegal()+" 'return'.");
d.pack();
d.show();
teha libanool
Arrow ar = new Arrow(Arrow.STRONG, Integer.MAX_VALUE);
ar.text = t;
br.body.addElement(ar);
br.body.removeElementAt(0);
..if
? !error
int level = x.level();
teha nool
Arrow ar = new Arrow(Arrow.STRONG, level);
ar.text = t;
br.body.removeElementAt(0);
br.body.addElement(ar);
eemaldada yherealised tekstid
int np = br.body.size()-1;
..for
* ip = 0; ip < np; ip++
br.body.removeElementAt(0);
<======
? s.comment.toString().compareTo("xxxxxxxxxxxxbreak") == 0
s.comment = new Row("..break", Default.commentColor);
Branch br = (Branch)(s.body.elementAt(0));
PrimitiveMember ns = (PrimitiveMember)(br.body.elementAt(0));
Text t = ns.text;
..if
? (t.rows.size() == 1) &&
(t.row(0).elements.size() > 2)
on margendiga
String label = t.row(0).toString();
label = label.substring(0,label.length()-1).trim();
otsida tabelis
int labelIndex = -1;
String lab;
..for
* int k = 0; k < labels.size(); k += 2
lab = (String)(labels.elementAt(k));
? label.compareTo(lab) == 0
labelIndex = k;
<======;
..if
? labelIndex == -1
pole tabelis
ns.text.comment = new Row("*** ILLEGAL BREAK! ***",
Default.conditionColor);
AmDialog d =
new AmDialog
(frame, AmLocale.Source_syntax_error(),AmDialog.B_OK,
AmLocale.Illegal()+" 'break'. ");
teha libanool
Arrow ar = new Arrow(Arrow.STRONG, Integer.MAX_VALUE);
ar.text = t;
br.body.addElement(ar);
br.body.removeElementAt(0);
<======
on tabelis
//Sketch arrowEnd = (Sketch)(labels.elementAt(labelIndex+1));
otsida noole otsatase
Sketch x = (Sketch)(s.parent.parent);
..while
* ;(x != null)&& (x.parent != null);
..for
* int k = 0; k < labels.size(); k += 2
lab = (String)(labels.elementAt(k));
? (label.compareTo(lab) == 0)&&
((Sketch)(labels.elementAt(k+1)) == x)
<==========
x = (Sketch)(x.parent.parent);
int level = x.level();
? level > 0
br.body.removeElementAt(0);
teha nool
Arrow ar = new Arrow(Arrow.STRONG, level);
ar.text = t;
br.body.addElement(ar);
<======
ns.text.comment = new Row("*** ILLEGAL BREAK! ***",
Default.conditionColor);
AmDialog d =
new AmDialog
(frame, AmLocale.Source_syntax_error(),AmDialog.B_OK,
AmLocale.Illegal()+" 'break'. ");
teha libanool
Arrow ar = new Arrow(Arrow.STRONG, Integer.MAX_VALUE);
ar.text = t;
br.body.addElement(ar);
br.body.removeElementAt(0);
pole tabelis
on tabelis
<======
otsida noole otsatase
Sketch x = (Sketch)(s.parent.parent);
..while
* ;(x != null)&& (x.parent != null) &&
(x.comment.toString().indexOf("..switch") != 0)&&
(x.comment.toString().indexOf("..for") != 0)&&
(x.comment.toString().indexOf("..do") != 0)&&
(x.comment.toString().indexOf("..while") != 0);
x = (Sketch)(x.parent.parent);
int level = x.level();
? level > 0
br.body.removeElementAt(0);
teha nool
Arrow ar = new Arrow(Arrow.STRONG, level);
ar.text = t;
br.body.addElement(ar);
<======
ns.text.comment = new Row("*** ILLEGAL BREAK! ***",
Default.conditionColor);
AmDialog d =
new AmDialog
(frame, AmLocale.Source_syntax_error(),AmDialog.B_OK,
AmLocale.Illegal()+" 'break'. ");
teha libanool
Arrow ar = new Arrow(Arrow.STRONG, Integer.MAX_VALUE);
ar.text = t;
br.body.addElement(ar);
br.body.removeElementAt(0);
on margendiga
else (polnud ma"rgendiga)
<======
? s.comment.toString().compareTo("continue") == 0
s.comment = new Row("..continue", Default.commentColor);
Branch br = (Branch)(s.body.elementAt(0));
PrimitiveMember ns = (PrimitiveMember)(br.body.elementAt(0));
Text t = ns.text;
..if
? (t.rows.size() == 1) &&
(t.row(0).elements.size() > 2)
on margendiga
String label = t.row(0).toString();
label = label.substring(0,label.length()-1).trim();
otsida tabelis
int labelIndex = -1;
String lab;
..for
* int k = 0; k < labels.size(); k += 2
lab = (String)(labels.elementAt(k));
? label.compareTo(lab) == 0
labelIndex = k;
<======;
..if
? labelIndex == -1
pole tabelis
ns.text.comment = new Row("*** ILLEGAL CONTINUE! ***",
Default.conditionColor);
AmDialog d =
new AmDialog
(frame, AmLocale.Source_syntax_error(),AmDialog.B_OK,
AmLocale.Illegal()+" 'continue'. ");
teha libanool
Arrow ar = new Arrow(Arrow.STRONG, Integer.MAX_VALUE);
ar.text = t;
br.body.addElement(ar);
br.body.removeElementAt(0);
<======
on tabelis
//Sketch arrowEnd = (Sketch)(labels.elementAt(labelIndex+1));
otsida noole otsatase
Sketch x = (Sketch)(s.parent.parent);
..while
* ;(x != null)&& (x.parent != null);
..for
* int k = 0; k < labels.size(); k += 2
lab = (String)(labels.elementAt(k));
? (label.compareTo(lab) == 0)&&
((Sketch)(labels.elementAt(k+1)) == x)
<==========
x = (Sketch)(x.parent.parent);
int level = x.level();
? level > 0
br.body.removeElementAt(0);
teha nool
Arrow ar = new Arrow(Arrow.WEAK, level+1);
ar.text = t;
br.body.addElement(ar);
<======
ns.text.comment = new Row("*** ILLEGAL CONTINUE! ***",
Default.conditionColor);
AmDialog d =
new AmDialog
(frame, AmLocale.Source_syntax_error(),AmDialog.B_OK,
AmLocale.Illegal()+" 'continue'. ");
teha libanool
Arrow ar = new Arrow(Arrow.STRONG, Integer.MAX_VALUE);
ar.text = t;
br.body.addElement(ar);
br.body.removeElementAt(0);
pole tabelis
on tabelis
<======
otsida noole otsatase
Sketch x = (Sketch)(s.parent.parent);
..while
* ;(x != null)&& (x.parent != null) &&
(x.comment.toString().indexOf("..switch") != 0)&&
(x.comment.toString().indexOf("..for") != 0)&&
(x.comment.toString().indexOf("..do") != 0)&&
(x.comment.toString().indexOf("..while") != 0);
x = (Sketch)(x.parent.parent);
int level = x.level();
? level > 0
br.body.removeElementAt(0);
teha nool
Arrow ar = new Arrow(Arrow.WEAK, level+1);
ar.text = t;
br.body.addElement(ar);
<======
ns.text.comment = new Row("*** ILLEGAL CONTINUE! ***",
Default.conditionColor);
AmDialog d =
new AmDialog
(frame, AmLocale.Source_syntax_error(),AmDialog.B_OK,
AmLocale.Illegal()+ " 'continue'.");
d.pack();
d.show();
teha libanool
Arrow ar = new Arrow(Arrow.STRONG, Integer.MAX_VALUE);
ar.text = t;
br.body.addElement(ar);
br.body.removeElementAt(0);
on margendiga
else (polnud ma"rgendiga)
return
break
continue
..for
* Enumeration e = s.body.elements(); e.hasMoreElements();
Branch br = (Branch)(e.nextElement());
..for
* Enumeration ee = br.body.elements(); ee.hasMoreElements();
Object o = ee.nextElement();
? o instanceof Sketch
breaks((Sketch)o);
iga haru liikme korral
iga haru korral
setBranchHeadColor
breaks
static void setBranchHeadColor(Sketch s)
..for
* int k = 0; k < s.body.size(); k++
Branch br = s.branch(k);
..for
* int j = 0; j < br.head.size(); j++
PrimitiveHead h = br.primitiveHead(j);
..for
* int m = 0; m < h.text.rows.size(); m++
Row r = h.text.row(m);
..for
* int n = 0; n < r.elements.size(); n++
r.getElement(n);
r.sy.color = Default.branchHeadColor;
..for
* int i = 0; i < br.body.size(); i++
Object o = br.member(i);
? o instanceof Sketch
setBranchHeadColor((Sketch)o);
..if
? s.head.size() > 0
PrimitiveHead h = s.primitiveHead(0);
? h.type == PrimitiveHead.SWITCH
..for
* int j = 0; j < s.head.size(); j++
h = s.primitiveHead(j);
..for
* int m = 0; m < h.text.rows.size(); m++
Row r = h.text.row(m);
..for
* int n = 0; n < r.elements.size(); n++
r.getElement(n);
r.sy.color = Default.branchHeadColor;
if
if
joinHeads
void joinHeads(Sketch s)
eeld: pa"ised on 1-realised
int k, j;
..for
* k = 0; k < s.body.size(); k++
Branch br = s.branch(k);
..for
* j = 0; j < br.body.size(); j++
Object o = br.member(j);
? o instanceof Sketch
joinHeads((Sketch)o);
for k
String comm = s.comment.toString();
..if
? (comm.compareTo("..for")==0)||
(comm.compareTo("..switch")==0)||
(comm.compareTo("..while")==0)
Row r0 = s.primitiveHead(0).text.row(0);
..while
* ;s.head.size() > 1;
teine pa"is esimese lo~ppu
Row r = s.primitiveHead(1).text.row(0);
..for
* int i = 1; i < r.elements.size(); i++
r0.elements.addElement(r.elements.elementAt(i));
r0.planSize();
s.head.removeElementAt(1);
sulud maha
..for
* int i = 1; i < r0.elements.size(); i++
r0.getElement(i);
? r0.sy.c == ' '
<------;
..if
? r0.sy.c == '('
..if
? comm.compareTo("..while")==0
((Symbol)(r0.element(i))).c = ';';
<======
<======;
..for
* int i = r0.elements.size()-1; i > 0 ; i--
r0.getElement(i);
? r0.sy.c == ' '
<------;
..if
? r0.sy.c == ')'
..if
? comm.compareTo("..while")==0
((Symbol)(r0.element(i))).c = ';';
<======
<======;
if
openParenthInConditions
void openParenthInConditions(Sketch s)
sulud tingimuse ümbert
..for
* int k = 0; k < s.body.size(); k++
Branch br = s.branch(k);
..for
* int j = 0; j < br.body.size(); j++
Object o = br.member(j);
? o instanceof Sketch
Sketch sk = (Sketch)o;
openParenthInConditions(sk);
<------
Primitive p = (Primitive)o;
? p.type == Primitive.CONDITION
Text t = p.text;
int i = t.rows.size();
? i>0
Row rFirst = t.row(0);
rFirst.trim();
Row rLast =t.row(i-1);
rLast.trim();
? !rFirst.isTrivial() && !rLast.isTrivial()
rFirst.getElement(1);
Symbol s1 = rFirst.sy;
rLast.getElement(rLast.elements.size() - 1);
Symbol s2 = rLast.sy;
? (s1.c == '(') && (s2.c == ')')
rFirst.remove(1);
rFirst.planSize();
rLast.remove(rLast.elements.size() - 1);
rLast.planSize();
else
for k
Reduce ==================================================
static boolean changed;
reduce
public void reduce(Sketch s)
changed = true;
..while
* ;changed;
changed = false; reduceSimples(s);
reduceSimples
static void reduceSimples(Sketch s)
redutseerida lihtskeemid ja nooled s-is
System.out.println("BLjava:reduceSimples:entered");
..for
* Enumeration e = s.body.elements(); e.hasMoreElements();
Branch br = (Branch)(e.nextElement());
..for
* int i = 0; i < br.body.size(); i++
reduts lihtskeemid harus br
Object o = br.body.elementAt(i);
? o instanceof Sketch
Sketch innerSketch = (Sketch)o;
sil
String xinner = innerSketch.comment.toString();
String xbr = br.comment.toString();
..if
? innerSketch.head.size() > 0
reduceSimples(innerSketch);
<----------;
..if
? rule1(br, innerSketch, i)
changed = true; i--;
<----------;
pyyda avada
..if
? rule15(br, innerSketch, i)
changed = true;
i--;
avatud skeemi esimesest liikmest
<----------;
kui ei onnestunud avada reegliga 15
proovida reegliga 11 vo~i 12:
..if
? s.type == Scheme.SIMPLE
..if
? rule11(br, innerSketch, i)
changed = true;i--;
<--------------;
<======
? s.type == Scheme.LOOP
? rule12(br, innerSketch, i)
changed = true;i--;
<----------;
Pi2 lopunoolte redutseerimine
..if
? rule7(br, innerSketch, i)
changed = true;i--;
<----------;
reduceSimples(innerSketch);
alamskeemi korral
iga haru br liikme korral
iga haru korral
rule1
reduceSimples
static boolean rule1(Branch br, Sketch Pi2, int i)
eemaldada, kui on tyhi skeem
?
((Pi2.comment.isTrivial())
|| (Pi2.comment.toString().indexOf("..") == 0)
)
&& (Pi2.body.size() == 1)
Branch Pi2br = (Branch)(Pi2.body.elementAt(0));
? Pi2br.body.size() == 0
eemaldada Pi2
br.body.removeElementAt(i);
<======true
<======false
rule11
rule1
static boolean rule11(Branch br, Sketch Pi2, int i)
pyyda avada skeem Pi2 kui on harus br viimasel kohal
avada saab ainult lihtskeemis voi case-s
/ if((br.type != Branch.CASE) && (br.type != Branch.CATCH))
/ return false;
System.out.println("AmReduce: rule11: 1");
? Pi2.type != Sketch.SIMPLE
<======false
System.out.println("AmReduce: rule11: 2");
? Pi2.body.size() > 1
<======false
kas on viimasel kohal
System.out.println("AmReduce: rule11: 3");
..for
* int j = i+1; j < br.body.size(); j++
Object o = br.body.elementAt(j);
System.out.println("AmReduce: rule11: 33 i="+i);
? o instanceof Sketch
<==========false
System.out.println("AmReduce: rule11: 4");
? o instanceof Arrow
<==========false
System.out.println("AmReduce: rule11: 5");
PrimitiveMember ns = (PrimitiveMember)o;
? !ns.text.isTrivial()
<==========false
System.out.println("AmReduce: rule11: 6");
for
ei tulnud muud kui triviaalsed
System.out.println("AmReduce: rule11: 70");
? (Pi2.comment.isTrivial()) ||
(Pi2.comment.toString().indexOf("..") == 0)
System.out.println("AmReduce: rule11: 71");
vaja proovida
Branch Pi2br = (Branch)(Pi2.body.elementAt(0));
Group gr2 = new Group(Pi2br);
gr2.start = 0;
gr2.end = Pi2br.body.size()-2;
Pi2-
Group gr1 = new Group(br);
gr1.start = 0;
gr1.end = i-1;
System.out.println("AmReduce: rule11: 7");
? gr1.isCC() || (!gr2.containsMemberArrow())
avada
Pi2.open();
System.out.println("AmReduce: rule11: 8");
<======true
<======false
rule12
rule11
static boolean rule12(Branch br, Sketch Pi2, int i)
pyyda avada skeem Pi2 kui on harus br viimasel kohal
avada saab ainult tsyklis
/ if((br.type != Branch.CASE) && (br.type != Branch.CATCH))
/ return false;
System.out.println("AmReduce: rule11: 1");
? Pi2.type != Sketch.SIMPLE
<======false
System.out.println("AmReduce: rule11: 2");
? Pi2.body.size() > 1
<======false
kas on viimasel kohal
System.out.println("AmReduce: rule11: 3");
..for
* int j = i+1; j < br.body.size(); j++
Object o = br.body.elementAt(j);
System.out.println("AmReduce: rule11: 33 i="+i);
? o instanceof Sketch
<==========false
System.out.println("AmReduce: rule11: 4");
? o instanceof Arrow
<==========false
System.out.println("AmReduce: rule11: 5");
PrimitiveMember ns = (PrimitiveMember)o;
? !ns.text.isTrivial()
<==========false
System.out.println("AmReduce: rule11: 6");
for
ei tulnud muud kui triviaalsed
System.out.println("AmReduce: rule11: 70");
? (Pi2.comment.isTrivial()) ||
(Pi2.comment.toString().indexOf("..") == 0)
System.out.println("AmReduce: rule11: 71");
vaja proovida
Branch Pi2br = (Branch)(Pi2.body.elementAt(0));
Group gr2 = new Group(Pi2br);
gr2.start = 0;
gr2.end = Pi2br.body.size()-2;
Pi2-
Group gr1 = new Group(br);
gr1.start = 0;
gr1.end = i-1;
System.out.println("AmReduce: rule11: 7");
? gr1.isCC() || (
!gr2.containsMemberArrow() &&
!br.parent.isHeadless()
)
avada
Pi2.withdrawArrows(Pi2.level());
Pi2.open();
System.out.println("AmReduce: rule11: 8");
<======true
<======false
rule15
rule12
static boolean rule15(Branch br, Sketch Pi2, int i)
pyyda avada skeem Pi2 mis on i-s harus br
avada saab suvalises skeemis (br.parent.type)
? Pi2.type != Scheme.SIMPLE
<======false
<======false
? (Pi2.comment.isTrivial()) || (Pi2.comment.toString().indexOf("..") == 0)
vaja proovida
Branch Pi2br = (Branch)(Pi2.body.elementAt(0));
Group gr2 = new Group(Pi2br);
gr2.start = 0;
gr2.end = Pi2br.body.size()-1;
..if
? Pi2.containsArrow(Pi2.level())
<==========false
Group gr1 = new Group(br);
gr1.start = 0;
gr1.end = i-1;
? (gr1.isCC() && gr2.isCC()) || gr2.isLinear()
avada
Pi2.open();
<======true
<======false
rule7
rule15
static boolean rule7(Branch br, Sketch Pi2, int i)
avada saab suvalises skeemis (br.parent.type)
kas jargneb nool
int j = i+1;
otsida edasi
int iArrow2 = -1;
..for
* ;;j++
<==========false
Object o = br.body.elementAt(j);
? o instanceof Sketch
<==========false
? o instanceof Arrow
iArrow2 = j;
<======;
? o instanceof PrimitiveMember
PrimitiveMember ns = (PrimitiveMember)o;
..if
<----------;
triviaalsed jatta vahele
<==============false
for
System.out.println("AmReduce: rule7: iArrow2="+iArrow2);
? iArrow2 == -1
<======false
jargnes nool, kas Pi2 viimane on nool?
Branch Pi2br = (Branch)(Pi2.body.elementAt(0));
j = Pi2br.body.size()-1;
otsida tagasi
int iArrow1 = -1;
..for
* ;;j--
<==========false
Object o = Pi2br.body.elementAt(j);
? o instanceof Sketch
<==========false
? o instanceof Arrow
iArrow1 = j;
<======;
? o instanceof PrimitiveMember
PrimitiveMember ns = (PrimitiveMember)o;
..if
<----------;
triviaalsed jatta vahele
<==============false
for
System.out.println("AmReduce: rule7: iArrow1="+iArrow1);
? iArrow1 == -1
<======false
Branch Pi2br = (Branch)(Pi2.body.elementAt(0));
Group gr2 = new Group(Pi2br);
gr2.start = 0;
gr2.end = iArrow1-1;
? !gr2.isCC()
<======false
saab rakendada
Arrow ar1 = (Arrow)(Pi2br.body.elementAt(iArrow1));
Pi2br.body.removeElementAt(iArrow1);
br.body.removeElementAt(iArrow2);
br.body.insertElementAt(ar1, iArrow2);
<======true
normalize
rule7
laheb vaatesse
/*
static boolean oneLine(AmSketch br, AmSketch Pi2, int i){
System.out.println("AmReduce: oneLine start");
if(!Pi2.isMono()) return false;
System.out.println("AmReduce: oneLine 1");
kommentaariga skeemi ei tee
if(!Pi2.comment.isTrivial()){
System.out.println("AmReduce: oneLine 2");
String komm = Pi2.comment.toString();
if(komm.indexOf("..") != 0) return false;
}
System.out.println("AmReduce: oneLine 3");
AmSketch Pi2Br = (AmSketch)(Pi2.body.elementAt(0));
if(Pi2.type == AmSketch.SIMPLE){
int n = Pi2Br.body.size();
liikmeid peab olema 1 voi 2
if( n == 0) return false;
System.out.println("AmReduce: oneLine 4");
if( n > 2) return false;
System.out.println("AmReduce: oneLine 5");
esimeseks liikmeks peab olema yherealine tingimus kommntaarita
Object o = Pi2Br.body.elementAt(0);
if(o instanceof AmSketch) return false;
System.out.println("AmReduce: oneLine 6");
PrimitiveMember ns0 = (PrimitiveMember)(Pi2Br.body.elementAt(0));
if(ns0.type != PrimitiveMember.CONDITION) return false;
if(!ns0.text.comment.isTrivial()) return false;
if(ns0.text.rows.size() != 1) return false;
teine liige peab olema yherealine tekstiprimitiiv
PrimitiveMember ns1 = (PrimitiveMember)(Pi2Br.body.elementAt(1));
if(ns1.type != PrimitiveMember.PRIMITIVE) return false;
if(ns1.text.rows.size() != 1) return false;
teha yherealine tekst
lisada tekstiprimitiivi ette
AmRow r0 = (AmRow)(ns0.text.rows.elementAt(0));
AmRow r1 = (AmRow)(ns1.text.rows.elementAt(0));
r1.addRowelem(new AmSymbol(' ',AmDefault.foregroundColor), 0);
for(int j = r0.rowelem.size()-1; j >= 0; j--){
r1.addRowelem((AmSymbol)(r0.rowelem.elementAt(j)), 0);
}for
r1.addRowelem(new AmSymbol(' ',AmDefault.conditionColor), 0);
r1.addRowelem(new AmSymbol('?',AmDefault.sketchHeadColor), 0);
r1.addRowelem(new AmSymbol('[',AmDefault.sketchHeadColor), 0);
tehtud rida uueaks primitiiviks
PrimitiveMember newns = new PrimitiveMember(PrimitiveMember.PRIMITIVE);
newns.text.rows.removeElementAt(0);
newns.text.rows.addElement(r1);
br.body.removeElementAt(i);
br.body.insertElementAt(newns,i);
return true;
}simple
return false;
}oneLine
*/
Reduce ==================================================.
public boolean normalize(SketchyText skt0,
main = source
SketchyText skt1,
main = new
AmFrame dialogTargetFrame)
frame = dialogTargetFrame;
Sketch sNew = skt1.main;
sNew.baseLanguage = new BaseLanguageJava();
sNew.branch(0).baseLanguage = new BaseLanguageJava();
Sketch s = skt0.main;
skt1.main.insert(skt0.main.branch(0).makeCopy(),1);
skt1.main.removeMember(0);
skt1.main.baseLanguage = new BaseLanguageJava();
label = 0;
normalize(skt1.main);
<======true
normalize
Normaliseeritud skeem-Java.
Va"limine skeem: lihtne, 1 lihtharuga;
pole va"limist katkestavaid nooli.
Haru:
lineaarne - ainult mittetriviaalse tekstiga 1 vo~i enam liiget
pseudolineaarne - nool viimasel kohal, eelmine osa tyhi
vo~i lineaarne
if0 - on va"hemalt 1 tingimus, nooli ei ole
if - on va"hemalt 1 tingimus ja veel yks nool viimasel kohal
no~rk nool katkestab vaid LOOP (ainukese) haru
pikendatud noole otsaskeemil on AMADEUSlabel.
private boolean normalize(Sketch s)
tagastab true, kui s eemaldatud vo~i avatud
JK 12.02.2014 kõigepealt
? s.level() > 0
pole peaskeem
ehk saab avada vo~i eemaldada
String comm = s.comment.toString();
..if
? (comm.length() >=2) &&
(comm.substring(0,2).compareTo("//") == 0)
on kommentaar, mis algab //
eemaldada see skeem
int i = s.parent.body.indexOf(s);
s.parent.body.removeElementAt(i);
<==============true
skoopida tingimused
..for
* int k = 0; k < s.body.size(); k++
Branch br = s.branch(k);
iga tingimuse (..nooleni) skoop teha lihtskeemiks
scopeConditions(br);
alamskeemid
..for
* int k = 0; k < s.body.size(); k++
Branch br = s.branch(k);
..for
* int i = 0; i < br.body.size(); i++
Object o = br.member(i);
? o instanceof Sketch
? normalize((Sketch)o)
i--;
ise
? s.level() > 0
//JK 12.02.2014
VIIDUD ALGUSESSE
pole peaskeem
ehk saab avada vo~i eemaldada
String comm = s.comment.toString();
System.out.println("BaseLanguageJava:normalize(Sketch s):s.comment: "+ comm);
..if
? (comm.length() >=2) &&
(comm.substring(0,2).compareTo("//") == 0)
on kommentaar, mis algab //
eemaldada see skeem
int i = s.parent.body.indexOf(s);
s.parent.body.removeElementAt(i);
<==============true
? s.type == Scheme.MODULE
moodul
..if
? s.head.size() == 0
pa"iseta, avada lihtsalt
s.open();
<==========true
pa"iseta moodul
? s.primitiveHead(0).type == PrimitiveHead.LOOP
pa"ise tekst iga tekstiga-lihtprimitiivi ette
String htext = s.primitiveHead(0).text.toString();
Branch br = s.branch(0);
..for
* int i = 0; i < br.body.size(); i++
Object o = br.member(i);
? o instanceof PrimitiveMember
PrimitiveMember p = (PrimitiveMember)o;
? p.type == Primitive.SIMPLE
? !p.text.isTrivial()
..for
* int j = 0; j < htext.length(); j++
p.text.row(0).insert(
new Symbol(htext.charAt(j)),
j+1);
for j
for i
s.head.removeAllElements();
s.open();
<======true
pa"isega moodul
moodul
pole peaskeem
skeem ja"i avamata
eemaldada tyhjad/semikoolon read
..for
* int k = 0; k < s.body.size(); k++
Branch br = s.branch(k);
..for
* int i = 0; i < br.body.size(); i++
Object o = br.member(i);
? o instanceof PrimitiveMember
PrimitiveMember p = (PrimitiveMember)o;
? (p.type == Primitive.SIMPLE)&&
(p.text.isTrivial())
peaks ka ";"
br.removeMember(i);
i--;
elimineerida saavutamatud osad
eliminateUnreachables(s);
iga pikendatud noole korral
lisada ma"rgend katkestatavale/ja"tkatavale
skeemile
no~rk pikendatud nool, mis ei ja"tka tsyklit,
==> tugev (pikem)
iga (liht)haru korral tyhi case --> default
iga (liht)haru korral tyhi catch --> finally
int sLevel = s.level();
..for
* int k = 0; k < s.body.size(); k++
Branch br = s.branch(k);
case --> default, kui vaja
catch --> finally, kui vaja
..if
? br.type == Scheme.SIMPLE
? br.head.size() == 1
PrimitiveHead he = br.primitiveHead(0);
String heStr = he.text.toString().trim();
..if
? (he.type == PrimitiveHead.CASE) &&
(heStr.compareTo(":") == 0)
he.type = PrimitiveHead.DEFAULT;
<======
? (he.type == PrimitiveHead.CATCH) &&
(heStr.compareTo("") == 0)
he.type = PrimitiveHead.FINALLY;
lihtharu
..for
* int i = 0; i < br.body.size(); i++
Object o = br.member(i);
? o instanceof Arrow
Arrow ar = (Arrow)o;
Scheme destin = ar.destination(br);
..if
? destin instanceof Branch
no~rk nool
destin = destin.parent;
? destin.type != Scheme.LOOP
==> tugevaks
ar.type = Arrow.STRONG;
ar.level--;
? ar.level < sLevel
pikendatud
..if
? (destin != null) &&
(destin.type != Scheme.MODULE)
lisada algusse ma"rgend
String dComment =
destin.comment.toString().trim();
? dComment.indexOf("[AMADEUSlabel:") < 0
kui veel pole
destin.comment = new Row(
"[AMADEUSlabel:" +
"L" + label +
"]" + dComment,
Default.commentColor
);
label++;
? destin.parent == null
AmDialog d =
new AmDialog
(frame, AmLocale.Error(),AmDialog.B_OK,
AmLocale.Normalize() + ":" +
AmLocale.Break_to_outer_level() + "!");
if arrow
for i
for k
muud normaliseerimised skeemis s
<======false
eliminateUnreachables
normalize
private void eliminateUnreachables(Sketch s)
..for
* int k = 0; k < s.body.size(); k++
Branch br = s.branch(k);
..for
* int i = 0; i < br.body.size() ; i++
Object o = br.member(i);
? o instanceof Arrow
? i != (br.body.size() - 1)
ei ole viimasel kohal
int j = i+1;
..while
* ;j < br.body.size();
AmDialog d =
new AmDialog
(frame, AmLocale.Warning(),AmDialog.B_OK,
AmLocale.Normalize() + ":" +
AmLocale.Unreachables() + "!");
<==============
scopeConditions
private void scopeConditions(Branch br)
..while
* ;!conditionsScoped(br);
esimese tingimuse skoobi lo~petab nool
teha skoop esimesele tingimusele
LOOP:
..for
* int i = 0; ; i++
Object o = br.member(i);
? o instanceof PrimitiveMember
PrimitiveMember p = (PrimitiveMember)o;
? p.type == Primitive.CONDITION
esimene tingimus
leida nool
..for
* int j = i+1; ;j++
o = br.member(j);
? o instanceof Arrow
Arrow ar = (Arrow)o;
teha skoop
Selection sel =
new Selection(
new Cursor(br,p),
new Cursor(br,ar));
Sketch sk =
sel.convert2simple(0,0,new BaseLanguageJava());
scopeConditions(sk.branch(0));
<==========LOOP;
for i
while
static int label;
kasut. nii nor,alize kui ka textualize
Textualize ==================================================
static Branch br1;
static String indent =
" ";
static int currentLevel = 0;
static final int EMPTY = -2;
static final int NOT_NORMALIZED = -1;
static final int LINEAR = 0;
pole tingimusi ja nooli
static final int IF0 = 1;
on tingimusi, aga nooli ei ole
static final int IF = 2;
on tingimusi ja 1 nool lo~pus
static final int PSEUDOLINEAR = 3;
pole tingimusi, on nooli
getSKMmodel
static final int METHOD = 3;
static final int LOOP = 4;
static final int SWITCH = 5;
static final int TRY = 6;
JavaCC jaoks------------------
private static Sketch getSKMmodel(Sketch s)
tagastab skeemi s esimeses harus leiduva skeemmudeli skeemi
või null
Branch br = s.branch(0);
..for
* int i = 0; i < br.body.size(); i++
Object o = br.member(i);
? o instanceof Sketch
Sketch sk = (Sketch)o;
alamskeem
..if
? (sk.view.type == View.BOX)
&& (sk.baseLanguage.type == BaseLanguage.NONE)
<==============sk
Sketch tulem = getSKMmodel(sk);
? tulem != null
<==============tulem
<======null
textualize
getSKMmodel
JavaCC jaoks------------------.
public boolean textualize(SketchyText skt0,
main = source
SketchyText skt1,
main = new
AmFrame dialogTargetFrame)
frame = dialogTargetFrame;
Sketch sNew = skt1.main;
Sketch s = skt0.main.makeCopy();
JavaCC jaoks ------------------- asendada skeemmudel tekstiga
Sketch mudel = getSKMmodel(s);
..if
? mudel != null
Item36Listener.textualizeInplace(mudel, dialogTargetFrame);
JavaCC jaoks ------------------- asendada skeemmudel tekstiga.
label = 0;
normalize(s);
sNew.baseLanguage = new BaseLanguageJava();
sNew.branch(0).baseLanguage = new BaseLanguageJava();
teha s-st read ja lisada need uue haru primtiivideks
Branch br = s.branch(0);
br1 = sNew.branch(0);
br1.body.removeElementAt(0);
insertLine("//This Java-text is generated by AMADEUS");
..for
* int i = 0; i < br.body.size(); i++
Object o = br.member(i);
Java korral o: primtiiv vo~i skeem (module)
? o instanceof PrimitiveMember
textualize((PrimitiveMember)o);
<------
? o instanceof Sketch
textualize((Sketch)o);
<======true
private void textualize(Primitive p)
lihtliige
<======
//..for
* int i = 0; i < p.text.rows.size(); i++
p.text iga rea korral
insertLine(p.text.row(i).toString());
..for
* int i = 0, n = p.text.rows.size(); i < n ; i++
JK 14.03.05
? i < n-1
p.text esimeste ridade korral
insertLine(p.text.row(i).toString());
<======
p.text viimase rea korral koos
mittetüja reakommentaariga
String tKomm = p.text.comment.toString().trim();
? tKomm.length() != 0
insertLine(p.text.row(i).toString() + " // " + tKomm);
<======
insertLine(p.text.row(i).toString());
private void textualizeCondition(Primitive p)
tingimus
insertLine("if(");
..for
* int i = 0; i < p.text.rows.size(); i++
p.text iga rea korral
insertLine(p.text.row(i).toString());
insertLine("){");
private void textualizeReturn(Arrow a)
? a.text.isTrivial()
insertLine("return;");
<======
insertLine("return(");
..for
* int i = 0; i < a.text.rows.size(); i++
p.text iga rea korral
insertLine(a.text.row(i).toString());
insertLine(");");
private void textualize(PrimitiveHead he)
lihtpa"is
String pref = "";
String suff = "";
..switch
??he.type
..case
? PrimitiveHead.LOOP:
pref = "for("; suff = ")";
<======;
..case
? PrimitiveHead.SWITCH:
pref = "switch("; suff = ")";
<======;
..case
? PrimitiveHead.TRY:
<======;
..case
? PrimitiveHead.CASE:
<======;
..case
? PrimitiveHead.DEFAULT:
pref = "case";
String heText = he.text.toString().trim();
..if
? heText.compareTo(":")==0
pref = "default";
<======;
..case
? PrimitiveHead.CATCH:
<======;
..case
? PrimitiveHead.FINALLY:
<======;
..if
? pref.length() > 0
insertLine(pref);
? he.text.isTrivial()
<======
..for
* int i = 0; i < he.text.rows.size(); i++
he.text iga rea korral
insertLine(he.text.row(i).toString());
..if
? suff.length() > 0
insertLine(suff);
insertLine
textualize lihtpa"is
private void insertLine(String str)
str = indent.substring(
0, Math.min(indent.length(),
currentLevel+1))
+ str;
Text newT = new Text();
newT.rows.removeElementAt(0);
newT.rows.addElement(
new Row(unicode(str), Default.foregroundColor));
br1.body.addElement(
new PrimitiveMember(Primitive.SIMPLE, newT));
unicode
insertLine
private String unicode(String s)
suuremad kui 255 koodid sss asendada unikoodiga
StringBuffer tulem = new StringBuffer();
String unisuff = "";
..for
* int i = 0; i < s.length(); i++
int c = (int)s.charAt(i);
kood
? c < 256
tulem.append(s.charAt(i));
<------
unisuff = Integer.toHexString(c);
? unisuff.length() < 4
tulem.append("\\u0" + unisuff);
<------
tulem.append("\\u" + unisuff);
else
for
<======tulem.toString()
private void textualize(Sketch sk)
currentLevel++;
kui vaja, siis ma"rgend
String str = sk.comment.toString();
..if
? str.indexOf("[AMADEUSlabel:") == 0
insertLine(str.substring(14, str.indexOf("]"))+":");
pa"ised la"hevad lihtprimitiividena
boolean isSwitch = false;
boolean isTry = false;
int i;
..if
? (sk.type == Scheme.LOOP) && (sk.head.size() == 0)
insertLine("for(;;)");
<======
mitte vabatsykkel
..for
* i = 0; i < sk.head.size(); i++
..if
? sk.primitiveHead(i).type == PrimitiveHead.SWITCH
isSwitch = true;
<======
? sk.primitiveHead(i).type == PrimitiveHead.TRY
isTry = true;
textualize(sk.primitiveHead(i));
keha
..if
? isSwitch
insertLine("{");
..for
* i = 0; i < sk.body.size(); i++
textualize(sk.branch(i));
..if
? isSwitch || isTry
insertLine("}");
currentLevel--;
private void textualize(Branch b)
int conditionsOpenedCount = 0;
silum:
String sss = b.comment.toString();
currentLevel++;
pa"ised (case korral vo~ib olla mitu)
boolean isCase = false;
int i;
..for
* i = 0; i < b.head.size(); i++
..if
? b.primitiveHead(i).type == PrimitiveHead.CASE
isCase = true;
textualize(b.primitiveHead(i));
? b.head.size() == 0
? b.type == Scheme.LOOP
LOOP-haru on Java1.5 korral tühi keha == ";"
isCase = true;
//
ei saa, päis on juba välja viidud
Sketch sb = (Sketch)(b.parent);
int sbn = sb.head.size();
? sbn > 0
peaks olema
PrimitiveHead sbph = sb.primitiveHead(sbn-1);
viimane päis
Row r = sbph.text.row(sbph.text.rows.size() -1);
viimase päise viimane rida
r.append(new Symbol(';'));
insertLine(";");
keha
..if
? !isCase
insertLine("{");
..switch
??branchBodyKind(b)
..case
? EMPTY:
0 vo~i enam paljaid kommentaare
<======;
ei tee ridu
..case
? LINEAR:
..for
* i = 0; i < b.body.size(); i++
Object o = b.member(i);
? o instanceof Sketch
textualize((Sketch)o);
<------
textualize((PrimitiveMember)o);
<======;
..case
? IF0:
1 vo~i enam lahtist tingimust
..for
* i = 0; i < b.body.size(); i++
Object o = b.member(i);
? o instanceof Sketch
textualize((Sketch)o);
<------
PrimitiveMember p = (PrimitiveMember)o;
? p.type == Primitive.SIMPLE
textualize(p);
<------
if(p.type == Primitive.CONDITION)
textualizeCondition(p);
conditionsOpenedCount++;
String elsebreak = "";
..if
? (b.parent.type == Scheme.LOOP) &&
b.parent.isHeadless()
pa"iseta tsyklis
elsebreak = "else break;";
tingimused kinni
..for
* int ii = 0; ii < conditionsOpenedCount; ii++
insertLine("}"+elsebreak);
<======;
..case
? IF:
on tingimusi, parajasti yks nool lo~pus
? PSEUDOLINEAR:
pole tingimusi, on nooli
conditionsOpenedCount = 0;
..for
* i = 0; i < b.body.size(); i++
Object o = b.member(i);
? o instanceof Sketch
textualize((Sketch)o);
<------
..if
? o instanceof Arrow
Arrow ar = (Arrow)o;
int len = b.level() - ar.level;
mittetavaline asendub
break/continue/return
..if
? (b.head.size() > 0) &&
(((b.primitiveHead(0).type == PrimitiveHead.CASE) ||
(b.primitiveHead(0).type == PrimitiveHead.DEFAULT)) &&
(len == 1))
case--break
insertLine("break;");
<--------------;
..if
? (b.parent.type == Scheme.LOOP) &&
(len <= 1)
haru LOOP-is
tsyklis
..if
? len == 0
insertLine("continue;");
<======
? len == 1
insertLine("break;");
<--------------;
..if
? (len == 1) && (b.parent.type == Scheme.MODULE)
lyhike return MODULE-s
textualizeReturn(ar);
<--------------;
..if
? len > 1
leida skeem, milleni ulatub
Scheme x = ar.destination(b);
..if
? x instanceof Branch
x = x.parent;
..if
? x.type == Scheme.MODULE
textualizeReturn(ar);
<======
String str = x.comment.toString();
str = " " +
str.substring(14,
str.indexOf("]"));
? ar.type == Arrow.STRONG
insertLine("break" +
str +
";");
<======
insertLine("continue" +
str +
";");
<--------------;
tavaline nool:
else ei tohi olla !
<--------------;
PrimitiveMember p = (PrimitiveMember)o;
? p.type == Primitive.SIMPLE
..if
? !p.text.isTrivial()
if(conditionsOpenedCount == 0){
algas jrk osa peale noolt
insertLine("{");
conditionsOpenedCount = 1;
lastOpenedConditionIsReal = false;
}
textualize(p);
<------
if(p.type == Primitive.CONDITION)
textualizeCondition(p);
controlsCount++;
conditionsOpenedCount++;
lastOpenedConditionIsReal = true;
tingimused kinni
..for
* int ii = 0; ii < conditionsOpenedCount; ii++
<======;
..default
? :
<==========
..if
? !isCase
insertLine("}");
currentLevel--;
conditionsScoped
textualize haru
private boolean conditionsScoped(Branch b)
true, kui ei:
leidub tingimus ... nool, mis pole viimasel kohal
int i;
int n = b.body.size() - 1;
..for
* i = 0; i < n; i++
Object o = b.member(i);
? o instanceof PrimitiveMember
PrimitiveMember p = (PrimitiveMember)o;
? p.type == Primitive.CONDITION
kas edasi tuleb veel nool
..for
* i++; i < n; i++
o = b.member(i);
? o instanceof Arrow
<==============false
<======true
branchBodyKind
private int branchBodyKind(Branch b)
int i;
int nontrivialsCount = 0;
int arrowsCount = 0;
int conditionsCount = 0;
..for
* i = 0; i < b.body.size(); i++
Object o = b.member(i);
? o instanceof Sketch
nontrivialsCount++;
<------;
? o instanceof Arrow
..if
? (conditionsCount > 0) &&
(i != b.body.size() - 1)
<==============NOT_NORMALIZED
nontrivialsCount++;
arrowsCount++;
<------;
PrimitiveMember p = (PrimitiveMember)o;
? p.type == Primitive.CONDITION
nontrivialsCount++;
conditionsCount++;
<------;
<==========NOT_NORMALIZED
on mittetriviaalne lihtliige
nontrivialsCount++;
for
? nontrivialsCount == 0
<======EMPTY
? (arrowsCount == 0) && (conditionsCount == 0)
<======LINEAR
? (conditionsCount == 0) && (arrowsCount >0)
<======PSEUDOLINEAR
? (arrowsCount == 0) && (conditionsCount > 0)
<======IF0
<======IF
prepareTex
void prepareTex(Sketch s)
eeldab: harude baaskeel on JAVA
prepareTex(s.comment);
pa"ised
..for
* int j = 0;j < s.head.size(); j++
prepareTex(s.primitiveHead(j).text);
prepareTex(s.primitiveHead(j).text.comment);
..for
* int i = 0; i < s.body.size(); i++
Branch br = s.branch(i);
? br.baseLanguage.type != BaseLanguage.JAVA
<------;
prepareTex(br.comment);
..for
* int j = 0;j < br.head.size(); j++
prepareTex(br.primitiveHead(j).text);
prepareTex(br.primitiveHead(j).text.comment);
..for
* int j = 0; j < br.body.size(); j++
Object o = br.member(j);
? o instanceof Sketch
Sketch sk = (Sketch)o;
sk.baseLanguage.prepareTex(sk);
<------
primitiiv
Primitive p = (Primitive)o;
prepareTex(p.text);
prepareTex(p.text.comment);
primitiiv
<======
prepareTex
private void prepareTex(Row r)
kommentaaris
int nOrig = r.elements.size();
õ -> \~o, ä -> \"a, \ö -> \"o, ü -> \"u ; ka SUURED
aa" -> a"a", ..., oo~ -> o~o~ ja _ -> \_
..for
* int j = 1; j < r.elements.size(); j++
char c0 = 'x', c1 = 'x', c2 = 'x';
r.getElement(j);
..if
? r.sy != null
..if
? r.sy.c == 'õ'
r.remove(j);
r.insert(new Symbol('~', Default.literalColor), j);
r.insert(new Symbol('o', Default.literalColor), j);
j++;
<--------------;
..if
? r.sy.c == 'ä'
r.remove(j);
r.insert(new Symbol('\"', Default.literalColor), j);
r.insert(new Symbol('a', Default.literalColor), j);
j++;
<--------------;
..if
? r.sy.c == 'ö'
r.remove(j);
r.insert(new Symbol('\"', Default.literalColor), j);
r.insert(new Symbol('o', Default.literalColor), j);
j++;
<--------------;
..if
? r.sy.c == 'ü'
r.remove(j);
r.insert(new Symbol('\"', Default.literalColor), j);
r.insert(new Symbol('u', Default.literalColor), j);
j++;
<--------------;
ka SUURED:
..if
? r.sy.c == 'Õ'
r.remove(j);
r.insert(new Symbol('~', Default.literalColor), j);
r.insert(new Symbol('O', Default.literalColor), j);
j++;
<--------------;
..if
? r.sy.c == 'Ä'
r.remove(j);
r.insert(new Symbol('\"', Default.literalColor), j);
r.insert(new Symbol('A', Default.literalColor), j);
j++;
<--------------;
..if
? r.sy.c == 'Ö'
r.remove(j);
r.insert(new Symbol('\"', Default.literalColor), j);
r.insert(new Symbol('O', Default.literalColor), j);
j++;
<--------------;
..if
? r.sy.c == 'Ü'
r.remove(j);
r.insert(new Symbol('\"', Default.literalColor), j);
r.insert(new Symbol('U', Default.literalColor), j);
j++;
<--------------;
? (r.sy.c == Default.parseSpecial)
r.remove(j);
r.insert(new Symbol('$', Default.literalColor), j);
r.insert(new Symbol('0', Default.literalColor), j);
r.insert(new Symbol('^', Default.literalColor), j);
r.insert(new Symbol('$', Default.literalColor), j);
j += 3;
<--------------
? (r.sy.c == Default.parseSeparator)
r.remove(j);
r.insert(new Symbol('$', Default.literalColor), j);
r.insert(new Symbol('1', Default.literalColor), j);
r.insert(new Symbol('^', Default.literalColor), j);
r.insert(new Symbol('$', Default.literalColor), j);
j += 3;
<--------------
/*
if(r.sy.c == 'y'){
r.remove(j);
r.insert(new Symbol('\"', Default.literalColor), j);
r.insert(new Symbol('u', Default.literalColor), j);
j++;
continue;
}
if(r.sy.c == 'Y'){
r.remove(j);
r.insert(new Symbol('\"', Default.literalColor), j);
r.insert(new Symbol('U', Default.literalColor), j);
j++;
continue;
}
*/
..if
? r.sy.c == '_'
r.insert(new Symbol('\\', Default.literalColor), j);
j++;
<--------------;
c2 = Character.toLowerCase(r.sy.c);
..if
? j > 2
r.getElement(j-1);
..if
? r.sy != null
c1 = Character.toLowerCase(r.sy.c);
r.getElement(j-2);
? r.sy != null
c0 = Character.toLowerCase(r.sy.c);
? c2 == '\"'
..if
<----------;
..if
? (c1 == 'a')||(c1 == 'o')||(c1 == 'u')
r.insert(new Symbol('\"', Default.literalColor), j-1);
j++;
<------
? c2 == '~'
? (c0 == 'o') && (c1 == 'o')
r.insert(new Symbol('~', Default.literalColor), j-1);
j++;
for
a" -> \a", . . ., o~ -> \~o
..for
* int j = 1; j < r.elements.size(); j++
char c1 = 'x', c2 = 'x';
r.getElement(j);
..if
? r.sy != null
c2 = Character.toLowerCase(r.sy.c);
..if
? j > 1
r.getElement(j-1);
? r.sy != null
c1 = Character.toLowerCase(r.sy.c);
? c2 == '\"'
..if
? (c1 == 'a')||(c1 == 'o')||(c1 == 'u')
r.remove(j);
r.insert(new Symbol('\"', Default.literalColor), j-1);
r.insert(new Symbol('\\', Default.literalColor), j-1);
j++;
<------
? (c2 == '~') && (c1 == 'o')
r.remove(j);
r.insert(new Symbol('~', Default.literalColor), j-1);
r.insert(new Symbol('\\', Default.literalColor), j-1);
j++;
..if
? nOrig != r.elements.size()
r.planSize();
<======
prepareTex
private void prepareTex(Text t)
mittekommentaaris
..for
* int i = 0; i < t.rows.size(); i++
Row r = t.row(i);
int nOrig = r.elements.size();
..for
* int j = 1; j < r.elements.size(); j++
r.getElement(j);
? r.sy != null
..if
? r.sy.c == 'õ'
r.remove(j);
r.insert(new Symbol('o', Default.literalColor), j);
r.insert(new Symbol('~', Default.literalColor), j);
r.insert(new Symbol('\\', Default.literalColor), j);
j += 2;
<----------;
..if
? r.sy.c == 'ä'
r.remove(j);
r.insert(new Symbol('a', Default.literalColor), j);
r.insert(new Symbol('\"', Default.literalColor), j);
r.insert(new Symbol('\\', Default.literalColor), j);
j += 2;
<----------;
..if
? r.sy.c == 'ö'
r.remove(j);
r.insert(new Symbol('o', Default.literalColor), j);
r.insert(new Symbol('\"', Default.literalColor), j);
r.insert(new Symbol('\\', Default.literalColor), j);
j += 2;
<----------;
..if
? r.sy.c == 'ü'
r.remove(j);
r.insert(new Symbol('u', Default.literalColor), j);
r.insert(new Symbol('\"', Default.literalColor), j);
r.insert(new Symbol('\\', Default.literalColor), j);
j += 2;
<----------;
..if
? r.sy.c == 'Õ'
r.remove(j);
r.insert(new Symbol('O', Default.literalColor), j);
r.insert(new Symbol('~', Default.literalColor), j);
r.insert(new Symbol('\\', Default.literalColor), j);
j += 2;
<----------;
..if
? r.sy.c == 'Ä'
r.remove(j);
r.insert(new Symbol('A', Default.literalColor), j);
r.insert(new Symbol('\"', Default.literalColor), j);
r.insert(new Symbol('\\', Default.literalColor), j);
j += 2;
<----------;
..if
? r.sy.c == 'Ö'
r.remove(j);
r.insert(new Symbol('O', Default.literalColor), j);
r.insert(new Symbol('\"', Default.literalColor), j);
r.insert(new Symbol('\\', Default.literalColor), j);
j += 2;
<----------;
..if
? r.sy.c == 'Ü'
r.remove(j);
r.insert(new Symbol('U', Default.literalColor), j);
r.insert(new Symbol('\"', Default.literalColor), j);
r.insert(new Symbol('\\', Default.literalColor), j);
j += 2;
<----------;
..if
? (r.sy.c == '=') ||
(r.sy.c == '+') ||
(r.sy.c == '-') ||
(r.sy.c == '*') ||
(r.sy.c == '/') ||
(r.sy.c == '<') ||
(r.sy.c == '>')
r.insert(new Symbol('$', Default.literalColor), j);
r.insert(new Symbol('$', Default.literalColor), j+2);
j++;
<======
? (r.sy.c == Default.parseSpecial)
r.remove(j);
r.insert(new Symbol('$', Default.literalColor), j);
r.insert(new Symbol('0', Default.literalColor), j);
r.insert(new Symbol('^', Default.literalColor), j);
r.insert(new Symbol('$', Default.literalColor), j);
j += 3;
<======
? (r.sy.c == Default.parseSeparator)
r.remove(j);
r.insert(new Symbol('$', Default.literalColor), j);
r.insert(new Symbol('1', Default.literalColor), j);
r.insert(new Symbol('^', Default.literalColor), j);
r.insert(new Symbol('$', Default.literalColor), j);
j += 3;
<======
? (r.sy.c == '{') || (r.sy.c == '}')
r.insert(new Symbol('\\', Default.literalColor), j);
r.insert(new Symbol('$', Default.literalColor), j);
r.insert(new Symbol('$', Default.literalColor), j+3);
j += 2;
<======
? r.sy.c == '|'
r.remove(j);
r.insert(new Symbol('$', Default.literalColor), j++);
r.insert(new Symbol('\\', Default.literalColor), j++);
r.insert(new Symbol('m', Default.literalColor), j++);
r.insert(new Symbol('i', Default.literalColor), j++);
r.insert(new Symbol('d', Default.literalColor), j++);
r.insert(new Symbol('$', Default.literalColor), j);
<======
? r.sy.c == '\\'
r.remove(j);
r.insert(new Symbol('$', Default.literalColor), j++);
r.insert(new Symbol('\\', Default.literalColor), j++);
r.insert(new Symbol('b', Default.literalColor), j++);
r.insert(new Symbol('a', Default.literalColor), j++);
r.insert(new Symbol('c', Default.literalColor), j++);
r.insert(new Symbol('k', Default.literalColor), j++);
r.insert(new Symbol('s', Default.literalColor), j++);
r.insert(new Symbol('l', Default.literalColor), j++);
r.insert(new Symbol('a', Default.literalColor), j++);
r.insert(new Symbol('s', Default.literalColor), j++);
r.insert(new Symbol('h', Default.literalColor), j++);
r.insert(new Symbol('$', Default.literalColor), j);
<======
? (r.sy.c == '&') ||
(r.sy.c == '%') ||
(r.sy.c == '&') ||
(r.sy.c == '#') ||
(r.sy.c == '_')
r.insert(new Symbol('\\', Default.literalColor), j);
j++;
<======
? (r.sy.c == '~') ||
(r.sy.c == '^')
r.insert(new Symbol('\\', Default.literalColor), j);
r.insert(new Symbol('}', Default.literalColor), j+2);
r.insert(new Symbol('{', Default.literalColor), j+2);
j+=3;
? nOrig != r.elements.size()
r.planSize();
for i
<======