Первый много чего ещё умеет, но pandoc.exe размером 37,9 Мб (хотя и неплохо ужимается UPX до 7,2) и есть параметр --from= с вариантами для Markdown в частности:
Skif_off
Попробовал, работает .
Но почему-то не показывает картинки, внедренные в markdown-файл.
Посмотрел еще варианты.
Есть marked. Он под node.js. Если на машине установлена node, наверное, можно как-то прикрутить.
Есть discount. Он на Си. Тут сказать нечего...
Лично я пользуюсь предпросмотром markdown в Brackets. Сделан в виде стороннего палагина. Очень удобно: окно редактора поделено на 2 области. В одной сам текст файла, в другой предпросмотр. "Живой" показ всех изменений + синхронизация скроллинга.
Brackets и MarkdownPad неприлично велики, Atom ещё и тормозной, Sublime Text не интересен, онлайн неудобно по разным причинам (не помню, что ещё есть, показывающее предпросмотр). За сим, закончил комплект, если кому интересно: MarkdownPreview.js, упомянутый выше MultiMarkdown и MarkdownPreview (написано на AutoIt, скомпилировано в 3.3.8.1 +исходники для 3.3.8.1 и 3.3.12.0). Иконки отдельно, удобно заменить на свои, синхронизации скроллинга нет, ибо нет идеи
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=28787#p28787
//
// Version: 2016-03-28
//
// -"" Call("Scripts::Main", 1, "MarkdownPreview.js", `-file="%f" -browser=path -del=0/1`)
// параметры (не обязательны):
// -file="%f" - имя текущего файла, если нет - временные md- и html-файлы
// создаются не рядом, а в %Temp%, но в таком случае не будут показаны
// изображения, если в md-файле используются относительные пути;
// -browser=path - путь к браузеру, если нет - используется MarkdownPreview.exe;
// -del=0/1 - удалять (1) или не удалять (0) временные md- и html-файлы
// после закрытия MarkdownPreview.exe, по умолчанию - удалять
// (пока только с MarkdownPreview.exe)
//
// Сохранить в UTF-16LE
// Пути к утилитам
var pMultiMarkdown = "%a\\AkelFiles\\Tools\\MarkdownPreview\\multimarkdown.exe"
var pMarkdownPreview = "%a\\AkelFiles\\Tools\\MarkdownPreview\\MarkdownPreview.exe"
var hMainWnd = AkelPad.GetMainWnd();
var pAkelFilesDir = AkelPad.GetAkelDir();
var nArg1 = AkelPad.GetArgValue("file", "");
var nArg2 = AkelPad.GetArgValue("browser", "");
var nArg3 = AkelPad.GetArgValue("del", 1);
var WshShell = new ActiveXObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var pTextRange;
var sTxtTextError;
var pTempMDFile;
var pTempHTMLFile;
pTextRange = AkelPad.GetSelText(2);
if (! pTextRange.length > 0)
pTextRange = AkelPad.GetTextRange(0, -1, 2);
if (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 1049 /*Russian*/)
sTxtTextError = "Не найдена утилита MultiMarkdown! Проверьте путь в pMultiMarkdown.";
else
sTxtTextError = "MultiMarkdown not found! Check path into pMultiMarkdown.";
pMultiMarkdown = pMultiMarkdown.replace(/^%a(?=\\)/, pAkelFilesDir);
pMarkdownPreview = pMarkdownPreview.replace(/^%a(?=\\)/, pAkelFilesDir);
if (! fso.FileExists(pMultiMarkdown))
{
AkelPad.MessageBox(hMainWnd, sTxtTextError, WScript.ScriptName, 48 /*MB_ICONWARNING*/);
WScript.Quit();
}
// Strikethrough text: "~~text~~" => ""<strike>text</strike>"
//pTextRange = pTextRange.replace(/(~~)([^~]+)(~~)/g, '<strike>$2</strike>')
if (nArg1)
{
pTempMDFile = nArg1 + "-temp.md";
pTempHTMLFile = nArg1 + "-temp.html";
}
else
{
pTempMDFile = WshShell.ExpandEnvironmentStrings("%Temp%") + "\\temp.md";
pTempHTMLFile = WshShell.ExpandEnvironmentStrings("%Temp%") + "\\temp.html";
}
AkelPad.WriteFile(pTempMDFile, pTextRange, -1, 65001, false);
AkelPad.Exec("\"" + pMultiMarkdown + "\" --batch --full \"" + pTempMDFile + "\" --output=\"" + pTempHTMLFile + "\"", "", 1, 0);
if (nArg2 && fso.FileExists(nArg2))
AkelPad.Exec(nArg2 + " " + pTempHTMLFile, "", 1);
else if (fso.FileExists(pMarkdownPreview))
AkelPad.Exec("\"" + pMarkdownPreview + "\" " + nArg3 + " \"" + pTempHTMLFile + "\" \"" + pAkelFilesDir + "\\AkelPad.exe\"");
else
AkelPad.Exec(WshShell.ExpandEnvironmentStrings("%ProgramFiles%") + "\\Internet Explorer\\iexplore.exe " + pTempHTMLFile, "", 1);
Необходимо проверить путь к multimarkdown.exe и MarkdownPreview.exe, предполагается, что лежат в AkelFiles\Tools\MarkdownPreview. MarkdownPreview сохраняет размер и положение окна в ini-файле с именем exe'шника, имя не задано жёстко, вполне можно переименовать оба файла.
Ключ -browser оставлен на всякий случай, неудобен, т.к. пока не решено, как отследить завершение и удалить временные md- и html-файлы (как контролировать закрытие процесса/окна (окна AkelPad для простоты?) в JScript пока не разбирался, возможно, получится повесить чистку на MarkdownPreview.exe и в этом случае)
Добавлено:
Пара правок в комментариях (напоминалка для ишака и ТС), в MarkdownPreview пропустил директиву #NoTrayIcon - ссылка обновлена. Добавлено:
Скрипт в комплекте обновлён - ссылка обновлена.
Last edited by Skif_off on Mon Mar 28, 2016 5:13 pm, edited 11 times in total.
multimarkdown.exe (а также md.coder) некорректно обрабатывают ```, принятые в markdown на GitHub' е. Например, вот в этом readme.md после обработки пропадает (улетает в code class) строчка
(с отступами в начале строки) MultiMarkdown не переваривает, как оказалось, если добавить пустую строку перед - тогда переваривает. Любопытно, если правильно понял - в манах это рекомендация, а не правило.
Обратите внимание на строки 58-63: гитхаб сам косячит.
yozhic wrote:Там не только фолдинг, но ещё и подсветка. У меня весь текст после ``` до конца файла красно-корчневым красится.
Дело именно в правиле фолдинга, обратите внимание: в правиле задан Color text - ${VAR}. Cuprum заглядывает, подождём, когда скорректирует или добавьте правило сами.
yozhic wrote:Это ж не просто Markdown, а GitHub Flavored Markdown. MultiMarkdown может о нём и не знать.