samples/gutenberg.js

Wed, 27 Apr 2016 01:36:41 +0800

author
aoqi
date
Wed, 27 Apr 2016 01:36:41 +0800
changeset 0
b1a7da25b547
child 962
ac62e33a99b0
permissions
-rw-r--r--

Initial load
http://hg.openjdk.java.net/jdk8u/jdk8u/nashorn/
changeset: 1034:4b9cc65dd24d
tag: jdk8u25-b17

     1 #// Usage: jjs -scripting gutenberg.js
     3 /*
     4  * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
     5  * 
     6  * Redistribution and use in source and binary forms, with or without
     7  * modification, are permitted provided that the following conditions
     8  * are met:
     9  * 
    10  *   - Redistributions of source code must retain the above copyright
    11  *     notice, this list of conditions and the following disclaimer.
    12  * 
    13  *   - Redistributions in binary form must reproduce the above copyright
    14  *     notice, this list of conditions and the following disclaimer in the
    15  *     documentation and/or other materials provided with the distribution.
    16  * 
    17  *   - Neither the name of Oracle nor the names of its
    18  *     contributors may be used to endorse or promote products derived
    19  *     from this software without specific prior written permission.
    20  * 
    21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
    22  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
    23  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    24  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
    25  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    26  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    27  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    28  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    29  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    30  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    31  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    32  */
    34 // Simple example that demonstrates reading XML Rss feed
    35 // to generate a HTML file from script and show it by browser
    37 // Java classes used
    38 var Characters = Java.type("javax.xml.stream.events.Characters");
    39 var Factory = Java.type("javax.xml.stream.XMLInputFactory");
    40 var File = Java.type("java.io.File");
    41 var FileWriter = Java.type("java.io.FileWriter");
    42 var PrintWriter = Java.type("java.io.PrintWriter");
    43 var URL = Java.type("java.net.URL");
    45 // read Rss feed from a URL. Returns an array
    46 // of objects having only title and link properties
    47 function readRssFeed(url) {
    48     var fac = Factory.newInstance();
    49     var reader = fac.createXMLEventReader(url.openStream());
    51     // get text content from next event
    52     function getChars() {
    53         var result = "";
    54         var e = reader.nextEvent();
    55         if (e instanceof Characters) {
    56             result = e.getData();
    57         }
    58         return result;
    59     }
    61     var items = [];
    62     var title, link;
    63     var inItem = false;
    64     while (reader.hasNext()) {
    65         var evt = reader.nextEvent();
    66         if (evt.isStartElement()) {
    67             var local = evt.name.localPart;
    68             if (local == "item") {
    69                // capture title, description now
    70                inItem = true;
    71             }
    73             if (inItem) {
    74                 switch (local) {
    75                     case 'title':
    76                         title = getChars();
    77                         break;
    78                     case 'link':
    79                         link = getChars();
    80                         break;
    81                 }
    82             }
    83         } else if (evt.isEndElement()) {
    84             var local = evt.name.localPart;
    85             if (local == "item") {
    86                 // one item done, save it in result array
    87                 items.push({ title: title, link: link });
    88                 inItem = false;
    89             }
    90         }
    91     }
    93     return items;
    94 }
    96 // generate simple HTML for an RSS feed
    97 function getBooksHtml() {
    98     var url = new URL("http://www.gutenberg.org/cache/epub/feeds/today.rss");
    99     var items = readRssFeed(url);
   101     var str = "<ul>";
   103     // Nashorn's string interpolation and heredoc
   104     // support is very handy in generating text content
   105     // that is filled with elements from runtime objects.
   106     // We insert title and link in <li> elements here.
   107     for each (i in items) {
   108         str += <<EOF
   109 <li>
   110     <a href="${i.link}">${i.title}</a>
   111 </li>
   112 EOF
   113     }
   114     str += "</ul>";
   115     return str;
   116 }
   118 // write the string to the given file
   119 function writeTo(file, str) {
   120     var w = new PrintWriter(new FileWriter(file));
   121     try {
   122         w.print(str);
   123     } finally {
   124         w.close();
   125     }
   126 }
   128 // generate books HTML
   129 var str = getBooksHtml();
   131 // write to file. __DIR__ is directory where
   132 // this script is stored.
   133 var file = new File(__DIR__ + "books.html");
   134 writeTo(file, str);
   136 // show it by desktop browser
   137 try {
   138     var Desktop = Java.type("java.awt.Desktop");
   139     Desktop.desktop.browse(file.toURI());
   140 } catch (e) {
   141     print(e);
   142 }

mercurial