AMADEUS html plain
import java.io.*;
import java.util.*;
import java.awt.Toolkit;
import java.awt.*;
import javax.swing.*;
class BaseLanguage_AlgJava extends BaseLanguage
MUUDETUD
static AmFrame frame;
BaseLanguage_AlgJava()
MUUDETUD
constructor
type = _ALGJAVA;
MUUDETUD
static boolean errorDetected;
PARSE
public boolean parse(SketchyText skt0,
main = source
SketchyText skt1,
main = parse result
AmFrame dialogTargetFrame)
Given: 1) plain skm-text skt0 (usually in the current window);
skt0 is assigned to its base language
2) skm-text skt1 -- waiting for result;
skt1.main contains only an empty branch;
skt1.main will be the root of resulting parse tree,
so corresponding to the non-terminal "Start( )";
if parse failed, skt1.main will contain the error message
Result: skt1 represents the parse tree of skt0
returns true
write skt0 (possibly preprocessed) to a plain text file :
String fileName = prepareSourceTextFile(skt0);
parse:
Sketch s = parse(fileName, skt0);
sketch s is now the resulting parse tree
(or conatains the error message)
replace skt1.main by s
the single branch of s ==> skt1.main.branch:
skt1.main.insert(s.branch(0), 0);
add branch
skt1.main.removeMember(1);
remove empty branch
assign base language:
skt1.main.baseLanguage =
BaseLanguage.newBaseLanguage(BaseLanguage.PARSETREE);
<======true
private Sketch parse(String fName0, SketchyText skt0)
Given: 1) plain text in file fName0;
2) the same plain skm-text (for error diagnostics)
Result: a sketch representing
the parse tree of the given plain text
or the error message
Sketch s = null;
parser: fName0 ==> Sketch s
!!
errorDetected = false;
s = _AlgJavaParser.parse(fName0);
MUUDETUD
! (FileNotFoundException e)
errorDetected = true;
String viga = e.getMessage();
System.out.println(viga);
s = errorMsgSketch(skt0, viga);
! (ParseException e)
errorDetected = true;
String viga = e.getMessage();
System.out.println(viga);
s = errorMsgSketch(skt0, viga);
s on nüüd parsipuu lihtskeem (või veateade)
<======s
private String prepareSourceTextFile(SketchyText skt0)
Given: current plain skm-text skt0
Result: given plain skm-text preprocessed
and written to (temporary) output file as plain text;
returns the output file name
or null, if preprocessing failed
Used by: parse and sketchify
String outputFileName = Default.tempSketchifyIn;
boolean failed = false;
preprocess skt0
? failed
<======null
write skt0 ==> output file
skt0.file = new AmFile(skt0);
skt0.file.name = outputFileName;
skt0.file.writeTextFile(outputFileName);
<======outputFileName
public static Sketch errorMsgSketch(SketchyText skt0, String viga)
<======BaseLanguageJavaCC.errorMsgSketch(skt0, viga)
SKETCHIFY
public boolean sketchify(SketchyText skt0,
main = source
SketchyText skt1,
main = result
AmFrame dialogTargetFrame)
Given: 1) plain skm-text skt0 (usually in the current window);
skt0 is assigned to its base language
2) skm-text skt1 -- waiting for result;
skt1.main contains only an empty branch;
skt1.main will be the root of resulting skm-text;
if failed, skt1.main will contain the error message
Result: skt1 represents the sketchified skt0
returns true
write skt0 (possibly preprocessed) to a plain text file :
String fileName = prepareSourceTextFile(skt0);
parse:
errorDetected = false; Sketch s = parse(fileName, skt0);
sketch s is now the resulting parse tree
(or conatains the error message)
? errorDetected
replace skt1.main by s
the single branch of s ==> skt1.main.branch:
skt1.main.insert(s.branch(0), 0);
add branch
skt1.main.removeMember(1);
remove empty branch
<======true
Sketch mudel = null;
import model
SketchyText skt = new SketchyText(null);
skt.file = new AmFile(skt);
skt.file.name = Default.modelsDirectory + "_AlgJavaModel.html";
MUUDETUD
? (new File(skt.file.name)).exists()
skt.frame = dialogTargetFrame;
skt.frame.contents = skt;
skt.file.importsFile();
mudel = skt.main;
? mudel == null
replace skt1.main by s
the single branch of s ==> skt1.main.branch:
skt1.main.insert(s.branch(0), 0);
add branch
skt1.main.removeMember(1);
remove empty branch
<======true
sketchify s(parse tee) ==> s(skm-text) using the model:
BaseLanguage.sketchifyParseTree(s, mudel);
s ==> s
s on nüüd analüüsipuust saadud, mudelile vastav skeem
(või teisendamata analüüsipuu, kui mudelit ei leitud)
s ja tema haru baaskeel on
tühi (None), kui haru sisu (liikmes-skeemid) ei ole ükskeelsed
haru liikmes-skeemide ühine baaskeel vastasel korral
replace skt1.main by s and set base language for outer schemes
byte ühisbaas = s.branch(0).baseLanguage.type;
s haru baaskeel
the single branch of s ==> skt1.main.branch:
skt1.main.insert(s.branch(0), 0);
add branch
skt1.main.removeMember(1);
remove empty branch
set base language:
skt1.main.baseLanguage = BaseLanguage.newBaseLanguage(ühisbaas);
postprocessResult(skt1);
<======true
private void postprocessResult(SketchyText skt1)
Antud: mudeli järgi skeemistatud skt1
Tulemus: antud skeemtekst on teisendatud
Kasutatakse: skeemistamisel järeltöötluseks
REDUCE
public void reduce(Sketch s)
* Enumeration e = s.body.elements(); e.hasMoreElements();
Branch br = (Branch)(e.nextElement());
kui välimise haru, siis > harukommentaarist maha
? br.parent.parent == null
String komm = br.comment.toString();
int k = komm.indexOf(">");
? k != -1
komm = komm.substring(0, k) + komm.substring(k+1);
br.comment = new Row(komm, Default.commentColor);
* int i = 0; i < br.body.size(); i++
Object o = br.body.elementAt(i);
? o instanceof Sketch
reduce((Sketch)o);
<------
PrimitiveMember p = (PrimitiveMember)o;
eemaldada vahepeatus
? p.type == Primitive.BREAKPOINT
br.removeMember(i);
i--;
NORMALIZE
public boolean normalize(SketchyText skt0, SketchyText skt1,AmFrame fr)
System.out.println("NORMALIZE");
//c = skt0.frame.viewArea
Sketch s1 = skt1.main;
s1.insert(skt0.main.branch(0).makeCopy(), 0);
s1.removeMember(1);
? skt0.main.type != Scheme.SIMPLE
<======false
ei tee midagi
s1.type = Scheme.MODULE;
Branch b1 = s1.branch(0);
klassi Main päis:
Row r = new Row("class Main", Default.sketchHeadColor);
Text te = new Text();
te.insert(r, 0);
te.remove(1);
PrimitiveHead h = new PrimitiveHead(PrimitiveHead.SIMPLE, te);
s1.add(h);
meetoditele_static(s1);
peameetodi skeem:
r = new Row("public static void main(String[] args)", Default.sketchHeadColor);
te = new Text();
te.insert(r, 0);
te.remove(1);
h = new PrimitiveHead(PrimitiveHead.SIMPLE, te);
Branch peamBr = new Branch(Scheme.SIMPLE, this);
Sketch peamSk = new Sketch(Scheme.MODULE, peamBr, this);
peamSk.add(h);
b1.insert(peamSk, 0);
liikmete ümberpaigutamine:
int j = 0;
int k = 0;
int l = 0;
* int i = 1; i < b1.body.size(); i++
(0-s on listud peameetodi skeem)
Object o = b1.body.elementAt(i);
? o instanceof PrimitiveMember
b1.removeMember(i);
i--;
PrimitiveMember p = (PrimitiveMember)o;
String pte = p.text.toPlainString().trim();//JK 16.09.2010 : ...toPlainStr...
//System.out.println("BaseLanguage_AlgjavaNormalize:pte " +pte );
? pte.startsWith("static ")
b1.insert(p, j++);
<======
? pte.startsWith("import ")
r = new Row(pte, Default.sketchHeadColor);
te = new Text();
te.insert(r, 0);
te.remove(1);
h = new PrimitiveHead(PrimitiveHead.SIMPLE, te);
s1.insert(h, k++);
<======
<======
Sketch ss = (Sketch)o;
? !(ss.containsModule() || ss.type == Scheme.MODULE)
b1.removeMember(i);
i--;
peamBr.insert(ss, l++);
? l > 0
peameetodisse on lisatud
peamBr.removeMember(l);
viimane, tühi ära
BaseLanguage.setAll(s1, type);
return true;
//
a' la TEXTUALIZE
? c.frame.contents != null
== null, kui Tools>Normalize
sourceChanged peaks alati, muidu segadus pärast lahendamist
float sizeFactorKeep = View.sizeFactor;
View.sizeFactor = c.frame.sizeFactor;
c.frame.contents.main.view.plan(c.hd, c.vd, true);
c.own = true; c.repaint();
View.sizeFactor = sizeFactorKeep;
static void meetoditele_static(Sketch sk)
sk sisemistele
Branch br = sk.branch(0);
* int i = 0, n = br.body.size(); i < n; i++
Object o = br.member(i);
? !(o instanceof Sketch)
continue;
Sketch s = (Sketch)o;
? s.type == Scheme.MODULE && !s.isHeadless()
String th = s.primitiveHead(0).text.toPlainString();//JK 16.09.2010 : ...toPlainStr...
Row r = new Row("static "+ th, Default.sketchHeadColor);
Text te = new Text();
te.insert(r, 0);
te.remove(1);
s.primitiveHead(0).text = te;
meetoditele_static(s);
TEXTUALIZE
* static
String klassiNimi;
JK 20.12.07 Main või null
boolean peaklass;
st on vaikimisi class Main ... main(); kui peaklss, siis liht-AlgJava, kui !peaklass, siis AlgJava-OOP
boolean MainOn = true;
boolean raamOn;
boolean readlnOn;
boolean ioOn;
boolean inspectOn;
boolean sunOsOn = System.getProperty("os.name").equals("SunOS");
boolean illegalSource;
String leadingSpaces;
String nestingStep = " ";
Branch br1;
branch of the result
AmFrame dialogTargetFrame;
boolean peameetodis;
public Vector primitiveOrigin;
elemendiks on primitiiv, millest i-s rida saadud
või null (kui nt on lihtsalt lisatud rida)
AmCanvas c;
seatakse true, kui muudetud;
taval. semikoolon lisatud (primitivile) või eemaldatud (päise lõpust) :
boolean sourceChanged;
punase ruudukese korral omaette repaint, see ikka false, kui muud ei ole
boolean isFullProgram;
String fNimi;
JK 24.08.2010 faili nimi; paketi korral inspect peaks näitama ka, millisest failist vahepeatus
boolean inJavadoc = false;
JK 01.10.2010 JAVADOC
public boolean textualize(SketchyText skt0,
main = skm-text
SketchyText skt1,
main = plain skm-text
AmFrame dialogTargetFrame)
System.out.println("TEXTUALIZE");
sourceChanged = false;
tegelikult praegu ei kasuta seda teadmist
c = skt0.frame.viewArea;
//System.out.println("BAseLanguage_AlgJava:textualizeSK:contents= " + c.frame.contents);
primitiveOrigin = new Vector();
peameetodis = true;
illegalSource = false;
leadingSpaces = " ";
frame = dialogTargetFrame;
Sketch s0 = skt0.main;
JK 20.12.07
isFullProgram = (s0.parent == null);
? isFullProgram && s0.type == Scheme.MODULE
klassiNimi = null;
peaklass = false;
<======
klassiNimi = "class Main ";
peaklass = true;
//System.out.println("BAseLanguage_AlgJava:textualize:klassiNimi=" + klassiNimi);
JK 24.08.2010 faili lihtnimi; "", kui ei saa
? skt0 == null || skt0.file == null
fNimi = "";
<======
fNimi = skt0.file.name;
JK 24.08.2010 faili nimi; paketi korral inspect peaks näitama ka, millisest failist vahepeatus
? fNimi == null
igaks juhuks
fNimi = "";
<======
int kEr = fNimi.lastIndexOf(Default.er);
int kPunkt = fNimi.lastIndexOf(".");
? kEr == -1 || kPunkt == -1 || kEr > kPunkt
igaks juhuks
fNimi = "";
<======
fNimi = fNimi.substring(kEr+1, kPunkt);
faili lihtnimi
Sketch s1 = skt1.main;
Branch br0 = s0.branch(0);
br1 = s1.branch(0); br1.body.removeElementAt(0);
? peaklass
JK 20.12.07
impordidirektiivid(s0, br1);
raamOn = otsidaLisand("raam", br0);
inspectOn = otsidaLisand(">", br0);
edasises break point mõttes
readlnOn = otsidaLisand("readln", br0)
|| otsidaLisand("readln(", br0)
|| otsidaLisand("readln()", br0)
|| inspectOn
|| sunOsOn;
ioOn = otsidaLisand("I/O", br0) || otsidaLisand("i/o", br0);
JK 20.12.07
? isFullProgram && !peaklass
// tegelikult on ainult üks el-päis, v.o. mitu rida
* int i = 0, n = s0.head.size()-1; i < n; i++
ilma viimaseta (class või interface)
writeLine(((PrimitiveHead)(s0.head.elementAt(i))).text.toPlainString());//JK 16.09.2010 : ...toPlainStr...
// import java.io.*; läheks javadoc järele
Text teh = s0.primitiveHead(0).text;
* int i = 0, n = teh.rows.size()-1; i < n; i++
writeLine(teh.row(i).toString());
JK 07.10.2010
Text teh = s0.primitiveHead(0).text;
writeLine(teh.row(0).toString());
package ...
? readlnOn || ioOn
writeLine("import java.io.*; " );
* int i = 1, n = teh.rows.size(); i < n; i++
writeLine(teh.row(i).toString());
? !(isFullProgram && !peaklass)
siis juba lisatud import java.io.*;
? readlnOn || ioOn
writeLine("import java.io.*; " );
? isFullProgram && !peaklass
// JK 07.10.2010
lisada viimane päisest (class või interface)
//writeLine(((PrimitiveHead)(s0.head.elementAt(s0.head.size()-1))).text.toPlainString());//JK 16.09.2010 : ...toPlainStr...
Text teh = s0.primitiveHead(0).text;
writeLine(teh.row(teh.rows.size()-1).toString());
writeLine(" {" );
? raamOn && peaklass
JK 14.12.07
writeLine("import java.awt.*; // Graphics, Color, Point, Dimension" );
writeLine("import javax.swing.*; // JFrame" );
writeLine("import java.awt.event.*; // MouseEvent" );
writeLine(" class Tahvel extends JPanel implements MouseListener {// tahvel joonise kujutamiseks" );
writeLine(" public void paintComponent(Graphics g) {" );
writeLine(" super.paintComponent(g);" );
writeLine(" Main.joonistada(this, g);" );
writeLine(" }" );
writeLine("public void mouseExited(MouseEvent e){}" );
writeLine("public void mouseEntered(MouseEvent e){}" );
writeLine("public void mousePressed(MouseEvent e){}" );
writeLine("public void mouseReleased(MouseEvent e){}" );
writeLine("public void mouseClicked(MouseEvent e){repaint();}" );
writeLine(" }" );
//writeLine("class Main {" );
writeLine(klassiNimi + " {" );
JK 13.12.07
klassiväljad(s0, br1);
? readlnOn
writeLine("private static BufferedReader bufferedReaderKonsoolilt = " );
writeLine(" new BufferedReader(new InputStreamReader(System.in));" );
writeLine("public static void main(String[] args) {" );
writeLine("// tahvliga raam" );
writeLine("JFrame raam = new JFrame( );" );
writeLine("Tahvel t = new Tahvel();" );
writeLine("t.addMouseListener(t);" );
writeLine("raam.getContentPane().add(t);");
writeLine("raam.setDefaultCloseOperation(JFrame . EXIT_ON_CLOSE );" );
writeLine("raam.setLocation(100, 100);" );
writeLine("raam.setSize(700, 600);" );
<======
raami pole või ei ole peaklass
JK 20.12.07
? isFullProgram && peaklass
//writeLine("class Main{" );
writeLine(klassiNimi + " {" );
JK 13.12.07
? peaklass
JK 20.12.07
klassiväljad(s0, br1);
? readlnOn
writeLine("private static BufferedReader bufferedReaderKonsoolilt = " );
writeLine(" new BufferedReader(new InputStreamReader(System.in));" );
JK 14.01.07
? isFullProgram && peaklass
JK 14.12.07
writeLine("public static void main(String[] args){");
* int i = 0, n = br0.body.size(); i < n; i++
Object o = br0.member(i);
? !(o instanceof Sketch)
//illegalSource = true;
textualize(br0, (Primitive)o);
<------
? peaklass
JK 14.01.07
? peameetodis
? isFullProgram
JK 14.01.07
peameetodi lõpp
? sunOsOn
writeLine("// --- SunOS: ---");
writeLine("readln();");
writeLine("}");
? readlnOn
writeLine("private static String readln(){// sisestada rida konsoolilt" );
writeLine(" try{return bufferedReaderKonsoolilt.readLine();}" );
writeLine(" catch (IOException e){System.err.println(e);}" );
writeLine(" return null;" );
writeLine("}" );
? ioOn
writeLine("private static BufferedReader readerFrom(String s) throws FileNotFoundException{// avada tekstiline sisendfail" );
writeLine(" return new BufferedReader(new FileReader(s));" );
writeLine("}" );
writeLine("private static PrintWriter writerTo(String s) throws IOException{// avada tekstiline väljundfail" );
writeLine(" return new PrintWriter(new FileWriter(s), true);" );
writeLine("}" );
JK 14.01.07
? isFullProgram
writeLine("}");
klassi lõpp
assign base language:
BaseLanguage.setAll(skt1.main, BaseLanguage.NONE);
View.setAll(skt1.main, View.SKNUM);
//sil_print_primitiveOrigin();
? c.frame.contents != null
== null, kui Tools>Textualize JK 12.01.07
sourceChanged JK 12.01.07 peaks alati, muidu segadus pärast lahendamist
float sizeFactorKeep = View.sizeFactor;
JK 11.01.07
View.sizeFactor = c.frame.sizeFactor;
JK 11.01.07
c.frame.contents.main.view.plan(c.hd, c.vd, true);
true: JK 11.01.07
//
JK 08.01.07
seada karett vea kohale:
veaKoht.moveToPrimitiveText();
uusKarett = new Caret(veaKoht.scheme);
uusKarett.goTo(veaKoht);
c.own = true; c.repaint();
View.sizeFactor = sizeFactorKeep;
JK 11.01.07
<======! illegalSource
private void textualize(Sketch sk)
int algusliige = 0;
System.out.println("BL ALGJAVA textualize(Sketch sk)1: algusliige = " + algusliige);
? sk.isHeadless() && sk.type == Scheme.SIMPLE
String komt = sk.comment.toString().trim();
? komt.toLowerCase().startsWith("doc")
textualizeJavadoc(sk);
<======
String komm = sk.comment.toString().trim();
? komm.startsWith("//")
<======
märgend skeemi ette
? isJavaIdentifier ( komm )
? ! sk.isHeadless() && sk.type != Scheme.MODULE
writeLine(komm + ":");
boolean onMeetod =
sk.type == Scheme.MODULE
&& sk.head.size() == 1;
? peameetodis
? onMeetod
peameetodis = false;
? isFullProgram && peaklass
+ 14.12.07 + 22.01.07 muidu tuleb esimese meetodi ette veel '}'
peameetodi lõpp
? sunOsOn
writeLine("// --- SunOS: ---");
writeLine("readln();");
writeLine("}");
<======
kui skeemil sk on (java)doc, siis see tekstualiseerida JK 05.10.2010
? !sk.isHeadless() && sk.type == Scheme.MODULE
on meetod (või 1. klass)
Branch br0 = sk.branch(0);
Object o = br0.member(0);
? o instanceof Sketch
Sketch skeem = ((Sketch)o);
? skeem.isHeadless() && skeem.type == Scheme.SIMPLE
String kom = skeem.comment.toString().trim();
? kom.toLowerCase().startsWith("doc")
on javadoc
textualizeJavadoc(skeem);
algusliige = 1;
? sk.head.size() > 0
writeLine(sk, sk.primitiveHead(0), textualizeHead(sk));
switch korral veel looksulud
String elPäis = sk.primitiveHead(0).text.toPlainString().trim();//JK 16.09.2010 : ...toPlainStr...
? elPäis.startsWith("switch")
writeLine("{");
* int i = 0, n = sk.body.size(); i < n; i++
boolean lihtrühmas = (sk.type == Scheme.SIMPLE && sk.head.size() == 0);
textualize(sk.branch(i), lihtrühmas, algusliige);
switch korral veel looksulud
? sk.head.size() > 0
String elPäis = sk.primitiveHead(0).text.toPlainString().trim();//JK 16.09.2010 : ...toPlainStr...
? elPäis.startsWith("switch")
writeLine("}");
private void textualizeJavadoc(Sketch sk)
JK 05.10.2010
sk - javadoc-i sisaldav skeem; sk kommentaar algab "doc"
inJavadoc = true;
writeLine("/**");
String skKomm = sk.comment.toString().substring(3).trim();
? skKomm.length() > 0
writeLine("* " + skKomm);
~= textualize(sk.branch(0), lihtrühmas):
leadingSpaces += nestingStep;
Branch br = sk.branch(0);
String haruKomm = br.comment.toString();
? haruKomm.trim().length() > 0
writeLine(haruKomm);
* int j = 0, n = br.body.size(); j < n; j++
Object o = br.member(j);
? !(o instanceof Sketch)
textualize(br, (Primitive)o);
<------
Sketch skem = (Sketch)o;
? !(sk.isHeadless() && sk.type == Scheme.SIMPLE)
Javadocis juba olles mitte-lihtskeemid jäävad vahele
textualize(skem);
leadingSpaces -= nestingStep:
leadingSpaces = leadingSpaces.substring(
0, leadingSpaces.length() - nestingStep.length());
writeLine("*/");
inJavadoc = false;
//orig textualize(Sketch sk) enne javadoc lisamist
private void textualize(Sketch sk)
? inJavadoc
JK 01.10.2010 JAVADOC:
? !(sk.isHeadless() && sk.type == Scheme.SIMPLE)
Javadocis juba olles mitte-lihtskeemid jäävad vahele
<======
String komm = sk.comment.toString().trim();
? komm.startsWith("//")
<======
JK 01.10.2010 JAVADOC:
? komm.toLowerCase().equals("doc")
? sk.isHeadless() && sk.type == Scheme.SIMPLE
JAVADOC
? inJavadoc
doc docis jääb vahele (ei tohiks olla)
<==========
inJavadoc = true;
writeLine("/**");
* int i = 0, n = sk.body.size(); i < n; i++
boolean lihtrühmas = true;
textualize(sk.branch(i), lihtrühmas);
writeLine("*/");
inJavadoc = false;
<======
märgend skeemi ette
? isJavaIdentifier ( komm )
? ! sk.isHeadless() && sk.type != Scheme.MODULE
writeLine(komm + ":");
boolean onMeetod =
sk.type == Scheme.MODULE
&& sk.head.size() == 1;
? peameetodis
? onMeetod
peameetodis = false;
? isFullProgram && peaklass
+ 14.12.07 + 22.01.07 muidu tuleb esimese meetodi ette veel '}'
peameetodi lõpp
? sunOsOn
writeLine("// --- SunOS: ---");
writeLine("readln();");
writeLine("}");
<======
? sk.head.size() > 0
writeLine(sk, sk.primitiveHead(0), textualizeHead(sk));
switch korral veel looksulud
String elPäis = sk.primitiveHead(0).text.toPlainString().trim();//JK 16.09.2010 : ...toPlainStr...
? elPäis.startsWith("switch")
writeLine("{");
* int i = 0, n = sk.body.size(); i < n; i++
boolean lihtrühmas = (sk.type == Scheme.SIMPLE && sk.head.size() == 0);
textualize(sk.branch(i), lihtrühmas);
switch korral veel looksulud
? sk.head.size() > 0
String elPäis = sk.primitiveHead(0).text.toPlainString().trim();//JK 16.09.2010 : ...toPlainStr...
? elPäis.startsWith("switch")
writeLine("}");
private void textualize(Branch br, boolean lihtrühmas)
? br.head.size() > 0
writeLine(br, br.primitiveHead(0), textualizeHead(br));
? ! lihtrühmas
writeLine("{");
leadingSpaces += nestingStep;
? br.body.size() != 0
* int j = 0, n = br.body.size(); j < n; j++
Object o = br.member(j);
? !(o instanceof Sketch)
textualize(br, (Primitive)o);
<------
leadingSpaces -= nestingStep:
leadingSpaces = leadingSpaces.substring(
0, leadingSpaces.length() - nestingStep.length());
? ! lihtrühmas
writeLine("}");
private void textualize(Branch br, boolean lihtrühmas, int algliige)
? algliige == 0
textualize(br, lihtrühmas);
<======
? br.head.size() > 0
writeLine(br, br.primitiveHead(0), textualizeHead(br));
? ! lihtrühmas
writeLine("{");
leadingSpaces += nestingStep;
? br.body.size() != 0
* int j = algliige, n = br.body.size(); j < n; j++
Object o = br.member(j);
? !(o instanceof Sketch)
textualize(br, (Primitive)o);
<------
leadingSpaces -= nestingStep:
leadingSpaces = leadingSpaces.substring(
0, leadingSpaces.length() - nestingStep.length());
? ! lihtrühmas
writeLine("}");
private void textualize(Branch br, Primitive p)
//String te = p.text.toString();
vahepeatuse jaoks:
teistel ei ole metoodiliselt hea, sest lubaks
Java primitiivi suvaliselt kohalt poolitamise
String tePlain = p.text.toPlainString();
String te = p.text.toPlainString();
siiski...
muidu läheb ridade numeratsioon segi:
*.java ja kompileeritav fail oleks erineva ridade arvuga
eemaldada vea tunnus (kui on)
? te.startsWith("\000")
Row r0 = p.text.row(0);
r0.remove(1);
//r0.planSize();
sourceChanged = true;
//JK 11.01.07
r0.planSize();
c.frame.contents.main.view.plan(c.hd, c.vd);
c.own = true;c.repaint();
//JK 08.01.07
float sizeFactorKeep = View.sizeFactor;
*
View.sizeFactor = c.frame.sizeFactor;
*
c.frame.contents.main.view.plan(c.hd, c.vd, true);
* true
c.own = true;c.repaint();
View.sizeFactor = sizeFactorKeep;
*
te = te.trim();
import jätta vahele
? te.startsWith("import ")
<======
static jätta vahele
? te.startsWith("static ") && peaklass
JK 14.12.07
<======
? inJavadoc
JK 01.10.2010 JAVADOC
<======
vahepeatus
? p.type == Primitive.BREAKPOINT
System.out.println("BaseLanguage_AlgJava:textualize:br.level=" +br.level() );
// JK.25.08.2010: vahepeatus ei või olla klassi väljade seas, po meetodis
sellest ei aita!! :
? ! peaklass && br.level() < 3
vahepeatus ei ole meetodis (on väljade seas)
AlgJava veateade/hoiatus
AmDialog d = new AmDialog(
frame, AmLocale.Alert(), AmDialog.B_OK, "\"inspect..\" " + "MISPLACED" + ": \n" + te + " --- " + AmLocale.Ignored() + ".");
<==================
te = tePlain.trim();
//System.out.println("BaseLanguage_AlgJava:textualize:VAHEPEATUS:" +te );
? ! inspectOn && isFullProgram
oli ainult !inspectOn
<==================
<======
! isFullProgram:
Kui osa tekstualiseerimine, siis > otsitakse välimise skeemi haru kommentaarist
Branch br0 = br;
minna välimise skeemi harule:
? br0.parent.parent == null
<======
br0 = (Branch)(br0.parent.parent);
? br0.comment.toString().indexOf(">") == -1
selles programmis ignoreeritakse vahepeatusi
<==================
te lõpust semikoolonid maha
<======
te = te.substring(0, te.length()-1).trim();
meetodi nimi:
String mtdNimi = sisaldavaMeetodiNimi(br);
JK 24.08.2010
? ! peaklass
mtdNimi = fNimi+"."+mtdNimi;
siis faili (laiendita) lihtnimi nimi ka
vahepeatusespunkti nimi:
String ppunktiNimi;
int indeksPeale_ppNime = -1;
? te.length() == 0
pole peatuspunkti nime
ppunktiNimi = "";
<======
? te.startsWith("inspect")
pole peatuspunkti nime
ppunktiNimi = "";
indeksPeale_ppNime = 0;
<======
int k = te.indexOf(" ");
? k == -1
on ainult pp
ppunktiNimi = te;
<======
ppunktiNimi = te.substring(0, k);
indeksPeale_ppNime = k;
alati: mtdNimi ja ppNimi:
String sopSisu = mtdNimi + "\" + \">" + ppunktiNimi + "\" + \": \"";
? indeksPeale_ppNime > -1
peaks tulema inspect...
te = te.substring(indeksPeale_ppNime).trim();
? ! te.startsWith("inspect")
polegi inspecti
AlgJava veateade/hoiatus
AmDialog d = new AmDialog(
frame, AmLocale.Alert(), AmDialog.B_OK, "\"inspect..\" " + AmLocale.missing() + ": \n" + te + " --- " + AmLocale.Ignored() + ".");
<==========
? te.startsWith("inspect ") || te.startsWith("inspect: ")
String inspect2print = tehaInspect(br, te);
? inspect2print == null
AmDialog d = new AmDialog(
frame, AmLocale.Alert(), AmDialog.B_OK, AmLocale.Illegal() + ": \n" + te + " --- " + AmLocale.Ignored() + ".");
<==============
sopSisu += " + " + inspect2print;
<======
? te.startsWith("inspectArray ") || te.startsWith("inspectArray: ")
String err = tehaInspectArray(br, p, te, mtdNimi, ppunktiNimi);
? ! (err == null)
//AmDialog d = new AmDialog(
//frame, AmLocale.Alert(), AmDialog.B_OK, AmLocale.Illegal() + ": \n" + te );
AmDialog d = new AmDialog(
frame, AmLocale.Alert(), AmDialog.B_OK, err + ": \n" + te + " --- " + AmLocale.Ignored() +".");
JK 25.01.07
<======================
AmDialog d = new AmDialog(
frame, AmLocale.Alert(), AmDialog.B_OK, AmLocale.Illegal() + ": \n" + te + " --- " + AmLocale.Ignored() +".");
<======================
String käsk = "System.out.print(\"" + sopSisu + ");";
writeLine(leadingSpaces + käsk);
igal juhul vahepeatuse punktis:
? !raamOn
writeLine(leadingSpaces + "readln();");
readln
<======
writeLine(leadingSpaces + "System.out.println();");
sop
<==============
täiendada print
? te.startsWith("print(") || te.startsWith("print ")
|| te.startsWith("println(") || te.startsWith("println ")
te = "System.out." + te;
SunOS: täiendada return peameetodis
? te.startsWith("return") && sunOsOn && peameetodis
writeLine(br, p, leadingSpaces + "readln(); // SunOS");
//te = "System.out." + te;
lõpu semikoolon
? te.length() > 0
? ! te.endsWith(";")
sourceChanged = true;
JK 11.01.07
AmDialog d = new AmDialog(
frame, AmLocale.Alert(), AmDialog.B_OK, "\";\" " + AmLocale.missing() +
": \n" + te + "\000 --- " +AmLocale.Corrected() + ".");
JK 11.01.07
te += ";";
//Row r0 = p.text.row(0);
tglt peab olema teksti viimane rida JK 11.01.07
Row r0 = p.text.row(p.text.rows.size() - 1);
JK 14.01.07
r0.append(new Symbol(';', Default.correctedColor));
JK 14.01.07
skeemrea kommentaar
String komm = p.text.comment.toString().trim();
//System.out.println("BaseLanguage_AlgJava: textualize(Branch br, Primitive p):komm1=" + komm);
? komm.length() > 0
//System.out.println("BaseLanguage_AlgJava: textualize(Branch br, Primitive p):komm2=" + komm);
? br.parent.comment.toString().trim().equals("javadoc") JK 12-01-2001
? inJavadoc
doc sees prefiksit // ei pane
te += " " + komm;
<======
//System.out.println("BaseLanguage_AlgJava: textualize(Branch br, Primitive p):te=" + te);
? raamOn
writeLine(br, p, leadingSpaces + asendadaKirillitsa(te));
<======
writeLine(br, p, leadingSpaces + te);
private String textualizeHead(Scheme sc)
Primitive p = sc.primitiveHead(0);
String te = p.text.toPlainString();
jk 15.09.2010 Plain
? te.startsWith("\000")
Row r0 = p.text.row(0);
r0.remove(1);
sourceChanged = true;
//JK 11.01.07
r0.planSize();
c.frame.contents.main.view.plan(c.hd, c.vd);
c.own = true;c.repaint();
String päis = "";
? sc instanceof Sketch
Sketch sk = (Sketch)sc;
* int i = 0, n = sk.head.size(); i < n; i++
päis += sk.primitiveHead(i).text.toPlainString().trim();
jk 15.09.2010 Plain
päis = lõpusemikoolonidMaha(päis);
? sk.type == Scheme.MODULE && peaklass
JK 14.12.07
päis = "static " + päis;
? sk.type == Scheme.LOOP
? päis.trim().length() == 0
tühi päis
päis = "for(;;)";
<======
? päis.indexOf("..") > 0
on (vist) i = 1 .. n
päis = tehaFor(päis);
illegal? forpäis == null; ei tee, jäävad küsimärgid
<======
Branch br = (Branch)sc;
päis = br.primitiveHead(0).text.toPlainString().trim();
jk 15.09.2010 Plain
päis = lõpusemikoolonidMaha(päis);
<======päis
private static String lõpusemikoolonidMaha(String päis)
Eeldus: päis on trimmitud
11.10.06. Kasutab textualizeHead(Scheme sc) kahes kohas
* ;päis.endsWith(";");
päis = päis.substring(0, päis.length() - 1).trim();
+ trim ?
<======päis
private String tehaFor(String päis)
String muutuja = "??";
String algus = "??";
String raja = "??";
StringTokenizer st = null;
int k = päis.indexOf("=");
? k > 0
muutuja = päis.substring(0, k).trim();
int m = päis.indexOf("..");
algus = päis.substring(k+1, m).trim();
m = päis.lastIndexOf("..");
raja = päis.substring(m+2).trim();;
<======"for( int " +
muutuja + " = " + algus + "; " +
muutuja + " <= " + raja + "; " +
muutuja + "++ )"
private void writeLine(String str)
lisatud, primitiivist teisendatud rida
writeLine(null, null, str);
private void writeLine(Scheme sc, Primitive p, String str)
? sc != null
primitiveOrigin.add(new Cursor(sc, p));
<======
primitiveOrigin.add(null);
lamerida tulemusse:
Text newT = new Text();
newT.rows.removeElementAt(0);
newT.rows.addElement(
new Row(leadingSpaces + str, Default.foregroundColor));
br1.body.addElement(
new PrimitiveMember(Primitive.SIMPLE, newT));
private static boolean otsidaLisand(String s, Branch br0)
boolean tulem = false;
String[] lisand = br0.comment.toString().split("[ ,;]");
* int i = 0; i < lisand.length; i++
? lisand[i].equals(s)
tulem = true;
<======
<======tulem
private static String tehaInspect(Branch br, String te)
String vahekoma = " + \" : \" + ";
String tulem = null;
int k = te.indexOf(":");
? k == -1
kui ei olegi argumente
AmDialog d = new AmDialog(
frame, AmLocale.Alert(), AmDialog.B_OK, "\":\" " + AmLocale.missing() + ": \n" + te);
<======null
te = te.substring(k+1);
StringTokenizer st = new StringTokenizer(te, ":");
? st.countTokens() == 0
<======null
//String mNimi = sisaldavaMeetodiNimi(br);
tulem = "";
* ; st.hasMoreTokens();
String le = st.nextToken().trim();
String leVaste = inspectLekseem(le);
? leVaste == null
<==========null
tulem += leVaste + vahekoma;
viimane vahekoma maha:
tulem = tulem.substring(0, tulem.length() - vahekoma.length());
<======tulem
private String tehaInspectArray(Branch br, Primitive p, String te, String mNimi, String ppNimi)
oli boolean. JK 25.01.07
tagastab veateate, või null, kui viga ei olnud
int k = te.indexOf(":");
massivi nime ees
? k == -1
<======"':' " + AmLocale.missing()
JK 25.01.07
te = te.substring(k+1);
JK 25.01.07
<======
peab olema "identif[..."
int kns = te.indexOf("[");
? kns != -1
? isJavaIdentifier(te.substring(0, kns).trim())
<======
<==========AmLocale.Illegal()
String massNimi = te.trim();
//
? ! isJavaIdentifier(massNimi)
<==========false
String käsk = "System.out.print(\"" +
mNimi +
"\" + \">" +
ppNimi +
"" +
":\"" + " + \"" +
massNimi + "\" + \"[]\"" +
" + \": \" " +
"); for(int _iiA = 0; _iiA < " + massNimi + ".length; _iiA++)";
writeLine(br, p, leadingSpaces + käsk);
käsk = "System.out.print(" + massNimi + "[_iiA] + \" \");";
writeLine(leadingSpaces + käsk);
//writeLine(leadingSpaces + "readln();");
readln
? !raamOn
writeLine(leadingSpaces + "readln();");
readln
<======
writeLine(leadingSpaces + "System.out.println();");
sop
<======null
private static String inspectLekseem(String le)
String q = "\"";
jutumärk
String tulem = null;
int k = le.indexOf("[");
int k1 = le.lastIndexOf("]");
boolean onSundavaldis = le.startsWith("(");
? (k == -1 && k1 == -1) || onSundavaldis
nurksulge ei ole või on sundavaldis
tulem = q + le + " = " + q + " + (" + le +")";
<======tulem
? k != -1 && k1 != -1 && k < k1
on (vähemalt 1) nurksulupaar
String massNimi = le.substring(0, k);
<==========null
? isJavaIdentifier(massNimi) && le.trim().endsWith("]")
on massiivi element
nurksulgude sisu:
String nsSisu = le.substring(k+1, k1);
boolean onTäisarv = true;
!!
Integer.parseInt(nsSisu);
! (NumberFormatException e)
? onTäisarv
ilma indeksavaldise väärtuseta
tulem = q + " " + le + " = " + q + " + " + le;
<======
indeksavaldise väärtus kah
tulem = q + nsSisu + " = " + q + " + (" + nsSisu + ") + " + q + " " + le + " = " + q + " + " + le;
<==========tulem
<======null
<======null
private static String sisaldavaMeetodiNimi(Branch br)
25.08.2010 praegu liht-AlgJava jaoks; AlgJava-OOP korral ajab asja ära, aga mitte päris
Scheme sk = br.parent;
<======
põhiosas
? sk.type == Scheme.MODULE
? !sk.isHeadless()
<======
meetod leitud
String mNimi;
? sk.parent == null
mNimi = "main";
<======
mNimi = sk.primitiveHead(0).text.toPlainString().trim();//JK 16.09.2010 : ...toPlainStr...
int kk = mNimi.indexOf("(");
? kk > -1
mNimi = mNimi.substring(0, kk);
kk = mNimi.lastIndexOf(" ");
? kk > -1
mNimi = mNimi.substring(kk+1);
<======mNimi
private void impordidirektiivid(Sketch s0, Branch br1)
skeemist s0 leitud kantakse harru br1
Branch br0 = s0.branch(0);
* int i = 0, n = br0.body.size(); i < n; i++
Object o = br0.member(i);
? o instanceof Sketch
impordidirektiivid((Sketch)o, br1);
<------
Primitive p = (Primitive)o;
? p.type != Primitive.SIMPLE
<------
String te = p.text.toPlainString().trim();//JK 16.09.2010 : ...toPlainStr...
? ! (te.startsWith("import "))
<------
lõpu semikoolon
? ! te.endsWith(";")
AmDialog d = new AmDialog(
frame, AmLocale.Alert(), AmDialog.B_OK, "\";\" " + AmLocale.missing() + ": \n" + te);
te += ";";
skeemrea kommentaar
String komm = p.text.comment.toString().trim();
? komm.length() > 0
te += " // " + komm;
writeLine(br0, p, te);
private void klassiväljad(Sketch s0, Branch br1)
skeemist s0 leitud kantakse harru br1
Branch br0 = s0.branch(0);
* int i = 0, n = br0.body.size(); i < n; i++
Object o = br0.member(i);
? o instanceof Sketch
impordidirektiivid((Sketch)o, br1);
<------
Primitive p = (Primitive)o;
? p.type != Primitive.SIMPLE
<------
String te = p.text.toPlainString().trim();//JK 16.09.2010 : ...toPlainStr...
? ! (te.startsWith("static "))
<------
lõpu semikoolon
? ! te.endsWith(";")
AmDialog d = new AmDialog(
frame, AmLocale.Alert(), AmDialog.B_OK, "\";\" " + AmLocale.missing() + ": \n" + te);
te += ";";
skeemrea kommentaar
String komm = p.text.comment.toString().trim();
? komm.length() > 0
te += " // " + komm;
writeLine(br0, p, te);
boolean isJavaIdentifier
public static
boolean isJavaIdentifier ( String s )
seda kasutab ka ViewSketchy(ALGJAVA)
? s . length ( ) == 0 || ! Character . isJavaIdentifierStart ( s . charAt ( 0 ) )
<======false
..for
* int i = 1 ; i < s . length ( ) ; i ++
? ! Character . isJavaIdentifierPart ( s . charAt ( i ) )
<==========false
<======true
String asendadaKirillitsa(String te)
String tulem = "";
* int i = 0; i < te.length(); i++
int k = (int)(te.charAt(i));
? k < 0x410 || k > 0x44F
tulem += te.charAt(i);
<------
tulem += "\\u0" + Integer.toString(k, 16);
<======tulem
// sil_print_primitiveOrigin()
void sil_print_primitiveOrigin()
* int i = 0, n = primitiveOrigin.size(); i < n; i++
Object o = primitiveOrigin.elementAt(i);
String origin = "null";
? o != null
Cursor cu = (Cursor)o;
Primitive p = cu.primitive;
origin = p.text.toPlainString();//JK 16.09.2010 : ...toPlainStr...
System.out.println("BaseLanguage_AlgJava:primitiveOrigin: " + i + ")" + origin);
PREPARE TEX
on muudetud: ~ ==> $\sim$
ja rteurn, continue break ==> noolteks
void prepareTex(Sketch s)
TeX-valmistus baaskeelest sõltumata
View.setAll(s, View.SKM);
ALGJAVA; et näitaks tehtud nooli
prepareTexComment(s.comment);
* int j = 0, n = s.head.size(); j < n ; j++
prepareTexText(s.primitiveHead(j).text);
* int i = 0, n = s.body.size(); i < n; i++
Branch br = s.branch(i);
prepareTexComment(br.comment);
* int j = 0, m = br.head.size(); j < m; j++
prepareTexText(br.primitiveHead(j).text);
* int j = 0, m = br.body.size(); j < m; j++
Object o = br.member(j);
? o instanceof Sketch
Sketch sk = (Sketch)o;
sk.baseLanguage.prepareTex(sk);
<------
primitive
byte tüüp = Arrow.STRONG;
muudab ainult 'continue'
Primitive p = (Primitive)o;
String pTekst = p.text.toPlainString();//JK 16.09.2010 : ...toPlainStr...
prepareTexText(p.text);
ALGJAVA
ALGJAVA, analoogiliselt ViewSketchy:draw() -ga
Scheme sc = null;
kompil.
String pText = pTekst.toString().trim();
? pText.startsWith("break ") || pText.startsWith("break;")
break-nool
sc = br.parent;
sihtskeem
otsida sihtskeem
<======
? ! sc.isHeadless()
? sc.primitiveHead(0).type == PrimitiveHead.SWITCH
<======
<==============
peameetodis ei tee (nagunii viga)
<======
? pText.startsWith("return ") || pText.startsWith("return;")
|| pText.startsWith("return(")
return-nool
sc = br.parent;
sihtskeem
otsida sihtskeem
? sc.type == Scheme.MODULE
? ! sc.isHeadless()
meetod
<======
? sc.parent == null
peameetod
<======
<======
? pText.startsWith("System")
? pText.substring(6).trim().startsWith(".")
? pText.substring( pText.indexOf(".")+1 ).trim() .startsWith("exit")
System.exit-nool
sc = br.parent;
sihtskeem
otsida sihtskeem
? sc.parent == null
peameetod==väline
<======
<======
? pText.startsWith("continue ") || pText.startsWith("continue;")
continue-nool
sc = br.parent;
sihtskeem SIL
otsida sihtskeem
<======
? ! sc.isHeadless()
? sc.primitiveHead(0).type == PrimitiveHead.LOOP
06.10.06
<======
<==============
peameetodis ei tee (nagunii viga)
teha nooleks
? sc != null
igaks juhuks
int tase = ((Sketch)sc).level();
? tüüp == Arrow.WEAK
tase++;
Arrow ar = new Arrow(tüüp, tase);
ar.text = p.text;
br.removeMember(j);
br.insert(ar, j);
private static void prepareTexComment(Row r)
kommentaaris
int nOrig = r.elements.size();
* int j = 1, n = r.elements.size(); j < n; j++
r.getElement(j);
? r.sy != null
? r.sy.c == '_'
r.insert(new Symbol('\\', Default.literalColor), j);
j++;
? nOrig != r.elements.size()
r.planSize();
private static void prepareTexText(Text t)
text in primitive
* int i = 0, n = t.rows.size(); i < n; i++
Row r = t.row(i);
int nOrig = r.elements.size();
* int j = 1, m = r.elements.size(); j < m; j++
r.getElement(j);
? r.sy != null
..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 == '{') || (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.insert(new Symbol('\\', Default.literalColor), j);
r.insert(new Symbol('}', Default.literalColor), j+2);
r.insert(new Symbol('{', Default.literalColor), j+2);
j+=3;
<======
? (r.sy.c == '~')
r.remove(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('s', Default.literalColor), j);
r.insert(new Symbol('\\', Default.literalColor), j);
r.insert(new Symbol('$', Default.literalColor), j);
j+=5;
? nOrig != r.elements.size()
r.planSize();
prepareTexComment(t.comment);
Edit controls
//
byte nextPrimitiveMemberType(byte prev)
byte nextSchemeType(Scheme s)
vajadusel alamklassis yledefineerida!
??s.type
? Scheme.SIMPLE:
? (s.comment.elements.size() > 1)
Toolkit.getDefaultToolkit().beep();
<==========Scheme.SIMPLE
ei saa avada
? (s.parent == null)
Toolkit.getDefaultToolkit().beep();
<==========Scheme.SIMPLE
<==========Scheme.SIMPLE
Sketch sk = (Sketch)s;
? (sk.isMono() && s.isHeadless())
? sk.branch(0).body.size() > 0
<==========-1
saab avada
Toolkit.getDefaultToolkit().beep();
<==========Scheme.SIMPLE
? :
Toolkit.getDefaultToolkit().beep();
<==========s.type
MODULE ja LOOP ei muutu
//
byte typeForBranchHead(Sketch s)
//
byte nextPrimitiveHeadType(Scheme s, byte prev)
lisamise koha määramine toimetamisel
static Scheme kuhu;
static int mitmendaks;
static final int ENTER = 0;
primitiiv
static final int F1 = 10;
if
static final int F2 = 20;
tsükkel
static final int F3 = 30;
meetod
static final int F4 = 40;
valik
static final int F4_SHIFT = 41;
katsend
static final int F7 = 70;
vahepeatus
static void kuhuJaMitmendaks(Caret caret, int tüüp)
caret: jooksev; tüüp: lisatava tüüp
kuhu <== null, kui ei saa
kuhu = null;
mitmendaks = 0;
kompil
??tüüp
? ENTER:
? F1:
? F2:
? F4:
? F4_SHIFT:
? caret.inBody()
primitiivil olles
kuhu = caret.scheme;
mitmendaks = caret.scheme.body.indexOf(caret.primitive)+1;
<==========
? caret.scheme instanceof Sketch
? ! caret.inSchemeComment()
skeemi päises olles
kuhu = (Scheme)(caret.scheme.member(0));
mitmendaks = 0;
<==========
? caret.scheme instanceof Branch
? ! caret.inSchemeComment()
haru päises olles
kuhu = caret.scheme;
mitmendaks = 0;
<==========
ei ole kehas ega päises --> on skeemi või haru kommentaaril
? caret.inSchemeComment()
igaks juhuks
? caret.scheme instanceof Sketch
Sketch sk = (Sketch)(caret.scheme);
? (sk.parent == null) || (sk.type == Scheme.MODULE)
välimise skeemi või meetodi kommentaaril
kuhu = (Scheme)(sk.member(0));
sk harusse
mitmendaks = 0;
<======
? (! sk.isHeadless())
|| (! sk.containsModule())
on struktuurdirektiivi või rühmI kommentaaril
kuhu = (Scheme)(sk.parent);
sk järele
mitmendaks = sk.parent.body.indexOf(caret.scheme) + 1;
<======
<======
Branch br = (Branch)(caret.scheme);
Sketch peremees = (Sketch)(br.parent);
? peremees.parent == null
välimise skeemi kommentaaril
kuhu = br;
harusse br
mitmendaks = 0;
<======
? ! peremees.containsModule()
on struktuurdirektiivi või rühmI kommentaaril
kuhu = br;
harusse
mitmendaks = 0;
<======
<==========
? F3:
otsida hõlmav meetod või hõlmav rühmII
Sketch sk = null;
leitud hõlmav meetod
Sketch skII = null;
leitud hõlmav rühmII
Scheme sc = caret.scheme;
jooksev
? sc.parent == null
välimine ei tule arvesse
<======
? (sc instanceof Sketch) && (sc.type == Scheme.MODULE)
sk = (Sketch)sc;
<======
? (sc instanceof Sketch) && ((Sketch)sc).containsModule()
skII = (Sketch)sc;
<======
? sk != null
karett oli meetodis
meetodi järele:
kuhu = (Scheme)(sk.parent);
sk järele
mitmendaks = sk.parent.body.indexOf(sk) + 1;
<======
? skII != null
karett oli rühmII -l (kommentaaril või haru kommentaaril
? caret.scheme instanceof Sketch
karett on rühmII kommentaaril
rühmII järele:
kuhu = (Scheme)(skII.parent);
skII järele
mitmendaks = skII.parent.body.indexOf(skII) + 1;
<======
karett on rühmII haru kommentaaril
kuhu = (Scheme)(caret.scheme);
skII järele
mitmendaks = 0;
<======
ülejäänud juhtudel (peaks olema eespool esimest meetodit)
otsida esimene meetod või rühmII (sk)
Caret car = caret.make_Copy();
sk = null;
<======
? ! car.inSchemeComment()
<------
? ! (car.scheme instanceof Sketch)
<------
Sketch ske = (Sketch)(car.scheme);
? ske.type == Scheme.MODULE
|| ske.containsModule()
sk = ske;
<======
? sk != null
meetodi või rühmII ette:
kuhu = (Scheme)(sk.parent);
sk ette
mitmendaks = sk.parent.body.indexOf(sk);
<======
kõige välimise skeemi viimaseks:
sc = caret.scheme;
<======
Branch br = ((Sketch)sc).branch(0);
kuhu = br;
mitmendaks = br.body.size();