尝试使用 Python 正确缩进和缩进 asp 代码

  • 本文关键字:缩进 asp 代码 Python python
  • 更新时间 :
  • 英文 :


我正在尝试使用Python来正确缩进和缩进asp代码。
与 http://www.aspindent.com/类似,我正在尝试正确缩进和缩进我正在使用的一些 asp 代码。问题是,asp代码太长,无法被网站解析。

那时我决定我应该尝试自己编程。
在采用这种方法时,我遇到了一些需要帮助解决的问题。

这是一段示例代码,我的程序可能会解析

if some_bool then
code
code
code
end if
code
code

然后它将正确缩进代码,然后变成这样

if some_bool then
code
code
code
end if
code
code

如您所见,最后一个end if也缩进了 我不确定如何正确地在末尾缩进末尾的 if 语句。我试图在我的代码中保持一种 DRY 方法,我立即意识到试图修复这部分可能会变得非常奇怪。因此,对于这部分,将不胜感激。

最后,如果还有其他我应该注意的缩进和缩进关键字,请告诉我。

这是我到目前为止创建的代码。

"""
IF BOOL THEN
CODE
CODE
END IF
IF BOOL THEN
CODE
CODE
ELSEIF BOOL THEN
CODE
CODE
END IF
IF BOOL THEN
CODE
IF BOOL THEN
CODE
END IF
CODE
IF BOOL THEN
CODE
ELSEIF BOOL THEN
CODE
END IF
CODE
END IF

"""
import re, sys

def print_ln(space, string):
sys.stdout.write(" " * space + str(string))
sys.stdout.flush()

def main(string):
space = 0
for s in string:
print_ln(space, s)
if re.search("^s*if.*then", str(s), re.IGNORECASE):
space += 4
if re.search("^s*for", str(s), re.IGNORECASE):
space += 4
if re.search("^s*elseif.*then", str(s), re.IGNORECASE):
space -= 4
if re.search("^s*end if", str(s), re.IGNORECASE):
space -= 4
if re.search("^s*next", str(s), re.IGNORECASE):
space -= 4

with open("scratch.html") as s:
main(s.readlines())

缩进很容易,缩进很容易。缩进然后缩进需要对文本的打印方式进行一些深思熟虑,但也很容易。

为了完成这项工作,我们需要将上述任务拆分为它们自己的功能。这包括将行打印附加到这些功能上。这将控制何时打印和不打印。

下面的代码。

"""
IF BOOL THEN
CODE
CODE
END IF
IF BOOL THEN
CODE
CODE
ELSEIF BOOL THEN
CODE
CODE
END IF
IF BOOL THEN
CODE
IF BOOL THEN
CODE
END IF
CODE
IF BOOL THEN
CODE
ELSEIF BOOL THEN
CODE
END IF
CODE
END IF

"""
import re, sys

class Indenter:
def __init__(self, string):
self.space = 0
self.count = 0
self.string = string
def print_ln(self, string):
sys.stdout.write(" " * self.space + str(string))
sys.stdout.flush()
def indent(self):
self.print_ln(self.string[self.count])
self.space += 4
def dedent(self):
self.space -= 4
self.print_ln(self.string[self.count])
def dedent_indent(self):
self.space -= 4
self.print_ln(self.string[self.count])
self.space += 4
def main(self):
while self.count < len(self.string):
if re.search("^s*if.*then", str(self.string[self.count]), re.IGNORECASE):
self.indent()
elif re.search("^s*for", str(self.string[self.count]), re.IGNORECASE):
self.indent()
elif re.search("^s*with", str(self.string[self.count]), re.IGNORECASE):
self.indent()
elif re.search("^s*do until", str(self.string[self.count]), re.IGNORECASE):
self.indent()
elif re.search("^s*do", str(self.string[self.count]), re.IGNORECASE):
self.indent()
elif re.search("^s*Select Case", str(self.string[self.count]), re.IGNORECASE):
self.indent()
elif re.search("^s*End Select", str(self.string[self.count]), re.IGNORECASE):
self.dedent()
elif re.search("^s*loop", str(self.string[self.count]), re.IGNORECASE):
self.dedent()
elif re.search("^s*end with", str(self.string[self.count]), re.IGNORECASE):
self.dedent()
elif re.search("^s*end if", str(self.string[self.count]), re.IGNORECASE):
self.dedent()
elif re.search("^s*next", str(self.string[self.count]), re.IGNORECASE):
self.dedent()
elif re.search("^s*Case", str(self.string[self.count]), re.IGNORECASE):
self.dedent_indent()
elif re.search("^s*else", str(self.string[self.count]), re.IGNORECASE):
self.dedent_indent()
elif re.search("^s*elseif.*then", str(self.string[self.count]), re.IGNORECASE):
self.dedent_indent()
else:
self.print_ln(self.string[self.count])
self.count += 1

with open("scratch.html") as s:
ind = Indenter(s.readlines())
ind.main()

最新更新