
Signature
Firma/Company: CRESD GmbH
Phone: +49-89-65 30 95 63 Fax: +49-89-65 30 95 64
WWW: http://www.cresd.de
S-Mail: Freibadstr. 14, D-81543 München
PGP-Key: http://www.cresd.de/edv/pgpkey.txt
Open BC (Einladung) http://www.openbc.com/go/invita/4561755
Martin G??ckler <martin@gaeckler.de> wrote:
> Christian Kaufhold schrieb:
> > Martin Gaeckler <martin@gaeckler.de> wrote:
[quoted text clipped - 6 lines]
> >
> > Use setParagraphAttributes.
> HTMLDocument.BlockElement block = (HTMLDocument.BlockElement)elem;
No need for the cast.
> int start, end;
> String text;
> start = block.getStartOffset();
> end = block.getEndOffset();
> // thes what attributes are set
> for(Enumeration e = block.getAttributeNames(); e.hasMoreElements(); )
> System.out.println(e.nextElement());
> SimpleAttributeSet newType = new SimpleAttributeSet();
If you want to preserve the previous attributes:
SimpleAttributeSet newType = new SimpleAttributeSet(block.getAttributes());
> newType.addAttribute( "name", "h1");
No, newType.addAttribute(AttributeSet.NameAttribute, HTML.Tag.H1);
> htmlDoc.setParagraphAttributes(start, end-start, newType, false );
> This produces the following HTML-Code:
> <p name="h1">
> hello world
> </p>
> And after a second call to my function. The Enumeration contained two
> attributes with the name "name".
The attribute names are not necessarily Strings.
> Then I have replaced the boolean parameter of setParagraphAttributes.
> The produced HTML-Code was stupid:
> <body name="h1">
> hello world
> </body>
This is actually a bug -- sometimes attributes are inherited from ancestor
elements.
Christian
Martin Gäckler - 24 Nov 2006 22:57 GMT
Christian Kaufhold schrieb:
>> HTMLDocument.BlockElement block = (HTMLDocument.BlockElement)elem;
>
> No need for the cast.
The compiler has another opinion. (incompatible types found)
> If you want to preserve the previous attributes:
>
> SimpleAttributeSet newType = new SimpleAttributeSet(block.getAttributes());
That's a good idea.
>> newType.addAttribute( "name", "h1");
>
> No, newType.addAttribute(AttributeSet.NameAttribute, HTML.Tag.H1);
Thank You. That solved my problem. I'm really glad.
Here is my new source code:
void makeParagraph(HTML.Tag paragraphType)
{
if( textEditor instanceof JEditorPane )
{
HTMLDocument htmlDoc = (HTMLDocument) textEditor.getDocument();
int position = textEditor.getSelectionStart();
Element elem = htmlDoc.getParagraphElement(position);
if( elem instanceof HTMLDocument.BlockElement )
{
HTMLDocument.BlockElement block = (HTMLDocument.BlockElement)elem;
SimpleAttributeSet newType = new SimpleAttributeSet(
block.getAttributes()
);
newType.addAttribute( AttributeSet.NameAttribute, paragraphType );
htmlDoc.setParagraphAttributes(position, 0, newType, false );
}
}
}
This function does now exactly what I want. 8-))))
Thank You again for your help.
> Christian
Martin

