MintHTML/Form1.cs

234 lines
7.9 KiB
C#
Raw Normal View History

2024-05-11 23:20:06 -07:00
using CefSharp;
using CefSharp.WinForms;
2024-05-11 16:00:45 -07:00
namespace MintHTML
{
public partial class Form1 : Form
{
2024-05-13 12:24:30 -07:00
ChromiumWebBrowser chromiumWebBrowser1;
string appdata = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
2024-05-12 16:05:39 -07:00
string markfile;
string htmlfile = "<h1>Welcome to MintHTML</h1><p>Open a markdown file and press \"Render preview\" to see the output here.</p>";
string csssuffix = @"
div{
font-family: monospace;
background-color: #F3F3F3;
border: solid;
border-width: 1px
}
</style>";
string css;
// Custom functions
private void convert()
{
htmlfile = "";
using (StringReader reader = new StringReader(markfile))
{
string line;
while ((line = reader.ReadLine()) != null)
{
2024-05-13 12:24:30 -07:00
// Header 1
2024-05-12 16:05:39 -07:00
if (line.Contains("# "))
{
line = "<h1>" + line[1..] + "</h1>";
}
2024-05-13 12:24:30 -07:00
// Header 2
else if (line.Contains("## "))
{
line = "<h2>" + line[1..] + "</h2>";
}
// Header 3
else if (line.Contains("### "))
{
line = "<h3>" + line[1..] + "</h3>";
}
// Header 4
else if (line.Contains("#### "))
{
line = "<h4>" + line[1..] + "</h4>";
}
// Header 5
else if (line.Contains("##### "))
{
line = "<h5>" + line[1..] + "</h5>";
}
// Header 6
else if (line.Contains("###### "))
{
line = "<h6>" + line[1..] + "</h6>";
}
// Code block
2024-05-12 16:05:39 -07:00
else if (line.Contains("`"))
{
line = "<div>" + line[1..^1] + "</div>";
}
2024-05-13 12:24:30 -07:00
// Everything else (Possibly paragraph or HTML code)
2024-05-12 16:05:39 -07:00
else
{
line = line + "<br>";
}
htmlfile += line;
}
}
}
// Custom functions end
2024-05-13 12:24:30 -07:00
2024-05-11 16:00:45 -07:00
public Form1()
{
2024-05-13 12:24:30 -07:00
if (File.Exists(appdata + "/SweeZero/MintHTML/RootCache/lockfile"))
{
if (MessageBox.Show("There is another instance of MintHTML running. If there isn't, press Yes to try opening anyways.","Cef Warning",MessageBoxButtons.YesNo,MessageBoxIcon.Warning) == DialogResult.Yes)
{
try
{
File.Delete(appdata + "/SweeZero/MintHTML/RootCache/lockfile");
} catch (Exception ex) {
MessageBox.Show(ex.Message, "Cef Error (fatal)", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
var settings = new CefSettings()
{
RootCachePath = appdata + "/SweeZero/MintHTML/RootCache",
LogFile = appdata + "/SweeZero/MintHTML/CefSharp.log",
LogSeverity = LogSeverity.Default
};
Cef.Initialize(settings);
chromiumWebBrowser1 = new ChromiumWebBrowser();
chromiumWebBrowser1.LoadingStateChanged += chromiumWebBrowser1_LoadingStateChanged;
chromiumWebBrowser1.Dock = DockStyle.Fill;
2024-05-11 16:00:45 -07:00
InitializeComponent();
2024-05-13 12:24:30 -07:00
groupBox4.Controls.Add(chromiumWebBrowser1);
chromiumWebBrowser1.BringToFront();
css = @"<style>
html{
font-family: sans-serif
}" + csssuffix;
chromiumWebBrowser1.LoadHtml(css + htmlfile);
2024-05-11 16:00:45 -07:00
}
2024-05-11 16:12:18 -07:00
2024-05-11 16:41:08 -07:00
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("MintHTML is a simple Markdown converter and renderer made by SweeZero.", "About", MessageBoxButtons.OK);
}
private void button2_Click(object sender, EventArgs e)
{
Opener.ShowDialog();
textBox2.Text = Opener.FileName;
2024-05-12 16:05:39 -07:00
if (textBox2.Text.Length > 0)
{
markfile = File.ReadAllText(textBox2.Text);
convert();
chromiumWebBrowser1.LoadHtml(css + htmlfile);
}
}
private void Form1_Load(object sender, EventArgs e)
{
2024-05-11 16:41:08 -07:00
}
2024-05-12 16:05:39 -07:00
private void button3_Click(object sender, EventArgs e)
2024-05-11 16:41:08 -07:00
{
2024-05-12 16:42:49 -07:00
Saver.FileName = textBox2.Text.Split("\\").Last()[0..^3] + ".html";
DialogResult result = Saver.ShowDialog();
if (result == DialogResult.OK)
{
if (MessageBox.Show("Do you want to keep the current CSS settings?","Converter",MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes)
{
convert();
File.WriteAllText(Saver.FileName,css + htmlfile);
} else {
convert();
File.WriteAllText(Saver.FileName, htmlfile);
}
MessageBox.Show("Save complete.","Converter",MessageBoxButtons.OK,MessageBoxIcon.Information);
chromiumWebBrowser1.LoadHtml(css + htmlfile);
}
2024-05-11 23:20:06 -07:00
}
2024-05-12 16:05:39 -07:00
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
2024-05-11 23:20:06 -07:00
{
2024-05-12 16:05:39 -07:00
Cef.Shutdown();
}
2024-05-11 23:20:06 -07:00
2024-05-12 16:05:39 -07:00
private void chromiumWebBrowser1_LoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
{
this.Invoke(new Action(() => progressBar1.Visible = chromiumWebBrowser1.IsLoading));
2024-05-13 12:24:30 -07:00
this.Invoke(new Action(() => progressBar1.Style = ProgressBarStyle.Marquee));
2024-05-11 23:20:06 -07:00
}
2024-05-12 16:05:39 -07:00
private void openDevToolsToolStripMenuItem_Click_1(object sender, EventArgs e)
2024-05-11 23:20:06 -07:00
{
2024-05-12 16:05:39 -07:00
chromiumWebBrowser1.ShowDevTools();
2024-05-11 23:20:06 -07:00
}
2024-05-12 16:05:39 -07:00
private void button4_Click(object sender, EventArgs e)
{
try
{
markfile = File.ReadAllText(textBox2.Text);
convert();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
chromiumWebBrowser1.LoadHtml(css + htmlfile);
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
button3.Enabled = textBox2.Text.Length > 0;
button4.Enabled = textBox2.Text.Length > 0;
}
private void serifToolStripMenuItem_Click(object sender, EventArgs e)
{
css = @"<style>
html{
font-family: serif
}" + csssuffix;
sansSerifToolStripMenuItem.Checked = false;
forceMonospaceToolStripMenuItem.Checked = false;
serifToolStripMenuItem.Checked = true;
chromiumWebBrowser1.LoadHtml(css + htmlfile);
}
private void groupBox4_Enter(object sender, EventArgs e)
2024-05-11 23:20:06 -07:00
{
2024-05-11 16:41:08 -07:00
}
2024-05-12 16:05:39 -07:00
private void sansSerifToolStripMenuItem_Click(object sender, EventArgs e)
{
css = @"<style>
html{
font-family: sans-serif
}" + csssuffix;
sansSerifToolStripMenuItem.Checked = true;
forceMonospaceToolStripMenuItem.Checked = false;
serifToolStripMenuItem.Checked = false;
chromiumWebBrowser1.LoadHtml(css + htmlfile);
}
private void forceMonospaceToolStripMenuItem_Click(object sender, EventArgs e)
{
css = @"<style>
html{
font-family: monospace
}" + csssuffix;
sansSerifToolStripMenuItem.Checked = false;
forceMonospaceToolStripMenuItem.Checked = true;
serifToolStripMenuItem.Checked = false;
chromiumWebBrowser1.LoadHtml(css + htmlfile);
}
2024-05-11 16:00:45 -07:00
}
}