mirror of
https://github.com/amitwh/markdown-converter.git
synced 2026-08-02 18:10:18 +05:30
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dbe57d2fad | ||
|
|
9a45849003 | ||
|
|
dfb603c2ea | ||
|
|
fda173d9a1 | ||
|
|
5cbcfa466d | ||
|
|
edb163eab4 | ||
|
|
7b5165bcb1 | ||
|
|
bd38c5342d |
+378
@@ -0,0 +1,378 @@
|
|||||||
|
\hypertarget{panconverter}{%
|
||||||
|
\section{PanConverter}\label{panconverter}}
|
||||||
|
|
||||||
|
A cross-platform Markdown editor and converter powered by Pandoc.
|
||||||
|
|
||||||
|
\begin{figure}
|
||||||
|
\centering
|
||||||
|
\includegraphics{assets/icon.png}
|
||||||
|
\caption{PanConverter}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\hypertarget{features}{%
|
||||||
|
\subsection{Features}\label{features}}
|
||||||
|
|
||||||
|
\hypertarget{advanced-markdown-editor}{%
|
||||||
|
\subsubsection{✨ Advanced Markdown
|
||||||
|
Editor}\label{advanced-markdown-editor}}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\tightlist
|
||||||
|
\item
|
||||||
|
🗂️ \textbf{Tabbed Interface} - Work with multiple files simultaneously
|
||||||
|
in separate tabs
|
||||||
|
\item
|
||||||
|
📝 \textbf{Rich Text Editor} - Full-featured editor with syntax
|
||||||
|
highlighting and comprehensive toolbar
|
||||||
|
\item
|
||||||
|
🔍 \textbf{Find \& Replace} - Powerful search and replace with match
|
||||||
|
highlighting and navigation
|
||||||
|
\item
|
||||||
|
🔢 \textbf{Line Numbers} - Toggle line numbers for easier code editing
|
||||||
|
and navigation
|
||||||
|
\item
|
||||||
|
↩️ \textbf{Smart Auto-Indentation} - Automatic list continuation and
|
||||||
|
intelligent indentation
|
||||||
|
\item
|
||||||
|
⏪ \textbf{Undo/Redo} - Full undo/redo support with keyboard shortcuts
|
||||||
|
\item
|
||||||
|
⌨️ \textbf{Advanced Shortcuts} - Tab indentation, line selection, and
|
||||||
|
smart text formatting
|
||||||
|
\item
|
||||||
|
📂 \textbf{File Association Support} - Open markdown files directly
|
||||||
|
from file manager
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\hypertarget{themes-interface}{%
|
||||||
|
\subsubsection{🎨 Themes \& Interface}\label{themes-interface}}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\tightlist
|
||||||
|
\item
|
||||||
|
👁️ \textbf{Live Preview} - See your markdown rendered in real-time
|
||||||
|
with synchronized scrolling
|
||||||
|
\item
|
||||||
|
🎨 \textbf{Multiple Themes} - Choose from Light, Dark, Solarized,
|
||||||
|
Monokai, or GitHub themes
|
||||||
|
\item
|
||||||
|
💾 \textbf{Auto-Save} - Never lose your work with automatic saving
|
||||||
|
every 30 seconds
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\hypertarget{export-conversion}{%
|
||||||
|
\subsubsection{📤 Export \& Conversion}\label{export-conversion}}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\tightlist
|
||||||
|
\item
|
||||||
|
📄 \textbf{Enhanced PDF Export} - Robust PDF generation with multiple
|
||||||
|
LaTeX engine fallbacks (XeLaTeX, PDFLaTeX, wkhtmltopdf)
|
||||||
|
\item
|
||||||
|
📄 \textbf{Document Export} - Convert to HTML, DOCX, LaTeX, RTF, ODT,
|
||||||
|
EPUB, PowerPoint (PPTX), and OpenDocument Presentation (ODP)
|
||||||
|
\item
|
||||||
|
📊 \textbf{Spreadsheet Export} - Export markdown tables to Excel
|
||||||
|
(XLSX/XLS) and OpenDocument Spreadsheet (ODS) formats
|
||||||
|
\item
|
||||||
|
📥 \textbf{Document Import} - Import DOCX, ODT, RTF, HTML, PDF, and
|
||||||
|
presentation files to markdown
|
||||||
|
\item
|
||||||
|
📋 \textbf{Table Creation Helper} - Built-in table generator for easy
|
||||||
|
markdown table creation
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\hypertarget{platform-support}{%
|
||||||
|
\subsubsection{🖥️ Platform Support}\label{platform-support}}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\tightlist
|
||||||
|
\item
|
||||||
|
\textbf{Cross-Platform} - Works seamlessly on Windows, macOS, and
|
||||||
|
Linux
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\hypertarget{installation}{%
|
||||||
|
\subsection{Installation}\label{installation}}
|
||||||
|
|
||||||
|
\hypertarget{prerequisites}{%
|
||||||
|
\subsubsection{Prerequisites}\label{prerequisites}}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\tightlist
|
||||||
|
\item
|
||||||
|
\href{https://pandoc.org/installing.html}{Pandoc} must be installed
|
||||||
|
for export functionality
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\tightlist
|
||||||
|
\item
|
||||||
|
\textbf{Ubuntu/Debian}: \texttt{sudo\ apt-get\ install\ pandoc}
|
||||||
|
\item
|
||||||
|
\textbf{macOS}: \texttt{brew\ install\ pandoc}
|
||||||
|
\item
|
||||||
|
\textbf{Windows}: Download installer from Pandoc website
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\hypertarget{pdf-export-requirements}{%
|
||||||
|
\subsubsection{PDF Export Requirements}\label{pdf-export-requirements}}
|
||||||
|
|
||||||
|
For optimal PDF export, install a LaTeX engine (recommended): -
|
||||||
|
\textbf{Ubuntu/Debian}:
|
||||||
|
\texttt{sudo\ apt-get\ install\ texlive-xetex\ texlive-latex-base} -
|
||||||
|
\textbf{macOS}: \texttt{brew\ install\ -\/-cask\ mactex} -
|
||||||
|
\textbf{Windows}: Install MiKTeX or TeX Live - \textbf{Alternative}:
|
||||||
|
\texttt{sudo\ apt-get\ install\ wkhtmltopdf} (fallback option)
|
||||||
|
|
||||||
|
\hypertarget{download}{%
|
||||||
|
\subsubsection{Download}\label{download}}
|
||||||
|
|
||||||
|
Download the latest release for your platform from the
|
||||||
|
\href{https://github.com/amitwh/pan-converter/releases}{Releases} page.
|
||||||
|
|
||||||
|
\hypertarget{linux}{%
|
||||||
|
\paragraph{Linux}\label{linux}}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\tightlist
|
||||||
|
\item
|
||||||
|
\textbf{AppImage}: \texttt{PanConverter-1.3.1.AppImage} (universal,
|
||||||
|
may require \texttt{-\/-no-sandbox} flag)
|
||||||
|
\item
|
||||||
|
\textbf{Debian Package}: \texttt{pan-converter\_1.3.1\_amd64.deb}
|
||||||
|
\item
|
||||||
|
\textbf{Snap Package}: \texttt{pan-converter\_1.3.1\_amd64.snap}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\hypertarget{install-from-source}{%
|
||||||
|
\subsubsection{Install from Source}\label{install-from-source}}
|
||||||
|
|
||||||
|
\begin{Shaded}
|
||||||
|
\begin{Highlighting}[]
|
||||||
|
\FunctionTok{git}\NormalTok{ clone https://github.com/amitwh/pan{-}converter.git}
|
||||||
|
\BuiltInTok{cd}\NormalTok{ pan{-}converter}
|
||||||
|
\ExtensionTok{npm}\NormalTok{ install}
|
||||||
|
\ExtensionTok{npm}\NormalTok{ start}
|
||||||
|
\end{Highlighting}
|
||||||
|
\end{Shaded}
|
||||||
|
|
||||||
|
\hypertarget{usage}{%
|
||||||
|
\subsection{Usage}\label{usage}}
|
||||||
|
|
||||||
|
\hypertarget{basic-workflow}{%
|
||||||
|
\subsubsection{Basic Workflow}\label{basic-workflow}}
|
||||||
|
|
||||||
|
\begin{enumerate}
|
||||||
|
\def\labelenumi{\arabic{enumi}.}
|
||||||
|
\tightlist
|
||||||
|
\item
|
||||||
|
\textbf{Write} - Use the editor to write your Markdown content
|
||||||
|
\item
|
||||||
|
\textbf{Preview} - Toggle the preview pane to see rendered output
|
||||||
|
\item
|
||||||
|
\textbf{Theme} - Choose your preferred theme from the View menu
|
||||||
|
\item
|
||||||
|
\textbf{Export} - Export your document to various formats
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
\hypertarget{export-options}{%
|
||||||
|
\subsubsection{Export Options}\label{export-options}}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\tightlist
|
||||||
|
\item
|
||||||
|
\textbf{Documents}: HTML, PDF, DOCX, LaTeX, RTF, ODT, EPUB
|
||||||
|
\item
|
||||||
|
\textbf{Presentations}: PowerPoint (PPTX), OpenDocument Presentation
|
||||||
|
(ODP)
|
||||||
|
\item
|
||||||
|
\textbf{Spreadsheets}: Excel (XLSX/XLS), OpenDocument Spreadsheet
|
||||||
|
(ODS)
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\hypertarget{import-conversion}{%
|
||||||
|
\subsubsection{Import \& Conversion}\label{import-conversion}}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\tightlist
|
||||||
|
\item
|
||||||
|
\textbf{Import Documents}: Convert DOCX, ODT, RTF, HTML, PDF, and
|
||||||
|
presentation files to Markdown
|
||||||
|
\item
|
||||||
|
\textbf{Cross-Format Conversion}: Convert current file between
|
||||||
|
multiple formats
|
||||||
|
\item
|
||||||
|
\textbf{Smart Presentation Handling}: Automatic slide-level formatting
|
||||||
|
for PPTX/ODP exports
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\hypertarget{table-creation}{%
|
||||||
|
\subsubsection{Table Creation}\label{table-creation}}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\tightlist
|
||||||
|
\item
|
||||||
|
Click the table button in the toolbar
|
||||||
|
\item
|
||||||
|
Specify number of rows and columns
|
||||||
|
\item
|
||||||
|
Automatically generates properly formatted Markdown tables
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\hypertarget{keyboard-shortcuts}{%
|
||||||
|
\subsection{Keyboard Shortcuts}\label{keyboard-shortcuts}}
|
||||||
|
|
||||||
|
\hypertarget{file-operations}{%
|
||||||
|
\subsubsection{File Operations}\label{file-operations}}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\tightlist
|
||||||
|
\item
|
||||||
|
\texttt{Ctrl/Cmd\ +\ N} - New file/tab
|
||||||
|
\item
|
||||||
|
\texttt{Ctrl/Cmd\ +\ T} - New tab
|
||||||
|
\item
|
||||||
|
\texttt{Ctrl/Cmd\ +\ W} - Close current tab
|
||||||
|
\item
|
||||||
|
\texttt{Ctrl/Cmd\ +\ Tab} - Switch to next tab
|
||||||
|
\item
|
||||||
|
\texttt{Ctrl/Cmd\ +\ O} - Open file
|
||||||
|
\item
|
||||||
|
\texttt{Ctrl/Cmd\ +\ S} - Save file
|
||||||
|
\item
|
||||||
|
\texttt{Ctrl/Cmd\ +\ Shift\ +\ S} - Save as
|
||||||
|
\item
|
||||||
|
\texttt{Ctrl/Cmd\ +\ I} - Import document
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\hypertarget{editor-features}{%
|
||||||
|
\subsubsection{Editor Features}\label{editor-features}}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\tightlist
|
||||||
|
\item
|
||||||
|
\texttt{Ctrl/Cmd\ +\ F} - Find \& Replace
|
||||||
|
\item
|
||||||
|
\texttt{Ctrl/Cmd\ +\ Z} - Undo
|
||||||
|
\item
|
||||||
|
\texttt{Ctrl/Cmd\ +\ Shift\ +\ Z} - Redo
|
||||||
|
\item
|
||||||
|
\texttt{Tab} - Indent lines or insert 4 spaces
|
||||||
|
\item
|
||||||
|
\texttt{Shift\ +\ Tab} - Outdent selected lines
|
||||||
|
\item
|
||||||
|
\texttt{Enter} - Auto-continue lists with proper indentation
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\hypertarget{view-navigation}{%
|
||||||
|
\subsubsection{View \& Navigation}\label{view-navigation}}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\tightlist
|
||||||
|
\item
|
||||||
|
\texttt{Ctrl/Cmd\ +\ P} - Toggle preview
|
||||||
|
\item
|
||||||
|
\texttt{Ctrl/Cmd\ +\ Enter} - Toggle preview (alternative)
|
||||||
|
\item
|
||||||
|
\texttt{Escape} - Close find dialog
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\hypertarget{building}{%
|
||||||
|
\subsection{Building}\label{building}}
|
||||||
|
|
||||||
|
\begin{Shaded}
|
||||||
|
\begin{Highlighting}[]
|
||||||
|
\CommentTok{\# Install dependencies}
|
||||||
|
\ExtensionTok{npm}\NormalTok{ install}
|
||||||
|
|
||||||
|
\CommentTok{\# Generate icons}
|
||||||
|
\ExtensionTok{npm}\NormalTok{ run generate{-}icons}
|
||||||
|
|
||||||
|
\CommentTok{\# Build for current platform}
|
||||||
|
\ExtensionTok{npm}\NormalTok{ run build}
|
||||||
|
|
||||||
|
\CommentTok{\# Build for specific platform}
|
||||||
|
\ExtensionTok{npm}\NormalTok{ run build:win }\CommentTok{\# Windows}
|
||||||
|
\ExtensionTok{npm}\NormalTok{ run build:mac }\CommentTok{\# macOS }
|
||||||
|
\ExtensionTok{npm}\NormalTok{ run build:linux }\CommentTok{\# Linux (generates .deb, .AppImage, and .snap)}
|
||||||
|
|
||||||
|
\CommentTok{\# Build for all platforms}
|
||||||
|
\ExtensionTok{npm}\NormalTok{ run dist:all}
|
||||||
|
\end{Highlighting}
|
||||||
|
\end{Shaded}
|
||||||
|
|
||||||
|
\hypertarget{version-history}{%
|
||||||
|
\subsection{Version History}\label{version-history}}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\tightlist
|
||||||
|
\item
|
||||||
|
\textbf{v1.3.1} - Bug fixes: Fixed file associations for
|
||||||
|
double-clicking .md files, corrected 50/50 layout alignment for
|
||||||
|
editor/preview panes
|
||||||
|
\item
|
||||||
|
\textbf{v1.3.0} - Major update: Tabbed interface for multiple files,
|
||||||
|
enhanced PDF export with LaTeX engines, fixed file associations,
|
||||||
|
removed redundant converter menu, improved UI architecture
|
||||||
|
\item
|
||||||
|
\textbf{v1.2.1} - Comprehensive editor enhancements: Find \& Replace,
|
||||||
|
Line Numbers, Undo/Redo, Auto-indentation, PowerPoint export, document
|
||||||
|
conversion menu, table creation helper, spreadsheet export
|
||||||
|
\item
|
||||||
|
\textbf{v1.1.0} - Added Excel/ODS spreadsheet export, updated author
|
||||||
|
information, renamed to PanConverter
|
||||||
|
\item
|
||||||
|
\textbf{v1.0.0} - Initial release with basic markdown editing, themes,
|
||||||
|
and Pandoc export
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\hypertarget{known-issues}{%
|
||||||
|
\subsection{Known Issues}\label{known-issues}}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\tightlist
|
||||||
|
\item
|
||||||
|
AppImage may require \texttt{-\/-no-sandbox} flag on some Linux
|
||||||
|
systems
|
||||||
|
\item
|
||||||
|
Windows/Mac builds require platform-specific build environments
|
||||||
|
\item
|
||||||
|
Large files may cause performance issues
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\hypertarget{contributing}{%
|
||||||
|
\subsection{Contributing}\label{contributing}}
|
||||||
|
|
||||||
|
Contributions are welcome! Please feel free to submit a Pull Request to
|
||||||
|
the \href{https://github.com/amitwh/pan-converter}{GitHub repository}.
|
||||||
|
|
||||||
|
\hypertarget{license}{%
|
||||||
|
\subsection{License}\label{license}}
|
||||||
|
|
||||||
|
MIT License - see LICENSE file for details.
|
||||||
|
|
||||||
|
\hypertarget{author}{%
|
||||||
|
\subsection{Author}\label{author}}
|
||||||
|
|
||||||
|
\textbf{Amit Haridas} -
|
||||||
|
\href{mailto:amit.wh@gmail.com}{\nolinkurl{amit.wh@gmail.com}}
|
||||||
|
|
||||||
|
\hypertarget{acknowledgments}{%
|
||||||
|
\subsection{Acknowledgments}\label{acknowledgments}}
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\tightlist
|
||||||
|
\item
|
||||||
|
Built with \href{https://www.electronjs.org/}{Electron}
|
||||||
|
\item
|
||||||
|
Markdown parsing by \href{https://marked.js.org/}{marked}
|
||||||
|
\item
|
||||||
|
Export functionality powered by \href{https://pandoc.org/}{Pandoc}
|
||||||
|
\item
|
||||||
|
Syntax highlighting by \href{https://highlightjs.org/}{highlight.js}
|
||||||
|
\item
|
||||||
|
Spreadsheet export by \href{https://www.npmjs.com/package/xlsx}{XLSX}
|
||||||
|
\item
|
||||||
|
HTML sanitization by
|
||||||
|
\href{https://www.npmjs.com/package/dompurify}{DOMPurify}
|
||||||
|
\end{itemize}
|
||||||
@@ -50,9 +50,9 @@ For optimal PDF export, install a LaTeX engine (recommended):
|
|||||||
Download the latest release for your platform from the [Releases](https://github.com/amitwh/pan-converter/releases) page.
|
Download the latest release for your platform from the [Releases](https://github.com/amitwh/pan-converter/releases) page.
|
||||||
|
|
||||||
#### Linux
|
#### Linux
|
||||||
- **AppImage**: `PanConverter-1.3.0.AppImage` (universal, may require `--no-sandbox` flag)
|
- **AppImage**: `PanConverter-1.3.1.AppImage` (universal, may require `--no-sandbox` flag)
|
||||||
- **Debian Package**: `pan-converter_1.3.0_amd64.deb`
|
- **Debian Package**: `pan-converter_1.3.1_amd64.deb`
|
||||||
- **Snap Package**: `pan-converter_1.3.0_amd64.snap`
|
- **Snap Package**: `pan-converter_1.3.1_amd64.snap`
|
||||||
|
|
||||||
### Install from Source
|
### Install from Source
|
||||||
```bash
|
```bash
|
||||||
@@ -133,6 +133,7 @@ npm run dist:all
|
|||||||
|
|
||||||
## Version History
|
## Version History
|
||||||
|
|
||||||
|
- **v1.3.1** - Bug fixes: Fixed file associations for double-clicking .md files, corrected 50/50 layout alignment for editor/preview panes
|
||||||
- **v1.3.0** - Major update: Tabbed interface for multiple files, enhanced PDF export with LaTeX engines, fixed file associations, removed redundant converter menu, improved UI architecture
|
- **v1.3.0** - Major update: Tabbed interface for multiple files, enhanced PDF export with LaTeX engines, fixed file associations, removed redundant converter menu, improved UI architecture
|
||||||
- **v1.2.1** - Comprehensive editor enhancements: Find & Replace, Line Numbers, Undo/Redo, Auto-indentation, PowerPoint export, document conversion menu, table creation helper, spreadsheet export
|
- **v1.2.1** - Comprehensive editor enhancements: Find & Replace, Line Numbers, Undo/Redo, Auto-indentation, PowerPoint export, document conversion menu, table creation helper, spreadsheet export
|
||||||
- **v1.1.0** - Added Excel/ODS spreadsheet export, updated author information, renamed to PanConverter
|
- **v1.1.0** - Added Excel/ODS spreadsheet export, updated author information, renamed to PanConverter
|
||||||
|
|||||||
BIN
Binary file not shown.
+17
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "pan-converter",
|
"name": "pan-converter",
|
||||||
"version": "1.3.0",
|
"version": "1.3.2",
|
||||||
"description": "Cross-platform Markdown editor and converter using Pandoc",
|
"description": "Cross-platform Markdown editor and converter using Pandoc",
|
||||||
"main": "src/main.js",
|
"main": "src/main.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -47,6 +47,22 @@
|
|||||||
"node_modules/**/*",
|
"node_modules/**/*",
|
||||||
"package.json"
|
"package.json"
|
||||||
],
|
],
|
||||||
|
"fileAssociations": [
|
||||||
|
{
|
||||||
|
"ext": "md",
|
||||||
|
"name": "Markdown Document",
|
||||||
|
"description": "Markdown Document",
|
||||||
|
"mimeType": "text/markdown",
|
||||||
|
"role": "Editor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ext": "markdown",
|
||||||
|
"name": "Markdown Document",
|
||||||
|
"description": "Markdown Document",
|
||||||
|
"mimeType": "text/markdown",
|
||||||
|
"role": "Editor"
|
||||||
|
}
|
||||||
|
],
|
||||||
"mac": {
|
"mac": {
|
||||||
"category": "public.app-category.productivity",
|
"category": "public.app-category.productivity",
|
||||||
"icon": "assets/icon.icns"
|
"icon": "assets/icon.icns"
|
||||||
|
|||||||
+8
-5
@@ -171,7 +171,7 @@ function createMenu() {
|
|||||||
type: 'info',
|
type: 'info',
|
||||||
title: 'About PanConverter',
|
title: 'About PanConverter',
|
||||||
message: 'PanConverter',
|
message: 'PanConverter',
|
||||||
detail: 'A cross-platform Markdown editor and converter using Pandoc.\n\nVersion: 1.3.0\nAuthor: Amit Haridas\nEmail: amit.wh@gmail.com\nLicense: MIT\n\nFeatures:\n• Tabbed interface for multiple files\n• Advanced markdown editing with live preview\n• Enhanced PDF export with LaTeX engines\n• Find & replace with match highlighting\n• Line numbers and auto-indentation\n• Export to multiple formats via Pandoc\n• PowerPoint & presentation export\n• Export tables to Excel/ODS spreadsheets\n• Document import & conversion\n• Table creation helper\n• Multiple themes support\n• Undo/redo functionality',
|
detail: 'A cross-platform Markdown editor and converter using Pandoc.\n\nVersion: 1.3.2\nAuthor: Amit Haridas\nEmail: amit.wh@gmail.com\nLicense: MIT\n\nFeatures:\n• Tabbed interface for multiple files\n• Advanced markdown editing with live preview\n• Enhanced PDF export with LaTeX engines\n• File association support for .md files\n• Improved preview typography and spacing\n• Find & replace with match highlighting\n• Line numbers and auto-indentation\n• Export to multiple formats via Pandoc\n• PowerPoint & presentation export\n• Export tables to Excel/ODS spreadsheets\n• Document import & conversion\n• Table creation helper\n• Multiple themes support\n• Undo/redo functionality',
|
||||||
buttons: ['OK']
|
buttons: ['OK']
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -453,10 +453,13 @@ app.whenReady().then(() => {
|
|||||||
createWindow();
|
createWindow();
|
||||||
|
|
||||||
// Handle file association on app startup
|
// Handle file association on app startup
|
||||||
if (process.argv.length > 1) {
|
// Process all command line arguments except the first two (node and script path)
|
||||||
const filePath = process.argv.find(arg => arg.endsWith('.md') || arg.endsWith('.markdown'));
|
const fileArgs = process.argv.slice(2);
|
||||||
if (filePath && fs.existsSync(filePath)) {
|
for (const arg of fileArgs) {
|
||||||
openFileFromPath(filePath);
|
if ((arg.endsWith('.md') || arg.endsWith('.markdown')) && fs.existsSync(arg)) {
|
||||||
|
// Store the file to open after window is ready
|
||||||
|
app.pendingFile = arg;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
+103
-47
@@ -152,8 +152,39 @@ body {
|
|||||||
.pane {
|
.pane {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
min-width: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.pane:first-child {
|
||||||
|
border-right: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.editor-textarea {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
padding: 20px;
|
||||||
|
font-family: 'SF Mono', Monaco, 'Courier New', monospace;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 1.6;
|
||||||
|
border: none;
|
||||||
|
outline: none;
|
||||||
|
resize: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pane:last-child {
|
||||||
|
padding: 0;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview-content {
|
||||||
|
max-width: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 20px 24px 24px 24px;
|
||||||
|
line-height: 1.6;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Legacy support for old selectors */
|
||||||
#editor-pane {
|
#editor-pane {
|
||||||
border-right: 1px solid #ddd;
|
border-right: 1px solid #ddd;
|
||||||
}
|
}
|
||||||
@@ -192,31 +223,33 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Preview Styles */
|
/* Preview Styles */
|
||||||
#preview h1, #preview h2, #preview h3, #preview h4, #preview h5, #preview h6 {
|
#preview h1, #preview h2, #preview h3, #preview h4, #preview h5, #preview h6,
|
||||||
|
.preview-content h1, .preview-content h2, .preview-content h3, .preview-content h4, .preview-content h5, .preview-content h6 {
|
||||||
margin-top: 24px;
|
margin-top: 24px;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
line-height: 1.25;
|
line-height: 1.25;
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview h1 {
|
#preview h1, .preview-content h1 {
|
||||||
font-size: 2em;
|
font-size: 2em;
|
||||||
border-bottom: 1px solid #eaecef;
|
border-bottom: 1px solid #eaecef;
|
||||||
padding-bottom: 0.3em;
|
padding-bottom: 0.3em;
|
||||||
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview h2 {
|
#preview h2, .preview-content h2 {
|
||||||
font-size: 1.5em;
|
font-size: 1.5em;
|
||||||
border-bottom: 1px solid #eaecef;
|
border-bottom: 1px solid #eaecef;
|
||||||
padding-bottom: 0.3em;
|
padding-bottom: 0.3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview p {
|
#preview p, .preview-content p {
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview code {
|
#preview code, .preview-content code {
|
||||||
padding: 0.2em 0.4em;
|
padding: 0.2em 0.4em;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-size: 85%;
|
font-size: 85%;
|
||||||
@@ -225,7 +258,7 @@ body {
|
|||||||
font-family: 'SF Mono', Monaco, 'Courier New', monospace;
|
font-family: 'SF Mono', Monaco, 'Courier New', monospace;
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview pre {
|
#preview pre, .preview-content pre {
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
font-size: 85%;
|
font-size: 85%;
|
||||||
@@ -235,7 +268,7 @@ body {
|
|||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview pre code {
|
#preview pre code, .preview-content pre code {
|
||||||
display: inline;
|
display: inline;
|
||||||
max-width: auto;
|
max-width: auto;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
@@ -247,54 +280,54 @@ body {
|
|||||||
border: 0;
|
border: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview blockquote {
|
#preview blockquote, .preview-content blockquote {
|
||||||
padding: 0 1em;
|
padding: 0 1em;
|
||||||
color: #6a737d;
|
color: #6a737d;
|
||||||
border-left: 0.25em solid #dfe2e5;
|
border-left: 0.25em solid #dfe2e5;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview ul, #preview ol {
|
#preview ul, #preview ol, .preview-content ul, .preview-content ol {
|
||||||
padding-left: 2em;
|
padding-left: 2em;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview li {
|
#preview li, .preview-content li {
|
||||||
margin-bottom: 4px;
|
margin-bottom: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview a {
|
#preview a, .preview-content a {
|
||||||
color: #0366d6;
|
color: #0366d6;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview a:hover {
|
#preview a:hover, .preview-content a:hover {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview img {
|
#preview img, .preview-content img {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
height: auto;
|
height: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview table {
|
#preview table, .preview-content table {
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview table th,
|
#preview table th, #preview table td,
|
||||||
#preview table td {
|
.preview-content table th, .preview-content table td {
|
||||||
padding: 6px 13px;
|
padding: 6px 13px;
|
||||||
border: 1px solid #dfe2e5;
|
border: 1px solid #dfe2e5;
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview table th {
|
#preview table th, .preview-content table th {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
background-color: #f6f8fa;
|
background-color: #f6f8fa;
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview table tr:nth-child(2n) {
|
#preview table tr:nth-child(2n), .preview-content table tr:nth-child(2n) {
|
||||||
background-color: #f6f8fa;
|
background-color: #f6f8fa;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -356,6 +389,20 @@ body.theme-dark .toolbar-separator {
|
|||||||
background: #3e3e42;
|
background: #3e3e42;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.theme-dark .pane:first-child {
|
||||||
|
border-right-color: #3e3e42;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.theme-dark .editor-textarea {
|
||||||
|
background: #1e1e1e;
|
||||||
|
color: #d4d4d4;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.theme-dark .pane:last-child {
|
||||||
|
background: #1e1e1e;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Legacy support */
|
||||||
body.theme-dark #editor-pane {
|
body.theme-dark #editor-pane {
|
||||||
border-right-color: #3e3e42;
|
border-right-color: #3e3e42;
|
||||||
}
|
}
|
||||||
@@ -369,42 +416,42 @@ body.theme-dark #preview-pane {
|
|||||||
background: #252526;
|
background: #252526;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-dark #preview {
|
body.theme-dark #preview, body.theme-dark .preview-content {
|
||||||
color: #d4d4d4;
|
color: #d4d4d4;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-dark #preview h1,
|
body.theme-dark #preview h1, body.theme-dark #preview h2,
|
||||||
body.theme-dark #preview h2 {
|
body.theme-dark .preview-content h1, body.theme-dark .preview-content h2 {
|
||||||
border-bottom-color: #3e3e42;
|
border-bottom-color: #3e3e42;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-dark #preview code {
|
body.theme-dark #preview code, body.theme-dark .preview-content code {
|
||||||
background-color: rgba(255,255,255,0.1);
|
background-color: rgba(255,255,255,0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-dark #preview pre {
|
body.theme-dark #preview pre, body.theme-dark .preview-content pre {
|
||||||
background-color: #2d2d30;
|
background-color: #2d2d30;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-dark #preview blockquote {
|
body.theme-dark #preview blockquote, body.theme-dark .preview-content blockquote {
|
||||||
color: #808080;
|
color: #808080;
|
||||||
border-left-color: #3e3e42;
|
border-left-color: #3e3e42;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-dark #preview a {
|
body.theme-dark #preview a, body.theme-dark .preview-content a {
|
||||||
color: #569cd6;
|
color: #569cd6;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-dark #preview table th,
|
body.theme-dark #preview table th, body.theme-dark #preview table td,
|
||||||
body.theme-dark #preview table td {
|
body.theme-dark .preview-content table th, body.theme-dark .preview-content table td {
|
||||||
border-color: #3e3e42;
|
border-color: #3e3e42;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-dark #preview table th {
|
body.theme-dark #preview table th, body.theme-dark .preview-content table th {
|
||||||
background-color: #2d2d30;
|
background-color: #2d2d30;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-dark #preview table tr:nth-child(2n) {
|
body.theme-dark #preview table tr:nth-child(2n), body.theme-dark .preview-content table tr:nth-child(2n) {
|
||||||
background-color: #2d2d30;
|
background-color: #2d2d30;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -439,19 +486,19 @@ body.theme-solarized #editor {
|
|||||||
color: #657b83;
|
color: #657b83;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-solarized #preview {
|
body.theme-solarized #preview, body.theme-solarized .preview-content {
|
||||||
color: #586e75;
|
color: #586e75;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-solarized #preview code {
|
body.theme-solarized #preview code, body.theme-solarized .preview-content code {
|
||||||
background-color: #eee8d5;
|
background-color: #eee8d5;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-solarized #preview pre {
|
body.theme-solarized #preview pre, body.theme-solarized .preview-content pre {
|
||||||
background-color: #eee8d5;
|
background-color: #eee8d5;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-solarized #preview a {
|
body.theme-solarized #preview a, body.theme-solarized .preview-content a {
|
||||||
color: #268bd2;
|
color: #268bd2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -484,29 +531,29 @@ body.theme-monokai #preview-pane {
|
|||||||
background: #272822;
|
background: #272822;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-monokai #preview {
|
body.theme-monokai #preview, body.theme-monokai .preview-content {
|
||||||
color: #f8f8f2;
|
color: #f8f8f2;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-monokai #preview h1,
|
body.theme-monokai #preview h1, body.theme-monokai #preview h2,
|
||||||
body.theme-monokai #preview h2 {
|
body.theme-monokai .preview-content h1, body.theme-monokai .preview-content h2 {
|
||||||
border-bottom-color: #75715e;
|
border-bottom-color: #75715e;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-monokai #preview code {
|
body.theme-monokai #preview code, body.theme-monokai .preview-content code {
|
||||||
background-color: #3e3d32;
|
background-color: #3e3d32;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-monokai #preview pre {
|
body.theme-monokai #preview pre, body.theme-monokai .preview-content pre {
|
||||||
background-color: #3e3d32;
|
background-color: #3e3d32;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-monokai #preview blockquote {
|
body.theme-monokai #preview blockquote, body.theme-monokai .preview-content blockquote {
|
||||||
color: #75715e;
|
color: #75715e;
|
||||||
border-left-color: #75715e;
|
border-left-color: #75715e;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-monokai #preview a {
|
body.theme-monokai #preview a, body.theme-monokai .preview-content a {
|
||||||
color: #66d9ef;
|
color: #66d9ef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -541,29 +588,29 @@ body.theme-github #editor {
|
|||||||
color: #24292e;
|
color: #24292e;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-github #preview {
|
body.theme-github #preview, body.theme-github .preview-content {
|
||||||
color: #24292e;
|
color: #24292e;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-github #preview h1,
|
body.theme-github #preview h1, body.theme-github #preview h2,
|
||||||
body.theme-github #preview h2 {
|
body.theme-github .preview-content h1, body.theme-github .preview-content h2 {
|
||||||
border-bottom-color: #eaecef;
|
border-bottom-color: #eaecef;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-github #preview code {
|
body.theme-github #preview code, body.theme-github .preview-content code {
|
||||||
background-color: rgba(27,31,35,0.05);
|
background-color: rgba(27,31,35,0.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-github #preview pre {
|
body.theme-github #preview pre, body.theme-github .preview-content pre {
|
||||||
background-color: #f6f8fa;
|
background-color: #f6f8fa;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-github #preview blockquote {
|
body.theme-github #preview blockquote, body.theme-github .preview-content blockquote {
|
||||||
color: #6a737d;
|
color: #6a737d;
|
||||||
border-left-color: #dfe2e5;
|
border-left-color: #dfe2e5;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.theme-github #preview a {
|
body.theme-github #preview a, body.theme-github .preview-content a {
|
||||||
color: #0366d6;
|
color: #0366d6;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -574,6 +621,15 @@ body.theme-github .status-bar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Hide preview pane by default */
|
/* Hide preview pane by default */
|
||||||
|
.pane.hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pane.full-width {
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Legacy support */
|
||||||
#preview-pane.hidden {
|
#preview-pane.hidden {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user