AMADEUS html plain
This sketchy text is generated by AMADEUS
import java.io.*;
import java.util.*;
import java.awt.*;
Javadoc
* Tehakse Skeemist HTML-rich fail
*
*@author J.Kiho
class Sketch2Xml
class Sketch2Xml
igas reas (ja kommentaaris):
suuremad kui 127 koodiga sümbolid
asendatakse sümbololemi viidaga;
kõik kolmikud ]]> asendatakse sümbololemite viitadega;
segment, mis sisaldab '<' või '&' ümbritsetakse
* static final String
TITLE0 = Sketch2XmlPlain.TITLE0;
//"";
TITLE = Sketch2XmlPlain.TITLE;
//"
TITLE1 =
"SYSTEM 'SKM_DTD_rich.dtd'>";
TITLE2 = Sketch2XmlPlain.TITLE2;//"";
static PrintWriter out;
globaalne muutuja faili kirjutamiseks
static final int MAX_CODE1 = 127;
suurim, mida ei asendata koodiga
static final int MAX_CODE2 = 255;
suurim, mida ei panda CDATA-sse
static void write2file (String buf)
static void writeHeader(String title)
kirjutab faili xml-i headeri
write2file(TITLE0);
write2file(TITLE);
write2file(TITLE1);
write2file(TITLE2);
static void writeFooter()
static void writeRowOrComment(Row rida, String märgis)
teeb rea või kommentaari; ???eeldus: rida ei ole tühi
märgis = ROW või COMMENT
write2file("<" + märgis + ">");
? rida.elements.size() > 1
writeRowElements(rida);
write2file("" + märgis + ">");
static void writeRowElements(Row rida)
kirjutab segmendid, pildid ja hüperelemendid
int n = rida.elements.size();
* int i = 1; i < n; i++
rida.getElement(i);
? rida.hy != null
väljastada hüperelement
. . .
<======
? rida.im != null
väljastada pilt
AmImage imag = rida.im;
write2file("
write2file("src=\"" + imag.location + "\"");
? imag.icon
write2file("icon=\"yes \"");
? imag.align != AmImage.ALIGN_BOTTOM
write2file("align=\"" + imag.align + "\"");
write2file(">");
write2file("");
<======
väljastada segment
kuni hüpersümbolini või fondimuutuseni
Symbol sy1 = rida.sy;
writeSegmentStart(sy1);
String s = "" + sy1.c;
siia korjata segmendi lihtsümbolid
<======
rida.getElement(i);
Symbol sy = rida.sy;
? sy == null
i--;
<======
? !segmentContinues(sy, sy1)
i--;
<======
int len = s.length();
int maxCode = s.charAt(0);
* int ii = 1; ii < len; ii++
int code = s.charAt(ii);
? code <= maxCode
<------
s faili
? s.indexOf("<") == -1
? s.indexOf("&") == -1
? maxCode <= MAX_CODE2
write2file( codeForCDATA(code(s)) );
<======
write2file( "+ codeForCDATA(code(s)) + "]]>" );
write2file("");
static void writeSegmentStart(Symbol sy1)
Font font = sy1.font;
write2file("
write2file("face=\"" + font.getName() + "\"");
write2file("size=\"" + font.getSize()+ "\"");
write2file("style=\"" + font.getStyle()+ "\"");
String col = sy1.color.toString();
int i = col.indexOf("[");
int j = col.indexOf("]");
col = col.substring(i+1, j);
r=vv,g=w,b=uuu
StringTokenizer colo = new StringTokenizer(col,"rgb=,");
col = colo.nextToken() + ","+
colo.nextToken()+ ","+
colo.nextToken();
vv,w,uuu
write2file("color=\"" + col + "\"");
write2file(">");
static boolean segmentContinues(Symbol sy, Symbol sy1)
Font font = sy.font;
Font font1 = sy1.font;
? !font.equals(font1)
<======false
? !( (sy.color.toString()).equals(sy1.color.toString()) )
<======false
<======true
static void writePrimitiveMember(PrimitiveMember p, int level)
kirjutatakse faili lihtliige, primitiiv (kui level = -1) või nool
lihtliikme algus
? level == -999
write2file("
<======
tüüp
? p.type != 0
write2file("type=\""+str((int)(p.type))+"\"");
tase
? level != -999
write2file("level=\""+str(level)+"\"");
write2file(">");
writeText(p.text);
lihtpäise tekst
lihtliikme lõpp
? level == -999
write2file("");
<======
static void writeText(Text t)
write2file("");
teksti algus
Row comm = t.comment;
kommentaar
? comm.elements.size() > 0
writeRowOrComment(comm, "COMMENT");
read
* int i = 0; i < t.rows.size(); i++
Row rida = t.row(i);
writeRowOrComment(rida, "ROW");
write2file("");
teksti lõpp
static void writeHead(Scheme s, String märgis)
kirjutame primitiivpäised faili
int n = s.head.size();
* int i = 0; i < n; i++
PrimitiveHead he = s.primitiveHead(i);
write2file("<"+ märgis + "_HEAD");
lihtpäise algus
tüüp
? he.type != 0
write2file("type=\""+str((int)(he.type))+"\"");
write2file(">");
writeText(he.text);
lihtpäise tekst
write2file(""+ märgis + "_HEAD>");
lihtpäise lõpp
static void writeSchemeStart(Scheme s, String märgis)
kirjutab faili skeemi alguse
write2file("<" + märgis);
atribuudid:
tüüp
? s.type != Scheme.SIMPLE
write2file("type=\"" + str((int)(s.type)) + "\"");
ikoon
? s.icon
write2file("icon=\"yes\"");
vaade
? s.view.type != View.SKETCHY
write2file("view=\"" + str((int)(s.view.type)) + "\"");
baas
? s.baseLanguage.type != BaseLanguage.NONE
write2file("base=\"" + str((int)(s.baseLanguage.type)) + "\"");
write2file(">");
Row comm = s.comment;
kommentaar
? comm.elements.size() > 0
writeRowOrComment(comm, "COMMENT");
static void writeScheme(Scheme s)
skeemi läbivaatamine ja faili kirjutamine
String märgis = "";
kompil.
skeem või haru
? s instanceof Sketch
märgis = "SKETCH";
<======
writeSchemeStart(s, märgis);
skeemi algus
Object o;
writeHead(s, "PRIMITIVE");
skeemi primitiivpäised
* Enumeration e = s.body.elements(); e.hasMoreElements();
o = e.nextElement();
? o instanceof Scheme
writeScheme((Scheme)o);
<======
? o instanceof Arrow
int level = ((Arrow)o).level;
writePrimitiveMember((PrimitiveMember)o, level + 4);
level + 4, sest kaks skeemi sai ümber pandud
<======
writePrimitiveMember((PrimitiveMember)o, -999);
write2file("" + märgis + ">");
skeemi lõpp
static private String str(int n)
abiks
<======(new Integer(n)).toString()
static String code(String buf)
suuremad (kui MAX_CODE1) koodiga sümbolid
asendatakse sümbololemi viidaga (muidu IE ei saa hakkama)
StringBuffer sbuf = new StringBuffer();
char c;
* int i = 0; i < buf.length(); i++
c = buf.charAt(i);
? ((int)c) < (MAX_CODE1+1)
sbuf.append(c);
<------
sbuf.append("");
sbuf.append(Integer.toString((int)c));
sbuf.append(';');
<======sbuf.toString()
static String codeForCDATA(String buf)
kõik kolmikud ]]> asendatakse sümbololemi viitadega
StringBuffer sbuf = new StringBuffer();
char c;
int k = 0;
osa algus
int i ;
osa lõpp
i = buf.substring(k,buf.length()).indexOf("]]>");
osa lõpp
? i == -1
sbuf.append(buf.substring(k,buf.length()));
<======
sbuf.append(buf.substring(k, k+i));
sbuf.append("]]>");
k += i + 3;
<======sbuf.toString()
static public void s2h (Scheme s, String fname)
parameetrid skeem s ja failinimi kuhu ta XML-iseerida
avame etteantud nimelise faili
!!
out = new PrintWriter(new FileWriter(fname));
! (IOException e)
System.err.println("Caught IOException: " + e.getMessage());
writeHeader(TITLE);
writeScheme(s);
writeFooter();
out.close();
fail kinni