图灵社区 阅读 怎样在 Markdown 中使程序代码带上行号

图灵社区 阅读 怎样在 Markdown 中使程序代码带上行号,第1张

 在图灵社区使用 Markdown 写文章时,如果在一段文字的每行开头加上四个空格,或者一个制表符(Tab),这段文字就会被视为程序代码。这样,就会自动识别所用的编程语言,进行代码染色,语法高亮显示。但是,如果这段程序很长的话,就有两个小问题:

每行的开头要加上空格或制表符,很麻烦。

如果要显示行号的话,就更麻烦了。

因此,我用 C# 语言写了小程序,建设一个 ASP.NET 4 网站来解决上述两个麻烦:

在这个网页中:

Line Count 复选框表示是否需要加上行号。

Prefix 中的的 Space 和 Tab 无线按钮让你选择每行开头是增加空格还是制表符。

Prefix Count 文本框让你输入缩进的层次。默认是缩进一层 。但是如果遇到在有序列表或无序列表中的程序代码,就需要缩进两层,甚至更多层了。

这个网站的总体结构如下所示:

网站的配置文件 Web.config 如下所示:

<?xml version="1.0" encoding="utf-8"?>

<configuration>

<system.web>

<httpRuntime requestValidationMode="2.0" />

<globalization requestEncoding="utf-8" responseEncoding="utf-8" />

</system.web>

</configuration>

网站的 Web 页面文件 CodeFormat.aspx 如下所示:

<%@ Page validateRequest="false" Language="C#" inherits="Skyiv.Ben.Web.CodeFormatPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<meta http-equiv="Content-Type" content="text/htmlcharset=utf-8" />

<title>Code Format</title>

</head>

<body>

<form id="form1" runat="server">

<asp:Button Onclick="Submit" Text="Submit" Runat="Server" />

<span style="background-color:LightBlue">

<asp:CheckBox Id="chkLineCount" Text="Line Count" Checked="True" Runat="Server" />

</span>

<span style="background-color:LightBlue">

Prefix:

<asp:RadioButton Id="rbnSpace" Text="Space" Checked="True"

GroupName="Prefix" Runat="Server" />

<asp:RadioButton Id="rbnTab" Text="Tab"

GroupName="Prefix" Runat="Server" />

</span>

<span style="background-color:LightBlue">

Prefix Count:

<asp:TextBox Runat="Server" Id="tbxLevel" Text="1" Columns="2" MaxLength="1" />

</span>

<hr />

<div>

<asp:TextBox Runat="Server" Id="tbxInput" Wrap="False"

TextMode="MultiLine" Columns="80" Rows="10" />

<br />

<asp:TextBox Runat="Server" Id="tbxOutput" ReadOnly="True" Wrap="False"

TextMode="MultiLine" BackColor="LightBlue" Columns="80" Rows="10" />

</div>

</form>

</body>

</html>

以及对应的后台 C# 代码 CodeFormat.aspx.cs:

1: using System

2: using System.IO

3: using System.Web

4: using System.Web.UI

5: using System.Web.UI.WebControls

6: using Skyiv.Utils

7:

8: namespace Skyiv.Ben.Web

9: {

10: public class CodeFormatPage : Page

11: {

12: protected TextBox tbxInput

13: protected TextBox tbxOutput

14: protected TextBox tbxLevel

15: protected CheckBox chkLineCount

16: protected RadioButton rbnTab

17:

18: protected void Page_Load(object sender, EventArgs e)

19: {

20: tbxOutput.Text = string.Format(" OS: {1} ({2}-bit){0}CLR: {3}",

21: Environment.NewLine, Environment.OSVersion,

22: Environment.Is64BitOperatingSystem ? 64 : 32,

23: Environment.Version)

24: }

25:

26: protected void Submit(object sender, EventArgs e)

27: {

28: var writer = new StringWriter()

29: new CodeFormat(new StringReader(tbxInput.Text),

30: writer).Run(chkLineCount.Checked, rbnTab.Checked, GetLevel(tbxLevel.Text))

31: tbxOutput.Text = writer.ToString()

32: }

33:

34: int GetLevel(string str)

35: {

36: int n

37: if (!int.TryParse(str, out n)) n = 1

38: return Math.Min(5, Math.Max(0, n))

39: }

40: }

41: }

  图灵机是图灵理论中提出的理想模型,可以实现任意复杂的计算。

  英国数学家艾伦·麦席森·图灵在1936年提出了“图灵机”的理论,图灵机设想有一条无限长的纸带,纸带上方有一个个方格,每个方格可以储存一个符号,纸带可以向左或者向右运动。

  图灵机可以做下面三个基本的 *** 作

  下面我们通过一个小例子来简单理解图灵机是怎样进行计算的。这个例子比较简单,我们将在空白的纸带上打印1 1 0这三个数字。

  首先,我们向指针头指向的方框中写入数字1:

  接着,我们让纸带向左移动一个方框:

  这样我们就完成了一个简单的图灵机 *** 作。

  我们来尝试一个稍微复杂点的 *** 作,我们尝试将1 1 0做一个异或 *** 作,即将1 1 0变成0 0 1。要图灵机完成计算,就类似于向图灵机输入以下 *** 作指令,这些指令组成了一个小程序。

  我们假设图灵机的纸带现在的状态是如下图所示:

  现在读取到的符号是0,按照 *** 作指令,我们应该往方框写入1并向右移动一个方框:

  类似地,现在读取到的符号是1,我们重复相同的 *** 作。

  上面我们使用了图灵机成功完成了异或 *** 作,理论上来讲我们也可以完成加法、减法、乘法、除法 *** 作,只不过是实现的步骤(指令)复杂些而已。下面这个网站是一个图灵机的在线模拟器,其实现了一些基本运算,比如:加法、减法等,有兴趣的可以自己去试试看。

Online Turing Machine Simulator

让我们尝试这样的思考历程:

  “图灵机”理论通过假设模型证明了任意复杂的计算都能通过一个个简单的 *** 作完成,从而从理论上证明了「无限复杂计算」的可能性,直接给计算机的诞生提供了理论基础。

从这样的思考历程来看,图灵机的出现为计算机的诞生奠定了理论基础,这就是图灵机诞生的意义。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11811890.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存