博客园编辑器自带的那个Markdown编辑器可以生成目录吗

当前位置: >
>MWeb:基于Markdown静态博客生成工具
网站详情来源:
收录时间:
名称: MWeb:基于Markdown静态博客生成工具
英文网址:
中文网址:
MWeb是一款基于MAC系统的专业 Markdown 写作、记笔记、静态博客生成软件,它所能做的事绝对让你物有所值,既是一款 Markdown编辑器,也是一款静态博客生成工具,使用Mac电脑的用户不是试试看。
MWeb for Mac 功能特色:
1、界面简洁高效、功能强大:全面支持 Github Flavored Markdown 语法如 TOC、Table、Fenced code block、LaTex、Task lists、Footnote 等。
2、原生的 OS X 应用:MWeb 是原生的 OS X 应用,原生的应用运行速度更快,系统结合更完美,带来更好的写作体验!支持黑色主题、Typewriter Scrolling 写作模式。还支持拖拽或粘贴插入和附件,首创的在编辑器内直接显示本地图片的功能,很好的解决了 Markdown 写作时必须在预览才能看到图片的问题。
为了提高 LaTex 公式的写作体验,MWeb 增加了在编辑器内实时预览 LaTex 公式的功能,非常好用。另外还有边编辑边预览写作模式、大纲视图等非常实用的功能。
3、外部模式:除了能直接打开 Markdown 文档外,MWeb 还增加了外部模式,外部模式能引入文件夹以方便管理文档。在外部模式中,把本地硬盘或 Dropbox 等网盘的文件夹拖入 MWeb 即可使用文档管理和全文搜寻功能。引入文件夹内的文档还支持拖拽或粘贴以插入图片和附件,并可以设定图片和附件保存的位置。用菜单:视图-打开外部模式 或 CMD + E 即可打开外部模式
4、Hexo、Jekyll 等支持:另外 MWeb 还对 Hexo、Octpress、Jekyll 等静态做了优化,以方便插入图片和实时预览。
5、导出为多种格式:支持导出带目录的 PDF,带代码高亮的 HTML,图片,RTF 和 docx。
6、发布功能:支持发布/更新到 Wordrpess 博客、支持 Metaweblog API 的博客服务、、Evernote 和印象笔记、Blogger、Medium、Tumblr。
7、图床功能:目前支持把本地图片一键上传到:Google Photos、imgur、七牛云存储和自定义图床上传服务。
8、文档库模式:除了外部模式外,为了方便地记笔记和生成静态网站,MWeb 做了文档库模式。文档库模式用分类树管理文档,一个文档可以设置为属于多个分类。不同于外部模式的文件夹,删除分类并不会删除分类中的文档,分类只用于组织和管理文档。
9、静态博客生成:文档库模式中,还可以把整个分类设置为网站,这样便可以一键生成静态博客。用 MWeb 生成的静态博客的特点是不用 HTTP 服务器便可以预览,意思就是直接在浏览器中打开生成的 HTML 也能完美显示。
分享给小伙伴们:
赫赫无敌:探索互联网世界,收集和分享实用互联网资源,推荐国内和国外知名、实用、创新、科技、优质的站点资源!互联无极限,探索无止境;分享求真知,网络无国界!
本文地址:/topics/13967.html 转载请注明
同类站点推荐当前位置: >
>MWeb:基于Markdown博客生成工具
网站详情来源:
收录时间:
名称: MWeb:基于Markdown博客生成工具
英文网址:
MWeb:基于Markdown编辑器和静态博客生成工具是一个专门为用Markdown写文章并且要发布成网站、博客的生成工具,即可当编辑器使用又可以当博客生成工具来使用,比Octopress和 Jekyll工具加简单易用。
首先MWeb必须是一个好用的Markdown编辑器,语法高亮,预览,Fenced code blocks和代码高亮支持,Math ML支持,导出HTML/PDF,自定编辑器主题,字数统计,大纲视图,autosave,文档历史版本什么的等等都是要有的。另外MWeb分为两种模式:
1.一种是由MWeb管理的库文档模式,这种模式下可以用分类管理文档,可以拖拽插入图片,可以生成全静态网站。
2.一种是外部文文件模式,文件夹的Markdown文n直接用MWeb打开就是这种模式,区别是无拖拽插入图片功能,不能生成网站。
MWeb的设计就是为了能方便地用Markdown记日记、简单的管理日记并生成博客。而写日记时插入图片的功能是经常用到的。一般的Markdown工具如果要插入图片,要先丢到网上。像Ulysses是可以方便插入图片,但是要双击或者预览时才能看到。MWeb设计成可拖拽或直接粘贴即可插入图片并显示出来,以方便查看。
MWeb的分类管理的设计跟博客的结构差不多,一个文档可以选择多个分类。将分类变成博客的方法为:选择该分类 && Set to site。设定好博客的名称和描述等等,点:Build site 按钮即可。如果有改动到 Theme或者有任何没有在预料之中的结果,试试点 Clear and rebuild site 按钮,点 Preview site 按钮可以预览生成的博客。MWeb还可以自定网站和博客主题,增加评论和分享功。
当作编辑器使用这个就不用说明了,这里说说生成静态网站后如何发布的问题:MWeb的优点是生成的网站都在你的本地电脑上,所以你可以备份、同步到Dropbox等网盘。当然也可以一键重新生成,您只需要备份好您的文档库即可。详细的可查看[],对于喜欢网站而又不愿投资的用户来说,这样的值得使用。
分享给小伙伴们:
赫赫无敌:探索互联网世界,收集和分享实用互联网资源,推荐国内和国外知名、实用、创新、科技、优质的站点资源!互联无极限,探索无止境;分享求真知,网络无国界!
本文地址:/topics/10868.html 转载请注明
同类站点推荐3028人阅读
Markdown(5)
CSDN-markdown编辑器支持从线上和本地导入Markdown文件、导出Markdown文件和HTML文件的功能。在工具栏上有三个按钮来实现这些功能。这三个按钮分别是:从线上导入MD文件、从本机导入MD文件、导出到本地。
CSDN-markdown编辑器的导入功能让我们很方便的基于已有的Markdown文件进行重新编辑修改,然后发表博文。
CSDN-markdown编辑器的导出功能让我们很容易的将在CSDN上发表的博文进行本地存档备份,或者你导出到本地后,再上传到CSDN CODE上进行在线存档备份。
这是一篇傻瓜式手把手多图教程,介绍这导入导出的使用方式。
从线上导入Markdown文件
这里以的一个项目『』的README.md文件为例进行讲解。
第一步:得到你要导入的MD文件的网址,并复制下来
对于Github上面的MD文件,我们不能直接将MD文件转成HTML效果之后的网址拷贝下来,因为这时候的网址是html文件的网址而不是原来MD文件的网址,怎么找到原生MD文件的网址呢?
很简单,只要点击html效果页的“Raw”按钮即可,如下:
这才是真正的MD文件网址,拷贝下来:
/lanxuezaipiao/IT-Interviews-Sharing/master/README.md
第二步:点击工具栏上的“从线上导入”图标
第三步:这时弹出一个“从线上导入”对话框,我们将复制的网址直接粘贴进去,点击“确定”即可
稍等片刻,我们所需的MD文件就成功导进来了。
注意事项:
那个导入对话框里的红色文字那么醒目,相信大家都已经看到了,一定要谨记。如果你正在写一篇文章,突然想试验下导入功能,也忘记点击“保存”按钮(上面有红点就表示你还未保存到最新状态)以保存到草稿箱,那么你辛辛苦苦写的文章就荡然无存了。
我认为在导入时点击确定按钮后,最好有个检测功能,如果检测到你当前的编辑器是空的,就直接导入,如果检测到里面有内容并且未保存到最新状态,就弹出一个对话框,给个提示,比如“您当前尚有内容未保存,确定要覆盖当前所有内容吗?”。
从本机导入Markdown文件
第一步:点击工具栏上的“从本机导入”图标
第二步:这时弹出一个“从本机导入”对话框,可以发现有两种导入方式,任选一种即可
这个比较简单,就不演示了。
导出Markdown文件到本地
第一步:点击工具栏上的“导出到本地”图标
第二步:这时弹出一个“导出到文档”对话框,可以发现有三种导出方式:导出到md文件、导出到仅内容的HTML文件、导出到带模板的HTML文件
这里可能有人会问:后面两种导出方式有什么区别呢?
其实从字面上就可以看出,“带模板的HTML文件”就是比“仅内容的HTML文件”多一个HTML模板,也就是多了下面这样一段内容:
&!DOCTYPE html&
charset="utf-8"&
name="viewport" content="width=device-width, initial-scale=1.0"&
&文章标题&
rel="stylesheet" href="https://stackedit.io/res-min/themes/base.css" /&
type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"&&
& class="container"&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
以前的博客,虽已不再更新,但某些文章也值得参考滴:
生活、读书、感悟等非技术性文章,请移步至我的简书博客:
收藏了很多读书和电影条目,基本上都有自己的评鉴语:
微信学习公众平台-媛媛推荐
微信号:programer-idea
名称:程序媛想事儿
访问:764444次
积分:10164
积分:10164
排名:第1772名
原创:123篇
转载:14篇
评论:1076条
阅读:81367
文章:16篇
阅读:100407
阅读:42603
(1)(1)(1)(2)(3)(9)(5)(17)(4)(8)(4)(4)(5)(1)(7)(4)(22)(14)(10)(5)(11)(2)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'因为前一段时间看到 NetAnalyzer 在Windows10系统下UI表现惨不忍睹,所以利用一段时间为了学习一下WPF相关的内容,于是停停写写,用了WPF相关的技术,两个星期做了一个Markdown编辑器,并且集成了:编辑时与网页同步,博客发布,PDF导出等功能。也主要是不忿某款外国软件收费,故有此作。
代码下载地址
展示与说明
代码同步编辑
MarkWord支持博客园和CSDN博客发布,并且可以进行图片同步(无论是本地图片还是网上的图片,都可以同步到博客服务器)。 该功能使用了MetaWeblog技术。使用方法如下,其中图片上传为newMediaObject 接口
1 /// &summary&
2 /// 文档上传,包括新增与更新
3 /// &/summary&
4 public static string UploadBlogs(string apiUrl, string BlogId, string userId, string password, string
5 BlogsModel, string postId, string title, string Markdown, bool publish)
int procIndex = 1;
SendMsg(5, procIndex, "准备数据中&&");
//转换为html
string Blogs = string.Format("&!-- edit by MarkWord 墨云软件 --&\r\n{0}",
monMarkConverter.Convert(Markdown));
metaTools.Url = apiU
Post blogsPost = new Post();
List&string& tmpCategories = new List&string&();
tmpCategories.Add("");//添加空分类,是因为部分博客(如csdn)字段这部分为必填字段不添加会产生异常
blogsPost.categories = tmpCategories.ToArray();
//添加时间
blogsPost.dateCreated = DateTime.Now.ToLocalTime();
//添加标题
blogsPost.title =
//指定文章编号
blogsPost.postid = postId;
blogsPost.description = BlogsModel.Contains("{0}") ?//必须使用{0}占位符
string.Format(BlogsModel, Blogs) : //根据模板生成数据 主要是为了制定Markdown模板
BlogsModel + B //通过前缀方式添加
//开始查找图片并更新到服务器
HtmlDocument htmlDoc = new HtmlDocument();
WebClient webClient = new WebClient();
htmlDoc.LoadHtml(blogsPost.description);
var ImgList = htmlDoc.DocumentNode.Descendants("img");
int procCount = 3 + ImgList.Count();
SendMsg(procCount, procIndex++, string.Format("数据分析完成,总共需要上传{0}张图片", ImgList.Count()));
int imgErr = 0;//图片上传错误数量
foreach (var i in ImgList)
SendMsg(procCount, procIndex++, "正在上传图片数据&&");
//获取图片文件字符串
string ImgUrl = i.GetAttributeValue("src", "");
if (string.IsNullOrEmpty(ImgUrl))
var imgeData = webClient.DownloadData(ImgUrl);//下载文件
FileData fd = default(FileData);
fd.bits = imgeD//图片数据
fd.name = Path.GetExtension(ImgUrl);//文件名
fd.type = string.Format("image/{0}", fd.name.Substring(1));
UrlData obj = metaTools.newMediaObject(BlogId, userId, password, fd);
blogsPost.description = blogsPost.description.Replace(ImgUrl, obj.url);
if (string.IsNullOrWhiteSpace(postId))
SendMsg(procCount, procIndex++, "开始发布文章&&");
postId = metaTools.newPost(BlogId, userId, password, blogsPost, publish);
SendMsg(procCount, procIndex++, "正在更新文章&&");
metaTools.editPost(postId, userId, password, blogsPost, publish);
catch (Exception ex)
Common.ShowMessage("博客发送失败");
return postId;
if (imgErr == 0)
Common.ShowMessage("博客发送成功");
Common.ShowMessage(string.Format("博客发送成功了,但是有{0}张图片发送失败", imgErr));
SendMsg(procCount, procCount, "完成");
return postId;
具体API实现方法见代码中的BlogsAPI项目
PDF导出功能,使用了HTML转PDF方法 相关DLL已经包含在项目当中了
1 //html to Pdf
2 public static void HtmlToPdf(string filePath, string html, bool isOrientation = false)
if (string.IsNullOrEmpty(html))
html = "Null";
// 创建全局信息
GlobalConfig gc = new GlobalConfig();
gc.SetMargins(new Margins(50, 50, 60, 60))
.SetDocumentTitle("MarkWord")
.SetPaperSize(PaperKind.A4)
.SetPaperOrientation(isOrientation)
.SetOutlineGeneration(true);
//页面信息
ObjectConfig oc = new ObjectConfig();
oc.SetCreateExternalLinks(false)
.SetFallbackEncoding(Encoding.UTF8)
.SetLoadImages(true)
.SetScreenMediaType(true)
.SetPrintBackground(true);
//.SetZoomFactor(1.5);
var pechkin = new SimplePechkin(gc);
pechkin.Finished += Pechkin_F
pechkin.Error += Pechkin_E
pechkin.ProgressChanged += Pechkin_ProgressC
var buf = pechkin.Convert(oc, html);
if (buf == null)
Common.ShowMessage("导出异常");
string fn = fileP //Path.GetTempFileName() + ".pdf";
FileStream fs = new FileStream(fn, FileMode.Create);
fs.Write(buf, 0, buf.Length);
fs.Close();
//Process myProcess = new Process();
//myProcess.StartInfo.FileName =
//myProcess.Start();
CommonMark使用
最后就Markdown的转换,在这里我使用了CommonMark,使用方法比较简单
<monMarkConverter.Convert("### test")
编辑与html页面同步原理&
在改工具中比较有意思的就是编辑器与Webbrower的页面同步功能,包括页面"无刷新"同步呈现,已经页面同步滚动,在这里使用的是编辑器触发&textEditor_TextChanged 事件和&ScrollViewer 触发的scrViewer_ScrollChanged 分别通过webbrowser 的&InvokeScript&动态调用Js实现的,我们先来看看两个js的内容
function updatePageContent(msg){
document.body.innerHTML=
非常简单,只是将转换出来的html直接通过document.body.innerHTML 赋给当前页面既可以了。
function scrollToPageContent(value){
window.scrollTo(0, value * (document.body.scrollHeight - document.body.clientHeight));
这部分,是需要通过WPF页面转过来一个对应的页面位移高度与窗口显示高度的一个页面比例,然后在webbrowser中根据该比例计算页面需要偏移量来实现同步移动
而对应的WPF端的代码为
/// &summary&
/// 同步呈现
/// &/summary&
/// &param name="value"&&/param&
public void LoadBody(string MarkValue)
if (winWebDoc.Document == null)
winWebDoc.Document.InvokeScript("updatePageContent", new object[] { monMarkConverter.Convert(MarkValue) });
/// &summary&
/// 文本更变
/// &/summary&
/// &param name="sender"&&/param&
/// &param name="e"&&/param&
private void textEditor_TextChanged(object sender, EventArgs e)
if (!isLoadFlag)
if (this.textEditor.Text != "" && scrViewer != null)
if (scrViewer.ScrollableHeight == scrViewer.VerticalOffset)
scrViewer.ScrollToBottom();
BLL.FileManager.isChangeFlag = true;
//加载文档
if (MarkDoc == null)
if (mon.WorkType == WorkType.Both)
MarkDoc.LoadBody(this.textEditor.Text);
//////////////////////////////////////////////////////////////////////////////////
/// &summary&
/// 同步滚动
/// &/summary&
/// &param name="value"&&/param&
public void ScrollAuto(double value)
if (winWebDoc.Document == null)
winWebDoc.Document.InvokeScript("scrollToPageContent", new object[] { value.ToString(System.Globalization.CultureInfo.InvariantCulture) });
//计算比例
public double ScrollViewerPositionPercentage
double num = this.scrViewer.ExtentHeight - this.scrViewer.ViewportH
if (num != 0.0)
result = this.scrViewer.VerticalOffset /
result = 0.0;
//触发同步
private void scrViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
if (MarkDoc == null) return;
if (mon.WorkType == WorkType.Both)
MarkDoc.ScrollAuto(this.ScrollViewerPositionPercentage);
至此,Markword 中设计到的内容点已经基本覆盖到了,如有疑问欢迎交流!!!
最后来一发小广告
NetAnalyzer2016网络协议分析软件源码开放购买,可以分析80多种协议,支持http数据还原(包含chunked和gzip数据) ,欢迎大家可以支持一下!!
如有疑问欢迎QQ联系:
祝大家周末愉快
阅读(...) 评论()2015年11月 扩充话题大版内专家分月排行榜第一2015年7月 扩充话题大版内专家分月排行榜第一2015年1月 扩充话题大版内专家分月排行榜第一2014年9月 扩充话题大版内专家分月排行榜第一(补)2013年9月 扩充话题大版内专家分月排行榜第一2013年8月 扩充话题大版内专家分月排行榜第一2013年7月 扩充话题大版内专家分月排行榜第一
2016年3月 扩充话题大版内专家分月排行榜第二2015年12月 扩充话题大版内专家分月排行榜第二2015年6月 扩充话题大版内专家分月排行榜第二2015年2月 扩充话题大版内专家分月排行榜第二2014年10月 扩充话题大版内专家分月排行榜第二2014年8月 扩充话题大版内专家分月排行榜第二
2016年1月 Java大版内专家分月排行榜第一2015年12月 Java大版内专家分月排行榜第一2015年9月 Java大版内专家分月排行榜第一2015年8月 Java大版内专家分月排行榜第一
2016年3月 Java大版内专家分月排行榜第二2016年2月 Java大版内专家分月排行榜第二2015年11月 Java大版内专家分月排行榜第二2015年10月 Java大版内专家分月排行榜第二
2015年7月 Web 开发大版内专家分月排行榜第三
2014年8月 其他数据库开发大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 博客园编辑器 的文章

 

随机推荐