Используется в 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)