Signature
Firma/Company: CRESD GmbH
Phone: +49-89-65 30 95 63 Fax: +49-89-65 30 95 64
WWW: http://www.cresd.de
S-Mail: Freibadstr. 14, D-81543 München
PGP-Key: http://www.cresd.de/edv/pgpkey.txt
Open BC (Einladung) http://www.openbc.com/go/invita/4561755
Christian Kaufhold - 25 Nov 2006 13:41 GMT
Martin G??ckler <martin@gaeckler.de> wrote:
> Christian Kaufhold schrieb:
> >> HTMLDocument.BlockElement block = (HTMLDocument.BlockElement)elem;
> >
> > No need for the cast.
> The compiler has another opinion. (incompatible types found)
I meant "No need to mention HTMLDocument.BlockElement at all." It will
work with a plain Element.
Christian
Martin Gäckler - 26 Nov 2006 20:23 GMT
Christian Kaufhold schrieb:
> I meant "No need to mention HTMLDocument.BlockElement at all." It will
> work with a plain Element.
Thank You again. Now, I understand. Here my new implementation:
void makeParagraph(HTML.Tag paragraphType)
{
if( textEditor instanceof JEditorPane )
{
HTMLDocument htmlDoc = (HTMLDocument) textEditor.getDocument();
int position = textEditor.getSelectionStart();
Element elem = htmlDoc.getParagraphElement(position);
SimpleAttributeSet newType = new SimpleAttributeSet(
elem.getAttributes()
);
newType.addAttribute( AttributeSet.NameAttribute, paragraphType );
htmlDoc.setParagraphAttributes(position, 0, newType, false );
}
}
Now, it's a very simple implementation, I love it. 8-) Thank You again.
> Christian
Martin

Signature
Firma/Company: CRESD GmbH
Phone: +49-89-65 30 95 63 Fax: +49-89-65 30 95 64
WWW: http://www.cresd.de
S-Mail: Freibadstr. 14, D-81543 München
PGP-Key: http://www.cresd.de/edv/pgpkey.txt
Open BC (Einladung) http://www.openbc.com/go/invita/4561755
Christian Kaufhold - 26 Nov 2006 21:45 GMT
Martin G??ckler <martin@gaeckler.de> wrote:
> void makeParagraph(HTML.Tag paragraphType)
package access?
> {
> if( textEditor instanceof JEditorPane )
> {
> HTMLDocument htmlDoc = (HTMLDocument) textEditor.getDocument();
> int position = textEditor.getSelectionStart();
> Element elem = htmlDoc.getParagraphElement(position);
> SimpleAttributeSet newType = new SimpleAttributeSet(
> elem.getAttributes()
Note: I was confused about, this -- for an 'false' argument (add instead of
set, you don't need this).
> );
> newType.addAttribute( AttributeSet.NameAttribute, paragraphType );
> htmlDoc.setParagraphAttributes(position, 0, newType, false );
Then you can also use
htmlDoc.setParagraphAttributes(textEditor.getSelectionStart(), textEditor.getSelectionEnd() - textEditor.getSelectionStart(), newType, false);
Christian
Martin Gäckler - 28 Nov 2006 20:52 GMT
Christian Kaufhold schrieb:
> Martin G??ckler <martin@gaeckler.de> wrote:
>
[quoted text clipped - 25 lines]
>
> Christian
Christian,
Thank You again. That's an excellent idea. And "Yes" you are right, the
wrong boolean parameter replace was a little bit confusing. Now, I can
change the type of more than one paragraph at a time without loosing any
other attribute:
void makeParagraph(HTML.Tag paragraphType)
{
if( textEditor instanceof JEditorPane )
{
HTMLDocument htmlDoc = (HTMLDocument) textEditor.getDocument();
int start = textEditor.getSelectionStart();
int end = textEditor.getSelectionEnd();
SimpleAttributeSet newType = new SimpleAttributeSet();
newType.addAttribute( AttributeSet.NameAttribute, paragraphType );
htmlDoc.setParagraphAttributes(start, end-start, newType, false );
}
}
For example I got this change from
<p align="center">hello <u>world</u></p>
<p align="right">hello <u>world</u></p>
to
<h1 align="center">hello <u>world</u></h1>
<h1 align="right">hello <u>world</u></h1>
Yeah, yeah, yeah. Excellent! 8-))))))) (= big smile)
Have a nice day and thank you again.
Martin

Signature
Firma/Company: CRESD GmbH
Phone: +49-89-65 30 95 63 Fax: +49-89-65 30 95 64
WWW: http://www.cresd.de
S-Mail: Freibadstr. 14, D-81543 München
PGP-Key: http://www.cresd.de/edv/pgpkey.txt
Open BC (Einladung) http://www.openbc.com/go/invita/4561755