@@ -90,11 +90,6 @@ function main(args) {
9090 return updateModes ( ) ;
9191 }
9292
93- if ( args . indexOf ( "--reuse" ) === - 1 ) {
94- console . log ( "updating files in lib/ace" ) ;
95- generateAmdModules ( ) ;
96- }
97-
9893 var type = "minimal" ;
9994 args = args . map ( function ( x ) {
10095 if ( x [ 0 ] == "-" && x [ 1 ] != "-" )
@@ -112,6 +107,16 @@ function main(args) {
112107 if ( args . indexOf ( "--h" ) != - 1 || args . indexOf ( "-h" ) != - 1 || args . indexOf ( "--help" ) != - 1 ) {
113108 return showHelp ( ) ;
114109 }
110+
111+ if ( type == "css" ) {
112+ return extractCss ( ) ;
113+ }
114+
115+ if ( args . indexOf ( "--reuse" ) === - 1 ) {
116+ console . log ( "updating files in lib/ace" ) ;
117+ generateAmdModules ( ) ;
118+ }
119+
115120 if ( type == "minimal" ) {
116121 buildAce ( {
117122 compress : args . indexOf ( "--m" ) != - 1 ,
@@ -139,6 +144,7 @@ function showHelp(type) {
139144 console . log ( " demo Runs demo build of Ace" ) ;
140145 console . log ( " full all of above" ) ;
141146 console . log ( " highlighter " ) ;
147+ console . log ( " css extract css files" ) ;
142148 console . log ( "args:" ) ;
143149 console . log ( " --target ./path path to build folder" ) ;
144150 console . log ( "flags:" ) ;
@@ -510,7 +516,7 @@ function buildAce(options, callback) {
510516 return ;
511517 } else {
512518 cssUpdated = true ;
513- extractCss ( options , function ( ) {
519+ extractCss ( function ( ) {
514520 if ( callback )
515521 return callback ( ) ;
516522 console . log ( "Finished building " + getTargetDir ( options ) ) ;
@@ -520,76 +526,64 @@ function buildAce(options, callback) {
520526}
521527var cssUpdated = false ;
522528
523- function extractCss ( options , callback ) {
524- var dir = BUILD_DIR + "/src" + ( options . noconflict ? "-noconflict" : "" ) ;
525- var filenames = fs . readdirSync ( dir ) ;
526- var css = "" ;
529+ function extractCss ( callback ) {
527530 var images = { } ;
528- var usedCss = { } ;
529- filenames . forEach ( function ( filename ) {
530- var stat = fs . statSync ( dir + "/" + filename ) ;
531- if ( stat . isDirectory ( ) ) return ;
532- var value = fs . readFileSync ( dir + "/" + filename , "utf8" ) ;
533-
534- var cssImports = detectCssImports ( value ) ;
535-
536- if ( / t h e m e - / . test ( filename ) ) {
537- var name = filename . replace ( / ^ t h e m e - | \. j s $ / g, "" ) ;
538- var themeCss = "" ;
539- for ( var i in cssImports ) {
540- themeCss += cssImports [ i ] ;
541- }
542- themeCss = extractImages ( themeCss , name , ".." ) ;
543- build . writeToFile ( { code : themeCss } , {
544- outputFolder : BUILD_DIR + "/css/theme" ,
545- outputFile : name + ".css"
546- } , function ( ) { } ) ;
547- } else if ( cssImports ) {
548- css += "\n/*" + filename + "*/" ;
549- for ( var i in cssImports ) {
550- if ( usedCss [ cssImports [ i ] ] ) continue ;
551- usedCss [ cssImports [ i ] ] = true ;
552- css += "\n" + cssImports [ i ] ;
553- }
531+ var cssImports = { } ;
532+ var fileName = "" ;
533+
534+ var extensions = jsFileList ( "src/ext" ) ;
535+ var keybinding = jsFileList ( "src/keyboard" ) ;
536+ var themes = jsFileList ( "src/theme" ) ;
537+ var dom = require ( "./src/lib/dom" ) ;
538+ var index = 0 ;
539+ dom . importCssString = function ( value , id ) {
540+ if ( ! id ) id = fileName + ( index ++ ) ;
541+ cssImports [ id ] = value ;
542+ } ;
543+ var loadFile = function ( path ) {
544+ fileName = path ;
545+ require ( path ) ;
546+ } ;
547+ themes . forEach ( function ( name ) {
548+ cssImports = { } ;
549+ loadFile ( "./src/theme/" + name ) ;
550+ delete require . cache [ require . resolve ( "./src/theme/" + name ) ] ;
551+
552+ var themeCss = "" ;
553+ for ( var i in cssImports ) {
554+ themeCss += cssImports [ i ] ;
554555 }
556+ themeCss = extractImages ( themeCss , name , ".." ) ;
557+ build . writeToFile ( { code : themeCss } , {
558+ outputFolder : BUILD_DIR + "/css/theme" ,
559+ outputFile : name + ".css"
560+ } , function ( ) { } ) ;
561+ } ) ;
562+
563+ cssImports = { } ;
564+ loadFile ( "./src/ace" ) ;
565+ extensions . forEach ( function ( name ) {
566+ loadFile ( "./src/ext/" + name ) ;
567+ } ) ;
568+ keybinding . forEach ( function ( name ) {
569+ loadFile ( "./src/keyboard/" + name ) ;
555570 } ) ;
571+
572+ var css = "" ;
573+ for ( var i in cssImports ) {
574+ css += "\n/*" + i + "*/" ;
575+ css += "\n" + cssImports [ i ] ;
576+ }
556577
557578 css = extractImages ( css , "main" , "." ) . replace ( / ^ \s * / gm, "" ) ;
558579 build . writeToFile ( { code : css } , {
559580 outputFolder : BUILD_DIR + "/css" ,
560581 outputFile : "ace.css"
561582 } , function ( ) {
562583 saveImages ( ) ;
563- callback ( ) ;
584+ callback && callback ( ) ;
564585 } ) ;
565586
566- function detectCssImports ( code ) {
567- code = code . replace ( / ^ \s * \/ \/ .+ | ^ \s * \/ \* [ \s \S ] * ?\* \/ / gm, "" ) ;
568-
569- var stringRegex = / ^ ( " (?: [ ^ " \\ ] | \\ [ \d \D ] ) * " | ' (?: [ ^ ' \\ ] | \\ [ \d \D ] ) * ' | ) / ;
570- var importCssRegex = / \. i m p o r t C s s S t r i n g \( \s * (?: ( [ ^ , ) " ' ] + ) | [ " ' ] ) / g;
571-
572- var match ;
573- var cssImports ;
574- while ( match = importCssRegex . exec ( code ) ) {
575- if ( match [ 1 ] ) {
576- var locationRegex = new RegExp ( "[^.]" + match [ 1 ] + / \s * = \s * [ ' " ] / . source ) ;
577- match = locationRegex . exec ( code ) ;
578- if ( ! match ) continue ;
579- }
580- var index = match . index + match [ 0 ] . length - 1 ;
581- if ( cssImports && cssImports [ index ] ) continue ;
582- var cssString = stringRegex . exec ( code . slice ( index ) ) [ 0 ] ;
583- if ( ! cssString ) continue ;
584- if ( ! cssImports ) cssImports = { } ;
585- cssImports [ index ] = cssString . slice ( 1 , - 1 ) . replace ( / \\ ( .| \n ) / g, function ( _ , ch ) {
586- if ( ch == "n" ) return "" ;
587- return ch ;
588- } ) ;
589- }
590- return cssImports ;
591- }
592-
593587 function extractImages ( css , name , directory ) {
594588 var imageCounter = 0 ;
595589 return css . replace (
0 commit comments