@@ -383,9 +383,18 @@ func (c *compiler) compileField(obj *d2graph.Object, f *d2ir.Field) {
383
383
384
384
} else if isReserved {
385
385
c .compileReserved (& obj .Attributes , f )
386
- if keyword != "icon" {
387
- return
386
+ if keyword == "icon" && f .Map () != nil {
387
+ for _ , ff := range f .Map ().Fields {
388
+ if ff .Name .ScalarString () == "style" && ff .Name .IsUnquoted () {
389
+ if f .Map () == nil || len (f .Map ().Fields ) == 0 {
390
+ c .errorf (f .LastRef ().AST (), `"style" expected to be set to a map of key-values, or contain an additional keyword like "style.opacity: 0.4"` )
391
+ return
392
+ }
393
+ c .compileIconStyle (& obj .Attributes , ff .Map ())
394
+ }
395
+ }
388
396
}
397
+ return
389
398
} else if f .Name .ScalarString () == "style" && f .Name .IsUnquoted () {
390
399
if f .Map () == nil || len (f .Map ().Fields ) == 0 {
391
400
c .errorf (f .LastRef ().AST (), `"style" expected to be set to a map of key-values, or contain an additional keyword like "style.opacity: 0.4"` )
@@ -475,10 +484,7 @@ func (c *compiler) compileLabel(attrs *d2graph.Attributes, f d2ir.Node) {
475
484
}
476
485
attrs .Label .Value = scalar .ScalarString ()
477
486
default :
478
- name := f .LastPrimaryKey ().Key .Path [0 ].UnquotedString .Value [0 ].String
479
- if * name != "icon" {
480
- attrs .Label .Value = scalar .ScalarString ()
481
- }
487
+ attrs .Label .Value = scalar .ScalarString ()
482
488
}
483
489
attrs .Label .MapKey = f .LastPrimaryKey ()
484
490
}
@@ -752,6 +758,12 @@ func (c *compiler) compileStyle(attrs *d2graph.Attributes, m *d2ir.Map) {
752
758
}
753
759
}
754
760
761
+ func (c * compiler ) compileIconStyle (attrs * d2graph.Attributes , m * d2ir.Map ) {
762
+ for _ , f := range m .Fields {
763
+ c .compileIconStyleField (attrs , f )
764
+ }
765
+ }
766
+
755
767
func (c * compiler ) compileStyleField (attrs * d2graph.Attributes , f * d2ir.Field ) {
756
768
if _ , ok := d2ast .StyleKeywords [strings .ToLower (f .Name .ScalarString ())]; ! (ok && f .Name .IsUnquoted ()) {
757
769
c .errorf (f .LastRef ().AST (), `invalid style keyword: "%s"` , f .Name .ScalarString ())
@@ -763,14 +775,25 @@ func (c *compiler) compileStyleField(attrs *d2graph.Attributes, f *d2ir.Field) {
763
775
compileStyleFieldInit (attrs , f )
764
776
scalar := f .Primary ().Value
765
777
766
- parentKeyword := f .LastPrimaryKey ().Key .Path [0 ].ScalarString ()
778
+ err := attrs .Style .Apply (f .Name .ScalarString (), scalar .ScalarString ())
779
+ if err != nil {
780
+ c .errorf (scalar , err .Error ())
781
+ return
782
+ }
783
+ }
767
784
768
- var err error
769
- if parentKeyword == "icon" {
770
- err = attrs .IconStyle .Apply (f .Name .ScalarString (), scalar .ScalarString ())
771
- } else {
772
- err = attrs .Style .Apply (f .Name .ScalarString (), scalar .ScalarString ())
785
+ func (c * compiler ) compileIconStyleField (attrs * d2graph.Attributes , f * d2ir.Field ) {
786
+ if _ , ok := d2ast .StyleKeywords [strings .ToLower (f .Name .ScalarString ())]; ! (ok && f .Name .IsUnquoted ()) {
787
+ c .errorf (f .LastRef ().AST (), `invalid style keyword: "%s"` , f .Name .ScalarString ())
788
+ return
773
789
}
790
+ if f .Primary () == nil {
791
+ return
792
+ }
793
+ compileStyleFieldInit (attrs , f )
794
+ scalar := f .Primary ().Value
795
+
796
+ err := attrs .IconStyle .Apply (f .Name .ScalarString (), scalar .ScalarString ())
774
797
if err != nil {
775
798
c .errorf (scalar , err .Error ())
776
799
return
0 commit comments