// Path: Source/MarkdownGenerator/src/main/java/net/steppschuh/markdowngenerator/text/Text.java
// public class Text extends MarkdownElement implements MarkdownCascadable {
// 
//     protected Object value;
// 
//     public Text(Object value) {
//         this.value = value;
//     }
// 
//     @Override
//     public String serialize() throws MarkdownSerializationException {
//         if (value == null) {
//             throw new MarkdownSerializationException("Value is null");
//         }
//         return getPredecessor() + value.toString() + getSuccessor();
//     }
// 
//     @Override
//     public String getPredecessor() {
//         return "";
//     }
// 
//     @Override
//     public String getSuccessor() {
//         return getPredecessor();
//     }
// 
//     public Object getValue() {
//         return value;
//     }
// 
//     public void setValue(Object value) {
//         this.value = value;
//         invalidateSerialized();
//     }
// 
// }
// 
// Path: Source/MarkdownGenerator/src/main/java/net/steppschuh/markdowngenerator/util/StringUtil.java
// public abstract class StringUtil {
// 
//     public static String fillUpAligned(String value, String fill, int length, int alignment) {
//         switch (alignment) {
//             case Table.ALIGN_RIGHT: {
//                 return fillUpRightAligned(value, fill, length);
//             }
//             case Table.ALIGN_CENTER: {
//                 return fillUpCenterAligned(value, fill, length);
//             }
//             default: {
//                 return fillUpLeftAligned(value, fill, length);
//             }
//         }
//     }
// 
//     public static String fillUpLeftAligned(String value, String fill, int length) {
//         if (value.length() >= length) {
//             return value;
//         }
//         while (value.length() < length) {
//             value += fill;
//         }
//         return value;
//     }
// 
//     public static String fillUpRightAligned(String value, String fill, int length) {
//         if (value.length() >= length) {
//             return value;
//         }
//         while (value.length() < length) {
//             value = fill + value;
//         }
//         return value;
//     }
// 
//     public static String fillUpCenterAligned(String value, String fill, int length) {
//         if (value.length() >= length) {
//             return value;
//         }
//         boolean left = true;
//         while (value.length() < length) {
//             if (left) {
//                 value = fillUpLeftAligned(value, fill, value.length() + 1);
//             } else {
//                 value = fillUpRightAligned(value, fill, value.length() + 1);
//             }
//             left = !left;
//         }
//         return value;
//     }
// 
//     public static String surroundValueWith(String value, String surrounding) {
//         return surrounding + value + surrounding;
//     }
// 
// }


import net.steppschuh.markdowngenerator.text.Text;
import net.steppschuh.markdowngenerator.util.StringUtil;
package net.steppschuh.markdowngenerator.text.heading;


/**
 * Created by steppschuh on 16/12/2016.
 */

public class Heading extends Text {

    public static final int MINIMUM_LEVEL = 1;
    public static final int MAXIMUM_LEVEL = 6;

    public static final char UNDERLINE_CHAR_1 = '=';
    public static final char UNDERLINE_CHAR_2 = '-';

    private int level;
    boolean underlineStyle = true;

    public Heading(Object value) {
        super(value);
        this.level = MINIMUM_LEVEL;
    }

    public Heading(Object value, int level) {
        super(value);
        this.level = level;
        trimLevel();
    }

    @Override
    public String getPredecessor() {
        if (underlineStyle && level < 3) {
            return "";
        }
// Path: Source/MarkdownGenerator/src/main/java/net/steppschuh/markdowngenerator/text/Text.java
// public class Text extends MarkdownElement implements MarkdownCascadable {
// 
//     protected Object value;
// 
//     public Text(Object value) {
//         this.value = value;
//     }
// 
//     @Override
//     public String serialize() throws MarkdownSerializationException {
//         if (value == null) {
//             throw new MarkdownSerializationException("Value is null");
//         }
//         return getPredecessor() + value.toString() + getSuccessor();
//     }
// 
//     @Override
//     public String getPredecessor() {
//         return "";
//     }
// 
//     @Override
//     public String getSuccessor() {
//         return getPredecessor();
//     }
// 
//     public Object getValue() {
//         return value;
//     }
// 
//     public void setValue(Object value) {
//         this.value = value;
//         invalidateSerialized();
//     }
// 
// }
// 
// Path: Source/MarkdownGenerator/src/main/java/net/steppschuh/markdowngenerator/util/StringUtil.java
// public abstract class StringUtil {
// 
//     public static String fillUpAligned(String value, String fill, int length, int alignment) {
//         switch (alignment) {
//             case Table.ALIGN_RIGHT: {
//                 return fillUpRightAligned(value, fill, length);
//             }
//             case Table.ALIGN_CENTER: {
//                 return fillUpCenterAligned(value, fill, length);
//             }
//             default: {
//                 return fillUpLeftAligned(value, fill, length);
//             }
//         }
//     }
// 
//     public static String fillUpLeftAligned(String value, String fill, int length) {
//         if (value.length() >= length) {
//             return value;
//         }
//         while (value.length() < length) {
//             value += fill;
//         }
//         return value;
//     }
// 
//     public static String fillUpRightAligned(String value, String fill, int length) {
//         if (value.length() >= length) {
//             return value;
//         }
//         while (value.length() < length) {
//             value = fill + value;
//         }
//         return value;
//     }
// 
//     public static String fillUpCenterAligned(String value, String fill, int length) {
//         if (value.length() >= length) {
//             return value;
//         }
//         boolean left = true;
//         while (value.length() < length) {
//             if (left) {
//                 value = fillUpLeftAligned(value, fill, value.length() + 1);
//             } else {
//                 value = fillUpRightAligned(value, fill, value.length() + 1);
//             }
//             left = !left;
//         }
//         return value;
//     }
// 
//     public static String surroundValueWith(String value, String surrounding) {
//         return surrounding + value + surrounding;
//     }
// 
// }


// Path: Source/MarkdownGenerator/src/main/java/net/steppschuh/markdowngenerator/text/heading/Heading.java
import net.steppschuh.markdowngenerator.text.Text;
import net.steppschuh.markdowngenerator.util.StringUtil;

package net.steppschuh.markdowngenerator.text.heading;


/**
 * Created by steppschuh on 16/12/2016.
 */

public class Heading extends Text {

    public static final int MINIMUM_LEVEL = 1;
    public static final int MAXIMUM_LEVEL = 6;

    public static final char UNDERLINE_CHAR_1 = '=';
    public static final char UNDERLINE_CHAR_2 = '-';

    private int level;
    boolean underlineStyle = true;

    public Heading(Object value) {
        super(value);
        this.level = MINIMUM_LEVEL;
    }

    public Heading(Object value, int level) {
        super(value);
        this.level = level;
        trimLevel();
    }

    @Override
    public String getPredecessor() {
        if (underlineStyle && level < 3) {
            return "";
        }
        return StringUtil.fillUpRightAligned("", "#", level) + " ";