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

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -