node.js - Grunt insert string after pattern in file -
i'm building custom task grunt finds particular font, , outputs definition uses php variable configuring particular font.
it uses underscore , postcss.
it groups css selectors use font, , outputs string similar one:
selector1, selector2, selector3 { font-family: <?php echo $font_1 ?>, font 2, font 3, font 4; }
here code custom task:
// extract configurable font data // ====================================================================== grunt.registertask('extractfontdata', 'extract configurable properties', function () { console.log('extracting configurable font data'); var match = /myriad pro/gim; var contents = grunt.file.read('assets/css/leadscon.css'); var css = postcss(function (css) { var findings = {}; css.eachdecl(function (decl) { if (decl.value.match( match ) && decl.parent.selector !== undefined) { var fonts = decl.value.replace(/(\r\n|\n|\r|"|')/gm, "").split(','); var prop = _.find(fonts, function(font) { return font.match(match) }); var finding = findings[ prop ] = findings[ prop ] || {}; finding.selectors = finding.selectors || []; finding.fontstack = finding.fontstack || []; finding.selectors.push( decl.parent.selector.replace(/(\r\n|\n|\r|"|'|\s)/gm, "").split(',') ); finding.fontstack.push( fonts ); finding.selectors = _(finding.selectors).chain().flatten().uniq().value(); finding.fontstack = _(finding.fontstack).chain().flatten().uniq().value(); } }); var result = ''; var j = 0; ( var font in findings ) { findings[font].fontstack.every(function(f, i) { if (f.match(font)) { findings[font].fontstack[i] = '<?php echo $font_' + j++ + ' ?>'; } }); result += findings[font].selectors.join(',') + ' { font-family: ' + findings[font].fontstack.join(',') + ' } '; } console.log(result); // insert result header.php }).process(contents); });
this currently, set result
to:
body,.footer-widget.widget_nav_menu.widget-title { font-family: <?php echo $font_0 ?>, pt sans, helvetica neue, helvetica, arial, sans-serif } h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6,.widget.widget-title,.widget_lc_cta,.header-widget.widget_lc_events.events,.widget_accordion_widget.accordion-widget.resp-tabs-container>.resp-accordion,article.single>.article-header.breadcrumbs,article.single>.article-header.meta { font-family: <?php echo $font_1 ?>, open sans condensed, pt sans, helvetica neue, helvetica, arial, sans-serif }
i've added code header.php
:
<style> /* extractfontdata */ </style>
now, how find string "extractfontdata" in header.php, , insert result
after it?
well in case wondering, worked me:
// insert result header.php var header = grunt.file.read('header.php').split('\n'); var line_1 = _.indexof(header, _(header).find(function(el) { return el.match(/extractfontdata/i) }) ); var line_2 = _.indexof(header, _(header).find(function(el) { return el.match(/endextractfontdata/i) })); var start = math.min(line_1, line_2) + 1; var end = math.max(line_1, line_2); var num = math.min((end - start), 0); header.splice(start, num, result); ( var = start-2; <= end+2; i++) { console.log(header[i]); } grunt.file.write('header.php', header.join('\n'));
Comments
Post a Comment