CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
string-sheet.mjs137 linesDownload Raw Back to style
1import * as util from '../util/index.mjs';2import Selector from '../selector/index.mjs';3 4let styfn = {};5 6styfn.appendFromString = function( string ){7  let self = this;8  let style = this;9  let remaining = '' + string;10  let selAndBlockStr;11  let blockRem;12  let propAndValStr;13 14  // remove comments from the style string15  remaining = remaining.replace( /[/][*](\s|.)+?[*][/]/g, '' );16 17  function removeSelAndBlockFromRemaining(){18    // remove the parsed selector and block from the remaining text to parse19    if( remaining.length > selAndBlockStr.length ){20      remaining = remaining.substr( selAndBlockStr.length );21    } else {22      remaining = '';23    }24  }25 26  function removePropAndValFromRem(){27    // remove the parsed property and value from the remaining block text to parse28    if( blockRem.length > propAndValStr.length ){29      blockRem = blockRem.substr( propAndValStr.length );30    } else {31      blockRem = '';32    }33  }34 35  for(;;){36    let nothingLeftToParse = remaining.match( /^\s*$/ );37    if( nothingLeftToParse ){ break; }38 39    let selAndBlock = remaining.match( /^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/ );40 41    if( !selAndBlock ){42      util.warn( 'Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: ' + remaining );43      break;44    }45 46    selAndBlockStr = selAndBlock[0];47 48    // parse the selector49    let selectorStr = selAndBlock[1];50    if( selectorStr !== 'core' ){51      let selector = new Selector( selectorStr );52      if( selector.invalid ){53        util.warn( 'Skipping parsing of block: Invalid selector found in string stylesheet: ' + selectorStr );54 55        // skip this selector and block56        removeSelAndBlockFromRemaining();57        continue;58      }59    }60 61    // parse the block of properties and values62    let blockStr = selAndBlock[2];63    let invalidBlock = false;64    blockRem = blockStr;65    let props = [];66 67    for(;;){68      let nothingLeftToParse = blockRem.match( /^\s*$/ );69      if( nothingLeftToParse ){ break; }70 71      let propAndVal = blockRem.match( /^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/ );72 73      if( !propAndVal ){74        util.warn( 'Skipping parsing of block: Invalid formatting of style property and value definitions found in:' + blockStr );75        invalidBlock = true;76        break;77      }78 79      propAndValStr = propAndVal[0];80      let propStr = propAndVal[1];81      let valStr = propAndVal[2];82 83      let prop = self.properties[ propStr ];84      if( !prop ){85        util.warn( 'Skipping property: Invalid property name in: ' + propAndValStr );86 87        // skip this property in the block88        removePropAndValFromRem();89        continue;90      }91 92      let parsedProp = style.parse( propStr, valStr );93 94      if( !parsedProp ){95        util.warn( 'Skipping property: Invalid property definition in: ' + propAndValStr );96 97        // skip this property in the block98        removePropAndValFromRem();99        continue;100      }101 102      props.push( {103        name: propStr,104        val: valStr105      } );106      removePropAndValFromRem();107    }108 109    if( invalidBlock ){110      removeSelAndBlockFromRemaining();111      break;112    }113 114    // put the parsed block in the style115    style.selector( selectorStr );116    for( let i = 0; i < props.length; i++ ){117      let prop = props[ i ];118      style.css( prop.name, prop.val );119    }120 121    removeSelAndBlockFromRemaining();122  }123 124  return style;125};126 127styfn.fromString = function( string ){128  let style = this;129 130  style.resetToDefault();131  style.appendFromString( string );132 133  return style;134};135 136export default styfn;137 
basant307/AI_Governance_Project · CoolFace