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 : 1 px
}
< / 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
}
}