/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ package netscape.test.plugin.composer; import java.io.*; import java.net.*; import netscape.plugin.composer.*; import netscape.plugin.composer.io.*; /** Sample Plugin that adds a "Nervous Text" applet to the document. * Shows how to add an applet to the document. */ public class AddApplet extends Plugin { /** Test the plugin. Not required for normal operation of the plugin. * You can use this to run the plugin from the command line: * java -classpath args... * where args... are passed on to the Test class. * You can remove this code before shipping your plugin. */ static public void main(String[] args) { Test.perform(args, new AddApplet()); } /** Get the human readable name of the plugin. Defaults to the name of the plugin class. * @return the human readable name of the plugin. */ public String getName() { return "Nervous Text"; } /** Get the human readable category of the plugin. Defaults to the name of the plugin class. * @return the human readable category of the plugin. */ public String getCategory() { return "Insert"; } /** Get the human readable hint for the plugin. This is a one-sentence description of * what the plugin does. Defaults to the name of the plugin class. * @return the human readable hint for the plugin. */ public String getHint() { return "Inserts a 'Nervous Text' java applet."; } /** Perform the action of the plugin. * * @param document the current document. */ public boolean perform(Document document) throws IOException{ // Create a print stream for the new document text. PrintWriter out = new PrintWriter(document.getOutput()); // Create a lexical stream to tokenize the old document text. LexicalStream in = new LexicalStream(new SelectedHTMLReader(document.getInput(), out)); // Keep track of whether or not we are in the selected text. // At the beginning of the document we're outside the selection. // After we encounter the start-selection comment, we're inside // the selection. // After we encounter the end-selection comment, we're outside // the selection again. boolean inSelection = false; Comment selectionStart = null; for(;;){ // Get the next token of the document. Token token = in.next(); if ( token == null ) break; // Null means we've finished the document. else if (token instanceof Comment ) { Comment comment = (Comment) token; if ( comment.isSelectionStart() ){ selectionStart = comment; inSelection = true; continue; // Don't print the selection start yet. } else if (comment.isSelectionEnd() ){ inSelection = false; out.print(selectionStart); insertApplet(document, out); } } out.print(token); } out.close(); return true; } void insertApplet(Document document, PrintWriter out){ String appletClassFile = "NervousText.class"; writeDataToDisk(document, nervousTextClassData, appletClassFile); try { // Write the HTML for the applet. Note the "LOCALDATA" property. // This property tells the Composer to publish the class file along // with the document. out.print(""); out.print(""); out.print(""); } catch (Throwable t){ t.printStackTrace(); } } void writeDataToDisk(Document document, int[] data, String fileName){ // Copy the class data to the work directory. // In order to do this, we need to have the ability access files. netscape.security.PrivilegeManager.enablePrivilege("UniversalFileAccess"); File outFile = new File(document.getWorkDirectory(), fileName); System.err.println("File is: " + outFile); if ( ! outFile.exists() ){ try { FileOutputStream outStream = new FileOutputStream(outFile); int length = data.length; for(int i = 0; i < length; i++ ) { int d = data[i]; outStream.write((byte) (d >> 24)); outStream.write((byte) (d >> 16)); outStream.write((byte) (d >> 8)); outStream.write((byte) (d)); } outStream.close(); } catch (Exception e) { System.err.println("Couldn't write class file " + fileName + " to directory " + document.getWorkDirectory() ); e.printStackTrace(); } } else { System.err.println("File " + outFile + " already exists."); } } // The data for NervousText.class is stored here to simplify this example. int[] nervousTextClassData = {-889275714, 196653, 8783872, 2114453577, 134248455, 4654848, 1929838662, 117464839, 8652544, 1694957699, 117471751, 6948608, 1409941511, 2689280, 100675082, 327730, 167775232, 638124038, 3934720, 134233865, 393255, 167773952, 805961733, 3344896, 134229002, 524346, 167774208, 671678470, 3410432, 201338122, 852027, 167774208, 956891142, 3607040, 134234122, 262211, 150996480, 789118982, 2754816, 100674314, 327729, 167774720, 940310639, 6163456, 1275087628, 7471185, 201360640, 1644953682, 8064000, 1711303436, 5046366, 201358336, 1208746071, 6884352, 1879075596, 7405646, 201357056, -2146697086, 6163456, 2130729228, 6488138, 83886080, 0, 1678508135, 7015424, 1744862476, 5242974, 201359616, 1577844866, 7670784, 1845521158, 1078067200, 0, 201351168, 1577844866, 5768768, 603979776, 12, 5898340, 16781132, 1768842574, 1970102885, 1918132578, 1818558720, 222523246, 1937006958, 1951818092, 1969553664, 189687154, 1987016051, 1415936116, 16780906, 1635148079, 1818324583, 793600372, 1744896018, 676096609, 1986080609, 2004102982, 1869509691, 693502208, 122187636, 1247901281, 16781900, 1784772193, 795631982, 1731154804, 1919512167, 989921282, 1531117824, 158557552, 1634886004, 1701052672, 91452513, 1920205056, 136857929, 1531136297, 1442906122, 1165517669, 1886677359, 1853030656, 108160371, 1970103553, 272458, 693502208, 107702636, 1819108609, 676719, 1970430821, 1181314149, 16780650, 1635148079, 1635218479, 1181707892, 16779107, 1869966964, 1701970176, 354962538, 1635148079, 1635218479, 1165387118, 1950042441, 693764352, 259287154, 1700881491, 1970499685, 1852073316, 16783144, 1282040182, 1630497889, 1852256082, 1970171489, 1651270971, 693502208, 640175210, 1635148079, 1818324583, 793998450, 1768843067, 692873825, 1986080620, 1634625327, 1400140393, 1852259073, 422497, 1852075885, 16778094, 1970077952, 158166901, 1936016495, 2003697920, 57832814, 16778024, 693502208, 275407222, 1630497889, 1852256083, 1953655150, 1728118791, 1937077104, 1701733377, 1452108, 1784772193, 794916724, 793211489, 1885890915, 1933257046, 16778024, 692650240, 24314112, 52963652, 16781930, 1635148079, 1818324583, 793933166, 1851875948, 1694564359, 2036294511, 1869767681, 92417, 615538, 1635205992, 1634890497, 88577, 1206881, 1986080609, 2004102979, 1869443183, 1852141172, 16777545, 16781390, 1702000239, 1970492517, 2020879978, 1635148033, 289134, 1769210112, 125329251, 1869574756, 16779122, 1701863785, 1853096192, 91451493, 1701052672, 140993908, 1130914162, 1929445381, 1936483685, 1879113746, 1784772193, 794914928, 1818588207, 1097887852, 1702101248, 71528292, 1694564375, 676096609, 1986080620, 1634625327, 1400140393, 1852259145, 1227445761, 937071, 1667329110, 1634888033, 1651271027, 16778866, 1702062458, 1694564362, 1416195429, 1934782317, 1634599168, 91251049, 1853096192, 510288246, 1630497889, 1852256073, 1853121906, 1920299124, 1701070200, 1667592308, 1768910337, 1199210, 1635148079, 1818324583, 794060914, 1700881467, 16779123, 1702119023, 1853096192, 153639747, 1229539657, 693502208, 74737016, 1946222604, 1734702160, 1634885997, 1702126962, 16778536, 1229531478, 16778355, 1953460225, 408681, 1852404798, 16781674, 1635148079, 1635218479, 1198678384, 1751737203, 16781418, 1635148079, 1818324583, 794060914, 1700881409, 420965, 1852273768, 65542, 327681, 589834, 76, 4915200, 99, 4849664, 82, 8060928, 103, 7012352, 110, 7012352, 102, 7012352, 91, 4849664, 112, 7012352, 85, 7012352, 87, 6881280, 458753, 7143518, 65652, 134, 393217, 82, 705757334, 271758848, 606780160, 223941123, 68166839, 1881600, 455748114, 28704790, -1258284502, -1275061561, 600594, 45416474, 707441664, 448135182, -1140476672, 338342912, 436415156, 1750528, 237679616, 335787520, 363921408, 65604, 34, 524288, 1638409, 1703961, 1769507, 1835050, 1900592, 2097213, 2162769, 1572865, 5046366, 65652, 63, 262145, 27, 716439586, -956295638, -1157625767, 716636191, -1258282454, -1275059530, 1552640, 256, 1140850688, 301990912, 9472, 117450496, 318777344, 436216832, 16810240, 1577058560, 1946157056, 754975232, 16777216, 220902400, 582352920, 704754944, 582025216, 65604, 14, 196608, 2949127, 3014668, 2883585, 6094942, 65652, 82, 131073, 30, -1493167852, 3520512, 430374916, 1462416896, 288011264, 583532526, 704754944, 582025217, 196617, 786443, 65604, 26, 393216, 3276803, 3342349, 3407889, 3276824, 3538973, 3211265, 7929953, 65652, 135, 393218, 91, 704886016, 514261063, 716701728, 335561067, 269429428, 1992839, 1670296832, 304789504, 538181697, 1796472893, 1670296832, 590031540, 1321652, 1967146, -1275063766, -1275059274, 2435673, -1275060732, 1622474782, 716439582, 716439578, -1241510239, -5132032, 256, 1140850688, 436209152, 14848, 134233088, 486554880, 754990592, 1107311104, 1509964032, 16800768, 1442840832, 1946157056, 1442841088, 16777216, 707441664, 261685261, 716439586, -1241506393, 666292, 2274816, 321530548, 1022208, 117679872, 67417344, 251964416, 256, 1140850688, 436209152, 17408, 117458176, 234898432, 285231104, 402672128, 671107840, 16810496, 1577058560, 1946157056, 872415744, 16777216, 271234816, 271192099, -1258282710, 62193679, -1325400064, 16794624, 4608, 67108864, 201327616, 335546880, 369102592, 201326848, 1392508928, 33582080 }; }