forked from igniterealtime/Smack
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
34 changed files
with
2,250 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
Message Markup | ||
============== | ||
|
||
[Back](index.md) | ||
|
||
[Message Markup (XEP-0394)](https://xmpp.org/extensions/xep-0394.html) can be used as a an alternative to XHTML-IM to style messages, while keeping the body and markup information strictly separated. | ||
This implementation can *not* be used to render message bodies, but will offer a simple to use interface for creating ExtensionElements which encode the markup information. | ||
|
||
## Usage | ||
|
||
The most important class is the `MarkupElement` class, which contains a Builder. | ||
|
||
To start creating a Message Markup Extension, call `MarkupElement.getBuilder()`. | ||
(Almost) all method calls documented below will be made on the builder. | ||
|
||
Whenever a method call receives a `start` and `end` index, `start` represents the first character, which is affected by the styling, while `end` is the character *after* the last affected character. | ||
|
||
### Inline styling | ||
|
||
Currently there are 3 styles available: | ||
* *emphasis*, which should be rendered by a client as *italic*, or **bold** | ||
* *code*, which should be rendered in `monospace` | ||
* *deleted*, which should be rendered as ~~strikethrough~~. | ||
|
||
Those styles are available by calling `builder.setEmphasis(int start, int end)`, | ||
`builder.setDeleted(int start, int end)` and `builder.setCode(int start, int end)`. | ||
|
||
If you want to apply multiple inline styles to a section, you can do the following: | ||
``` | ||
Set<SpanElement.SpanStyle> spanStyles = new HashSet<>(); | ||
styles.add(SpanElement.SpanStyle.emphasis); | ||
styles.add(SpanElement.SpanStyle.deleted); | ||
builder.addSpan(start, end, spanStyles); | ||
``` | ||
|
||
Note, that spans cannot overlap one another. | ||
|
||
### Block Level Styling | ||
|
||
Available block level styles are: | ||
* Code blocks, which should be rendered as | ||
``` | ||
blocks | ||
of | ||
code | ||
``` | ||
|
||
* Itemized lists, which should render as | ||
* Lists | ||
* with possibly multiple | ||
* entries | ||
|
||
* Block Quotes, which should be rendered by the client | ||
> as quotes, which | ||
>> also can be nested | ||
To mark a section as code block, call `builder.setCodeBlock(start, end)`. | ||
|
||
To create a list, call `MarkupElement.Builder.ListBuilder lbuilder = builder.beginList()`, which will return a list builder. | ||
On this you can call `lbuilder.addEntry(start, end)` to add an entry. | ||
|
||
Note: If you add an entry, the start value MUST be equal to the end value of the previous added entry! | ||
|
||
To end the list, call `lbuilder.endList()`, which will return the MessageMarkup builder. | ||
|
||
To create a block quote, call `builder.setBlockQuote(start, end)`. | ||
|
||
Note that block level elements MUST NOT overlap each other boundaries, but may be fully contained (nested) within each other. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
Spoiler Messages | ||
================ | ||
|
||
[Back](index.md) | ||
|
||
Spoiler Messages can be used to indicate that the body of a message is a spoiler and should be displayed as such. | ||
|
||
## Usage | ||
|
||
To get an instance of the SpoilerManager, call | ||
``` | ||
SpoilerManager manager = SpoilerManager.getInstanceFor(connection); | ||
``` | ||
This will automatically add Spoilers to the list of supported features of your client. | ||
|
||
The manager can then be used to add SpoilerElements to messages like follows: | ||
``` | ||
Message message = new Message(); | ||
// spoiler without hint | ||
SpoilerElement.addSpoiler(message); | ||
// spoiler with hint about content | ||
SpoilerElement.addSpoiler(message, "End of Love Story"); | ||
// spoiler with localized hint | ||
SpoilerElement.addSpoiler(message, "de", "Der Kuchen ist eine Lüge"); | ||
``` | ||
|
||
To get Spoilers from a message call | ||
``` | ||
Map<String, String> spoilers = SpoilerElement.getSpoilers(message); | ||
``` |
62 changes: 62 additions & 0 deletions
62
...ental/src/main/java/org/jivesoftware/smackx/message_markup/element/BlockQuoteElement.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
/** | ||
* | ||
* Copyright © 2018 Paul Schaub | ||
* | ||
* Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
package org.jivesoftware.smackx.message_markup.element; | ||
|
||
import org.jivesoftware.smack.util.XmlStringBuilder; | ||
|
||
public class BlockQuoteElement implements MarkupElement.BlockLevelMarkupElement { | ||
|
||
public static final String ELEMENT = "bquote"; | ||
|
||
private final int start, end; | ||
|
||
/** | ||
* Create a new Block Quote element. | ||
* | ||
* @param start start index | ||
* @param end end index | ||
*/ | ||
public BlockQuoteElement(int start, int end) { | ||
this.start = start; | ||
this.end = end; | ||
} | ||
|
||
@Override | ||
public int getStart() { | ||
return start; | ||
} | ||
|
||
@Override | ||
public int getEnd() { | ||
return end; | ||
} | ||
|
||
@Override | ||
public String getElementName() { | ||
return ELEMENT; | ||
} | ||
|
||
@Override | ||
public XmlStringBuilder toXML() { | ||
XmlStringBuilder xml = new XmlStringBuilder(); | ||
xml.halfOpenElement(this); | ||
xml.attribute(ATTR_START, getStart()); | ||
xml.attribute(ATTR_END, getEnd()); | ||
xml.closeEmptyElement(); | ||
return xml; | ||
} | ||
} |
62 changes: 62 additions & 0 deletions
62
...mental/src/main/java/org/jivesoftware/smackx/message_markup/element/CodeBlockElement.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
/** | ||
* | ||
* Copyright © 2018 Paul Schaub | ||
* | ||
* Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
package org.jivesoftware.smackx.message_markup.element; | ||
|
||
import org.jivesoftware.smack.util.XmlStringBuilder; | ||
|
||
public class CodeBlockElement implements MarkupElement.BlockLevelMarkupElement { | ||
|
||
public static final String ELEMENT = "bcode"; | ||
|
||
private final int start, end; | ||
|
||
/** | ||
* Create a new Code Block element. | ||
* | ||
* @param start start index | ||
* @param end end index | ||
*/ | ||
public CodeBlockElement(int start, int end) { | ||
this.start = start; | ||
this.end = end; | ||
} | ||
|
||
@Override | ||
public int getStart() { | ||
return start; | ||
} | ||
|
||
@Override | ||
public int getEnd() { | ||
return end; | ||
} | ||
|
||
@Override | ||
public String getElementName() { | ||
return ELEMENT; | ||
} | ||
|
||
@Override | ||
public XmlStringBuilder toXML() { | ||
XmlStringBuilder xml = new XmlStringBuilder(); | ||
xml.halfOpenElement(this); | ||
xml.attribute(ATTR_START, getStart()); | ||
xml.attribute(ATTR_END, getEnd()); | ||
xml.closeEmptyElement(); | ||
return xml; | ||
} | ||
} |
121 changes: 121 additions & 0 deletions
121
...xperimental/src/main/java/org/jivesoftware/smackx/message_markup/element/ListElement.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
/** | ||
* | ||
* Copyright © 2018 Paul Schaub | ||
* | ||
* Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
package org.jivesoftware.smackx.message_markup.element; | ||
|
||
import java.util.Collections; | ||
import java.util.List; | ||
|
||
import org.jivesoftware.smack.packet.NamedElement; | ||
import org.jivesoftware.smack.util.XmlStringBuilder; | ||
|
||
public class ListElement implements MarkupElement.MarkupChildElement { | ||
|
||
public static final String ELEMENT = "list"; | ||
public static final String ELEM_LI = "li"; | ||
|
||
private final int start, end; | ||
private final List<ListEntryElement> entries; | ||
|
||
/** | ||
* Create a new List element. | ||
* | ||
* @param start start index of the list | ||
* @param end end index of the list | ||
* @param entries list entries | ||
*/ | ||
public ListElement(int start, int end, List<ListEntryElement> entries) { | ||
this.start = start; | ||
this.end = end; | ||
this.entries = Collections.unmodifiableList(entries); | ||
} | ||
|
||
@Override | ||
public int getStart() { | ||
return start; | ||
} | ||
|
||
@Override | ||
public int getEnd() { | ||
return end; | ||
} | ||
|
||
/** | ||
* Return a list of all list entries. | ||
* | ||
* @return entries | ||
*/ | ||
public List<ListEntryElement> getEntries() { | ||
return entries; | ||
} | ||
|
||
@Override | ||
public String getElementName() { | ||
return ELEMENT; | ||
} | ||
|
||
@Override | ||
public CharSequence toXML() { | ||
XmlStringBuilder xml = new XmlStringBuilder(); | ||
xml.halfOpenElement(this); | ||
xml.attribute(ATTR_START, getStart()); | ||
xml.attribute(ATTR_END, getEnd()); | ||
xml.rightAngleBracket(); | ||
|
||
for (ListEntryElement li : getEntries()) { | ||
xml.append(li.toXML()); | ||
} | ||
|
||
xml.closeElement(this); | ||
return xml; | ||
} | ||
|
||
public static class ListEntryElement implements NamedElement { | ||
|
||
private final int start; | ||
|
||
/** | ||
* Create a new ListEntry element. | ||
* | ||
* @param start start index | ||
*/ | ||
public ListEntryElement(int start) { | ||
this.start = start; | ||
} | ||
|
||
/** | ||
* Return the start index of this entry. | ||
* @return start index | ||
*/ | ||
public int getStart() { | ||
return start; | ||
} | ||
|
||
@Override | ||
public String getElementName() { | ||
return ELEM_LI; | ||
} | ||
|
||
@Override | ||
public XmlStringBuilder toXML() { | ||
XmlStringBuilder xml = new XmlStringBuilder(); | ||
xml.halfOpenElement(this); | ||
xml.attribute(ATTR_START, getStart()); | ||
xml.closeEmptyElement(); | ||
return xml; | ||
} | ||
} | ||
} |
Oops, something went wrong.