如何用Markdown写出像不知火舞和谁样子最像的日志

如何用最快速度撸个最简单的markdown编辑器 - 简书
如何用最快速度撸个最简单的markdown编辑器
相信不少小伙伴看过笔者前面发的《iOS中UIWebView与WKWebView、JavaScript与OC交互、Cookie管理看我就够》系列了吧,文章中笔者介绍过很多关于Native与JS交互的使用。今天呢,笔者来用最快速度撸个最简单的Markdown编辑器。
其实iOS原生Markdown编辑器的实现方式有很多,Github上面也有一些比较厉害的库,本着不重复造轮子的原则,markdown纯文本转html字符串这部分就不自己实现了,其他部分笔者用JavaScriptCore结合JS和OC(Swift其实也一样),来实现一个简单的Markdown编辑器。
这篇文章不是为了教大家如何开发Markdown编辑器,而是为广大iOS开发者打开一个新的思路,我们能使用的不只是iOS开源库,有了JavaScriptCore,即便脱离开WebView,我们也是可以使用JavaScript开源库的~
下面为小伙伴介绍下具体的实现细节,,希望小伙伴们喜欢的给个Star。
添加工具栏
如何在iOS上实现一个markdown编辑器呢?让我们来分析下。
首先,既然是编辑器,那应该会用到UITextView控件。
其次,用户是在UITextView上输入的文本,那作为一个编辑器,应该会有预览功能,点击预览则可以看到html页面。
再次,点击预览实现的是markdown纯文本转html字符串,怎么实现呢?
最后,考虑给UITextView的inputAccessoryView添加一些用户常用的按钮,比如“#、link、img”等,便于用户操作。
上面提到的是笔者在做一个markdown编辑器时的思路,其实这个很重要,小伙伴们在遇到问题和处理问题时,也应该先整体思考,分析一下,然后得出实现方案,最后再去落实,养成一个好的习惯。
笔者的方案如下:
页面结构:一个UIViewController上面放一个UITextView,顶部NavigationBar上面放个预览按钮和保存按钮。点击预览,查看编辑好的预览页;点击保存,保存当前文章到沙盒目录(真的业务需求的话可能是发送)。
UITextView的markdown纯文本转html字符串,,至于交互,使用JavaScriptCore(不重复造轮子,就不自己写正则处理了)。
预览页直接用WebView加载html字符串即可。
这个So easy,分分钟~如下图
上面的图足够明确了吧~
编辑页中持有一个JSContext对象,同时持有一个inputBar,一个TextView(正文),一个UITextField(标题)。
预览页中是一个UIWebView(也可以是WKWebView)。
EditViewController中首先实现初始化方法。
- (void)initialize
self.textView.textContainerInset = UIEdgeInsetsMake(10, 5, 10, 5);
//错误回调
[self.jsContext setExceptionHandler:^(JSContext *context, JSValue *exception){
NSLog(@"%@", exception.toString);
//markdown -& html
js参考 /showdownjs/showdown
static NSString *
static dispatch_once_t onceT
dispatch_once(&onceToken, ^{
js = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"showdown" ofType:@"js"] encoding:NSUTF8StringEncoding error:nil];
[self.jsContext evaluateScript:js];
//注入function
markdown -& html,使用时,可以通过 convert('xxx'); 调用
NSString *jsFunction = @"\
function convert(md) { \
return (new showdown.Converter()).makeHtml(md);\
[self.jsContext evaluateScript:jsFunction];
上面的代码中,我们提前给jsContext注入showdown.js文件,然后可以使用(new showdown.Converter()).makeHtml(md);的方法来将markdown字符串转换为html字符串。那么我们也提前注入了一个方法convert function来供我们自己调用。
添加工具栏
有一些字符,比如"*、-"等都是很常用的,这里我们添加一个工具栏,便于用户快捷操作。我们在初始化方法initialize中添加如下的方法。
self.textView.inputAccessoryView = self.inputB
当用户点击inputBar上的按钮时,触发事件:
点击了toolBar上面的item
@param item item
- (IBAction)inputBarItemClicked:(UIBarButtonItem *)item
NSString *title = item.
//插入的文本内容
NSString *insertT
//插入文本内容后,移动光标到指定位置
NSRange selectedRange = self.textView.selectedR
if ([title isEqualToString:@"link"]) {
insertText = @"[]()";
selectedRange.location += 1;
//移动到 [ 后面
} else if ([title isEqualToString:@"img"]) {
insertText = @"![]()";
selectedRange.location += 4;
//移动到 ( 后面
insertText =
selectedRange.location += title. //移动到插入文本的最后
//插入文本
[self.textView insertText:insertText];
//移动光标
self.textView.selectedRange = selectedR
工具栏输入
此时用户可以愉悦地编辑内容,当用户编辑完成时,可以点击预览。预览的方法实现:
@param sender item
- (IBAction)preview:(id)sender
//标题不能为空
if (!self.titleTextField.text.length) {
[self showMessage:@"请先填写文章标题"];
//跳转到预览页
[self performSegueWithIdentifier:kShowPreviewSegueId sender:self];
#pragma mark - Setters and Getters
- (NSString *)htmlString
//markdown -& html
JSValue *jsFunctionValue = self.jsContext[@"convert"];
JSValue *htmlValue = [jsFunctionValue callWithArguments:@[self.textView.text]];
return [NSString stringWithFormat:@"\
&title&%@&/title&\
", self.titleTextField.text, htmlValue.toString];
#pragma mark - Navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
//跳转到预览页
if ([segue.identifier isEqualToString:kShowPreviewSegueId]) {
PreviewViewController *vc = segue.destinationViewC
vc.htmlString = [self htmlString];
vc.title = self.titleTextField.
点击预览,跳转到PreviewViewController页面,同时传递htmlString。这里如何获取htmlString呢?之前我们在initialize方法里,提前注入了名为convert的方法,现在我们来调用它
JSValue *jsFunctionValue = self.jsContext[@"convert"];
JSValue *htmlValue = [jsFunctionValue callWithArguments:@[self.textView.text]];
那我们很容易获取到了markdown文本转换成html的字符串了,然后我们给这个字符串完善下,添加上html标签、head标签以及页面的title,然后传递给预览页,直接展示就OK了。
效果如下图
其实保存,这里只是简单实现,保存到沙盒。实际业务需求,很可能是一个发送按钮,上传到服务器,或者是分享到其他的App。这里简单介绍下保存到沙盒。下面上代码
保存到沙盒目录
@param sender item
- (IBAction)save:(id)sender
//标题不能为空
if (!self.titleTextField.text.length) {
[self showMessage:@"请先填写文章标题"];
NSData *data = [self.textView.text dataUsingEncoding:NSUTF8StringEncoding];
NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstO
NSString *filePath = [documentPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.md", self.titleTextField.text]];
//写入文件
[data writeToFile:filePath atomically:YES];
NSLog(@"md成功保存,地址%@", filePath);
[self showMessage:@"保存成功"];
保存的时候,直接保存源码到本地,就好了,文件命名为标题.md。
当我点击保存时,保存到本地,同时输出
DAMarkdownEditor[] md成功保存,地址/Users/DarkAngel/Library/Developer/CoreSimulator/Devices/CFA6-4EC2-AB99-EA/data/Containers/Data/Application/AEC3-4E4C-94CB-/Documents/A test title.md
我们用Safari,Cmd+Shift+G,打开上面的地址可以看到
md文件已保存
打开这个文件,可以查看下,源码就是我们输入的内容。
其实到这里,我们已经完成一个简单的Markdown编辑器。但是小伙伴们可能会说,预览的html太丑了,中间的代码块都没有高亮。那如何解决呢?
如果你拥有一点点前端知识,你会立刻想到,少了一个好看的css样式。我们可以通过给html添加css,来使页面看起来更好看。
下面我们在- (NSString *)htmlString方法中,给html添加css,这里我本地添加了一个css文件,直接读取并拼接到head标签中
- (NSString *)htmlString
//markdown -& html
JSValue *jsFunctionValue = self.jsContext[@"convert"];
JSValue *htmlValue = [jsFunctionValue callWithArguments:@[self.textView.text]];
//加载css样式
static NSString *
static dispatch_once_t onceT
dispatch_once(&onceToken, ^{
css = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"markdown" ofType:@"css"] encoding:NSUTF8StringEncoding error:nil];
return [NSString stringWithFormat:@"\
&title&%@&/title&\
&style&%@&/style&\
", self.titleTextField.text, css, htmlValue.toString];
好啦,让我们再点击预览一下
添加css后,点击预览
这下好看多了,如果小伙伴们想要自定义样式,只需要修改css文件就OK啦,当然Github上有很多好看的样式哦~可以找找看,也可以自己修改下css。
至此,我们的Markdown编辑器就完成了,EditViewController一共181行,PreviewViewController一共38行,加上一个简单的Storyboard,我们的编辑器非常清爽。后续,可以再优化下页面的UI、InputBar中多添加一些快捷按钮,优化下UE,我们就可以上传AppStore啦~
上面我们用很少的代码,很少的时间完成了一个简单的Markdown编辑器,又一次证明了JavaScriptCore的强大,同时也证明了前端如此火热的今天,Native开发依然是王道。
Github前十的开源项目中,有六款是基于JavaScript语言的。可能有些小伙伴作为一个Native端开发,会很方,很多小伙伴开始学习前端,学习js。当然,学习新的东西本就无可厚非。但我相信,被动学习的不在少数。
那么,我们可不可以利用它,结合Native打造更好的App呢?答案是:一定可以。
彼时斜光黯去,花落如雨。&&37551 阅读
{{ page.title }}
随着互联网的进步和技术积累,国内技术圈交流的气氛越来越浓,微博博客上到处可见有质量的技术贴,但是有时候想系统阅读时却不是很方便,如果能够整理成册自由分享该有多好。虽然少数人有幸通过出版社出书了,但代价太大,也不能普及大众,现在技术那么发达,有没有办法自己自助出版呢?
看了图灵社区的文章,作为爱书之人,我为什么不能想个办法来解决呢?
技术无极限,办法现在有好几种,在本文中,我就介绍用现在流行的Markdown格式的方式来产生专业的书籍,而且还可以做到利用互联网,不需要本地机器参与的完美方案。如果你喜欢微软的Word,觉得用它已经足够了,那我们不是同道,不用往下看了。
markdown能做出什么效果呢?
多说无益,先来看看效果吧。下面是我去年写的一本小册子: 在PDF阅读器中的效果。注意还有完整的目录和页眉。
书的内容就全是用markdown格式写的,上图相对应的文件内容(6.2节)片断如下。
## Cucumber 简介 ##
Cucumber(英文:黄瓜)(官方网站是&/&)是一个实例化需求的极佳实现伴侣。它是基于Ruby的开源测试工具,得益于Ruby便于创建和使用DSL的特性,它可以通过自然语言(文本文字)来描述需求(业务层),并通过关键字驱动和正则表达式匹配告诉去做哪些事情(驱动层),在运行自动化测试结束以后,还会给出详细的报告。
Insert 18333fig0601.png
图 6-1. Cucumber的架构
下面就是一个加法例子的需求描述,Cucumber文件以`.feature`结尾。
# 加法 adding.feature
Feature: Adding
In order to avoid silly mistakes
As a math idiot
I want to be told the sum of two numbers
下面就是书的全部markdown文件,每一章一个文件。我把它们分成了序、前言、致谢、正文和附录,蛮像回事吧。有兴趣的朋友可以看看,来了解标准的书是怎么组成的。
zh/0preface
zh/0preface/00-chapter1-preface.markdown
zh/0preface/00-chapter2-changes.markdown
zh/0preface/00-chapter3-acknowledgement.markdown
zh/1chapters
zh/1chapters/01-chapter1-agile-scrum.markdown
zh/1chapters/01-chapter2-git-gerrit.markdown
zh/1chapters/01-chapter3-ci.markdown
zh/1chapters/01-chapter4-java.markdown
zh/1chapters/01-chapter5-sbe.markdown
zh/1chapters/01-chapter6-cucumber.markdown
zh/1chapters/01-chapter7-workshop.markdown
zh/2appendix
zh/2appendix/02-chapter1-sample.markdown
zh/2appendix/02-chapter2-cc2git.markdown
全书的内容够可以在github上找到
样式的产生全部有模板完成,一般不需要改动,这个稍后讲。
什么是markdown
有兴趣了,就可以聊聊markdown了,简单来说,markdown格式的文件看着像一般的文本文件,里面只是加了很少的格式标记,因此看文本文件也不影响理解,这种格式也有很多工具帮你去转化,而且很容易自动化解决。并且这些技术大多数是开源或免费的。
如 ## Cucumber 简介 ##就可以转换成html的&h2&Cucumber 简介&/h2&或者书中的小节, 空四个就是表示代码,是否很简单。具体可以看图灵社区的文章
为什么要用markdown
原因也很简单,因为简洁和流行。markdown格式的普及要归功于Github和。因为它们越来越流行,它们支持markdown格式也越来越流行。这里要赞一个的是,国内的也支持markdown,用起来超级方便。
我的体会是,它让你关注内容,格式怎么显示不是要你在写得时候关注的。Word让我讨厌的原因就是老要关注格式。
实际上核心是软件思想中的分离,就像HTML关注内容,CSS关注格式表现一样。
背后的魔法
从Markdown源文件产生电子书一般有两种方案:一种是产生HTML中间格式再转换出电子书,另一种是对应地转换产生出文件格式,再和LaTeX模板合在一起,最后转换产生PDF,达到标准书籍出版的质量(完整的封面,目录,页眉等等),这里主要讨论第二种。
LaTeX(就是Donald E. Knuth(高德纳)发明的)是一个出版界(至少是科技界)常用的格式,PDF也能很容易地产生出来,它的好处是内容和形式是很容易分开的,感谢大师的设计。
Markdown可以通过工具自动转换出LaTeX的标准内容。
\section{Cucumber 简介} %
就是上面由## Cucumber 简介 ##自动生成的LaTeX内容,表示小节。
余下书的表现形式就有预先调好的LaTeX的模板来处理,像页眉、目录、字体之类的和内容无关的就全部有LaTeX搞定了。不同的出版社或者图书系列都会有特定的模板,这和作者的内容无关。
这有点像HTML和CSS的关系。下面这一段是调整小节标题显示:
\definecolor{colorsection}{RGB}{95,158,160}
% CadetBlue
\setromanfont[Mapping=tex-text,BoldFont=&WenQuanYi Micro Hei&]
\titleformat{\section}
{\color{colorsection}\normalfont\Large\bfseries}
{\color{colorsection}\thesection}{1em}{}
\bfseries 是让 LaTeX 使用粗体字排版,这儿选择了文泉驿的微黑。
下面这一段是调出页眉左上角(LE=Left Head)的:显示页码和内容,颜色设定为钢铁蓝,
\definecolor{colorheader}{RGB}{70,130,180} % SteelBlue
\fancyhead[LE]{\color{colorheader}\quad\small\textbf\thepage\quad\quad\small\leftmark} %页眉左上角
初看有点复杂,学习曲线蛮陡的。不懂的话,知道里面含有样式就可以了,反正你可以用现成的模板,这也是出版的专业所在,不用写书的负责。
工具软件能帮着从markdown转换出LaTeX格式,然后通过软件中的xelatex再转成PDF格式。
强烈建议你到试一下。
这里主要讨论PDF的格式,实际上epub/mobi格式的用pandoc生成也很方便。
其他常用格式的出版方案
计算机类图书对格式要求不是很多,图文、章节、源代码基本就够了,就算有些复杂公式,也可用图来显示。这也从理论上说明,它不需要复杂的格式。现在对这类技术书出版我的理解主要有几种:
Microsoft的Word格式,虽然国内出版界如日中天,缺省就认它(对技术没追求,鄙视)。简单好学,但是不擅长自动化,是开源的死敌。
直接用LaTeX格式,这是很棒的东西,特别适合学术类的各种复杂的公式等,不过学习曲线很高,国内也只有几家学术期刊使用。
DocBook格式是最有名的(从SGML演化过来),O'Reilly和Pragmatic出版社缺省就用它,它能很方便地转化出出版要的各种样式。如开源书就是采用docbook。但由于是XML格式,很多人不习惯,而且多人网上协作不是很方便。
通过蒋鑫的开源书,我也了解reStructureText也是和markdown差不多纯文本(plain text)的,也是蛮流行的,结合也所向无敌。
自己动手产生电子书
讲了那么多,作为码农,该动手实践一下,其他读者可以跳过这一章。
你需要一台Linux机器(虚拟机就可以了)和简单的Linux命令就可以试验了。有git和ruby的知识那就更方便了。
我用的试验环境是Ubuntu 12.04 (Precise) 版本。
下载书的源代码
很简单,git clone一下就可以了,下载它的源文件包我觉得还是烦了点。
$ git clone /larrycai/sdcamp.git
生成PDF是一个比较复杂的东西,用到了和软件,用Ubuntu库里就可以了。关于Pandoc,可以看图灵社区翻译的文章,TexLive就是LaTeX的工具集。
$ sudo apt-get install pandoc
$ sudo apt-get install texlive-xetex texlive-latex-recommended texlive-latex-extra # 安装texlive 2011
因为是中文PDF,需要把字体嵌入在文件中,因此需要安装字体文件(如果不是Ubuntu中文版),具体可看我在图灵社区的文章
$ sudo apt-get install ttf-arphic-gbsn00lp ttf-arphic-ukai ttf-wqy-microhei ttf-wqy-zenhei
现在你就可以生成pdf文件了。
mkbok 脚本
pandoc本身也支持模板,但很多情况下,还需要调整,写个脚本就方便多了。我用的脚本mkbok是基于里面的脚本makeebooks和makepdfs开发的。原书作者Scott原来还用产生epub文件,我统一用pandoc。并原有的基础上进行了扩展,统一为mkbok脚本。
$ ./mkbok --build pdf,html,epub --lang zh --template latex/template.tex
这样就可一次性完成电子书的活,而且还改造了LaTeX模板(加了前言、致谢和页眉等,使它最后的结果更像一份标准的书。主要功能差不多,但是扩展应该会更好些,特别是有机会更方便地采用不同的专业模板。
基于Github和Travis-ci的互联网在线方案
你可以建一套基于上述技术的方便的出版系统。不过也可以利用互联网的服务,混搭一下。Github和Travis-ci就是我要利用的混搭服务。
Github和Travis CI这里就不介绍怎么使用了,具体可以先看和蒋鑫的,强烈建议你先试一下。要不下期码农吧。
简单道理就是当你把代码推送到Github时,就可以触发Travis-ci的构建。Travis-ci会启动一个基于Virtualbox的Ubuntu的虚拟机(当前是12.04版本),然后根据你的.travis-ci.yml中的配置来构建你的产品,也就是执行上面的步骤来产生PDF文件。
构建结束后,虚拟机会被删除掉,虽然Travis-ci网站本身没有提供归档功能,但是Github的API提供了极好的方法来上传文件。所以我们可以用Github API和Travis-ci的保密环境变量的方式来把Travis-ci的结果上传回Github。
具体请看我的博客。
李明老师的也是此方案的忠实用户,基本上可以全用浏览器解决。
里面的技术细节还有蛮多的,不知是否你都明白,实际上照着试一遍,你会发现不是那么复杂。如果有问题,尽管找我 (@larrycaiyu)。
我一直设想中有一天上面提到的各个环节都能打磨得非常流畅,吸引更多的使用者。然后能够有很多人有兴趣用它来写书,可能是自娱自乐,也可以免费出版。不管怎样都是促进图书业。
出版界或者LaTeX的高手可以提供设计些更好的LaTeX模板(可以收费)供大家使用。
图灵出版社也提供网上的编辑服务(当然是可以收费的),对一些想把书写得专业点的作者提供额外的帮助,这样或许是一个很好的增值服务。至少像我这样的文笔超烂的技术人员很想得到的。
这些本是我2012想做到的事情:,而且域名都买好了,留个遗憾放到明年吧。
技术无极限,只怕没追求。
爱读书,爱钻研
爱敏捷,爱分享
爱好软件开发的方方面面什么是markdown:
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。
Markdown具有一系列衍生版本,用于扩展Markdown的功能(如表格、脚注、内嵌HTML等等),这些功能原初的Markdown尚不具备,它们能让Markdown转换成更多的格式,例如LaTeX,Docbook。Markdown增强版中比较有名的有Markdown
Extra、MultiMarkdown、
Maruku等。这些衍生版本要么基于工具,如Pandoc;要么基于网站,如GitHub和Wikipedia,在语法上基本兼容,但在一些语法和渲染效果上有改动。
markdown的宗旨:
Markdown 的目标是实现「易读易写」
HTML 是一种发布的格式,Markdown 是一种书写的格式。Markdown 的格式语法只涵盖纯文本可以涵盖的范围。
markdown使用:
强调:强调的文本
段落b加粗 i斜体 u下划线 del删除线
测试span:测试span
(C) 版权符号
特殊字符:& &
h1-h6号字体:
如何引用和嵌套:
这里也可以只第一行添加”&” 后面都不添加
列表元素:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
viverra nec, fringilla in, laoreet vitae, risus.
Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
Suspendisse id sem consectetuer libero luctus adipiscing.
代码插入法:
Use printf() functioon
#this is a section of python code
import numpy as np
def numpytest():
num=np.arange(0,10,2)
print(num)
numpytest()
如何插入一条线:
--- ___***都可以画一条线
都可以作为列表标记
reference-style link.
图片插入法:
以下符号前面添加反斜杠\来帮助插入普通符号:
在markdown中添加一个表格:
具体源码格式见博客markdown简要说明源码
阅读(...) 评论()如何用Markdown写出像样子的日志
如何用Markdown写出像样子的日志为什么要写这篇文章这是因为我们知道人人正常的日志编辑器用来排版是一件很变态的事情。当然有一个办法是用Word 写好。这样可以保留大部分的格式,但是复制进去之后,你再动一下试试。编辑HTML 也是一种办法,但是我们文傻是肯定不会去记那堆代码的。而且对我而言,用Word 写东西和调格式,是很不容易集中注意力的事情,也是很浪费时间的事情。幸而最近,我因为需要一个在iOS 上输入文字的软件,所以碰巧知道了Markdown。简单尝试之后,我觉得这就是我需要的。什么是Markdown根据维基百科的说法:
Markdown 是一种轻量级标记语言,创始人为John Gruber和Aaron Swartz。它允许人们&使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档&。简单地说,你可以集中注意力写作,同时加上简单直观的格式标记,然后通过Markdown 生成HTML 代码。之后,只要把代码复制到改造过的日志编辑器,就可以产生严格符合预期的格式了。就是这么简单。Markdown 怎么写关于Markdown 的完整语法,参见这里。几个基本的例子:
*Italic* && Italic
**Bold** && Bold
***Bold Italic*** && Bold Italic
[Link](http://some.thing/) && Link以及:
# Heading 1
## Heading 2 &&
###### Heading 6
Heading 6支持Markdown 的软件现在在很多平台上都有支持Markdown 的编辑器。
Windows 下可以使用MarkdownPad。不过目前对中文支持不好,主要是字数统计还不能用。
OS X 最好用的据说是Mou。
iOS 当然也不能遗漏。我现在用的是Byword,支持iCloud 和Dropbox 同步,可以导出HTML 文件,也可以直接作为邮件发送。目前的价格是¥18.00,iPhone和iPad通用。高富帅可以考虑Elements,¥30.00,我没有用过,据说更好。
如何把Markdown 变成日志你需要:
Chrome 浏览器
人人网改造器先启用人人网改造器的允许直接编辑日志HTML代码功能。写完日志之后,导出代码,复制到编辑HTML代码窗口中。这样就得到一篇&像样子&的日志了。
补充: 由于人人这个屌丝网站的问题,指定的标题字号(就像 # Heading 1)会fallback至不那么合适的大小和行距。这就不是Markdown 能够解决得了。我不清楚在代码里加上CSS样式表会发生什么&&
分享这篇日志的人也喜欢
不忘初心,继续前进??
新主播求秒榜
热门日志推荐
人人最热标签
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字
文化部监督电子邮箱:wlwh@··
文明办网文明上网举报电话: 举报邮箱:&&&&&&&&&&&&
请输入手机号,完成注册
请输入验证码
密码必须由6-20个字符组成
下载人人客户端
品评校花校草,体验校园广场}

我要回帖

更多关于 好像很厉害的样子 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信