1 ///////////////////////////////////////////////////////////////////////////////////////////////
2 // checkstyle: Checks Java source code and other text files for adherence to a set of rules.
3 // Copyright (C) 2001-2025 the original author or authors.
4 //
5 // This library is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU Lesser General Public
7 // License as published by the Free Software Foundation; either
8 // version 2.1 of the License, or (at your option) any later version.
9 //
10 // This library is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 // Lesser General Public License for more details.
14 //
15 // You should have received a copy of the GNU Lesser General Public
16 // License along with this library; if not, write to the Free Software
17 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 ///////////////////////////////////////////////////////////////////////////////////////////////
19
20 package com.puppycrawl.tools.checkstyle.checks.javadoc;
21
22 /**
23 * Used to keep track of a tag and the text that follows it.
24 *
25 */
26 class HtmlTag {
27
28 /** The maximum length of text to display with this tag. */
29 private static final int MAX_TEXT_LEN = 60;
30
31 /** The HTML tag name. */
32 private final String id;
33
34 /** The line number in the source file where this tag was found. */
35 private final int lineNo;
36
37 /** The position within the line where this tag was found. */
38 private final int position;
39
40 /** The comment line of text where this tag appears. */
41 private final String text;
42
43 /** If this tag is self-closed. */
44 private final boolean closedTag;
45
46 /** If the tag is incomplete. */
47 private final boolean incompleteTag;
48
49 /**
50 * Construct the HtmlTag.
51 *
52 * @param id the HTML tag name.
53 * @param lineNo the source line number of this tag.
54 * @param position the position within the text of this tag.
55 * @param closedTag if this tag is self-closed (XHTML style)
56 * @param incomplete is the tag is incomplete.
57 * @param text the line of comment text for this tag.
58 */
59 /* package */ HtmlTag(String id, int lineNo, int position, boolean closedTag,
60 boolean incomplete, String text) {
61 this.id = id;
62 this.lineNo = lineNo;
63 this.position = position;
64 this.text = text;
65 this.closedTag = closedTag;
66 incompleteTag = incomplete;
67 }
68
69 /**
70 * Returns the id (name) of this tag.
71 *
72 * @return a String id.
73 */
74 public String getId() {
75 return id;
76 }
77
78 /**
79 * Indicates if this tag is a close (end) tag.
80 *
81 * @return {@code true} is this is a close tag.
82 */
83 public boolean isCloseTag() {
84 return position != text.length() - 1 && text.charAt(position + 1) == '/';
85 }
86
87 /**
88 * Indicates if this tag is a self-closed XHTML style.
89 *
90 * @return {@code true} is this is a self-closed tag.
91 */
92 public boolean isClosedTag() {
93 return closedTag;
94 }
95
96 /**
97 * Indicates if this tag is incomplete (has no close >).
98 *
99 * @return {@code true} if the tag is incomplete.
100 */
101 public boolean isIncompleteTag() {
102 return incompleteTag;
103 }
104
105 /**
106 * Returns the source line number where this tag was found.
107 * Used for displaying a Checkstyle violation.
108 *
109 * @return an int line number.
110 */
111 public int getLineNo() {
112 return lineNo;
113 }
114
115 /**
116 * Returns the position with in the comment line where this tag
117 * was found. Used for displaying a Checkstyle violation.
118 *
119 * @return an int relative to zero.
120 */
121 public int getPosition() {
122 return position;
123 }
124
125 @Override
126 public String toString() {
127 return "HtmlTag[id='" + id + '\''
128 + ", lineNo=" + lineNo
129 + ", position=" + position
130 + ", text='" + text + '\''
131 + ", closedTag=" + closedTag
132 + ", incompleteTag=" + incompleteTag + ']';
133 }
134
135 /**
136 * Returns the comment line of text where this tag appears.
137 *
138 * @return text of the tag
139 */
140 public String getText() {
141 final int startOfText = position;
142 final int endOfText = Math.min(startOfText + MAX_TEXT_LEN, text.length());
143 return text.substring(startOfText, endOfText);
144 }
145
146 }