package com.pnikosis.html2markdown;
public class MDLine {
private int level = 0;
private MDLineType type;
private StringBuilder content;
public MDLine(MDLineType type, int level, String content) {
this.type = type;
this.level = level;
this.content = new StringBuilder(content);
}
public MDLine create(String line) {
int spaces = 0;
while ((spaces < line.length()) && (line.charAt(spaces) == ' ')) {
spaces++;
}
String content = line.substring(spaces);
int newLevel = spaces / 4;
if (content.length() > 0) {
if (content.matches("^[0-9]+\\.\\s.*")) {
int c = 0;
while ((c < content.length()) && (Character.isDigit(content.charAt(c)))) {
c++;
}
return new MDLine(MDLineType.Ordered, newLevel, content.substring(c + 2));
} else if (content.matches("^(\\*|\\+|\\-)\\s.*")) {
return new MDLine(MDLineType.Unordered, newLevel, content.substring(2));
} else if (content.matches("^[#]+.*")) {
int c = 0;
while ((c < content.length()) && (content.charAt(c) == '#')) {
c++;
}
MDLineType headerType;
switch (c) {
case 1:
headerType = MDLineType.Head1;
break;
case 2:
headerType = MDLineType.Head2;
break;
default:
headerType = MDLineType.Head3;
break;
}
while ((c < content.length()) && (content.charAt(c) == ' ')) {
c++;
}
return new MDLine(headerType, newLevel, content.substring(c));
}
}
content = line.substring(4 * newLevel);
return new MDLine(MDLineType.None, newLevel, content);
}
public MDLineType getListTypeName() {
return type;
}
public int getLevel() {
return level;
}
public void setLevel(int i) {
level = Math.max(i, 0);
}
public String toString() {
StringBuilder newLine = new StringBuilder();
for (int j = 0; j < getLevel(); j++) {
newLine.append(" ");
}
if (type.equals(MDLineType.Ordered)) {
newLine.append(String.valueOf(1)).append(". ");
} else if (type.equals(MDLineType.Unordered)) {
newLine.append("* ");
} else if (type.equals(MDLineType.Head1)) {
newLine.append("# ");
} else if (type.equals(MDLineType.Head2)) {
newLine.append("## ");
} else if (type.equals(MDLineType.Head3)) {
newLine.append("### ");
} else if (type.equals(MDLineType.HR)) {
newLine.append("----");
}
newLine.append(getContent());
return newLine.toString();
}
public String getContent() {
return content.toString();
}
public void append(String appendContent) {
if (content.length() == 0) {
int i = 0;
while (i < appendContent.length() && Character.isWhitespace(appendContent.charAt(i))) {
i++;
}
content.append(appendContent.substring(i));
} else {
content.append(appendContent);
}
}
@Override
public boolean equals(Object o) {
return o instanceof MDLine && ((MDLine) o).type.equals(this.type);
}
public boolean isList() {
return (type.equals(MDLineType.Ordered) || type.equals(MDLineType.Unordered));
}
public void setListType(MDLineType type2) {
type = type2;
}
public enum MDLineType {
Ordered, Unordered, None, Head1, Head2, Head3, HR
}
}