Designer regexp

by infous

HTML

<div class="log"></div>

JavaScript

var s = "#marker-start {}\n" +
"#presetItem_TextBlock26 .bd-textblock.bd-textblock-1{\n"+
"word-wrap: break-word;\n" +
"}\n" +
"#marker-end {}\n" + 
"#marker-start_Container {}\n\n" +
"@bd-typographystyle-390lineHeightFactor:  1.15;\n\n" + 
".bd-textblock.bd-textblock-1,\n" + 
"#presetItem_TextBlock26 .bd-textblock.bd-textblock-1 a:visited,\n" +
"#presetItem_TextBlock26 .bd-textblock.bd-textblock-1 a:hover,\n" + 
"#presetItem_TextBlock26 .bd-textblock.bd-textblock-1 a:link,\n" + 
"#presetItem_TextBlock26 .bd-textblock.bd-textblock-1 a:visited,\n" + 
"a#presetItem_TextBlock26 .bd-textblock.bd-textblock-1:link,\n" + 
"a#presetItem_TextBlock26 .bd-textblock.bd-textblock-1:visited,\n" + 
"#presetItem_TextBlock26 .bd-textblock.bd-textblock-1 a:visited,\n" +
"a#presetItem_TextBlock26 .bd-textblock.bd-textblock-1:visited,\n" + 
"#presetItem_TextBlock26 .bd-textblock.bd-textblock-1 a:active,\n" + 
"a#presetItem_TextBlock26 .bd-textblock.bd-textblock-1:active{\n\n" + 
"line-height:@baseFontSize * @bd-typographystyle-390lineHeightFactor;\n\n" + 
"font-family: 'Open Sans';\n" +
"color: @white;";

var uniId = "#aaa";
var style = s.replace(/\s*([^\{\};]+)\{/g, replacer);

function replacer(str, p1) {
        var rules = p1.split(",");
        for (var i = 0; i < rules.length; i++) {
            var selector = $.trim(rules[i]);
            log(selector, true);
            var idx = selector.indexOf(".");
            if (idx !== -1)
                rules[i] = stringInsert(selector, idx, uniId + " ");
        }
        return "\r\n" + rules.join(",\r\n") + "{";
}

log(style);

function log(s, b) {
    s = s.replace(/\n/g, "<br>");
    
    $(".log").html($(".log").html() + "<p>" + (b ? "<b>" : "") + s + (b ? "</b>" : "") + "</p>");
}

function stringInsert(str, index, substr) {
        if (index > 0)
            return str.substring(0, index) + substr + str.substring(index, str.length);
        else
            return substr + str;
    }