zoukankan      html  css  js  c++  java
  • 为Markdown文件生成目录

    缘由

    Markdown源生文件源生不支持目录,目前比较主流的生成目录的方式(各式插件),都是转化为HTML文件。虽然HTML文件可以生成眼花缭乱的目录,但是修改起来又没有Markdown方面。以上,所以我决定生成一种既有目录,并且修改起来还比较方面的Markdown文件。

    思路

    Markdown是兼容HTML语法的,那么通过抽取Markdown中的标题,生成HTML标签,并且链接到各标题,一份简易的目录即可完成。

    效果

    左侧为Markdown文件,右侧为Markdown文件预览

    处理后的Markdown文件和预览效果

    原文件和处理后文件

    ![](http://images2017.cnblogs.com/blog/575312/201709/575312-20170908184102163-971903777.png)

    代码实现

    ```java /** * 1.目录仅支持从##开始 * 2.正文不要有##符号 * 3.启动入参必须为文件夹目录,目录下所有md文件,均会转化。默认为运行路径。 */ public static void main(String[] args) { String dir=System.getProperty("user.dir"); if (null!=args&&args.length>0){ dir = args[0]; } List files = new LinkedList(); files.addAll(FileUtils.listFiles(new File(dir), new String[] { "md" }, true));
    	for (File file : files) {
    		int index = 0;
    		int initLevel = 1;
    		StringBuilder header = new StringBuilder();
    		StringBuilder content = new StringBuilder();
    		try {
    			// 读取文件,并且以utf-8的形式写出去
    			BufferedReader bufread;
    			String read;
    			bufread = new BufferedReader(new FileReader(file));
    			while ((read = bufread.readLine()) != null) {
    				if (read.contains("##")){
    					String cxt = read.replaceAll("#", "");
    					if (index==0){
    						//初始目录层级,第一层字体为3
    						initLevel = getLevel(read);
    						header.append("* ");
    						header.append("[<font size=3 face="微软雅黑">" + cxt + "</font>](#" + index + ")");
    						header.append("
    ");
    					}else {
    						int level = getLevel(read)-initLevel;
    						for (int i=0;i<level;i++) {
    							header.append("    ");
    						}
    						header.append("* [<font size=3 face="微软雅黑">" + cxt + "</font>](#" + index + ")");
    						header.append("
    ");
    					}
    					content.append("<h4 id="+index+"><font color=red size=3 face="微软雅黑">"+cxt+"</font></h4>");
    					++index;
    				}else{
    					content.append(read);
    				}
    				content.append("
    ");
    			}
    			bufread.close();
    			File newFile = new File(file.getAbsolutePath().replace(".md", "_new.md"));
    			FileWriter fileWritter = new FileWriter(newFile.getName(), false);
    			fileWritter.write(header.toString());
    			fileWritter.write("
    ");
    			fileWritter.write(content.toString());
    			fileWritter.flush();
    			fileWritter.close();
    		} catch (FileNotFoundException ex) {
    			ex.printStackTrace();
    		} catch (IOException ex) {
    			ex.printStackTrace();
    		}
    	}
    
    }
    
    private static int getLevel(String read) {
    	int i = 0;
    	for(int j=0;j<read.length();j++) {
    		if (read.charAt(j) == '#') {
    			++i;
    		}
    	}
    	return i;
    }
    
    
    <h4 id=5><font color=green size=3 face="微软雅黑"> 看都看了,不点个推荐,心不会痛吗? =..=</font></h4>
  • 相关阅读:
    C++11 vector使用emplace_back代替push_back
    Centos6.4 编译安装 nginx php
    Centos 编译安装nodejs&express框架
    zookeeper 入门(二)
    zookeeper 入门(一)
    Paxos算法1-算法形成理论[转载]
    yum只下载软件不安装的两种方法
    Centos 6.4 安装dnsmasq
    Centos 6.4 安装erlang&rabbitmq
    Centos 6.4 安装Python 2.7 python-pip
  • 原文地址:https://www.cnblogs.com/lknny/p/7495914.html
Copyright © 2011-2022 走看看