| /* | |
| * | |
| * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. | |
| * | |
| * Redistribution and use in source and binary forms, with or without | |
| * modification, are permitted provided that the following conditions | |
| * are met: | |
| * | |
| * - Redistributions of source code must retain the above copyright | |
| * notice, this list of conditions and the following disclaimer. | |
| * | |
| * - Redistributions in binary form must reproduce the above copyright | |
| * notice, this list of conditions and the following disclaimer in the | |
| * documentation and/or other materials provided with the distribution. | |
| * | |
| * - Neither the name of Oracle nor the names of its | |
| * contributors may be used to endorse or promote products derived | |
| * from this software without specific prior written permission. | |
| * | |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS | |
| * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, | |
| * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |
| * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | |
| * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | |
| * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |
| * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
| * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |
| * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
| * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| */ | |
| import java.awt.Color; | |
| import java.util.HashMap; | |
| import java.util.Locale; | |
| import java.util.MissingResourceException; | |
| import java.util.ResourceBundle; | |
| import javax.swing.Icon; | |
| import javax.swing.ImageIcon; | |
| import javax.swing.text.BadLocationException; | |
| import javax.swing.text.DefaultStyledDocument; | |
| import javax.swing.text.Style; | |
| import javax.swing.text.StyleConstants; | |
| import javax.swing.text.StyleContext; | |
| /** | |
| * hack to load attributed content. | |
| */ | |
| public class HelloWorld { | |
| HelloWorld(DefaultStyledDocument doc, StyleContext styles) { | |
| this.doc = doc; | |
| this.styles = styles; | |
| runAttr = new HashMap<String, Style>(); | |
| } | |
| void loadDocument() { | |
| createStyles(); | |
| for (int i = 0; i < data.length; i++) { | |
| Paragraph p = data[i]; | |
| addParagraph(p); | |
| } | |
| } | |
| void addParagraph(Paragraph p) { | |
| try { | |
| Style s = null; | |
| for (int i = 0; i < p.data.length; i++) { | |
| Run run = p.data[i]; | |
| s = runAttr.get(run.attr); | |
| doc.insertString(doc.getLength(), run.content, s); | |
| } | |
| // set logical style | |
| Style ls = styles.getStyle(p.logical); | |
| doc.setLogicalStyle(doc.getLength() - 1, ls); | |
| doc.insertString(doc.getLength(), "\n", null); | |
| } catch (BadLocationException e) { | |
| System.err.println("Internal error: " + e); | |
| } | |
| } | |
| void createStyles() { | |
| // no attributes defined | |
| Style s = styles.addStyle(null, null); | |
| runAttr.put("none", s); | |
| s = styles.addStyle(null, null); | |
| StyleConstants.setItalic(s, true); | |
| StyleConstants.setForeground(s, new Color(153, 153, 102)); | |
| runAttr.put("cquote", s); // catepillar quote | |
| s = styles.addStyle(null, null); | |
| StyleConstants.setItalic(s, true); | |
| StyleConstants.setForeground(s, new Color(51, 102, 153)); | |
| runAttr.put("aquote", s); // alice quote | |
| try { | |
| ResourceBundle resources = ResourceBundle.getBundle( | |
| "resources.Stylepad", | |
| Locale.getDefault()); | |
| s = styles.addStyle(null, null); | |
| Icon alice = new ImageIcon(resources.getString("aliceGif")); | |
| StyleConstants.setIcon(s, alice); | |
| runAttr.put("alice", s); // alice | |
| s = styles.addStyle(null, null); | |
| Icon caterpillar = new ImageIcon(resources.getString( | |
| "caterpillarGif")); | |
| StyleConstants.setIcon(s, caterpillar); | |
| runAttr.put("caterpillar", s); // caterpillar | |
| s = styles.addStyle(null, null); | |
| Icon hatter = new ImageIcon(resources.getString("hatterGif")); | |
| StyleConstants.setIcon(s, hatter); | |
| runAttr.put("hatter", s); // hatter | |
| } catch (MissingResourceException mre) { | |
| // can't display image | |
| } | |
| Style def = styles.getStyle(StyleContext.DEFAULT_STYLE); | |
| Style heading = styles.addStyle("heading", def); | |
| //StyleConstants.setFontFamily(heading, "SansSerif"); | |
| StyleConstants.setBold(heading, true); | |
| StyleConstants.setAlignment(heading, StyleConstants.ALIGN_CENTER); | |
| StyleConstants.setSpaceAbove(heading, 10); | |
| StyleConstants.setSpaceBelow(heading, 10); | |
| StyleConstants.setFontSize(heading, 18); | |
| // Title | |
| Style sty = styles.addStyle("title", heading); | |
| StyleConstants.setFontSize(sty, 32); | |
| // edition | |
| sty = styles.addStyle("edition", heading); | |
| StyleConstants.setFontSize(sty, 16); | |
| // author | |
| sty = styles.addStyle("author", heading); | |
| StyleConstants.setItalic(sty, true); | |
| StyleConstants.setSpaceBelow(sty, 25); | |
| // subtitle | |
| sty = styles.addStyle("subtitle", heading); | |
| StyleConstants.setSpaceBelow(sty, 35); | |
| // normal | |
| sty = styles.addStyle("normal", def); | |
| StyleConstants.setLeftIndent(sty, 10); | |
| StyleConstants.setRightIndent(sty, 10); | |
| //StyleConstants.setFontFamily(sty, "SansSerif"); | |
| StyleConstants.setFontSize(sty, 14); | |
| StyleConstants.setSpaceAbove(sty, 4); | |
| StyleConstants.setSpaceBelow(sty, 4); | |
| } | |
| DefaultStyledDocument doc; | |
| StyleContext styles; | |
| HashMap<String, Style> runAttr; | |
| static class Paragraph { | |
| Paragraph(String logical, Run[] data) { | |
| this.logical = logical; | |
| this.data = data; | |
| } | |
| String logical; | |
| Run[] data; | |
| } | |
| static class Run { | |
| Run(String attr, String content) { | |
| this.attr = attr; | |
| this.content = content; | |
| } | |
| String attr; | |
| String content; | |
| } | |
| Paragraph[] data = new Paragraph[] { | |
| new Paragraph("title", new Run[] { | |
| new Run("none", "Hello from Cupertino") | |
| }), | |
| new Paragraph("title", new Run[] { | |
| new Run("none", "\u53F0\u5317\u554F\u5019\u60A8\u0021") | |
| }), | |
| new Paragraph("title", new Run[] { | |
| new Run("none", "\u0391\u03B8\u03B7\u03BD\u03B1\u03B9\u0020" // Greek | |
| + "\u03B1\u03C3\u03C0\u03B1\u03B6\u03BF\u03BD" | |
| + "\u03C4\u03B1\u03B9\u0020\u03C5\u03BC\u03B1" | |
| + "\u03C2\u0021") | |
| }), | |
| new Paragraph("title", new Run[] { | |
| new Run("none", "\u6771\u4eac\u304b\u3089\u4eca\u65e5\u306f") | |
| }), | |
| new Paragraph("title", new Run[] { | |
| new Run("none", "\u05e9\u05dc\u05d5\u05dd \u05de\u05d9\u05e8\u05d5" | |
| + "\u05e9\u05dc\u05d9\u05dd") | |
| }), | |
| new Paragraph("title", new Run[] { | |
| new Run("none", "\u0633\u0644\u0627\u0645") | |
| }), }; | |
| } |