Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4d5ee9f

Browse files
committed
解决了多级列表的问题
1 parent e90b9e5 commit 4d5ee9f

File tree

15 files changed

+576
-117
lines changed

15 files changed

+576
-117
lines changed

app/src/main/java/com/zzhoujay/markdowndemo/MainActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ protected void onCreate(Bundle savedInstanceState) {
4646
// });
4747

4848

49-
final InputStream stream = getResources().openRawResource(R.raw.test);
49+
final InputStream stream = getResources().openRawResource(R.raw.tt);
5050
// BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream));
5151
// final StringBuilder sb = new StringBuilder();
5252
// String line;

app/src/main/res/raw/mark.md

Lines changed: 205 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,211 @@
1-
### gradle中引用的方法
1+
主要内容
2+
==
23

3-
compile 'com.zzhoujay.richtext:richtext:1.1.5'
4+
> #### Markdown是_什么_ ####
5+
> #### _谁_发明了这么个东西? ####
6+
> #### _为什么_要使用它? ####
7+
> #### _怎么_使用? ####
8+
> #### 都_谁_在用?####
9+
> #### 感觉有意思?_不怕你看见,就怕你试试_ ####
410
5-
---
11+
## 正文 ##
12+
### 1. Markdown是*什么* ###
13+
**Markdown**是一种轻量级**标记语言**,它以纯文本形式(_易读、易写、易更改_)编写文档,并最终以HTML格式发布。
14+
**Markdown**也可以理解为将以MARKDOWN语言编写的语言转换成HTML内容的工具,最初是一个perl脚本_Markdown.pl_
615

7-
### 使用方式
16+
### 2. _谁_发明了这么个东西? ###
17+
它由[**Aaron Swartz**](http://www.aaronsw.com/)**John Gruber**共同设计,**Aaron Swartz**就是那位于去年(_2013年1月11日_)自杀,有着**开挂**一般人生经历的程序员。维基百科对他的[介绍](http://zh.wikipedia.org/wiki/%E4%BA%9A%E4%BC%A6%C2%B7%E6%96%AF%E6%B2%83%E8%8C%A8)是:**软件工程师、作家、政治组织者、互联网活动家、维基百科人**
818

9-
> 1. hh
10-
> 1. gg
19+
他有着足以让你跪拜的人生经历:
20+
+ **14岁**参与RSS 1.0规格标准的制订。
21+
+ **2004**年入读**斯坦福**,之后退学。
22+
+ **2005**年创建[Infogami](http://infogami.org/),之后与[Reddit](http://www.reddit.com/)合并成为其合伙人。
23+
+ **2010**年创立求进会(Demand Progress),积极参与禁止网络盗版法案(SOPA)活动,最终该提案**居然**被撤回。
24+
+ **2011**年7月19日,因被控从MIT和JSTOR下载480万篇学术论文并以免费形式上传于网络被捕。
25+
+ **2013**年1月自杀身亡。
1126

27+
![Aaron Swartz](https://github.com/younghz/Markdown/raw/master/resource/Aaron_Swartz.jpg)
1228

13-
> * hello
14-
> * gg
15-
> * hh
16-
>
17-
>
29+
天才都有早逝的归途(又是一位**犹太人**)。
30+
31+
### 3. _为什么_要使用它? ###
32+
+ 它是易读(_看起开舒服_)、易写(_语法简单_)、易更改**纯文本**。处处体现着**极简主义**的影子。
33+
+ 兼容HTML,可以转换为HTML格式发布。
34+
+ 跨平台使用。
35+
+ 越来越多的网站支持Markdown。
36+
+ 更方便清晰的组织你的电子邮件。(Markdown-here, Airmail)
37+
+ 摆脱Word(我不是认真的)。
38+
39+
### 4. _怎么_使用? ###
40+
如果不算**扩展**,Markdown的语法绝对**简单**到让你爱不释手。
41+
42+
废话太多,下面正文,Markdown语法主要分为如下几大部分:
43+
**标题****段落****区块引用****代码区块****强调****列表****分割线****链接****图片****反斜杠 `\`****符号'`'**
44+
45+
#### 4.1 标题 ####
46+
两种形式:
47+
1)使用`=``-`标记一级和二级标题。
48+
> 一级标题
49+
> `=========`
50+
> 二级标题
51+
> `---------`
52+
53+
效果:
54+
> 一级标题
55+
> =========
56+
> 二级标题
57+
> ---------
58+
59+
2)使用`#`,可表示1-6级标题。
60+
> \# 一级标题
61+
> \## 二级标题
62+
> \### 三级标题
63+
> \#### 四级标题
64+
> \##### 五级标题
65+
> \###### 六级标题
66+
67+
效果:
68+
> # 一级标题
69+
> ## 二级标题
70+
> ### 三级标题
71+
> #### 四级标题
72+
> ##### 五级标题
73+
> ###### 六级标题
74+
75+
#### 4.2 段落 ####
76+
段落的前后要有空行,所谓的空行是指没有文字内容。若想在段内强制换行的方式是使用**两个以上**空格加上回车(引用中换行省略回车)。
77+
78+
#### 4.3 区块引用 ####
79+
在段落的每行或者只在第一行使用符号`>`,还可使用多个嵌套引用,如:
80+
> \> 区块引用
81+
> \>> 嵌套引用
82+
83+
效果:
84+
> 区块引用
85+
>> 嵌套引用
86+
87+
#### 4.4 代码区块 ####
88+
代码区块的建立是在每行加上4个空格或者一个制表符(如同写代码一样)。如
89+
普通段落:
90+
91+
void main()
92+
{
93+
printf("Hello, Markdown.");
94+
}
95+
96+
代码区块:
97+
98+
void main()
99+
{
100+
printf("Hello, Markdown.");
101+
}
102+
103+
**注意**:需要和普通段落之间存在空行。
104+
105+
#### 4.5 强调 ####
106+
在强调内容两侧分别加上`*`或者`_`,如:
107+
> \*斜体\*\_斜体\_
108+
> \*\*粗体\*\*\_\_粗体\_\_
109+
110+
效果:
111+
> *斜体*_斜体_
112+
> **粗体**__粗体__
113+
114+
#### 4.6 列表 ####
115+
使用`·``+`、或`-`标记无序列表,如:
116+
> \-(+\*) 第一项
117+
> \-(+\*) 第二项
118+
> \- (+\*)第三项
119+
120+
**注意**:标记后面最少有一个_空格_或_制表符_。若不在引用区块中,必须和前方段落之间存在空行。
121+
122+
效果:
123+
> + 第一项
124+
> + 第二项
125+
> + 第三项
126+
127+
有序列表的标记方式是将上述的符号换成数字,并辅以`.`,如:
128+
> 1 . 第一项
129+
> 2 . 第二项
130+
> 3 . 第三项
131+
132+
效果:
133+
> 1. 第一项
134+
> 2. 第二项
135+
> 3. 第三项
136+
137+
#### 4.7 分割线 ####
138+
分割线最常使用就是三个或以上`*`,还可以使用`-``_`
139+
140+
#### 4.8 链接 ####
141+
链接可以由两种形式生成:**行内式****参考式**
142+
**行内式**
143+
> \[younghz的Markdown库\]\(https:://github.com/younghz/Markdown "Markdown"\)
144+
145+
效果:
146+
> [younghz的Markdown库](https:://github.com/younghz/Markdown "Markdown")
147+
148+
**参考式**
149+
> \[younghz的Markdown库1\]\[1\]
150+
> \[younghz的Markdown库2\]\[2\]
151+
> \[1\]:https:://github.com/younghz/Markdown "Markdown"
152+
> \[2\]:https:://github.com/younghz/Markdown "Markdown"
153+
154+
效果:
155+
> [younghz的Markdown库1][1]
156+
> [younghz的Markdown库2][2]
157+
158+
[1]: https:://github.com/younghz/Markdown "Markdown"
159+
[2]: https:://github.com/younghz/Markdown "Markdown"
160+
161+
**注意**:上述的`[1]:https:://github.com/younghz/Markdown "Markdown"`不出现在区块中。
162+
163+
#### 4.9 图片 ####
164+
添加图片的形式和链接相似,只需在链接的基础上前方加一个``
165+
#### 4.10 反斜杠`\` ####
166+
相当于**反转义**作用。使符号成为普通符号。
167+
#### 4.11 符号'`' ####
168+
起到标记作用。如:
169+
>\`ctrl+a\`
170+
171+
效果:
172+
>`ctrl+a`
173+
174+
#### 5. 都_谁_在用?####
175+
Markdown的使用者:
176+
+ GitHub
177+
+ 简书
178+
+ Stack Overflow
179+
+ Apollo
180+
+ Moodle
181+
+ Reddit
182+
+ 等等
183+
184+
#### 6. 感觉有意思?趁热打铁,推荐几个_工具_ ####
185+
+ **Chrome**下的stackedit插件可以离线使用,很爽。也不用担心平台受限。
186+
在线的dillinger.io算是评价好的了,可是不能离线使用。
187+
+ **Windowns**下的MarkdownPad也用过,不过免费版的体验不是很好。
188+
+ **Mac**下的Mou是国人贡献的,口碑很好。推荐。
189+
+ **Linux**下的ReText不错。
190+
191+
**其实在对语法了如于心的话,直接用编辑器就可以了,脑子里满满的都是格式化好的文本啊。**
192+
我现在使用`马克飞象` + `Markdown-here`,先编辑好,然后一键格式化,挺方便。
193+
194+
****
195+
**注意**:不同的Markdown解释器或工具对相应语法(扩展语法)的解释效果不尽相同,具体可参见工具的使用说明。
196+
虽然有人想出面搞一个所谓的标准化的Markdown,[没想到还惹怒了健在的创始人John Gruber]
197+
(http://blog.codinghorror.com/standard-markdown-is-now-common-markdown/)。
198+
****
199+
以上基本是所有traditonal markdown的语法。
200+
201+
### 其它: ###
202+
列表的使用(非traditonal markdown):
203+
204+
`|`表示表格纵向边界,表头和表内容用`-`隔开,并可用`:`进行对齐设置,两边都有`:`则表示居中,若不加`:`则默认左对齐。
205+
206+
|代码库 |链接 |
207+
|:------------------------------------:|------------------------------------|
208+
|MarkDown |[https://github.com/younghz/Markdown](https://github.com/younghz/Markdown "Markdown")|
209+
|moos-young |[https://github.com/younghz/moos-young](https://github.com/younghz/moos-young "tianchi")|
210+
211+
关于其它扩展语法可参见具体工具的使用说明。

app/src/main/res/raw/test.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
hello
2+
3+
==
4+
15
# MarkDown
26

37
## H2 Test

app/src/main/res/raw/tt.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
> * * * * asdflh

markdown/src/main/java/com/zzhoujay/markdown/parser/Line.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,18 @@ public class Line {
1919
public static final int LINE_TYPE_CODE_BLOCK_1 = 11;
2020
public static final int LINE_TYPE_GAP = 12;
2121

22-
private final int lineNum;
2322
private String source;
2423
private CharSequence builder;
2524
private int type;
2625
private int count;
2726
private int attr;
27+
private Line parent;
28+
private Line child;
2829

2930
Line() {
30-
lineNum = 0;
3131
}
3232

33-
public Line(int lineNum, String source) {
34-
this.lineNum = lineNum;
33+
public Line(String source) {
3534
this.source = source;
3635
count = 1;
3736
type = LINE_NORMAL;
@@ -74,15 +73,27 @@ public void setCount(int count) {
7473
this.count = count;
7574
}
7675

77-
public int getLineNum() {
78-
return lineNum;
79-
}
80-
8176
public int getAttr() {
8277
return attr;
8378
}
8479

8580
public void setAttr(int attr) {
8681
this.attr = attr;
8782
}
83+
84+
public Line getParent() {
85+
return parent;
86+
}
87+
88+
public void setParent(Line parent) {
89+
this.parent = parent;
90+
}
91+
92+
public Line getChild() {
93+
return child;
94+
}
95+
96+
public void setChild(Line child) {
97+
this.child = child;
98+
}
8899
}

markdown/src/main/java/com/zzhoujay/markdown/parser/LineQueue.java

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,16 @@ public Line removeNext() {
103103

104104
public Line removePrev() {
105105
Line t = lines.remove(position);
106-
if (position <=0) {
106+
if (position <= 0) {
107107
position = 0;
108108
}
109109
return t;
110110
}
111111

112+
public void insert(Line line) {
113+
lines.add(position + 1, line);
114+
}
115+
112116

113117
@Override
114118
public CharSequence getBuilder() {
@@ -150,11 +154,6 @@ public void setCount(int typeCount) {
150154
super.setCount(typeCount);
151155
}
152156

153-
@Override
154-
public int getLineNum() {
155-
return super.getLineNum();
156-
}
157-
158157
@Override
159158
public int getAttr() {
160159
return get().getAttr();
@@ -165,6 +164,26 @@ public void setAttr(int attr) {
165164
get().setAttr(attr);
166165
}
167166

167+
@Override
168+
public void setParent(Line parent) {
169+
get().setParent(parent);
170+
}
171+
172+
@Override
173+
public Line getParent() {
174+
return get().getParent();
175+
}
176+
177+
@Override
178+
public Line getChild() {
179+
return get().getChild();
180+
}
181+
182+
@Override
183+
public void setChild(Line child) {
184+
get().setChild(child);
185+
}
186+
168187
@Override
169188
public String toString() {
170189
return "LineQueue{" +

0 commit comments

Comments
 (0)