[recovery mode] В Java Script нет heredoc. Что совсем нет?

console.log (hered0c); Меня нетСовсем нетПолностью — до конца! Меня никогда не было и не будет.И не спрашивайте на форумах где я, Там меня всегда бьют и обижают потом! Они не понимают меня и не знают где я… © HEREDOCНе буду томить в, Java Script действительно нет heredoc.

Но черт возьми! Это нисколько не помешало HEREDOC`у написать это.

Этот пример протестирован мной на Midori и Chrome. Как то в Opere и Firefox я не сомневаюсь, на IE всегда приходиться надеяться)). Так что есть основания для оптимизма!

У этого способа есть единственное ограничение: нельзя употреблять в такой последовательности вот эти 2 символа */ — в принципе у всех скриптовых heredoc есть такие ограничения. Просто обычно они позволяют нам выбрать те символы которые не будут использоваться внутри heredoc.

Приступим:

! function (root) {

function heredoc (fn) { return fn.toString ().split ('\n').slice (1,-1).join ('\n') + '\n' }

var stripPattern = /^\s*(?=[^\s]+)/mg heredoc.strip = function (fn) { var text = heredoc (fn) var indentLen = text.match (stripPattern) .reduce (function (min, line) { return Math.min (min, line.length) }, Infinity)

var indent = new RegExp ('^\\s{' + indentLen + '}', 'mg') return indentLen > 0 ? text.replace (indent, '') : text }

if (typeof exports === 'object') { module.exports = heredoc } else if (typeof define === 'function' && define.amd) { define (function () { return heredoc }) } else { root.heredoc = heredoc } }(this) А теперь тестируем:

var hered0c = heredoc (function () {/* Меня нет Совсем нет Полностью — до конца! Меня никогда не было и не будет. И не спрашивайте на форумах где я, Там меня всегда бьют и обижают потом! Они не понимают меня и не знают где я… © HEREDOC */}); console.log (hered0c); GitHubJSFiddle

Протестировать на пригодность для использования в разных браузерах можно прямо тут! Если кому не сложно, отпишитесь пожалуйста где «heredoc» работает, а где нет.

© Habrahabr.ru