mirror of
https://github.com/processing/processing4.git
synced 2026-06-16 04:26:26 +02:00
added getChild(name/path) and getChildren(name/path) to xml library
This commit is contained in:
+11
-8
@@ -9,6 +9,17 @@ X some auto-gunzip implemented
|
||||
_ need to finish auto-gunzip
|
||||
X fix bug where sort() on 0 length array would return null
|
||||
X instead, returns an array
|
||||
X unregisterXxxx() calls to remove methods from libs
|
||||
X http://dev.processing.org/bugs/show_bug.cgi?id=312
|
||||
X implemented by ewjordan
|
||||
|
||||
_ opengl mipmaps are leaking (regression in spite of #150 fix)
|
||||
_ http://dev.processing.org/bugs/show_bug.cgi?id=610
|
||||
|
||||
_ 100x100 issues are exhibited on bh140c PCs, test and fix!
|
||||
_ http://dev.processing.org/bugs/show_bug.cgi?id=197
|
||||
_ width/height on problem machine prints out as:
|
||||
_ 100,200 and 128,200
|
||||
|
||||
_ loadBytes() and saveStream() functions badly need optimization!
|
||||
_ don't bother using a buffering stream, just handle internally. gah!
|
||||
@@ -18,9 +29,6 @@ _ the number of cases where this works is small (half of url streams)
|
||||
_ and who knows if the value returned will be correct
|
||||
_ (i.e. will it be the uncompressed or compressed size of the data?)
|
||||
|
||||
_ opengl mipmaps are leaking
|
||||
_ http://dev.processing.org/bugs/show_bug.cgi?id=610
|
||||
|
||||
_ loadBytes() doesn't do auto gunzip? but loadStrings and createReader do?
|
||||
X this might be a good solution for dealing with the differences
|
||||
_ with loadBytes(), they can use gzipInput (or loadBytesGZ?)
|
||||
@@ -32,9 +40,6 @@ _ do the same for createWriter() et al
|
||||
|
||||
_ update the reference to cover parseXxxx() stuff
|
||||
_ also add notes about parseInt/Float(blah, otherwise)
|
||||
_ unregisterXxxx() calls to remove methods from libs
|
||||
_ http://dev.processing.org/bugs/show_bug.cgi?id=312
|
||||
|
||||
|
||||
_ offscreen buffers fail with texture mapping
|
||||
_ pixels not being set opaque (only with textures?)
|
||||
@@ -203,8 +208,6 @@ _ http://dev.processing.org/bugs/show_bug.cgi?id=511
|
||||
_ applet sizing issues with external vm
|
||||
_ could this possibly be related to the linux bug?
|
||||
_ http://dev.processing.org/bugs/show_bug.cgi?id=430
|
||||
_ 100x100 issues are exhibited on bh140c PCs, test and fix!
|
||||
_ http://dev.processing.org/bugs/show_bug.cgi?id=197
|
||||
_ alloc() stuff not fixed because of thread halting
|
||||
_ problem where alloc happens inside setup(), so, uh..
|
||||
_ http://dev.processing.org/bugs/show_bug.cgi?id=369
|
||||
|
||||
@@ -7,6 +7,8 @@ X move open menu to its own
|
||||
X BGraphics, BImage, void loop() -> give an error saying it's old code
|
||||
X better yet, only do this when "not found" errors come up
|
||||
_ need to fix changes.html because it lists out of date alpha->beta changes
|
||||
X added getChild(name/path), getChildren(name/path) to xml library
|
||||
_ add notes about these to the reference
|
||||
|
||||
multiple sketch support
|
||||
X basic structural moves to handle multiple sketches
|
||||
@@ -36,10 +38,19 @@ _ tough to do with the multiple directories/submenus
|
||||
_ add methods for "add" and "remove" for sketches
|
||||
_ also a rename method, which could just be a remove and add
|
||||
_ libraries and examples won't be rebuilt during the session
|
||||
_ editor console is broken, because re-routes System.out
|
||||
_ test on windows
|
||||
_ test on linux
|
||||
_ make sure quit being handled properly on windows/linux
|
||||
_ make editor buttons light up and clear properly
|
||||
_ inside sketch.java, don't hardwire the file extension types
|
||||
_ arduino uses .c, .cpp, .h instead of .java
|
||||
|
||||
You could greatly simplify the creation of disk-images using this cmd-line:
|
||||
hdiutil create -size 5m -fs HFS+ -volname Fooble foo
|
||||
To mount the disk-image, without having it appear in the Finder:
|
||||
hdiutil attach -nobrowse foo.dmg
|
||||
The main advantage is that these don't require root privileges
|
||||
|
||||
_ make sure loadStrings(), loadImage(), etc all have security warning in docs
|
||||
_ make clear that open() with one param should only have a single param
|
||||
@@ -121,6 +132,7 @@ _ should we use if() or if in the reference
|
||||
charset changes
|
||||
_ need to set a default charset for use in files (utf8)
|
||||
_ add option to change charset or specify as part of loading
|
||||
_ need to specify the default encoding
|
||||
_ xml element needs to be readable from other charsets
|
||||
_ same with the other methods like loadStrings()
|
||||
_ could also be a way to handle gzip too?
|
||||
@@ -151,6 +163,7 @@ void sortSwap(int a, int b) {
|
||||
0127
|
||||
_ dynamic tools menu (requires moving files around)
|
||||
_ this means can integrate the autoformat stuff
|
||||
_ processing.mess/tools has chandler's template stuff
|
||||
_ finish up debian package support (see the processing.mess folder)
|
||||
|
||||
|
||||
@@ -645,6 +658,8 @@ _ Blah.class will confuse the preproc
|
||||
_ http://dev.processing.org/bugs/show_bug.cgi?id=481
|
||||
_ non-matching curly brackets sometimes don't cause an error
|
||||
_ http://dev.processing.org/bugs/show_bug.cgi?id=507
|
||||
_ syntax highlighting error with // and /*
|
||||
_ http://dev.processing.org/bugs/show_bug.cgi?id=609
|
||||
|
||||
hacked for fix, needs real fix
|
||||
_ NullPointerException on unterminated comment at end of code
|
||||
@@ -1077,6 +1092,8 @@ _ http://processing.org/discourse/yabb_beta/YaBB.cgi?board=VideoCamera;action=
|
||||
|
||||
LIBRARIES / Video
|
||||
|
||||
_ add more information about multiple camera inputs
|
||||
_ add info about "access" errors being quicktime errors
|
||||
_ documented in faq, add something to the lib "camera not installed"
|
||||
_ quicktime.std.stdQTException(QTjava:6.1.3gl),-9405=couldntgetrequiredcomponent,qtversion:7108000 at quicktime.std.stdQTExceptionchekcerror
|
||||
_ need to add resize method to capture object
|
||||
|
||||
@@ -55,6 +55,11 @@ import processing.core.PApplet;
|
||||
* altered, however it should be clear that this code is almost entirely his
|
||||
* work, with no connection to the Processing project.
|
||||
* <P>
|
||||
* Alterations/additions for the Processing library: <UL>
|
||||
* <LI>a slightly different model for getChild() and getChildren()
|
||||
* <LI>addition of getChild(name or path) and getChildren(name or path)
|
||||
* <LI>slight changes to support the SVG library
|
||||
* </UL>
|
||||
* The intent of this library (with regard to Processing) is to provide an
|
||||
* extremely simple (and compact) means of reading and writing XML data from a
|
||||
* sketch. As such, this is not a full-featured library for handling XML data.
|
||||
@@ -63,7 +68,7 @@ import processing.core.PApplet;
|
||||
* <CODE>
|
||||
* import processing.xml.*;
|
||||
*
|
||||
* XMLElement xml = new XMLElement("filename.xml", this);
|
||||
* XMLElement xml = new XMLElement(this, "filename.xml");
|
||||
* int childCount = xml.getChildCount();
|
||||
* for (int i = 0; i < childCount; i++) {
|
||||
* XMLElement kid = xml.getChild(i);
|
||||
@@ -72,13 +77,13 @@ import processing.core.PApplet;
|
||||
* }
|
||||
* </CODE>
|
||||
* @author Marc De Scheemaecker
|
||||
* <<A href="mailto:cyberelf@mac.com">cyberelf@mac.com</A>>
|
||||
* @author Ben Fry
|
||||
*/
|
||||
public class XMLElement
|
||||
{
|
||||
static final boolean DEBUG = false;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* The attributes given to the element.
|
||||
*
|
||||
@@ -154,13 +159,13 @@ public class XMLElement
|
||||
*/
|
||||
private boolean ignoreUnknownEntities = true;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* For attributes such as NOWRAP that aren't set equal to anything,
|
||||
* For attributes such as NOWRAP that aren't set equal to anything,
|
||||
* parse without giving an error, and set their contents to an empty String.
|
||||
*/
|
||||
private boolean ignoreMissingAttributes = true;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* The line number where the element starts.
|
||||
@@ -464,9 +469,8 @@ public class XMLElement
|
||||
/**
|
||||
* Begin parsing XML data passed in from a PApplet. This code
|
||||
* wraps exception handling, for more advanced exception handling,
|
||||
* use the constructor that takes a Reader or InputStream,
|
||||
* or use the parseFromReader() method.
|
||||
* @author fry
|
||||
* use the constructor that takes a Reader or InputStream.
|
||||
* @author processing.org
|
||||
* @param filename
|
||||
* @param parent
|
||||
*/
|
||||
@@ -474,11 +478,7 @@ public class XMLElement
|
||||
this();
|
||||
try {
|
||||
Reader r = parent.createReader(filename);
|
||||
if (r == null) {
|
||||
System.err.println("The file " + filename +
|
||||
" could not be found.");
|
||||
return;
|
||||
}
|
||||
//if (r == null) return;
|
||||
parseFromReader(r);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
@@ -486,24 +486,25 @@ public class XMLElement
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create and parse immediately.
|
||||
* @author fry
|
||||
*/
|
||||
public XMLElement(Reader r) throws IOException {
|
||||
this();
|
||||
parseFromReader(r);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create and parse immediately.
|
||||
* @author fry
|
||||
*/
|
||||
public XMLElement(String s) {
|
||||
try {
|
||||
parseString(s);
|
||||
} catch (XMLParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public XMLElement(InputStream input) throws IOException {
|
||||
this();
|
||||
InputStreamReader r = new InputStreamReader(input);
|
||||
parseFromReader(r);
|
||||
this(new InputStreamReader(input, "UTF-8"));
|
||||
// InputStreamReader r = new InputStreamReader(input);
|
||||
// parseFromReader(r);
|
||||
}
|
||||
|
||||
|
||||
@@ -794,7 +795,7 @@ public class XMLElement
|
||||
|
||||
|
||||
/**
|
||||
* Quick accessor for a particular element
|
||||
* Quick accessor for an element at a particular index.
|
||||
* @author processing.org
|
||||
*/
|
||||
public XMLElement getChild(int which) {
|
||||
@@ -802,6 +803,81 @@ public class XMLElement
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a child by its name or path.
|
||||
* @param name element name or path/to/element
|
||||
* @return
|
||||
* @author processing.org
|
||||
*/
|
||||
public XMLElement getChild(String name) {
|
||||
if (name.indexOf('/') != -1) {
|
||||
return getChild(PApplet.split(name, '/'), 0);
|
||||
}
|
||||
int childCount = getChildCount();
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
XMLElement kid = getChild(i);
|
||||
if (kid.getName().equals(name)) {
|
||||
return kid;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
protected XMLElement getChild(String[] items, int offset) {
|
||||
int childCount = getChildCount();
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
XMLElement kid = getChild(i);
|
||||
if (kid.getName().equals(items[offset])) {
|
||||
if (offset == items.length-1) {
|
||||
return kid;
|
||||
} else {
|
||||
return kid.getChild(items, offset+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get any children that match this name or path. Similar to getChild(),
|
||||
* but will grab multiple matches rather than only the first.
|
||||
* @param name element name or path/to/element
|
||||
* @return
|
||||
* @author processing.org
|
||||
*/
|
||||
public XMLElement[] getChildren(String name) {
|
||||
if (name.indexOf('/') != -1) {
|
||||
return getChildren(PApplet.split(name, '/'), 0);
|
||||
}
|
||||
int childCount = getChildCount();
|
||||
XMLElement[] matches = new XMLElement[childCount];
|
||||
int matchCount = 0;
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
XMLElement kid = getChild(i);
|
||||
if (kid.getName().equals(name)) {
|
||||
matches[matchCount++] = kid;
|
||||
}
|
||||
}
|
||||
return (XMLElement[]) PApplet.subset(matches, 0, matchCount);
|
||||
}
|
||||
|
||||
|
||||
protected XMLElement[] getChildren(String[] items, int offset) {
|
||||
if (offset == items.length-1) {
|
||||
return getChildren(items[offset]);
|
||||
}
|
||||
XMLElement[] matches = getChildren(items[offset]);
|
||||
XMLElement[] outgoing = new XMLElement[0];
|
||||
for (int i = 0; i < matches.length; i++) {
|
||||
XMLElement[] kidMatches = matches[i].getChildren(items, offset+1);
|
||||
outgoing = (XMLElement[]) PApplet.concat(outgoing, kidMatches);
|
||||
}
|
||||
return outgoing;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the PCDATA content of the object. If there is no such content,
|
||||
* <CODE>null</CODE> is returned.
|
||||
@@ -2203,16 +2279,16 @@ public class XMLElement
|
||||
// don't allow delimiters in this case
|
||||
for (;;) {
|
||||
char ch = this.readChar();
|
||||
if ((ch == ' ') ||
|
||||
if ((ch == ' ') ||
|
||||
(ch == '\t') || (ch == '\n') || (ch == '\r') ||
|
||||
(ch == '/') || (ch == '>')) {
|
||||
(ch == '/') || (ch == '>')) {
|
||||
unreadChar(ch);
|
||||
return;
|
||||
} else {
|
||||
string.append(ch);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
for (;;) {
|
||||
char ch = this.readChar();
|
||||
@@ -2499,7 +2575,7 @@ public class XMLElement
|
||||
this.scanString(buf);
|
||||
elt.setAttribute(key, buf);
|
||||
if (DEBUG) System.out.println(" value is " + buf);
|
||||
}
|
||||
}
|
||||
ch = this.scanWhitespace();
|
||||
if (DEBUG) System.out.println("scan of white produced " + ch);
|
||||
}
|
||||
@@ -2642,9 +2718,9 @@ public class XMLElement
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
/**
|
||||
* Version of resolveEntity that gives up when it hits its ending delimiter.
|
||||
* Handles parsing <meta http-equiv> stuff where the URL contains an ampersand.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user