// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.codec.util;

import it.unimi.dsi.fastutil.chars.CharArrayList;
import it.unimi.dsi.fastutil.ints.IntArrayList;
import javax.annotation.Nullable;

public class Documentation
{
    public static String stripMarkdown(@Nullable final String markdown) {
        if (markdown == null) {
            return null;
        }
        final StringBuilder output = new StringBuilder();
        final IntArrayList counts = new IntArrayList();
        final CharArrayList expectedChars = new CharArrayList();
        for (int i = 0; i < markdown.length(); ++i) {
            final char c = markdown.charAt(i);
            switch (c) {
                case '*':
                case '_': {
                    final int start = i;
                    final boolean isEnding = start >= 1 && !Character.isWhitespace(markdown.charAt(start - 1));
                    if (isEnding && (expectedChars.isEmpty() || expectedChars.getChar(expectedChars.size() - 1) != c)) {
                        output.append(markdown.charAt(i));
                        break;
                    }
                    for (int targetCount = (!counts.isEmpty() && isEnding) ? counts.getInt(counts.size() - 1) : -1; i < markdown.length() && markdown.charAt(i) == c && i - start != targetCount; ++i) {}
                    final int matchingCount = i - start;
                    if (!counts.isEmpty() && counts.getInt(counts.size() - 1) == matchingCount) {
                        if (!isEnding) {
                            output.append(String.valueOf(c).repeat(matchingCount));
                            break;
                        }
                        counts.removeInt(counts.size() - 1);
                        expectedChars.removeChar(expectedChars.size() - 1);
                    }
                    else {
                        if (i < markdown.length() && Character.isWhitespace(markdown.charAt(i))) {
                            output.append(String.valueOf(c).repeat(matchingCount));
                            output.append(markdown.charAt(i));
                            break;
                        }
                        counts.add(matchingCount);
                        expectedChars.add(c);
                    }
                    --i;
                    break;
                }
                default: {
                    output.append(c);
                    break;
                }
            }
        }
        if (!counts.isEmpty()) {
            throw new IllegalArgumentException("Unbalanced markdown formatting");
        }
        return output.toString();
    }
}
