AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Markdown preview
Goto page 1, 2  Next
 
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian)
View previous topic :: View next topic  
Author Message
Skif_off



Joined: 20 Oct 2013
Posts: 707

PostPosted: Sun May 03, 2015 12:40 am    Post subject: Markdown preview Reply with quote

Вариантов, собственно, найдено два: Pandoc и MultiMarkdown.

Первый много чего ещё умеет, но pandoc.exe размером 37,9 Мб (хотя и неплохо ужимается UPX до 7,2) и есть параметр --from= с вариантами для Markdown в частности:
Code:
markdown          (pandoc’s extended markdown)
markdown_strict   (original unextended markdown)
markdown_phpextra (PHP Markdown Extra extended markdown)
markdown_github   (github extended markdown)

Что не очень удобно, т.к. нужно выбирать.

У второго - вывод только в консоль (начинался с Markdown.pl, как понял) и только содрежимое <body></body>.
Обы предпочитают на входе-выходе UTF-8.

Есть ли альтернативы? Что-то видел на JScript, но не понял, как пользоваться.

-------------
Вариант скрипта для MultiMarkdown (пока без комментариев)

смотрите ниже


Добавлено:
Добавлена проверка существования файла, если -browser в команде есть, а браузера нет.

Добавлено:
Убран ключ -c (compatibility mode), иначе не все фичи срабатывают (например, на Github).

Добавлено:
Выпилено
Code:
<style type="text/css">code{white-space: pre;}</style>


Last edited by Skif_off on Thu Aug 27, 2015 4:28 pm; edited 4 times in total
Back to top
View user's profile Send private message
Cuprum



Joined: 28 Sep 2011
Posts: 306

PostPosted: Tue May 05, 2015 8:19 pm    Post subject: Reply with quote

Skif_off
Правильно ли я понял, что предпросмотр выводится в отдельном окне браузера?
Back to top
View user's profile Send private message
Skif_off



Joined: 20 Oct 2013
Posts: 707

PostPosted: Tue May 05, 2015 9:24 pm    Post subject: Reply with quote

Cuprum
Типа как в AkelPadDocsView.js? Тогда нет, либо указанный полноценный браузер, либо ишак.
Back to top
View user's profile Send private message
Cuprum



Joined: 28 Sep 2011
Posts: 306

PostPosted: Thu May 07, 2015 7:46 pm    Post subject: Reply with quote

Skif_off
Попробовал, работает Smile.
Но почему-то не показывает картинки, внедренные в markdown-файл.

Посмотрел еще варианты.
Есть marked. Он под node.js. Если на машине установлена node, наверное, можно как-то прикрутить.
Есть discount. Он на Си. Тут сказать нечего...
Лично я пользуюсь предпросмотром markdown в Brackets. Сделан в виде стороннего палагина. Очень удобно: окно редактора поделено на 2 области. В одной сам текст файла, в другой предпросмотр. "Живой" показ всех изменений + синхронизация скроллинга.

Вот что-то бы подобное для Акела, была бы бомба!
Back to top
View user's profile Send private message
Skif_off



Joined: 20 Oct 2013
Posts: 707

PostPosted: Thu May 07, 2015 9:10 pm    Post subject: Reply with quote

Cuprum wrote:
Но почему-то не показывает картинки, внедренные в markdown-файл.

Можно пример файла?
Cuprum wrote:
Есть discount. Он на Си. Тут сказать нечего...

Мне тоже нечего Smile Не удалось найти скомпилированную версию.

Brackets неприлично большой Smile MarkdownPad вроде тоже так умеет.
Back to top
View user's profile Send private message
Cuprum



Joined: 28 Sep 2011
Posts: 306

PostPosted: Thu May 07, 2015 9:49 pm    Post subject: Reply with quote

Skif_off
Quote:
Можно пример файла?

По коду там просто. Указано в файле
Code:
![forked](img/forked.png)

А рядом с md-файлом папка img, в которой рисунок forked.png.

Quote:
Brackets неприлично большой

Если его использовать только как редактор для md - да, тяжеловат.
Back to top
View user's profile Send private message
Skif_off



