in src/main/kotlin/com/jetbrains/plugin/jtreg/util/JTRegTagParser.kt [39:98]
fun parseTags(header: PsiComment): Result {
var text = header.text
if (text.length <= 2) return Result(emptyMap())
text = text.dropLast(2)
val tags: MutableList<Tag> = ArrayList()
var start = -1
var end = -1
var tagStart = -1
var tagEnd = -1
var tagName: String? = null
val tagText = StringBuilder()
val prefix = if (header.tokenType is IJavaElementType) 2 else 3
val lines = text.substring(prefix).split("\n".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
var pos = header.textOffset + prefix
for (line in lines) {
if (line.replace("[*\\s]+".toRegex(), "").isEmpty()) {
pos += line.length + 1
continue
}
val m = TAG_PATTERN.matcher(line)
if (m.find()) {
if (tagName != null) {
tags.add(Tag(start, pos, tagStart, tagEnd, tagName, tagText.toString()))
tagText.delete(0, tagText.length)
}
tagName = m.group(1)
start = pos
tagStart = pos + m.start()
tagEnd = pos + m.end(1)
tagText.append(line.substring(m.end()))
} else if (tagName != null) {
val asterisk = line.indexOf('*')
tagText.append(line.substring(asterisk + 1))
}
pos += line.length + 1
if (tagName != null) {
end = pos
}
}
if (tagName != null) {
tags.add(Tag(start, end, tagStart, tagEnd, tagName, tagText.toString()))
}
val result: MutableMap<String, List<Tag>> = HashMap()
for (tag in tags) {
val innerTags = result.getOrDefault(tag.name, emptyList())
result[tag.name] = innerTags + tag
}
return JTRegTagParser.Result(result)
}