Skip to content

Commit 8198df3

Browse files
authored
Merge pull request #21 from JabinGP/mdout-0.7.0
Mdout 0.7.0
2 parents f30c112 + 1675d3d commit 8198df3

File tree

15 files changed

+218
-192
lines changed

15 files changed

+218
-192
lines changed

README.md

Lines changed: 45 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
一个Go语言实现的Markdown转PDF命令行工具,基于headless chrome,简单、可靠、易安装、可定制化、易拓展
44

5+
_**如果觉得对你有帮助,点个star鼓励一下作者吧!**_
6+
57
## 1. mdout有何特点
68

79
### 1.1 简单
@@ -40,13 +42,22 @@ mdout基于headless chrome,这使得mdout几乎兼容市面上所有能用于
4042

4143
mdout依赖于chrome浏览器,如果你的电脑已经安装了新版的chrome浏览器,无需更多配置,可以直接运行mdout,如果是旧版的chrome浏览器,建议进行升级后使用,如果还未安装chrome浏览器,请安装后再使用mdout
4244

43-
### 3.1. 最简单的示例
45+
### 3.1. 帮助文档
46+
47+
每个命令行程序都有帮助文档,mdout也不例外
48+
49+
```cmd
50+
mdout -h
51+
mdout --help
52+
```
53+
54+
### 3.2. 最简单的示例
4455

4556
```cmd
4657
mdout 文件路径
4758
```
4859

49-
#### 3.1.1. 文件路径可以是相对路径
60+
#### 3.2.1. 输入文件路径可以是相对路径
5061

5162
- 文件在当前目录
5263

@@ -66,15 +77,6 @@ mdout 文件路径
6677
mdout /tmp/markdown/yourfile.md
6778
```
6879
69-
### 3.2. 帮助文档
70-
71-
每个命令行程序都有帮助文档,mdout也不例外
72-
73-
```cmd
74-
mdout -h
75-
mdout --help
76-
```
77-
7880
### 3.3. 输入文件类型
7981
8082
mdout支持许多输入类型,其中最普遍的就是markdown,但同样也支持html输入,url输入,但是注意,如果输入是url,不要忘记带上`http://`
@@ -194,7 +196,7 @@ $$\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.$$
194196
195197
> 指定主题后上面提到的输出选项依旧可用,可以配合`-t html`选项输出中间的html文件,这样可以调试主题效果,详细的说明将在自定义章节中提到
196198
197-
至于自定义主题的教程,将在后面提到
199+
至于自定义主题的教程,将在后面提到
198200
199201
### 3.7. 打印页面设置
200202
@@ -260,7 +262,7 @@ mdout支持你自定义页面边距,以英寸为单位,默认为0.4英寸
260262
261263
### 3.8. 方便地修改配置文件
262264
263-
mdout 内置了一个 `config` 命令便于快速调用编辑器修改配置文件,该命令默认调用 `code` 命令呼出 vscode 打开配置文件,你可以在配置文件中修改自己需要的命令。详见 asserts/config/conf.toml。
265+
mdout 内置了一个 `config` 命令便于快速调用编辑器修改配置文件,该命令默认调用 `code` 命令呼出 vscode 打开配置文件,你可以在配置文件中修改自己需要的命令。
264266
265267
在 conf.toml 中配置编辑器示例:
266268
@@ -270,7 +272,30 @@ mdout 内置了一个 `config` 命令便于快速调用编辑器修改配置文
270272
EditorPath = "notepad"
271273
```
272274

273-
### 3.9. 自定义配色
275+
### 3.9. 获取 mdout 的配置相关信息
276+
277+
[安装指南](install.md) 中有一个表格展示了各个平台中 mdout 的配置文件夹。
278+
279+
在 mdout-0.7.0. 以上还可以通过内置的 `show` 命令获取配置信息:
280+
281+
|命令输入|含义|输出示例|
282+
|-|-|-|
283+
|mdout show config-folder|输出配置文件夹路径|C:\Users\jabin\mdout|
284+
|mdout show theme-folder|输出主题文件夹路径|C:\Users\jabin\mdout\theme|
285+
|mdout show log-folder|输出日志文件夹路径|C:\Users\Jabin\mdout\log|
286+
|mdout show theme-list|输出目前主题文件夹下的主题包(命令不对主题包做可用性检验)|C:\Users\Jabin\mdout\log|
287+
288+
mdout 内置了一个 `config` 命令便于快速调用编辑器修改配置文件,该命令默认调用 `code` 命令呼出 vscode 打开配置文件,你可以在配置文件中修改自己需要的命令。
289+
290+
在 conf.toml 中配置编辑器示例:
291+
292+
```toml
293+
[Runtime]
294+
# 使用 windows自带记事本 示例
295+
EditorPath = "notepad"
296+
```
297+
298+
### 3.10. 自定义配色
274299

275300
mdout有着简单易用的主题系统,跟着下面的步骤来,你可以很轻松的添加自己的自定义效果
276301

@@ -349,15 +374,13 @@ mdout有着简单易用的主题系统,跟着下面的步骤来,你可以很
349374
<link rel="stylesheet" href="/Users/jabin/mdout/theme/mytheme/css/hljs.css"/>
350375
```
351376

