mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2026-01-08 23:14:11 +01:00
7a9889b18cad4b96081b9158d0022b337b6af4c8
New review: owner: dougkearns I like this for the most part, except that it has to go to lengths to wrap the original nsIFile correctly, an that it can't be passed directly to other XPCOM components. It makes most operations on files a lot cleaner, though.
A terse introduction to E4X
Public Domain
The inline XML literals in this code are part of E4X, a standard
XML processing interface for ECMAScript. In addition to syntax
for XML literals, E4X provides a new kind of native object,
"xml", and a syntax, similar to XPath, for accessing and
modifying the tree. Here is a brief synopsis of the kind of
usage you'll see herein:
> let xml =
<foo bar="baz" baz="qux">
<bar>
<baz id="1"/>
</bar>
<baz id="2"/>
</foo>;
// Select all bar elements of the root foo element
> xml.bar
<bar><baz id="1"/></bar>
// Select all baz elements anywhere beneath the root
> xml..baz
<baz id="1"/>
<baz id="2"/>
// Select all of the immediate children of the root
> xml.*
<bar><baz id="1"/></bar>
<baz id="2"/>
// Select the bar attribute of the root node
> xml.@bar
baz
// Select all id attributes in the tree
> xml..@id
1
2
// Select all attributes of the root node
> xml.@*
baz
quz
// Add a quux elemend beneath the first baz
> xml..baz[0] += <quux/>
<baz id="1"/>
<quux/>
> xml
<foo bar="baz" baz="qux">
<bar>
<baz id="1"/>
<quux/>
</bar>
<baz id="2"/>
</foo>
// and beneath the second
> xml.baz[1] = <quux id="1"/>
> xml
<foo bar="baz" baz="qux">
<bar>
<baz id="1"/>
<quux/>
</bar>
<baz id="2"/>
<quux id="1"/>
</foo>
// Replace bar's subtree with a foo element
> xml.bar.* = <foo id="1"/>
> xml
<foo bar="baz" baz="qux">
<bar>
<foo id="1"/>
</bar>
<baz id="2"/>
<quux id="1"/>
</foo>
// Add a bar below bar
> xml.bar.* += <bar id="1"/>
<foo id="1"/>
<bar id="1"/>
> xml
<foo bar="baz" baz="qux">
<bar>
<foo id="1"/>
<bar id="1"/>
</bar>
<baz id="2"/>
<quux id="1"/>
</foo>
// Adding a quux attribute to the root
> xml.@quux = "foo"
foo
> xml
<foo bar="baz" baz="qux" quux="foo">
<bar>
<foo id="1"/>
<bar id="1"/>
</bar>
<baz id="2"/>
<quux id="1"/>
</foo>
> xml.bar.@id = "0"
> xml..foo[0] = "Foo"
Foo
> xml..bar[1] = "Bar"
Bar
> xml
js> xml
<foo bar="baz" baz="qux" quux="foo" id="0">
<bar id="0">
<foo id="1">Foo</foo>
<bar id="1">Bar</bar>
</bar>
<baz id="2"/>
<quux id="1"/>
</foo>
// Selecting all bar elements where id="1"
> xml..bar.(@id == 1)
Bar
// Literals:
// XMLList literal. No root node.
> <>Foo<br/>Baz</>
Foo
<br/>
Baz
// Interpolation.
> let x = "<foo/>"
> <foo bar={x}>{x + "<?>"}</foo>
<foo/><?>
> <foo bar={x}>{x + "<?>"}</foo>.toXMLString()
<foo bar="<foo/>"><foo/><?></foo>
> let x = <foo/>
> <foo bar={x}>{x}</foo>.toXMLString()
<foo bar="">
<foo/>
</foo>
Description
Languages
JavaScript
93.7%
C++
1.8%
CSS
1.6%
XSLT
1.3%
Vim script
0.8%
Other
0.6%