Joined: 20 Oct 2013
Posts: 707

PostPosted: Thu May 07, 2015 11:58 pm    Post subject: Reply with quote

Cuprum wrote:
А рядом с md-файлом папка img, в которой рисунок forked.png

А HTML-код правильный получается? Временный файл создаётся в %Temp%, относительные пути не сработают. Надо подумать о замене пути на абсолютный.
Back to top
View user's profile Send private message
Skif_off



Joined: 20 Oct 2013
Posts: 707

PostPosted: Fri May 08, 2015 5:54 pm    Post subject: Reply with quote

Замена относительного пути не тривиальна, оптимально - генерить *.html рядом с *.md, но как потом удалять?
Back to top
View user's profile Send private message
Skif_off



Joined: 20 Oct 2013
Posts: 707

PostPosted: Tue Jul 07, 2015 3:21 pm    Post subject: Reply with quote

Brackets и MarkdownPad неприлично велики, Atom ещё и тормозной, Sublime Text не интересен, онлайн неудобно по разным причинам (не помню, что ещё есть, показывающее предпросмотр). За сим, закончил комплект, если кому интересно: MarkdownPreview.js, упомянутый выше MultiMarkdown и MarkdownPreview (написано на AutoIt, скомпилировано в 3.3.8.1 +исходники для 3.3.8.1 и 3.3.12.0). Иконки отдельно, удобно заменить на свои, синхронизации скроллинга нет, ибо нет идеи Smile

MarkdownPreview.js

Code:
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=28787#28787
//
// Version: 2015-08-27
//
// -"" 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, по умолчанию - удалять
//
// Сохранить в UTF-16LE

// Пути к утилитам
var pMultiMarkdown   = "%a\\AkelFiles\\Tools\\MarkdownPreview\\multimarkdown.exe"
var pMarkdownPreview = "%a\\AkelFiles\\Tools\\MarkdownPreview\\MarkdownPreview.exe"

var pAkelFilesDir = AkelPad.GetAkelDir();
var nArg1         = AkelPad.GetArgValue("file", "");
var nArg2         = AkelPad.GetArgValue("browser", "");
var nArg3         = AkelPad.GetArgValue("del", 1);
var pTextRange    = AkelPad.GetTextRange(0, -1, 2);
var WshShell      = new ActiveXObject("WScript.Shell");
var fso           = new ActiveXObject("Scripting.FileSystemObject");
var pTextStart    = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /><meta name=\"generator\" content=\"MultiMarkdown\" /><title>Markdown Preview</title></head><body>"
var pTextEnd      = "</body></html>"
var pTempMDFile;
var pTempHTMLFile;

if (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 1049 /*Russian*/)
  sTxtTextError = "Не найдена утилита MultiMarkdown!";
else
  sTxtTextError = "MultiMarkdown not found!";

pMultiMarkdown = pMultiMarkdown.replace("%a", pAkelFilesDir);
pMarkdownPreview = pMarkdownPreview.replace("%a", pAkelFilesDir);

if (! fso.FileExists(pMultiMarkdown))
{
  WshShell.Popup(sTxtTextError, 5, "MarkdownPreview", 0+16);
  WScript.Quit();
}

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(pTempHTMLFile, pTextStart + "\n", -1, 65001, false);
AkelPad.WriteFile(pTempMDFile, pTextRange, -1, 65001, false);

AkelPad.Exec("%ComSpec% /c chcp 65001 & \"" + pMultiMarkdown + "\" \"" + pTempMDFile + "\">> \"" + pTempHTMLFile + "\"", "", 1, 0);

AkelPad.WriteFile(pTempHTMLFile, "\n" + pTextEnd, -1, 65001, false, 0x2);

if (nArg2 && fso.FileExists(nArg2))
  AkelPad.Exec(nArg2 + " " + pTempHTMLFile, "", 1);
else if (fso.FileExists(pMarkdownPreview))
  AkelPad.Exec("\"" + pMarkdownPreview + "\" " + nArg3 + " \"" + pTempHTMLFile + "\"");
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 Thu Aug 27, 2015 6:27 pm; edited 5 times in total
Back to top
View user's profile Send private message
Skif_off



