HTML-include (локальный импорт) или как собрать один html из кучи маленьких

Крохотный perl-скрипт для облегчения одной нудной задачи.

Подсмотрено тут https://www.linux.org.ru/forum/talks/11731305#comment-11731973

r-asian@localhost:~/Music/dk$ tree
.
├── build.pl
├── index.html
└── pages
    ├── 1.html
    └── 2.html

r-asian@localhost:~/Music/dk$ cat index.html
<html>
<head>
</head>
<body>
<include src="pages/2.html">
</include><include src="pages/2.html">
</include></body>
</html>
r-asian@localhost:~/Music/dk$ cat pages/1.html
	<a class="fancybox-htm fancybox.iframe" id="article_01_ru" 
href="../_pages/article_01/ru/index.html" title="С""123</a>
r-asian@localhost:~/Music/dk$ cat pages/2.html
 <a class="fancybox-htm fancybox.iframe" id="article_02_ru" 
href="../_pages/article_02/ru/index.html" title="С""456</a>
r-asian@localhost:~/Music/dk$ cat build.pl
#!/usr/bin/perl
 
open(A,"index.html");$html = join('',&lt;A&gt;);close(A);
 
foreach $inc(($html=~m|&lt;include.*?src=["'].*?["'].*?&gt;|gi)){
    if($inc=~m|&lt;include.*?src=["'](.*?)["'].*?&gt;|i){
	open(A,$1);$inc_code= join('',&lt;A&gt;);close(A);
	$html=~s|\Q$inc\E|$inc_code|gi;
    }
}
 
open(A,">build.html");print A $html;close(A);

Запускаем build.pl, получаем

r-asian@localhost:~/Music/dk$ cat build.html
<html>
<head>
</head>
<body>
    <a class="fancybox-htm fancybox.iframe" id="article_02_ru" 
href="../_pages/article_02/ru/index.html" title="С""456</a>
 
    <a class="fancybox-htm fancybox.iframe" id="article_02_ru" 
href="../_pages/article_02/ru/index.html" title="С""456</a>
 
</body>
</html>

Добавить комментарий