Используется в flex, bison и autotools, так же при помощи него раньше делали сайты (шаблоны сайтов).

А сейчас существуют реализации этого языка на JavaScript:
https://github.com/jeanlauliac/js-m4

в принципе, это позволяет писать на M4 на Web странице и видеть результат после обработки (если в браузере включен JavaScript).

То есть, можно, например, сделать при помощи него документацию, которая будет работать
при загрузке из локальных файлов (по протоколу file:// ) напрямую в браузер без web-сервера.

И можно генерировать статические страницы для размещения на CDN (либо просто скопировав, либо применив все макросы, чтобы JS стал не нужен).

Лично мне его мешает применять неумение работать с JavaScript и незнание его соглашений. Например, я не знаю, что такое browserify, что такое "transformation Stream" и как всем этим пользоваться (в том числе я не знаком с npm). Можно, конечно, разобраться, но...

Код:
'use strict';

const { Writable } = require('stream');
var M4 = require('m4');

var textEl = document.getElementById('output');
var startText = textEl.innerHTML.toString();
console.log("Input: " + startText);

class MyWritable extends Writable {
	_res = "";

	_write(chunk, encoding, callback) {
    this._res += chunk.toString();
    callback();
	}

	toString() {
    return this._res;
	}
}

var wris = new MyWritable();

var input = new M4();

input.pipe(wris);

input.write(startText);

input.end();

wris.end();

var endText = wris.toString();
console.log("output: " + endText);
textEl.innerHTML = endText;

browserify js/main.js -o js/findem.js -d

Код:
<!DOCTYPE html>
<html>
<head>
<title>js-test</title>
</head>
<body>
<h1>js-test</h1>



<div id="output">define(`beep', `boop')
dnl
beep
</div>

<script src="js/findem.js"></script>

</body>
</html>

Медленно отрисовывает, я вижу как контент заменяется один на другой.
[html]<a href="https://stackoverflow.com/questions/6505419/stop-javascript-flicker-when-pages-content-is-manipulated">https://stackoverflow.com/questions/6505419/stop-javascript-flicker-when-pages-content-is-manipulated</a>[/html]

Отредактировано Лис (2023-09-26 18:55:55)