gpt4 book ai didi

html - 如何将长 HTML 拆分为 "functions"

转载 作者:太空宇宙 更新时间:2023-11-04 13:12:50 25 4
gpt4 key购买 nike

当编写一个非平凡的静态 HTML 页面时,大型结构变得很难看清,精细的结构和内容都混在其中。滚动几页以找到与给定开始标签匹配的结束标签是令人沮丧的。总的来说,感觉凌乱、笨拙且难以维护……就像编写一个没有功能的大型程序。

当然,当我编写大型程序时,我会按层次将其分解为较小的函数。有什么方法可以对大型 HTML 文件执行此操作吗?

基本上我正在寻找一个模板系统,其中要插入到模板中的内容只是更多 HTML,它们是可选的(这是重要的部分)位于同一文件中。

也就是说,我希望能够执行以下假设语法所建议的操作:

<html>
<head>{{head}}</head>
<body>
<div class="header">{{header}}</div>
<div class="navbar">{{navbar}}</div>
<div class="content">{{content}}</div>
<div class="footer">{{footer}}</div>
</body>
</html>

{{head}} =
<title>Hello World!</title>
{{styles}}
{{scripts}}
{{styles}} =
<link rel="stylesheet" type="text/css" href="style.css">
{{navbar}} =
...
...
... and so on...

然后大概会有一种简单的方法来“编译”它以制作标准的 HTML 文件。

是否有任何工具允许以这种方式编写 HTML?

大多数模板引擎都要求每个包含文件都是一个单独的文件,这是没有用的。

更新:Gnu M4似乎正是我正在寻找的那种东西,但有一些警告:

  1. 宏定义必须在使用之前出现,而我更希望它们出现在之后。

  2. M4 的语法与 HTML 混在一起非常尴尬。由于该文件不再是 HTML,因此无法轻松地对其进行语法检查以查找错误。 M4 处理器非常宽容和灵活,有时很难发现 M4 文件中的错误 - 解析器不会提示,甚至不会注意到您所写的内容与您可能的意思不同。

  3. 无法正确缩进 HTML,使输出变得一团乱麻。 (由于生产 HTML 无论如何都可能被缩小,这不是主要问题,如果需要可读,它总是可以通过格式化程序运行。)

最佳答案

这将解析您的模板示例并执行您想要的操作。

perl -E 'my $pre.=join("",<>); my ($body,%h)=split(/^\{\{(\w+)\}\}\s*=\s*$/m, $pre); while ($body =~ s/\{\{(\w+)\}\}/$h{$1}/ge) { if ($rec++>200) {die("Max recursion (200)!")}};$body =~ s/({{)-/$1/sg; $body =~ s/({{)-/$1/sg; print $body' htmlfiletoparse.html 

这是脚本版本。文件 joshTplEngine ;)

#!/usr/bin/perl

## get/read lines from files. Multiple input files are supported
my $pre.=join("",<>);

## split files to body and variables %h = hash
## variable is [beginning of the line]{{somestring}} = [newline]
my ($body,%h)=split(/^\{\{# split on variable line and
(\w+) ## save name
\}\}
\s*=\s*$/xm, $pre);

## replace recursively all variables defined as {{somestring}}
while ($body =~ s/
\{\{
(\w+) ## name of the variable
\}\}
/ ##
$h{$1} ## all variables have been read to hash %h and $1 contens variable name from mach
/gxe) {
## check for number of recursions, limit to 200
if ($rec++>200) {
die("Max recursion (200)!")
}
}
## replace {{- to {{ and -}} to }}
$body =~ s/({{)-/$1/sg;
$body =~ s/-(}})/$1/sg;
## end, print
print $body;

用法:

joshTplEngine.pl /some/html/file.html [/some/other/file] | tee /result/dir/out.html

我希望 perl 的这个小片段能让您进行模板制作。

关于html - 如何将长 HTML 拆分为 "functions",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31242315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com