352-
主题配色分为两个文件,一个是页面配色css文件,一个是代码高亮的css文件
353-
354-
如果你要修改页面配色,只需要一边开着浏览器,一遍打开刚刚主题包里面的
355-
`mytheme`->`css`->`page.css`修改,然后刷新浏览器查看结果
377+
主题配色分为两个文件:
356378

357-
或者你想更改语法高亮的配色,由于mdout依赖于hljs,你只需要去hljs官网下载你喜欢的主题包,然后替换`mytheme`->`css`->`hljs.css`里的内容就可以了
379+
- `page.css` :页面配色css文件
380+
- `hljs.css`:与 highlight.js 代码高亮配套的css文件
358381

359-
如果你完成了你的主题修改,你可以将刚刚生成的html删除,或者你想留做自己动手的纪念也是可以的
382+
如果你要修改页面配色,只需要一边开着浏览器,一遍打开刚刚主题包里面的 `mytheme/css/page.css` 修改然后刷新浏览器查看结果。
360383

361-
最后,你可以使用`mdout yourfile.md -e mytheme`来指定使用你的自定义主题啦,或者你可以在前面提到过的`conf.json`里面配置默认使用你的`mytheme`主题
384+
或者你想更改语法高亮的配色,由于mdout依赖于hljs,你只需要去hljs官网下载你喜欢的主题包,然后替换`mytheme/css/hljs.css`里的内容就可以了,如果你完成了你的主题修改,你可以将刚刚生成的html删除。
362385

363-
_**如果觉得对你有帮助,点个star吧!**_
386+
最后,你可以使用`mdout yourfile.md -e mytheme`来指定使用你的自定义主题啦,或者你可以在前面提到过的`conf.toml`里面配置默认使用你的 `mytheme` 主题。
File renamed without changes.

cmd/install.go

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ package cmd
33
import (
44
"fmt"
55

6-
"github.com/JabinGP/mdout/config"
7-
"github.com/JabinGP/mdout/static"
86
"github.com/JabinGP/mdout/theme"
97
"github.com/spf13/cobra"
108
)
@@ -20,26 +18,10 @@ func getInstallCmd() *cobra.Command {
2018
Long: "指定路径下载配置文件或主题包",
2119
}
2220

23-
cmd.AddCommand(getInstallConfigCmd())
2421
cmd.AddCommand(getInstallThemeCmd())
2522
return cmd
2623
}
2724

