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);
Протестировать на пригодность для использования в разных браузерах можно прямо тут!
Если кому не сложно, отпишитесь пожалуйста где «heredoc» работает, а где нет.
Автор: mgkirs