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>
  • 相关阅读:
    环境配置文件 ① /etc/profile、② ~/.bash_profile、③ ~/.bashrc、④ /etc/bashrc
    RHEL 7.0已发布CentOS 7即将到来
    《上海交通大学饮水思源paper(论文)板实用手册(第二版)》出炉
    SCI论文投稿Cover Letter的写作
    grub.cfg —— Window、Fedora、CentOS
    SCI新手成长策略
    计算机类SCI前三区期刊
    SCI期刊——导航
    SCI收录的外文期刊(计算机类)
    《嵌入式开发》——三次作业
  • 原文地址:https://www.cnblogs.com/lknny/p/7495914.html
Copyright © 2011-2022 走看看