// Path: src/main/java/io/github/bonigarcia/dualsub/util/Charset.java
// public class Charset {
// 
// 	public static String ISO88591 = "ISO-8859-1";
// 	public static String UTF8 = "UTF-8";
// 
// 	private static Charset singleton = null;
// 
// 	private UniversalDetector detector;
// 
// 	public Charset() {
// 		detector = new UniversalDetector(null);
// 	}
// 
// 	public static Charset getSingleton() {
// 		if (singleton == null) {
// 			singleton = new Charset();
// 		}
// 		return singleton;
// 	}
// 
// 	public static String detect(String file) throws IOException {
// 		InputStream inputStream = Thread.currentThread()
// 				.getContextClassLoader().getResourceAsStream(file);
// 		if (inputStream == null) {
// 			inputStream = new BufferedInputStream(new FileInputStream(file));
// 		}
// 		return Charset.detect(inputStream);
// 	}
// 
// 	public static String detect(InputStream inputStream) throws IOException {
// 		UniversalDetector detector = Charset.getSingleton()
// 				.getCharsetDetector();
// 		byte[] buf = new byte[4096];
// 		int nread;
// 		while ((nread = inputStream.read(buf)) > 0 && !detector.isDone()) {
// 			detector.handleData(buf, 0, nread);
// 		}
// 		detector.dataEnd();
// 		String encoding = detector.getDetectedCharset();
// 		detector.reset();
// 		inputStream.close();
// 		if (encoding == null) {
// 			// If none encoding is detected, we assume UTF-8
// 			encoding = UTF8;
// 		}
// 		return encoding;
// 	}
// 
// 	public UniversalDetector getCharsetDetector() {
// 		return detector;
// 	}
// 
// }
// 
// Path: src/main/java/io/github/bonigarcia/dualsub/util/I18N.java
// public class I18N {
// 
// 	public static final String MESSAGES = "lang/messages";
// 
// 	public static final String HTML_INIT_TAG = "<html><font face='Lucid'>";
// 
// 	public static final String HTML_END_TAG = "</font></html>";
// 
// 	public enum Html {
// 		LINK, BOLD, MONOSPACE
// 	}
// 
// 	private static I18N singleton = null;
// 
// 	private Locale locale;
// 
// 	public I18N() {
// 		this.locale = Locale.getDefault();
// 	}
// 
// 	public static I18N getSingleton() {
// 		if (singleton == null) {
// 			singleton = new I18N();
// 		}
// 		return singleton;
// 	}
// 
// 	public static String getHtmlText(String key, Html html) {
// 		String out = HTML_INIT_TAG;
// 		switch (html) {
// 		case LINK:
// 			out += "<a href='#'>" + getText(key) + "</a>";
// 			break;
// 		case BOLD:
// 			out += "<b><u>" + getText(key) + "</u></b>";
// 			break;
// 		case MONOSPACE:
// 			out += "<pre>" + getText(key) + "</pre>";
// 			break;
// 		default:
// 			out += getText(key);
// 			break;
// 		}
// 		out += HTML_END_TAG;
// 		return out;
// 	}
// 
// 	public static String getHtmlText(String key) {
// 		return HTML_INIT_TAG + getText(key) + HTML_END_TAG;
// 	}
// 
// 	public static String getText(String key) {
// 		return ResourceBundle.getBundle(MESSAGES, getLocale()).getString(key);
// 	}
// 
// 	public static Locale getLocale() {
// 		return I18N.getSingleton().locale;
// 	}
// 
// 	public static void setLocale(String locale) {
// 		I18N.getSingleton().locale = new Locale(locale);
// 	}
// 
// 	public static void setLocale(Locale locale) {
// 		I18N.getSingleton().locale = locale;
// 	}
// 
// }


