# Htmlc
**Repository Path**: yswang/Htmlc
## Basic Information
- **Project Name**: Htmlc
- **Description**: Html template compile to html file for Sublime Text3
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 5
- **Forks**: 1
- **Created**: 2015-02-05
- **Last Updated**: 2025-05-16
## Categories & Tags
**Categories**: text-editor
**Tags**: None
## README
Htmlc(Html Compiler)
====================
# *Html template compile to html file for Sublime Text3* #
## **什么是 Htmlc** ##
Htmlc(Html Compiler)是一个在Sublime Text3下使用Python-jinja2模板引擎将编写的Html模板(使用jinja2的模板语法)编译为静态html文件的工具插件。
## **我什么会开发这个插件?** ##
因为 懒 !
诱因:
之前在开发一个互联网网站的静态html页面,该网站有几十个html页面,每个html页面都是四个部分组成(header/nav, side/menu, footer, main),其中 header/nav,side/menu,footer都是一样的,只有main块是变化的;我当时的做法是:先写好一个html页面,然后Ctrl+C/Ctrl+V下一个页面进行修改,就这样做下去。当全部做好给客户看时,客户说:在头部增加一个导航菜单项,在底部修改下Copyright等,然后我就开始把这几十个页面一个一个修改,直接把我搞的想吐!
然后就想:如果这些静态的html页面能够支持动态的 include header,side,footer就好了,这样我就只需要修改一处,然后重新把这些html页面编译下,就生成了全新的html页面,该多爽啊!O(∩_∩)O
想想自己在使用Java开发时一直都在用Apache Velocity模板引擎来生成页面,Velocity支持layout,很方便开发动态页面。但是,我总不能因为要编译输出静态Html页面,而使用Java开发一个应用程序吧,显然很不方便。
同时,我又是使用Sublime Text来编写静态Html页面的,Sublime太强大和方便了,在有了开发前一个[Lessc for Sublime Text3](http://git.oschina.net/yswang/lessc) 插件的基础上,自然想到再开发一个插件来达到我通过模板编译输出Html的目的。
于是Google Sublime的类似插件,我没有找到(如果谁有更好的,可以告诉我,哈哈) ,接着Google Python的web模板引擎,发现了很多,最终选择了[Jinja2](http://jinja.pocoo.org/)模板引擎;最终通过一天多的开发、测试和整理,我的 Htmlc(Html Compiler)插件就诞生了,其达到的效果完全满足了我目前的需求(说不定以后会有更高的要求呢O(∩_∩)O~)!!!
## **如何使用?** ##
- 1.下载所有代码(Htmlc、jinja2、markupsafe)-Htmlc依赖jinja2,jinja2需要markupsafe
- 2.将 `Htmlc` 文件夹扔到 `Sublime Text3安装目录\Data\Packages\` 下:
`your sublime Text3\Data\Packages\Htmlc`
- 3.将 `jinja2` 和 `markupsafe` 文件夹扔到 `Sublime Text3的安装根目录下` :
`your sublime Text3\jinja2`
`your sublime Text3\markupsafe`
**说明:** Htmlc需要导入`jinja2`类库使用:`from jinja2 import *`,我在Sublime下测试了如何引入Python第三方库,发现只有将第三方库放到Sublime安装根目录下才能生效(我很想将jinja2和markupsafe放到我的Htmlc目录下,如果有谁知道可以放到插件目录下,很期待你告诉俺!)。
- 4.开始编写你的 `xx.htmlc` 文件(我定义了 `.htmlc` 扩展名,Htmlc只会编译此扩展名的文件)和 `layout` 文件,当你保存你的 `xx.htmlc`文件时,你就会惊讶的发现:Htmlc帮你编译输出了`xx.html`文件(包含了layout的布局文件内容)。
**注意:** layout文件的扩展名随意(比如:.tmpl, .layout等),但不能是`.htmlc`,因为layout文件仅仅是用来做layout布局的,不需要单独编译输出为独立的html文件。
- 5.Htmlc的模板语法请参考 `jinja2` 的语法说明,同时我也在Htmlc下添加了一个 `jinja2-docs.md`的中文翻译语法说明,可以在 `sublime text3\Preferences\Package Settings\Htmlc\Jinja2 Template Docs` 打开。
## **特性** ##
- Htmlc的默认设置和设置项可以从 `sublime text3\Preferences\Package Settings\Htmlc\Settings`看到和修改;
- Htmlc支持 **自动编译**(即时保存即时编译当前htmlc文件,由`auto_compile:true|false`决定)、 **手动编译** 和 **全部编译**;
手动编译 和 全部编译 可以通过配置快捷键(`sublime text3\Preferences\Package Settings\Htmlc\Key Bindings - Default`)进行,
也可以在工具命令:`sublime text3\Tools\Htmlc > html\Compile Current htmlc file | Compile All htmlc files` 下触发进行。
- Htmlc还支持 `.sublime-project` 项目私有化配置,这样可以为不同的项目进行不同的 Htmlc 的配置。
`test.sublime-project` 示例配置:
>{
> "folders":[
> {
> "name": "test",
> "path":"."
> }
> ],
> "settings":
> {
> "htmlc":
> {
> "auto_compile": true,
> "encoding": "UTF-8",
> "output_dir": "D:\\workspace\\test\\build",
> "template_dir": "D:\\workspace\\test\\src\\htmlc"
> }
> }
>}
以上述`test.sublime-project`配置为例:
项目test的htmlc模板目录在`D:\workspace\test\src\htmlc` 目录下,编译后的html文件输出在 `D:\workspace\test\build` 目录下。
##我的测试项目结构和配置
>test
>└ build
> ├ css
> ├ images
> └ js
>
>└ src
> └ htmlc
> └ layout
> └ default.layout
> └ news
> ├ news.htmlc
> └ china
> └ china.htmlc
> └ index.htmlc
>
>└ test.sublime-project
当我对test项目进行htmlc全部编译后,在build下生成的目录结构如下:
>test
>└ build
> ├ css
> ├ images
> ├ js
> └ news
> ├ news.html
> └ china
> └ china.html
> └ index.html
### **附部分页面的代码** ###
**default.layout**
> <!DOCTYPE html>
> <html>
> <head>
> <meta charset="utf-8">
> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
> <title> {% block title %}{% endblock %} - Htmlc</title>
> <link rel="stylesheet" type="text/css" href="css/style.css">
> </head>
>
> <body>
>
> <!-- header -->
> <div id="header">
> <h2>Header</h2>
> </div> <!-- /end header -->
>
> <div id="main-container">
> {% block screen_body %}{% endblock %}
> </div>
>
> <!-- footer -->
> <div id="footer">
> Copyright © 2015 -- yswang
> </div> <!-- /end footer -->
>
> </body>
> </html>
**index.htmlc**
>{% extends "layout/default.layout" %}
>{% block title %}首页{% endblock %}
>{% block screen_body %}
><div class="w">
> <h1>哈哈,欢迎使用 Htmlc for Sublime Text 3 to compile templates to html files</h1>
> <h2>作者:yswang</h2>
></div>
>{% endblock %}
**news.htmlc**
>{% extends "layout/default.layout" %}
>{% block title %}新闻动态{% endblock %}
>{% block screen_body %}
> <h1>这里展示全球最新新闻动态</h1>
>{% endblock %}
**china.htmlc**
>{% extends "layout/default.layout" %}
>{% block title %}国内新闻动态{% endblock %}
>{% block screen_body %}
> <h1>这里展示中国的新闻动态</h1>
>{% endblock %}
**编译后的 index.html**
><!DOCTYPE html>
><html>
><head>
> <meta charset="utf-8">
> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
> <title> 首页 - Htmlc</title>
> <link rel="stylesheet" type="text/css" href="css/style.css">
></head>
>
><body>
>
> <!-- header -->
> <div id="header">
> <h2>Header</h2>
> </div> <!-- /end header -->
>
> <div id="main-container">
>
> <div class="w">
> <h1>哈哈,欢迎使用 Htmlc for Sublime Text 3 to compile templates to html files</h1>
> <h2>作者:yswang</h2>
> </div>
>
> </div>
>
> <!-- footer -->
> <div id="footer">
> Copyright © 2015 -- yswang
> </div> <!-- /end footer -->
>
></body>
></html>
##Thank you