28-
func getInstallConfigCmd() *cobra.Command {
29-
var url string
30-
var cmd = &cobra.Command{
31-
Use: "config",
32-
Short: "初始化配置文件",
33-
Long: "到指定的地址下载配置文件",
34-
RunE: func(cmd *cobra.Command, args []string) error {
35-
return config.DownloadConfig(url)
36-
},
37-
}
38-
39-
cmd.Flags().StringVarP(&url, "url", "u", static.ConfigURL, "toml配置文件地址")
40-
return cmd
41-
}
42-
4325
func getInstallThemeCmd() *cobra.Command {
4426
var url, name string
4527
var cmd = &cobra.Command{

cmd/root.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ func initRootCmdFlags() {
115115
func addCmdToRoot() {
116116
rootCmd.AddCommand(getConfigCmd())
117117
rootCmd.AddCommand(getInstallCmd())
118+
rootCmd.AddCommand(getShowCmd())
118119
}
119120

120121
// 输出参数信息调试

cmd/show.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package cmd
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"io/ioutil"
7+
8+
"github.com/JabinGP/mdout/config"
9+
"github.com/JabinGP/mdout/log"
10+
"github.com/JabinGP/mdout/static"
11+
"github.com/spf13/cobra"
12+
)
13+
14+
func getShowCmd() *cobra.Command {
15+
var cmd = &cobra.Command{
16+
Use: "show",
17+
Short: "输出信息",
18+
Long: "输出指定信息",
19+
Args: cobra.MinimumNArgs(1),
20+
RunE: func(cmd *cobra.Command, args []string) error {
21+
in := args[0]
22+
switch in {
23+
case "config-folder":
24+
fmt.Println(static.ConfigFolderFullName)
25+
case "theme-folder":
26+
fmt.Println(static.ThemeFolderFullName)
27+
case "log-folder":
28+
fmt.Println(static.LogFolderFullName)
29+
case "config-info":
30+
confBytes, err := json.MarshalIndent(config.Obj, "", "\t")
31+
if err != nil {
32+
log.Errorln(err)
33+
return err
34+
}
35+
fmt.Printf(string(confBytes))
36+
case "theme-list":
37+
fileInfoList, err := ioutil.ReadDir(static.ThemeFolderFullName)
38+
if err != nil {
39+
log.Errorln(err)
40+
}
41+
themeList := []string{}
42+
for i := range fileInfoList {
43+
if fileInfoList[i].IsDir() {
44+
themeList = append(themeList, fileInfoList[i].Name())
45+
}
46+
}
47+
48+
if len(themeList) == 0 {
49+
fmt.Println("暂无主题")
50+
return nil
51+
}
52+
53+
for _, themeName := range themeList {
54+
fmt.Println(themeName)
55+
}
56+
57+
return nil
58+
default:
59+
err := fmt.Errorf("无法识别的 show 命令输入 %s,请检查输入。", in)
60+
log.Errorln(err)
61+
return err
62+
}
63+
64+
return nil
65+
},
66+
}
67+
68+
cmd.AddCommand(getInstallThemeCmd())
69+
return cmd
70+
}

config/download.go

Lines changed: 0 additions & 36 deletions
This file was deleted.

config/index.go

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@ package config
33
import (
44
"sync"
55

6-
"github.com/JabinGP/mdout/log"
76
"github.com/JabinGP/mdout/model"
8-
"github.com/JabinGP/mdout/static"
9-
"github.com/JabinGP/mdout/tool"
107
)
118

129
var once sync.Once
@@ -18,11 +15,7 @@ func init() {
1815
once.Do(func() {
1916
InitConfigFileFolder()
2017
InitThemeFolder()
21-
if !tool.IsExists(static.ConfigFileFullName) {
22-
log.Infof("配置文件 %s 不存在,使用内置默认参数。", static.ConfigFileFullName)
23-
initConfigByDefault()
24-
return
25-
}
18+
CheckConfigFile()
2619
readConfig()
2720
})
2821
}

config/init.go

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,33 @@ package config
22

33
import (
44
"encoding/json"
5-
"os"
5+
"fmt"
6+
"io/ioutil"
7+
"time"
68

79
"github.com/BurntSushi/toml"
810
"github.com/JabinGP/mdout/log"
911
"github.com/JabinGP/mdout/static"
1012
"github.com/JabinGP/mdout/tool"
1113
)
1214

13-
func initConfigByDefault() {
14-
Obj.Params.OutType = "pdf"
15-
Obj.Params.ThemeName = "github"
16-
Obj.Params.PageFormat = "a4"
17-
Obj.Params.PageOrientation = "portrait"
18-
Obj.Params.PageMargin = "0.4"
15+
// CheckConfigFile 检查配置文件,不存在则自动创建
16+
func CheckConfigFile() {
17+
if !tool.IsExists(static.ConfigFileFullName) {
18+
log.Infof("配置文件 %s 不存在,将自动创建默认配置文件。", static.ConfigFileFullName)
19+
CreateDefaultConfig()
20+
log.Infof("自动创建默认配置文件 %s 成功。", static.ConfigFileFullName)
21+
}
22+
}
1923

20-
Obj.Runtime.EditorPath = "code"
21-
Obj.Runtime.StdoutLogLevel = "debug"
22-
Obj.Runtime.FileLogLevel = "debug"
23-
Obj.Runtime.EnableXHTMLOutput = true
24-
Obj.Runtime.EnableHTMLTag = true
24+
// CreateDefaultConfig 根据 static 中的 TomlConfig 自动创建配置文件
25+
func CreateDefaultConfig() {
26+
autoCreateInfo := fmt.Sprintf("# 由 mdout-%s 自动创建于 %s\n", static.Version, time.Now().Format("2006-01-02 15:04:05"))
27+
err := ioutil.WriteFile(static.ConfigFileFullName, []byte(autoCreateInfo+static.TomlConfig), 0777)
28+
if err != nil {
29+
log.Errorln("创建默认配置文件失败!", err)
30+
panic(err)
31+
}
2532
}
2633

2734
func readConfig() {
@@ -44,26 +51,16 @@ func ShowConfig() {
4451

4552
// InitConfigFileFolder 初始化配置文件夹
4653
func InitConfigFileFolder() {
47-
if !tool.IsExists(static.ConfigFolderFullName) {
48-
log.Infoln("配置文件夹 " + static.ConfigFolderFullName + " 不存在,创建中...")
49-
err := os.Mkdir(static.ConfigFolderFullName, os.ModePerm)
50-
if err != nil {
51-
log.Errorf("创建文件夹 " + static.ConfigFolderFullName + " 失败!\n")
52-
panic(err)
53-
}
54-
log.Infoln("创建文件夹 " + static.ConfigFolderFullName + " 成功!\n")
54+
if err := tool.InitFolder(static.ConfigFolderFullName); err != nil {
55+
log.Errorln(err)
56+
panic(err)
5557
}
5658
}
5759

5860
// InitThemeFolder 初始化主题文件夹
5961
func InitThemeFolder() {
60-
if !tool.IsExists(static.ThemeFolderFullName) {
61-
log.Infoln("主题文件夹 " + static.ThemeFolderFullName + " 不存在,创建中...")
62-
err := os.Mkdir(static.ThemeFolderFullName, os.ModePerm)
63-
if err != nil {
64-
log.Errorf("创建文件夹 " + static.ThemeFolderFullName + " 失败!\n")
65-
panic(err)
66-
}
67-
log.Infoln("创建文件夹 " + static.ThemeFolderFullName + " 成功!\n")
62+
if err := tool.InitFolder(static.ThemeFolderFullName); err != nil {
63+
log.Errorln(err)
64+
panic(err)
6865
}
6966
}

0 commit comments

Comments
 (0)