import io.github.bonigarcia.dualsub.util.Charset;
import io.github.bonigarcia.dualsub.util.I18N;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import org.markdown4j.Markdown4jProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

	public AboutDialog(DualSub parent, boolean modal) {
		super(parent.getFrame(), modal);
		this.parent = parent;
		initComponents();

		Runnable doScroll = new Runnable() {
			public void run() {
				scrollPane.getVerticalScrollBar().setValue(0);
				scrollChangelog.getVerticalScrollBar().setValue(0);
				scrollLicense.getVerticalScrollBar().setValue(0);
			}
		};
		SwingUtilities.invokeLater(doScroll);
	}

	public void setVisible() {
		final int width = 500;
		final int height = 430;
		this.setBounds(100, 100, width, height);
		Point point = parent.getFrame().getLocationOnScreen();
		Dimension size = parent.getFrame().getSize();
		this.setLocation(
				(int) (point.getX() + ((size.getWidth() - width) / 2)),
				(int) (point.getY() + ((size.getHeight() - height) / 2)));
		setVisible(true);
	}

	private void initComponents() {
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
// Path: src/main/java/io/github/bonigarcia/dualsub/util/Charset.java
// public class Charset {
// 
// 	public static String ISO88591 = "ISO-8859-1";
// 	public static String UTF8 = "UTF-8";
// 
// 	private static Charset singleton = null;
// 
// 	private UniversalDetector detector;
// 
// 	public Charset() {
// 		detector = new UniversalDetector(null);
// 	}
// 
// 	public static Charset getSingleton() {
// 		if (singleton == null) {
// 			singleton = new Charset();
// 		}
// 		return singleton;
// 	}
// 
// 	public static String detect(String file) throws IOException {
// 		InputStream inputStream = Thread.currentThread()
// 				.getContextClassLoader().getResourceAsStream(file);
// 		if (inputStream == null) {
// 			inputStream = new BufferedInputStream(new FileInputStream(file));
// 		}
// 		return Charset.detect(inputStream);
// 	}
// 
// 	public static String detect(InputStream inputStream) throws IOException {
// 		UniversalDetector detector = Charset.getSingleton()
// 				.getCharsetDetector();
// 		byte[] buf = new byte[4096];
// 		int nread;
// 		while ((nread = inputStream.read(buf)) > 0 && !detector.isDone()) {
// 			detector.handleData(buf, 0, nread);
// 		}
// 		detector.dataEnd();
// 		String encoding = detector.getDetectedCharset();
// 		detector.reset();
// 		inputStream.close();
// 		if (encoding == null) {
// 			// If none encoding is detected, we assume UTF-8
// 			encoding = UTF8;
// 		}
// 		return encoding;
// 	}
// 
// 	public UniversalDetector getCharsetDetector() {
// 		return detector;
// 	}
// 
// }
// 
// Path: src/main/java/io/github/bonigarcia/dualsub/util/I18N.java
// public class I18N {
// 
// 	public static final String MESSAGES = "lang/messages";
// 
// 	public static final String HTML_INIT_TAG = "<html><font face='Lucid'>";
// 
// 	public static final String HTML_END_TAG = "</font></html>";
// 
// 	public enum Html {
// 		LINK, BOLD, MONOSPACE
// 	}
// 
// 	private static I18N singleton = null;
// 
// 	private Locale locale;
// 
// 	public I18N() {
// 		this.locale = Locale.getDefault();
// 	}
// 
// 	public static I18N getSingleton() {
// 		if (singleton == null) {
// 			singleton = new I18N();
// 		}
// 		return singleton;
// 	}
// 
// 	public static String getHtmlText(String key, Html html) {
// 		String out = HTML_INIT_TAG;
// 		switch (html) {
// 		case LINK:
// 			out += "<a href='#'>" + getText(key) + "</a>";
// 			break;
// 		case BOLD:
// 			out += "<b><u>" + getText(key) + "</u></b>";
// 			break;
// 		case MONOSPACE:
// 			out += "<pre>" + getText(key) + "</pre>";
// 			break;
// 		default:
// 			out += getText(key);
// 			break;
// 		}
// 		out += HTML_END_TAG;
// 		return out;
// 	}
// 
// 	public static String getHtmlText(String key) {
// 		return HTML_INIT_TAG + getText(key) + HTML_END_TAG;
// 	}
// 
// 	public static String getText(String key) {
// 		return ResourceBundle.getBundle(MESSAGES, getLocale()).getString(key);
// 	}
// 
// 	public static Locale getLocale() {
// 		return I18N.getSingleton().locale;
// 	}
// 
// 	public static void setLocale(String locale) {
// 		I18N.getSingleton().locale = new Locale(locale);
// 	}
// 
// 	public static void setLocale(Locale locale) {
// 		I18N.getSingleton().locale = locale;
// 	}
// 
// }


// Path: src/main/java/io/github/bonigarcia/dualsub/gui/AboutDialog.java
import io.github.bonigarcia.dualsub.util.Charset;
import io.github.bonigarcia.dualsub.util.I18N;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import org.markdown4j.Markdown4jProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


	public AboutDialog(DualSub parent, boolean modal) {
		super(parent.getFrame(), modal);
		this.parent = parent;
		initComponents();

		Runnable doScroll = new Runnable() {
			public void run() {
				scrollPane.getVerticalScrollBar().setValue(0);
				scrollChangelog.getVerticalScrollBar().setValue(0);
				scrollLicense.getVerticalScrollBar().setValue(0);
			}
		};
		SwingUtilities.invokeLater(doScroll);
	}

	public void setVisible() {
		final int width = 500;
		final int height = 430;
		this.setBounds(100, 100, width, height);
		Point point = parent.getFrame().getLocationOnScreen();
		Dimension size = parent.getFrame().getSize();
		this.setLocation(
				(int) (point.getX() + ((size.getWidth() - width) / 2)),
				(int) (point.getY() + ((size.getHeight() - height) / 2)));
		setVisible(true);
	}

	private void initComponents() {
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		setTitle(I18N.getText("Window.name.text"));