Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
魔法少女赵志辉
ap2021a-project
Commits
5646304b
Commit
5646304b
authored
Sep 08, 2021
by
魔法少女赵志辉
🍊
Browse files
完成了文档预览器的Project1的草稿。
parent
df9ca65c
Changes
2
Hide whitespace changes
Inline
Side-by-side
project1-draft/project1-document_previewer-draft.pdf
0 → 100644
View file @
5646304b
File added
project1-draft/project1-document_previewer-draft.tex
0 → 100644
View file @
5646304b
\documentclass
{
dreamClass
}
\def\CC
{
{
C
\nolinebreak
[4]
\hspace
{
-.05em
}
\raisebox
{
.4ex
}{
\small\bf
++
}}
}
\usepackage
[most]
{
tcolorbox
}
\newenvironment
{
note
}
{
\begin{center}
\em
\begin{tcolorbox}
[colback=gray!5,
colframe=black,
width=.9
\textwidth
,
arc=1mm, auto outer arc,
boxrule=0.5pt,
]
}
{
\end{tcolorbox}
\end{center}
}
\title
{
\vspace
{
-50pt
}
\textbf
{
\Huge
Project1
}
\\
\textbf
{
\huge
文档预览器
}
\\
\small
Version 0.1.0
\\
\text
{
\color
{
red
}
此文档尚未经过助教和老师的审核,只作草稿使用。
}
}
\author
{
刘添翼
\thanks
{
\href
{
mailto:tyi.liu@outlook.com
}{
tyi.liu@outlook.com
}}}
\affil
{
计算机科学与技术系,南京大学
}
\date
{
\today
}
\begin{document}
\maketitle
\thispagestyle
{
empty
}
\section
{
最后期限
}
Project1的最后期限是
\textbf
{
北京时间2021年10月10日23时59分
}
。
在此之前,每位同学需要提交课程项目的源码、可执行文件和项目报告到待定的某个指定地点。
\section
{
概述
}
各位同学来到南京大学计算机系学习,想必写过很多课程作业和实验报告。
这些作业和报告,可以统称是文档。
写文档时所用的语言,
可能是纯文本;
可能是某种带标记的文本,即所谓标记语言,比如Markdown或者
\LaTeX
{}
;
也可能是(看起来就不像一般文本的)Microsoft Word…
而用这些语言写成的文档,则分别有不同的扩展名,如
\texttt
{
.txt
}
、
\texttt
{
.md
}
、
\texttt
{
.tex
}
和
\texttt
{
.docx
}
。
考虑预览这些文档的正确姿势。
纯文本的话可以用任何一个文本编辑器,比如
\emph
{
记事本
}
。
Markdown和
\LaTeX
{}
格式的文件虽然也可以用记事本打开,但文档中夹杂有很多(看起来意义不明的)标记。对于Markdown,可能需要Typora之类的软件才能正确地渲染这些标记;对于
\LaTeX
{}
,可能只有编译成PDF才能愉快地阅读了。
Word格式的话看起来则更加困难:记事本打不开它们了。
(好吧,悄悄地说一句:其实
\texttt
{
.docx
}
是一个
\texttt
{
.zip
}
压缩包,解开之后能在
\texttt
{
word/document.xml
}
里找到用XML格式描述的文档内容。)
这样,我们可以发现,虽然这些文档的格式并不相同,但从主体上看,它们都是带标记的文本文件。于是我们可以畅想,如果有这样一个(我们自己写的)程序,能够预览这些格式的文档,那该多有趣啊!
所以,让我们写一个文档预览器吧!
\section
{
原则
}
预览器必须是从第一行代码开始写成的,符合面向对象和泛型程序设计范式的,
\CC
{}
程序。推荐使用第三方的
\CC
{}
图形库来完成界面的绘制,键盘鼠标事件的捕获和处理等等内容,这样可以集中精力设计和实现预览器的架构。
\section
{
技术指标
}
我们参考带提供Markdown预览支持插件的Visual Studio Code,制订了这份技术指标。本节是Project1的基本要求,显式标注成
\begin{note}
可选的
\end{note}
内容之外的所有内容都需要完成。
\subsection
{
工作流程
}
预览器应该接受一个文件(的路径)作为参数。它将打开传入的文件,根据其扩展名确定文件使用的语言,然后分别进行渲染,最终把渲染得到的结果展示在预览界面中。
\begin{note}
为了使用上的方便,当然可以加入一个图形化的文件选择界面——这应该是每个图形库都会提供的设施,所以应该并不困难。
\end{note}
\begin{note}
可以考虑加入一个编辑界面。对于可以直接编辑的文本,在编辑界面中进行修改,则可以在预览界面中看到修改后的文档的渲染结果。编辑功能
\text
{
\color
{
red
}
在Project1中
}
不做要求。
\end{note}
\begin{note}
可以考虑加入一个文件搜索器。可以通过文档的名字对其进行搜索,也可以用正则表达式进行模糊匹配和重命名。文件搜索器
\text
{
\color
{
red
}
在Project1中
}
不做要求。
\end{note}
预览器对文档的渲染结果应该是一个标准的HTML文件。这样,可以方便地使用浏览器或者图形库内置的WebView之类的设施把渲染的结果用网页的方式展现出来。
如果感到困惑,可以这样理解:
\textbf
{
我们要实现的,是一个解析器/转换器/编译器。
}
输入是一种带
\emph
{
给人读的
}
标记的文本,比如Markdown;
输出是另一种
\emph
{
给程序读的
}
带标记的文本,即HTML(
\textbf
{
H
}
yper
\textbf
{
T
}
ext
\textbf
{
M
}
arkup
\textbf
{
L
}
anguage)。这种文本被广泛地用于互联网页面的展示。
\begin{note}
是的,完全没有必要重新造一个HTML渲染器。那样的话太无聊了,一点也不有趣。
\end{note}
\subsection
{
支持的语言
}
预览器需要支持使用下列常规语法的Markdown
\footnote
{
可以参考
\url
{
https://www.markdown.xyz/basic-syntax
}
中给出的语法。
}
:
\begin{description}
\item
[标题]
在一行的起始位置连用若干个
\mintinline
{
md
}{
#
}
,表示不同级别的标题。也可以使用连续的
\mintinline
{
md
}{
=
}
或者
\mintinline
{
md
}{
-
}
。
\item
[段落]
使用一个空行来开启新的段落。
\item
[换行]
在一行的末尾使用多于两个空格来换行。
\item
[强调]
使用一对
\mintinline
{
md
}{
*
}
或者
\mintinline
{
md
}{_}
包围的内容需要渲染成斜体;两对的则是粗体。
\item
[列表]
使用
\mintinline
{
md
}{
+
}
、
\mintinline
{
md
}{
-
}
或者
\mintinline
{
md
}{
*
}
作为一行的起始,后续的文本将成为无序列表的一项;使用数字和点号的话,后续的文本将成为有序列表的一项;通过缩进列表项可以创建嵌套的列表。
\item
[引用]
在一行的起始位置使用
\mintinline
{
md
}{
>
}
来创建引用。引用也可以嵌套。
\item
[代码]
用一对
\mintinline
{
md
}{
`
}
包裹的内容成为行内代码;用额外的至少四个空格宽的缩进表示一个代码块。也可以使用一对
\mintinline
{
md
}{
```
}
或者
\mintinline
{
md
}{
~~~
}
包裹一个代码块。
\item
[链接]
用
\mintinline
{
md
}{
[]
}
括起链接的文本,随后用
\mintinline
{
md
}{
()
}
括起链接的URL。
\item
[图片]
首先用
\mintinline
{
md
}{
!
}
,随后紧跟一个链接,其中文本部分是图片的描述,URL部分则是图片的URL。
\item
[HTML标签]
可以直接在Markdown文本中使用HTML的语法。
\end{description}
\begin{note}
对
\LaTeX
{}
和Word的支持
\text
{
\color
{
red
}
在Project1中
}
不做要求。Markdown的高级语法也不必强求,开心就好。
\end{note}
\end{document}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment