| // Copyright (c) 2012 Chan Wai Shing | |
| // | |
| // Permission is hereby granted, free of charge, to any person obtaining | |
| // a copy of this software and associated documentation files (the | |
| // "Software"), to deal in the Software without restriction, including | |
| // without limitation the rights to use, copy, modify, merge, publish, | |
| // distribute, sublicense, and/or sell copies of the Software, and to | |
| // permit persons to whom the Software is furnished to do so, subject to | |
| // the following conditions: | |
| // | |
| // The above copyright notice and this permission notice shall be | |
| // included in all copies or substantial portions of the Software. | |
| // | |
| // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
| // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
| // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |
| // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | |
| // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | |
| // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | |
| // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
| package syntaxhighlight; | |
| import java.util.ArrayList; | |
| import java.util.Arrays; | |
| import java.util.Collections; | |
| import java.util.List; | |
| /** | |
| * The parser parsed result. | |
| * | |
| * This class include the information needed to highlight the syntax. | |
| * Information includes where the content located in the document (offset and | |
| * length) and what style(s) should be applied on that segment of content. | |
| * | |
| * @author Chan Wai Shing <cws1989@gmail.com> | |
| */ | |
| public class ParseResult { | |
| /** | |
| * The start position of the content. | |
| */ | |
| protected int offset; | |
| /** | |
| * The length of the content. | |
| */ | |
| protected int length; | |
| /** | |
| * The style keys of the content. The style at higher index of the list will | |
| * override the style of the lower index. | |
| */ | |
| protected List<String> styleKeys; | |
| /** | |
| * Constructor. | |
| * | |
| * @param offset the start position of the content | |
| * @param length the length of the content | |
| * @param styleKeys the style keys of the content | |
| */ | |
| public ParseResult(int offset, int length, List<String> styleKeys) { | |
| this.offset = offset; | |
| this.length = length; | |
| this.styleKeys = new ArrayList<String>(styleKeys); | |
| } | |
| /** | |
| * The start position of the content. | |
| * @return the start position of the content | |
| */ | |
| public int getOffset() { | |
| return offset; | |
| } | |
| /** | |
| * The start position of the content. | |
| * @param offset the start position of the content | |
| */ | |
| public void setOffset(int offset) { | |
| this.offset = offset; | |
| } | |
| /** | |
| * The length of the content. | |
| * @return the length of the content | |
| */ | |
| public int getLength() { | |
| return length; | |
| } | |
| /** | |
| * The length of the content. | |
| * @param length the length of the content | |
| */ | |
| public void setLength(int length) { | |
| this.length = length; | |
| } | |
| /** | |
| * Get the style keys represented by one string key, see | |
| * {@link Theme#getStylesAttributeSet(String)}. | |
| * @return the style keys of the content | |
| */ | |
| public String getStyleKeysString() { | |
| StringBuilder sb = new StringBuilder(10); | |
| for (int i = 0, iEnd = styleKeys.size(); i < iEnd; i++) { | |
| if (i != 0) { | |
| sb.append(" "); | |
| } | |
| sb.append(styleKeys.get(i)); | |
| } | |
| return sb.toString(); | |
| } | |
| /** | |
| * The style keys of the content. | |
| * @param styleKeys the style keys of the content | |
| */ | |
| public void setStyleKeys(List<String> styleKeys) { | |
| this.styleKeys = new ArrayList<String>(styleKeys); | |
| } | |
| /** | |
| * The style keys of the content. | |
| * @param styleKey the style key | |
| * @return see the return value of {@link List#add(Object)} | |
| */ | |
| public boolean addStyleKey(String styleKey) { | |
| return styleKeys.add(styleKey); | |
| } | |
| /** | |
| * The style keys of the content. | |
| * @param styleKey the style key | |
| * @return see the return value of {@link List#remove(Object)} | |
| */ | |
| public boolean removeStyleKey(String styleKey) { | |
| return styleKeys.remove(styleKey); | |
| } | |
| /** | |
| * The style keys of the content. | |
| */ | |
| public void clearStyleKeys() { | |
| styleKeys.clear(); | |
| } | |
| /** | |
| * The style keys for this matched result, see {@link syntaxhighlighter.theme}. | |
| * @return the style keys | |
| */ | |
| public List<String> getStyleKeys() { | |
| return new ArrayList<String>(styleKeys); | |
| } | |
| /** | |
| * {@inheritDoc} | |
| */ | |
| @Override | |
| public String toString() { | |
| StringBuilder sb = new StringBuilder(); | |
| sb.append("["); | |
| sb.append(offset); | |
| sb.append("; "); | |
| sb.append(length); | |
| sb.append("; "); | |
| for (int i = 0, iEnd = styleKeys.size(); i < iEnd; i++) { | |
| if (i != 0) { | |
| sb.append(", "); | |
| } | |
| sb.append(styleKeys.get(i)); | |
| } | |
| sb.append("]"); | |
| return sb.toString(); | |
| } | |
| } |