3434import java .util .HashMap ;
3535import java .util .HashSet ;
3636import java .util .List ;
37+ import java .util .Scanner ;
3738import java .util .StringTokenizer ;
3839
3940import javax .annotation .Nonnull ;
@@ -434,6 +435,8 @@ private void importFile( FormattableContainer currentRule, final String name ) {
434435 boolean isCss = false ;
435436 boolean isLess = false ;
436437 boolean isMultiple = reader .isMultiple ();
438+ boolean isInline = false ;
439+ boolean isOptional = false ;
437440 if ( filename .startsWith ( "(" ) ) {
438441 int endIdx = filename .indexOf ( ')' , 1 );
439442 if ( endIdx > 0 ) {
@@ -443,7 +446,10 @@ private void importFile( FormattableContainer currentRule, final String name ) {
443446 String keywordStr = tokenizer .nextToken ().trim ();
444447 switch ( keywordStr ) {
445448 case "inline" :
449+ isInline = true ;
450+ break ;
446451 case "optional" :
452+ isOptional = true ;
447453 System .err .println ( "not implemented @import keyword: " + keywordStr ); //TODO
448454 break ;
449455 case "once" :
@@ -514,6 +520,9 @@ private void importFile( FormattableContainer currentRule, final String name ) {
514520 if ( i < filename .length () - 1 ) {
515521 //additional content after url(...)
516522 media = filename .substring ( i + 1 ).trim ();
523+ Rule rule = new Rule ( reader , currentRule , "@media " + media , null , null );
524+ currentRule .add ( rule );
525+ currentRule = rule ;
517526 }
518527 filename = trim ( builder );
519528
@@ -533,13 +542,13 @@ private void importFile( FormattableContainer currentRule, final String name ) {
533542 lazyImports .add ( lazy );
534543 return ;
535544 }
536- if ( !isLess && (isCss || filename .endsWith ( "css" )) ) {
545+ if ( !isLess && ! isInline && (isCss || filename .endsWith ( "css" )) ) {
537546 // filenames ends with "css" will not be inline else a CSS @import directive is written
538547 currentRule .add ( new CssAtRule ( reader , "@import " + name + ';' ) );
539548 return ;
540549 }
541550 baseURL = baseURL == null ? new URL ( filename ) : new URL ( baseURL , filename );
542- if ( !isLess && baseURL .getPath ().endsWith ( "css" ) ) {
551+ if ( !isLess && ! isInline && baseURL .getPath ().endsWith ( "css" ) ) {
543552 // URL path ends with "css" will not be inline else a CSS @import directive is written
544553 currentRule .add ( new CssAtRule ( reader , "@import " + name + ';' ) );
545554 return ;
@@ -554,9 +563,17 @@ private void importFile( FormattableContainer currentRule, final String name ) {
554563 if ( isReference != reader .isReference () ) {
555564 add ( new ReferenceInfo ( isReference ) );
556565 }
557- reader = new LessLookAheadReader ( readerFactory .create ( baseURL ), filename , isReference , isMultiple );
558- parse ( currentRule );
559- reader .close ();
566+ Reader importReader = readerFactory .create ( baseURL );
567+ if ( isInline ) {
568+ Scanner scanner = new Scanner (importReader ).useDelimiter ( "\\ A" );
569+ if ( scanner .hasNext () ) {
570+ currentRule .add ( new CssAtRule ( reader , scanner .next () ) );
571+ }
572+ } else {
573+ reader = new LessLookAheadReader ( importReader , filename , isReference , isMultiple );
574+ parse ( currentRule );
575+ reader .close ();
576+ }
560577 }
561578 } catch ( LessException ex ) {
562579 throw ex ;
0 commit comments