Source code: jaxe/elements/JEStyle.java
1 /*
2 Jaxe - Editeur XML en Java
3
4 Copyright (C) 2002 Observatoire de Paris-Meudon
5
6 Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier conformément aux dispositions de la Licence Publique Générale GNU, telle que publiée par la Free Software Foundation ; version 2 de la licence, ou encore (à votre choix) toute version ultérieure.
7
8 Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER. Pour plus de détail, voir la Licence Publique Générale GNU .
9
10 Vous devez avoir reçu un exemplaire de la Licence Publique Générale GNU en même temps que ce programme ; si ce n'est pas le cas, écrivez à la Free Software Foundation Inc., 675 Mass Ave, Cambridge, MA 02139, Etats-Unis.
11 */
12
13 package jaxe.elements;
14
15 import jaxe.JaxeDocument;
16 import jaxe.JaxeElement;
17 import jaxe.FonctionNormal;
18
19 import javax.swing.text.Position;
20 import javax.swing.text.BadLocationException;
21
22 import org.w3c.dom.*;
23
24
25 /**
26 * Elément de style (B ou I ou SUB ou SUP). Modifie l'aspect du texte en conséquence.
27 * Type d'élément Jaxe: 'style'
28 * paramètre: style: NORMAL | GRAS | ITALIQUE | EXPOSANT | INDICE | SOULIGNE
29 *
30 * NORMAL ne doit plus être utilisé (il faut utiliser FONCTION à la place, avec
31 * classe="jaxe.FonctionNormal")
32 */
33 public class JEStyle extends JaxeElement {
34
35 public String ceStyle;
36
37 public JEStyle(JaxeDocument doc) {
38 this.doc = doc;
39 }
40
41 public void init(Position pos, Node noeud) {
42 Element defbalise = doc.cfg.getBaliseDef(noeud.getNodeName());
43 ceStyle = defbalise.getAttribute("param");
44 ceStyle = doc.cfg.getParamFromDefinition(defbalise, "style", ceStyle);
45 if (ceStyle == null || ceStyle.equals(""))
46 return;
47
48 Node textnode = noeud.getFirstChild();
49 String texte = null;
50 if (textnode != null)
51 texte = textnode.getNodeValue();
52 int offsetdebut = pos.getOffset();
53 Position newpos = pos;
54 if (texte != null)
55 newpos = insertText(newpos, texte);
56 //creerEnfants(newpos);
57 for (Node n=noeud.getFirstChild(); n != null; n=n.getNextSibling())
58 if (n.getNodeType() != Node.TEXT_NODE)
59 creerEnfant(newpos, n);
60
61 if (texte != null)
62 changerStyle(ceStyle, offsetdebut, newpos.getOffset() - offsetdebut);
63 }
64
65 public Element nouvelElement(Element defbalise) {
66 return(null);
67 }
68
69 public static JEStyle nouveau(JaxeDocument doc, int start, int end, Element defbalise) {
70 String nombalise = doc.cfg.nomBalise(defbalise);
71
72 String ceStyle = defbalise.getAttribute("param");
73 ceStyle = doc.cfg.getParamFromDefinition(defbalise, "style", ceStyle);
74 if (ceStyle.equals("")) {
75 System.err.println("Pas d'attribut param pour le style");
76 return null;
77 }
78
79 if (ceStyle.equals(kNormal)) {
80 // conservé temporairement pour la compatibilité
81 FonctionNormal fct = new FonctionNormal();
82 fct.appliquer(doc, start, end);
83 return null;
84 }
85 JaxeElement p1 = doc.rootJE.elementA(start);
86 JaxeElement p2 = doc.rootJE.elementA(end - 1);
87 if (p1 == p2) {
88 p1 = doc.rootJE.elementA(start);
89 p2 = doc.rootJE.elementA(end - 1);
90 }
91 if (p1 != p2 || !(p1 instanceof JETexte))
92 return(null);
93
94 try {
95 String texte = doc.textPane.getText(start, end-start);
96
97 JEStyle newje = new JEStyle(doc);
98
99 Node textnode = doc.DOMdoc.createTextNode(texte);
100 Element newel = nouvelElementDOM(doc, nombalise);
101 newel.appendChild(textnode);
102 newje.noeud = newel;
103 newje.doc = doc;
104 doc.dom2JaxeElement.put(newel, newje);
105
106 newje.debut = doc.createPosition(start);
107 newje.fin = doc.createPosition(end - 1);
108 return(newje);
109 } catch (BadLocationException ex) {
110 System.err.println("BadLocationException: " + ex.getMessage());
111 return(null);
112 }
113 }
114
115 }