Skip to content
This repository was archived by the owner on May 21, 2022. It is now read-only.

Commit 8d9cf1f

Browse files
committed
docs: add docs
1 parent 1f03952 commit 8d9cf1f

File tree

5 files changed

+215
-15
lines changed

5 files changed

+215
-15
lines changed

README.md

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,28 @@
11
# md2docx-csharp
22

3-
使用C#开发的md2docx工具
3+
使用C#开发的将markdown转换为docx的工具
44

5-
## TBD
5+
该项目是[CSUIS-md2docx](https://github.com/CSUwangj/CSUIS-md2docx)的一个子项目,目前1.0版已经完工,下一步动向见TODO。
66

7-
这个项目是[CSUIS-md2docx](https://github.com/CSUwangj/CSUIS-md2docx)的一个子项目,目前还在开发中,在功能达到完善之前不会进一步更新文档。
7+
## 快速开始
88

9-
目前进度如下:
9+
下载release中的`Release.zip`,解压后在解压的目录中,命令行使用,若无参数,则默认输入文件为同文件夹下的`test.md`
1010

11-
- [x] 根据YAML头输出一个有姓名等内容的基本文档
12-
- [x] 标题、正文
13-
- [x] 摘要、关键词、结束语
14-
- [x] 页边距
15-
- [x] 参考文献
16-
- [x] 封面
17-
- [x] 目录
11+
运行参数为`md2docx.exe <md input path> <docx output path>`,若不指定第一个参数,则默认读入同目录的`test.md`,若不指定第二个参数,则按照`<name><ID><filename>.docx`存储文件,各参数来自于markdown文件的yaml头部。
1812

19-
以上为我心中该项目demo的应有功能,在此之前除了更新进度外不会做进一步的文档更新。
13+
## 编译
2014

21-
同时以下功能虽然也可以开发,但是考虑其复杂性无法保证进度,并且手动调整相对方便。在我有空之后会继续开发以下功能。
15+
使用Visual Studio(>=2017)打开.sln后进行编译,如果有缺少的库、VS支持,VS(理论上)会进行提示并可以进行相对自动化的安装。
16+
17+
## Markdown语法
18+
19+
[specification](./docs/spec.md)
20+
21+
## TODO
2222

2323
- [ ] 页眉
2424
- [ ] 页脚
25+
- [ ] 将格式等设置改为配置文件而非硬编码
26+
- [ ] 将parser更换成一个标准更接近GFM的parser
2527
- [ ] 图片
26-
- [ ] 表格
28+
- [ ] 表格

docs/res/docx.jpg

58.5 KB
Loading

docs/res/yaml.jpg

39.6 KB
Loading

docs/spec.md

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
# Markdown定义
2+
3+
考虑需求,这里分为两部分,分别是按照markdown视角看parser用的语法,和按照报告的格式内容来看markdown的对应内容。
4+
5+
## markdown视角
6+
7+
### YAML头部
8+
9+
```markdown
10+
---
11+
key: value
12+
---
13+
```
14+
15+
需要注意的是,这个parser的YAML头部不允许值中有换行,也不允许有值是列表。(好菜的parser)
16+
17+
### 标题
18+
19+
语法为`#{1,3}title`,与GFM等标注相比需要注意的是中间没有空格。
20+
21+
标题中可以有粗体等特殊效果,支持的效果列表和正文一样。但是建议不要使用。
22+
23+
目前在把配置改成配置文件之前不考虑支持4级及以上的标题。
24+
25+
## 正文
26+
27+
和普通markdown一样,允许有嵌套、交错的加粗、斜体、删除线等。支持以下语法:
28+
29+
`**加粗**`**加粗**
30+
31+
`*斜体*`或者`_斜体_`*斜体*
32+
33+
`***加粗倾斜***`***加粗倾斜***
34+
35+
`~~删除线~~`删除线
36+
37+
`^上标^`^上标^
38+
39+
`下标`<sub>下标</sub>
40+
41+
```
42+
`代码节`
43+
```
44+
45+
`代码节`
46+
47+
### 引用
48+
49+
```
50+
> 这里放引用
51+
```
52+
53+
> 这里放引用
54+
55+
引用块将被渲染为参考文献,因为参考文献位于文件末尾而且前面有一个结束语,所以目前请保证文件中只有一个引用块并且被放置于末尾。同时,不支持嵌套。
56+
57+
### 暂时不支持的语法
58+
59+
#### 代码块
60+
61+
````c
62+
```c
63+
//这里面放代码
64+
int main(int argc, char **argv){
65+
printf("Hello, World");
66+
return 0;
67+
}
68+
```
69+
````
70+
71+
后续将会把这部分按照正文的代码片段进行渲染。
72+
73+
#### 水平分割线
74+
75+
用regex表示语法为`----*`
76+
77+
---
78+
79+
后续将会把水平分割线渲染为分页符。
80+
81+
#### 列表
82+
83+
无序列表
84+
85+
```
86+
* Item 1
87+
+ Item 2
88+
- Item 3
89+
```
90+
91+
* Item 1
92+
+ Item 2
93+
- Item 3
94+
95+
有序列表
96+
97+
```
98+
7. Item 1
99+
2. Item 2
100+
5. Item 3
101+
```
102+
103+
7. Item 1
104+
2. Item 2
105+
5. Item 3
106+
107+
#### 表格
108+
109+
```
110+
some|header|labels
111+
:---|:--:|---:
112+
Left-justified|center-justified|right-justified
113+
a|b|c
114+
d|e|f
115+
```
116+
117+
some|header|labels
118+
:---|:--:|---:
119+
Left-justified|center-justified|right-justified
120+
a|b|c
121+
d|e|f
122+
123+
#### 图片
124+
125+
```
126+
![Helpers Image](https://raw.githubusercontent.com/windows-toolkit/WindowsCommunityToolkit/master/Microsoft.Toolkit.Uwp.SampleApp/Assets/Helpers.png)
127+
```
128+
129+
![Helpers Image](https://raw.githubusercontent.com/windows-toolkit/WindowsCommunityToolkit/master/Microsoft.Toolkit.Uwp.SampleApp/Assets/Helpers.png)
130+
131+
#### 链接
132+
133+
```
134+
[Wikipedia](http://en.wikipedia.org)
135+
136+
[Email](email@email.com)
137+
```
138+
139+
[Wikipedia](http://en.wikipedia.org)
140+
141+
[Email](email@email.com)
142+
143+
#### EMOJI
144+
145+
`:smile:`
146+
147+
:smile:
148+
149+
## 报告视角
150+
151+
### 封面
152+
153+
封面的各信息均来自于yaml头部,对应关系参考下图
154+
155+
![yaml](./res/yaml.jpg)
156+
157+
![docx](res/docx.jpg)
158+
159+
时间会自动采用生成时候的时间。
160+
161+
### 摘要
162+
163+
摘要是一个可选项,在yaml头部中定义c_abs、c_title、c_kew会自动生成中文的摘要,定义e_abs、e_title、e_kew。如果只需要其中的部分,也需要定义所有的键,否则会生成错误。
164+
165+
此外yaml头部不允许换行,也不允许列表。
166+
167+
### 目录
168+
169+
不需要自己写,将会自动在摘要(如果摘要不存在则是封面)之后生成。生成的默认内容是提示更新目录,只需点一下更新目录即可。
170+
171+
### 正文
172+
173+
使用正常markdown语法即可,需要注意的是`#`与标题内容之间不要有空格。
174+
175+
### 结束语
176+
177+
放在yaml头部的end键中,同样的,不要有换行。
178+
179+
### 参考文献
180+
181+
在文章末尾使用引用格式放出,例子如下
182+
183+
```
184+
> [1] 王阳. 第三人称叙事的形式叙述者的限定[J]. 四川外语学院学报,2000(1):1-6.
185+
>
186+
> [2] HAIMAN J. The Iconicity of Grammar[J]. Language,1980(56):515-540.
187+
>
188+
> [3] 陈牧. 拓扑绝缘体薄膜表面态和掺杂效应的STM研究[D]. 清华大学,2012.
189+
```

md2docx/md2docx.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,8 @@ private static void GenerateMainDocumentPart1Content(MainDocumentPart mainDocume
203203

204204
Body docBody = new Body();
205205

206+
bool genEnd = false;
207+
206208
ImagePart imagePart1 = mainDocumentPart1.AddNewPart<ImagePart>("image/jpeg", "rId8");
207209
GenerateImagePart1Content(imagePart1);
208210
GenerateCover(ref docBody);
@@ -255,9 +257,10 @@ private static void GenerateMainDocumentPart1Content(MainDocumentPart mainDocume
255257
}
256258
else if (element is QuoteBlock refer)
257259
{
258-
if (endnote != "")
260+
if (endnote != "" && !genEnd)
259261
{
260262
Add_endnote(endnote, "结束语", ref docBody);
263+
genEnd = true;
261264
}
262265

263266
Paragraph para = new Paragraph
@@ -283,6 +286,12 @@ private static void GenerateMainDocumentPart1Content(MainDocumentPart mainDocume
283286
}
284287
}
285288

289+
if (endnote != "" && !genEnd)
290+
{
291+
Add_endnote(endnote, "结束语", ref docBody);
292+
genEnd = true;
293+
}
294+
286295
SectionProperties sectionProperties1 = new SectionProperties() { RsidR = "00803857" };
287296
PageSize pageSize1 = new PageSize() { Width = (UInt32Value)11906U, Height = (UInt32Value)16838U };
288297
PageMargin pageMargin1 = new PageMargin() { Top = 1418, Right = (UInt32Value)1134U, Bottom = 1418, Left = (UInt32Value)1701U, Header = (UInt32Value)851U, Footer = (UInt32Value)992U, Gutter = (UInt32Value)0U };

0 commit comments

Comments
 (0)