AMADEUS html plain
This sketchy text is generated by AMADEUS
import java.awt.*;
import java.util.*;
class BaseLanguageHtml
class BaseLanguageHtml extends BaseLanguage
BaseLanguageHtml
BaseLanguageHtml()
static final char BL = '\\';
normalize
boolean normalize(SketchyText skt0,
main = source
SketchyText skt1,
main = new
AmFrame dialogTargetFrame)
System.out.println("BaseLangHtml!!!!");
<======(
false
)
static AmFrame frame;
static AmCanvas c;
sketchify
public boolean sketchify(SketchyText skt0,
main = source
SketchyText skt1,
main = new
AmFrame dialogTargetFrame)
frame = dialogTargetFrame;
Sketch sNew = skt1.main;
sNew.baseLanguage = new BaseLanguageHtml();
sNew.branch(0).baseLanguage = new BaseLanguageHtml();
Sketch s = skt0.main;
ko~ik (teksti)primitiivid uude skeemteksti
Branch br = s.branch(0);
Branch br1 = sNew.branch(0);
transferPrimitives(br, br1);
eventags(br1);
!!
! (RuntimeException e)
AmDialog d = new AmDialog(frame,
AmLocale.Source_syntax_error(),
AmDialog.B_OK, "} " + AmLocale.missing());
<==========false
<======true
transferPrimitives
static void transferPrimitives(Branch br, Branch br1)
* 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);
startendColors(p1.text.row(0));
static final Color c0 = Color.red;
static final Color c1 = Color.pink;
startendColors
static void startendColors(Row r)
char prev = ' ', curr = ' ';
Symbol currSyi = null;
* int i = 0; i < r.elements.size(); i++
prev = curr;
Symbol prevSyi = currSyi;
r.getElement(i);
currSyi = r.sy;
curr = r.sy.c;
? (curr == '<')
currSyi.color = c0;
<------
? ((curr == '/') && (prev == '<'))
prevSyi.color = c1;
replaceNonMatchingBraces
static void replaceNonMatchingBraces(Branch br)
igas reas vastet mittomav {==>0, }==>1 ajutiselt 2
Color c2 = Color.green;
for k
* int k = 0; k < br.body.size(); k++
PrimitiveMember p = (PrimitiveMember)(br.member(k));
Row r = p.text.row(0);
char prev = ' ', curr = ' ';
for i
* int i = 0; i < r.elements.size(); i++
prev = curr;
r.getElement(i);
Symbol currSyi = r.sy;
curr = r.sy.c;
Color currColor = r.sy.color;
? (currColor == c2)
vastab {-le
currSyi.color = Default.foregroundColor;
<------
? ((prev != BL) && (curr == '}'))
ei vasta {-le
currSyi.color = c1;
<------
? ((prev != BL) && (curr == '{'))
leida vastav }
char prevj = curr;
char currj = ' ';
int balance = 1;
boolean found = false;
for j
* int j = i+1; j < r.elements.size(); j++
prevj = currj;
r.getElement(j);
currj = r.sy.c;
? ((prevj != BL) && (currj == '{'))
balance++;
? ((prevj != BL) && (currj == '}'))
balance--;
? (balance == 0)
r.sy.color = c2;
found = true;
<======
? (!found)
currSyi.color = c0;
endComments
private static void endComments(Branch br)
boolean inEndComment;
char prev, curr;
Cursor cursor1 = new Cursor(br);
cursor1.moveToBody();
yle liikmete
inEndComment = false;
curr = ' ';
int ic = 0;
indeks kommentaaril
moo"da (ainukest) rida
* ;cursor1.scanRow();
otsida rea lo~pukommentaari algus
Symbol sy = cursor1.row.sy;
prev = curr;
curr = sy.c;
? ((prev == BL) && (curr == BL))
see on \\
et ja"rgnev % oleks arvestatav:
curr = ' ';
<------
kas lopukomm algus?
if((!inString) && (!inChar)){// arvestatav
? ((prev != BL) && (curr == '%'))
algus leitud
inEndComment = true;
cursor1.moveLeft();
scan to~ttu
cursor1.moveLeft();
<======
kui (inEndComment)
? (inEndComment)
cursor1.moveRight();
cursor1.row.remove(cursor1.noInRow);
% maha
* ;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();
? (!cursor1.moveToNextElement())
<======
eventags
private static void eventags(Branch br)
// teeb moodulid \begin{} .. \end{} -osadest
teeb lihtskeemid .. -osadest
eeld: on yhes reas ja on yhes reas
Cursor cursor = new Cursor(br);
cursor.moveToBody();
int preCount = 0;
yle liikmete
olenevalt preCount -st
? (preCount == 0)
String str = cursor.row.toString();
int starti = str.indexOf("<");
? (starti == 0)
starti = str.substring(1,str.length()).indexOf("<");
? (starti > 0)
starti++;
int endi = str.indexOf(">");
? (endi == str.length()-1)
endi = -1;
int foundi = Math.max(starti, endi);
? (foundi >= 0)
< ja/vo~i > leitud
? (endi < 0)
foundi = starti;
<======
? (starti < 0)
foundi = endi + 1;
<======
? (starti < endi)
foundi = starti;
<======
cursor.text.splitRow(cursor.rowNo(),
foundi+1);
cursor.noInRow-1);
cursor.primitive.split(br,1);
String cstr = cursor.row.toString();
? (cstr.toUpperCase().compareTo("
") == 0)
preCount++;
<======
preCount > 0
omaette ritta
String str = cursor.row.toString();
int k = str.toUpperCase().indexOf("");
? (k >= 0)
on selles reas
preCount--;
..if
? (k > 0)
poolitada eest
cursor.text.splitRow(cursor.rowNo(),
k+1);
cursor.noInRow-1);
cursor.primitive.split(br,1);
<======
<--------------;
edasi:
? (!cursor.moveToNextElement())
<======;
braces2s(br);
static Selection selection = new Selection(null, null);
braces2s
static void braces2s(Branch s)
eeldusel, et iga tag on omaette liige
String tagName = null;
* ;(tagName = findBegin(s)) != null;
? (findEnd(s, tagName))
lo~pp leitud
Vector v = tagHead(tagName);
Sketch newMember = selection.convert2simple(new BaseLanguageHtml());
? (newMember != null)
??
newMember.comment = new Row(tagName, Default.commentColor);
newMember.head = v;
? (tagName.toUpperCase().compareTo("PRE") != 0)
braces2s((Branch)(newMember.member(0)));
lo~pp leitud
tagHead
static Vector tagHead(String tag)
antud: selection, kus esimene primitiiv on
tagastab selle tagi pa"ise vektori
Vector v = new Vector();
Branch b = (Branch)(selection.start.scheme);
PrimitiveMember p =
(PrimitiveMember)(selection.start.primitive);
String pstr = p.text.row(0).toString();
int gti = pstr.indexOf('>');
? (gti > 0)
pa"is lo~peb samas reas
String hstr = (pstr.substring(1+tag.length(), gti)).trim();
pa"ise string
<==========v
teha pa"is
Row r = new Row(hstr, Default.sketchHeadColor);
Text t = new Text();
t.rows.removeElementAt(0);
t.rows.addElement(r);
PrimitiveHead h = new PrimitiveHead(PrimitiveHead.SIMPLE, t);
v.addElement(h);
<======v
igast jrgm reast 1 el-pa"is, kuni reani, mis
lo~peb >-ga, vo~i valiku eelviimase reani
vo~i alamskeemini
need read ka eemaldada
int i = b.body.indexOf(p);
i++;
sellest alata
Object o = b.member(i);
? (o instanceof Scheme)
<======
PrimitiveMember currp = (PrimitiveMember)o;
? (currp == selection.end.primitive)
<======
pstr = currp.text.row(0).toString();
gti = pstr.indexOf('>');
? (gti > 0)
pa"is lo~peb selle reaga
String hstr =
(pstr.substring(0,
gti)).trim();
pa"ise string
<==================v
teha pa"is
Row r = new Row(hstr, Default.sketchHeadColor);
Text t = new Text();
t.rows.removeElementAt(0);
t.rows.addElement(r);
PrimitiveHead h = new PrimitiveHead(
PrimitiveHead.SIMPLE, t);
v.addElement(h);
b.body.removeElementAt(i);
<==================v
pa"is lo~peb samas reas
Text t = currp.text;
t.setColor(Default.sketchHeadColor);
PrimitiveHead h = new PrimitiveHead(
PrimitiveHead.SIMPLE, t);
v.addElement(h);
b.body.removeElementAt(i);
<======v
isStartTag
static String isStartTag(String str)
kas str alguses on
eeldab, et tag pole poolitatud
tagastab tag-nime
? (str.length() == 0)
<======null
<======null
<======null
tag algab symbolist 1.
int spacei = str.indexOf(" ");
int gti = str.indexOf(">");
int endi;
? ((gti < 0) && (spacei < 0))
<======str.substring(1, str.length())
? ((gti > 0) && (spacei > 0))
<==========str.substring(1, Math.min(gti, spacei))
<==========str.substring(1, spacei)
<==========str.substring(1, gti)
isEndTag
static String isEndTag(String str)
kas str alguses on
eeldab, et tag pole poolitatud ega sisalda tyhikuid
tagastab tag-nime
? (str.length() == 0)
<======null
<======null
<======null
tag algab symbolist 2.
int gti = str.indexOf(">");
? (gti > 0)
<======str.substring(2, gti);
<======null
findBegin
static String findBegin(Branch s)
* int i=0; i < s.body.size(); i++
iga liikme korral
Object o = s.member(i);
? (o instanceof PrimitiveMember)
PrimitiveMember p = (PrimitiveMember)o;
String str = p.text.row(0).toString();
String tag = isStartTag(str);
? (tag != null)
leitud
Row r = p.text.row(0);
r.getElement(1);
? (r.sy.color == Default.foregroundColor)
<----------
sellele ei ole vastet
et enam ei otsiks:
((Symbol)
(p.text.row(0).elements.elementAt(1)))
.color = Default.foregroundColor;
selection.start = new Cursor(s, p);
<==========tag
<======null
findEnd
static boolean findEnd(Branch s, String tag)
otsitakse
tag = tag.toUpperCase();
String ptag;
tag jooksvas reas
int count = 0;
?alguse leidmisel kadus yks {
* int i=0; i < s.body.size(); i++
iga liikme korral
Object o = s.member(i);
? (o instanceof PrimitiveMember)
PrimitiveMember p = (PrimitiveMember)o;
String pstr = p.text.row(0).toString();
ptag = isStartTag(pstr);
tag p-s
? ((ptag != null)&&
(ptag.toUpperCase().compareTo(tag) == 0))
veel yks sama algustag
count++;
<======
pstr on midagi muud
ptag = isEndTag(pstr);
? (ptag == null)
<----------;
? (ptag.toUpperCase().compareTo(tag) == 0)
count--;
? (count == 0)
selection.end = new Cursor(s, p);
<==============true
<======false
braces2simple
private static void braces2simple (Sketch s)
* int i = 0; i < s.body.size(); i++
Branch br = s.branch(i);
Cursor cursor = new Cursor(br);
cursor.moveToBody();
char prev, curr = ' ';
yle liikmete
? (cursor.inPrimitive())
cursor.moveToPrimitiveText();
* ;cursor.scanRow();
moo"da (ainukest) rida
Symbol sy = cursor.row.sy;
prev = curr;
curr = sy.c;
? ((prev != BL) &&
((sy.color == c0) || (sy.color == c1)))
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((Branch)(cursor.scheme),2);
cursor.primitive.split((Branch)(cursor.scheme),1);
cursor.moveToNextElement();
cursor.moveToNextElement();
<======
braces2simple((Sketch)(cursor.scheme));
edasi:
? (!cursor.moveToNextElement())
<======
curr = ' ';
reavahetusega
* int i = 0; i < s.body.size(); i++
Branch br = s.branch(i);
braces2sk(br);
braces2sk
static void braces2sk(Branch s)
eeldusel, et iga (looksulg) c0, c1 on omaette liige
* ;findStartBrace(s);
findEndBrace(s);
Sketch newMember = selection.convert2simple(new BaseLanguageJava());
? (newMember != null)
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);
frame.contents.editor.caret.goTo(
new Cursor(selection.start.scheme,
selection.start.primitive));
throw new RuntimeException("Closing brace not found!");
iga alamskeemi korral ka
* int i = 0; i < s.body.size(); i++
Object o = s.member(i);
? (o instanceof Sketch)
braces2sk((Branch)(((Sketch)o).branch(0)));
findStartBrace
static boolean findStartBrace(Branch s)
eeldab, et nimeta klassi keha algus "{" pole reas esimene
* 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);
Color col = r.sy.color;
? (col == c0)
selection.start = new Cursor(s, p);
r.remove(1);
et ei segaks
r.planSize();
<==========true
<======false
findEndBrace
static boolean findEndBrace(Branch s)
eeldab, et nimeta klassi keha lopp "}" pole reas esimene
int count = 1;
alguse leidmisel kadus yks {
* 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);
Color col = r.sy.color;
<======
? (col == c1)
count--;
? (count == 0)
selection.end = new Cursor(s, p);
<==============true
<======false
reduce
void reduce(Sketch s)
System.out.println("BaseLangHtml!!!!");
Textualize ==============================================
static Branch br1;
static String indent =
" ";
static int currentLevel = 0;
public boolean textualize(SketchyText skt0,
main = source
SketchyText skt1,
main = new
AmFrame dialogTargetFrame)
frame = dialogTargetFrame;
Sketch sNew = skt1.main;
Sketch s = skt0.main;
sNew.baseLanguage = new BaseLanguageHtml();
sNew.branch(0).baseLanguage = new BaseLanguageHtml();
Branch br = s.branch(0);
br1 = sNew.branch(0);
br1.body.removeElementAt(0);
* int i = 0; i < br.body.size(); i++
Object o = br.member(i);
? ((o instanceof PrimitiveMember))
textualize((PrimitiveMember)o);
<------
<======true
private void textualize(Text t)
private void textualize(String pref, Text t, String suf)
? (t.isTrivial() && t.comment.isTrivial())
<======
int n = t.rows.size();
? (n == 1)
insertLine(pref+t.row(0).toString()+suf);
<======
* int i = 0; i < n; i++
? (i==0)
insertLine(pref+t.row(i).toString());
<======
? (i==(n-1))
insertLine(t.row(i).toString()+suf);
<======
insertLine(t.row(i).toString());
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(str, Default.foregroundColor));
br1.body.addElement(
new PrimitiveMember(Primitive.SIMPLE, newT));
private void textualize(Sketch sk)
currentLevel++;
String comment = sk.comment.toString().trim();
boolean tag = (comment.length() > 0);
algus
String endtag;
endtag = "";
??sk.type
..case
? Scheme.SIMPLE:
? (tag)
textualizeHead("<"+comment+" ",(Scheme)sk,">");
endtag = ""+comment+">";
<======
textualizeHead("",(Scheme)sk,"");
endtag = "";
<======
? Scheme.LOOP:
? (tag)
textualizeHead("");
endtag = ""+comment+">>";
<======
textualizeHead("
endtag = ">";
<======
? Scheme.MODULE:
? default:
textualizeHead("",(Scheme)sk,"");
<======
* int i = 0; i < sk.body.size(); i++
textualize(sk.branch(i));
insertLine(endtag);
currentLevel--;
private void textualize(Branch br)
String comment = br.comment.toString().trim();
boolean tag = (comment.length() > 0);
String end = "";
komm/LOOP lo~pus = ">"
algus
??br.type
? Scheme.SIMPLE:
..if
? (tag)
textualizeHead("<"+comment+" ",(Scheme)br,">");
<======
textualizeHead("", (Scheme)br, "");
<======;
..case
? Scheme.LOOP:
..if
? (tag)
textualizeHead("");
end = ">";
<======
textualizeHead("
end = ">";
<======;
..default
? heme.MODULE:
? default:
textualizeHead("",(Scheme)br,"");
<======;
..for
* int i = 0; i < br.body.size(); i++
Object o = br.member(i);
? (o instanceof Sketch)
textualize((Sketch)o);
<------
textualize((PrimitiveMember)o);
insertLine(end);
textualizeHead
private void textualizeHead(String start, Scheme s, String end)
int n = s.head.size();
..if
? (n == 0)
insertLine(start + end);
<======
? (n == 1)
textualize(start, s.primitiveHead(0).text, end);
<======
..for
* int i = 0; i < n; i++
? (i==0)
textualize(start, s.primitiveHead(i).text,"");
<------
? (i==(n-1))
textualize("", s.primitiveHead(i).text, end);
<------
textualize(s.primitiveHead(i).text);
textualize
private void textualize(PrimitiveMember p)
Text t = p.text;
String comment = t.comment.toString().trim();
boolean tag = (comment.length() > 0);
? (tag && comment.charAt(0) == '!')
on HTML-komm
textualize("", t, "<"+comment+">");
???
<======
..if
? (tag)
textualize("<"+comment+">", t, ""+comment+">");
<======
prepareTex
Textualize ============================================== .
void prepareTex(Sketch s)
<======