This is the code i ended up with. The context is that i don't control the lines (so i can't use a regex - in don't know if i have all the input). I suppose to be sure i should employ a stringbuilder to concatenate the lines while they don't match the end of the "tag". boolean isMarkupStart = line.startsWith("\n***"); if (isMarkupStart) { isStart = line.contains(START_TAG); isEnd = line.contains(END_TAG); inTag = isStart || isEnd; } if (isInValidText && !inTag) { super.insertString(offset, line, attr); } //best i can do. If the string breaks exactly at *\n** //or something, i suppose this wil break horribly. if (inTag && line.endsWith("***")) { isInValidText = isStart && !isEnd; inTag = false; }