Joined: 20 Oct 2013
Posts: 707

PostPosted: Thu Aug 20, 2015 2:00 pm    Post subject: Reply with quote

MarkdownPreview.js обновлён с учётом нескольких расширений для файлов Markdown (сам не столкнулся - вылетело из головы).
Back to top
View user's profile Send private message
yozhic



Joined: 20 Jun 2011
Posts: 134
Location: Электросталь

PostPosted: Wed Aug 26, 2015 11:10 am    Post subject: Reply with quote

multimarkdown.exe (а также md.coder) некорректно обрабатывают ```, принятые в markdown на GitHub' е. Например, вот в этом readme.md после обработки пропадает (улетает в code class) строчка
Code:
/usr/libexec/PlistBuddy -c “print” ~/Library/Preferences/com.adobe.CSXS.5.plist
Back to top
View user's profile Send private message
Skif_off



Joined: 20 Oct 2013
Posts: 707

PostPosted: Wed Aug 26, 2015 1:14 pm    Post subject: Reply with quote

yozhic
Не нашёл допустимость синтаксиса
Code:
```text```

в манах Code blocks так пишут:
Code:
```
text
```

Pandoc переваривает, однако.

Ниже блок
Code:
   ```
   Dict {
      PlayerDebugMode = 1
      LogLevel = 1
   }
   ```

(с отступами в начале строки) MultiMarkdown не переваривает, как оказалось, если добавить пустую строку перед - тогда переваривает. Любопытно, если правильно понял - в манах это рекомендация, а не правило.

Обратите внимание на строки 58-63: гитхаб сам косячит.

Написал автору.

______
По md.coder: по идее достаточно добавить в фолдинг
Code:
;585=1+8+64+512
585   1   ${VAR}   0   "```"      "```"      ""

но см. выше.
Back to top
View user's profile Send private message
yozhic



Joined: 20 Jun 2011
Posts: 134
Location: Электросталь

PostPosted: Wed Aug 26, 2015 1:42 pm    Post subject: Reply with quote

Skif_off
Quote:
Не нашёл допустимость синтаксиса

В манах нет, но по факту парсится. Значит есть Smile
Quote:
если добавить пустую строку перед - тогда переваривает

Может просто совпадение. Это ж не просто Markdown, а GitHub Flavored Markdown. MultiMarkdown может о нём и не знать.
Quote:
добавить в фолдинг

Там не только фолдинг, но ещё и подсветка. У меня весь текст после ``` до конца файла красно-корчневым красится.
Back to top
View user's profile Send private message
Skif_off



Joined: 20 Oct 2013
Posts: 707

PostPosted: Wed Aug 26, 2015 1:51 pm    Post subject: Reply with quote

yozhic wrote:
Там не только фолдинг, но ещё и подсветка. У меня весь текст после ``` до конца файла красно-корчневым красится.

Дело именно в правиле фолдинга, обратите внимание: в правиле задан Color text - ${VAR}. Cuprum заглядывает, подождём, когда скорректирует или добавьте правило сами.
yozhic wrote:
Это ж не просто Markdown, а GitHub Flavored Markdown. MultiMarkdown может о нём и не знать.

Отличий не так уж и много, не справляется с
Code:
~~Mistaken text.~~

и, конечно, с подсветкой синтаксиса

Code:
```ruby
require 'redcarpet'
markdown = Redcarpet.new("Hello World!")
puts markdown.to_html
```
.
Остальное вроде работает.
Back to top
View user's profile Send private message
yozhic



Joined: 20 Jun 2011
Posts: 134
Location: Электросталь

PostPosted: Wed Aug 26, 2015 2:02 pm    Post subject: Reply with quote

Quote:
добавьте правило сами

Да, всё чётко. Прошу прощения, сразу не посмотрел, всё впопыхах, да впопыхах Confused
Quote:
не справляется только

С этим тоже не справляется:
Code:
```text```

усылает такое в class.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group