@@ -125,6 +125,10 @@ func Run(ctx context.Context, ms *xmain.State) (err error) {
125125 fontItalicFlag := ms .Opts .String ("D2_FONT_ITALIC" , "font-italic" , "" , "" , "path to .ttf file to use for the italic font. If none provided, Source Sans Pro Regular-Italic is used." )
126126 fontBoldFlag := ms .Opts .String ("D2_FONT_BOLD" , "font-bold" , "" , "" , "path to .ttf file to use for the bold font. If none provided, Source Sans Pro Bold is used." )
127127 fontSemiboldFlag := ms .Opts .String ("D2_FONT_SEMIBOLD" , "font-semibold" , "" , "" , "path to .ttf file to use for the semibold font. If none provided, Source Sans Pro Semibold is used." )
128+ fontMonoFlag := ms .Opts .String ("D2_FONT_MONO" , "font-mono" , "" , "" , "path to .ttf file to use for the monospace font. If none provided, Source Code Pro Regular is used." )
129+ fontMonoBoldFlag := ms .Opts .String ("D2_FONT_MONO_BOLD" , "font-mono-bold" , "" , "" , "path to .ttf file to use for the monospace bold font. If none provided, Source Code Pro Bold is used." )
130+ fontMonoItalicFlag := ms .Opts .String ("D2_FONT_MONO_ITALIC" , "font-mono-italic" , "" , "" , "path to .ttf file to use for the monospace italic font. If none provided, Source Code Pro Italic is used." )
131+ fontMonoSemiboldFlag := ms .Opts .String ("D2_FONT_MONO_SEMIBOLD" , "font-mono-semibold" , "" , "" , "path to .ttf file to use for the monospace semibold font. If none provided, Source Code Pro Semibold is used." )
128132
129133 checkFlag , err := ms .Opts .Bool ("D2_CHECK" , "check" , "" , false , "check that the specified files are formatted correctly." )
130134 if err != nil {
@@ -167,7 +171,7 @@ func Run(ctx context.Context, ms *xmain.State) (err error) {
167171 return nil
168172 }
169173
170- fontFamily , err := loadFonts (ms , * fontRegularFlag , * fontItalicFlag , * fontBoldFlag , * fontSemiboldFlag )
174+ fontFamily , monoFontFamily , err := loadFonts (ms , * fontRegularFlag , * fontItalicFlag , * fontBoldFlag , * fontSemiboldFlag , * fontMonoFlag , * fontMonoBoldFlag , * fontMonoItalicFlag , * fontMonoSemiboldFlag )
171175 if err != nil {
172176 return xmain .UsageErrorf ("failed to load specified fonts: %v" , err )
173177 }
@@ -366,6 +370,7 @@ func Run(ctx context.Context, ms *xmain.State) (err error) {
366370 forceAppendix : * forceAppendixFlag ,
367371 pw : pw ,
368372 fontFamily : fontFamily ,
373+ monoFontFamily : monoFontFamily ,
369374 outputFormat : outputFormat ,
370375 asciiMode : * asciiModeFlag ,
371376 })
@@ -398,7 +403,7 @@ func Run(ctx context.Context, ms *xmain.State) (err error) {
398403 ctx , cancel := timelib .WithTimeout (ctx , time .Minute * 2 )
399404 defer cancel ()
400405
401- _ , written , err := compile (ctx , ms , plugins , nil , layoutFlag , renderOpts , fontFamily , * animateIntervalFlag , inputPath , outputPath , boardPath , noChildren , * bundleFlag , * forceAppendixFlag , pw .Page , outputFormat , * asciiModeFlag )
406+ _ , written , err := compile (ctx , ms , plugins , nil , layoutFlag , renderOpts , fontFamily , monoFontFamily , * animateIntervalFlag , inputPath , outputPath , boardPath , noChildren , * bundleFlag , * forceAppendixFlag , pw .Page , outputFormat , * asciiModeFlag )
402407 if err != nil {
403408 if written {
404409 return fmt .Errorf ("failed to fully compile (partial render written) %s: %w" , ms .HumanPath (inputPath ), err )
@@ -473,7 +478,7 @@ func RouterResolver(ctx context.Context, ms *xmain.State, plugins []d2plugin.Plu
473478 }
474479}
475480
476- func compile (ctx context.Context , ms * xmain.State , plugins []d2plugin.Plugin , fs fs.FS , layout * string , renderOpts d2svg.RenderOpts , fontFamily * d2fonts.FontFamily , animateInterval int64 , inputPath , outputPath string , boardPath []string , noChildren , bundle , forceAppendix bool , page playwright.Page , ext exportExtension , asciiMode string ) (_ []byte , written bool , _ error ) {
481+ func compile (ctx context.Context , ms * xmain.State , plugins []d2plugin.Plugin , fs fs.FS , layout * string , renderOpts d2svg.RenderOpts , fontFamily * d2fonts.FontFamily , monoFontFamily * d2fonts. FontFamily , animateInterval int64 , inputPath , outputPath string , boardPath []string , noChildren , bundle , forceAppendix bool , page playwright.Page , ext exportExtension , asciiMode string ) (_ []byte , written bool , _ error ) {
477482 // Use ELK layout for ascii outputs when layout is dagre or unspecified
478483 if ext == TXT {
479484 if layout == nil || * layout == "dagre" {
@@ -502,6 +507,7 @@ func compile(ctx context.Context, ms *xmain.State, plugins []d2plugin.Plugin, fs
502507 opts := & d2lib.CompileOptions {
503508 Ruler : ruler ,
504509 FontFamily : fontFamily ,
510+ MonoFontFamily : monoFontFamily ,
505511 InputPath : inputPath ,
506512 LayoutResolver : LayoutResolver (ctx , ms , plugins ),
507513 Layout : layout ,
@@ -1301,43 +1307,90 @@ func loadFont(ms *xmain.State, path string) ([]byte, error) {
13011307 return ttf , nil
13021308}
13031309
1304- func loadFonts (ms * xmain.State , pathToRegular , pathToItalic , pathToBold , pathToSemibold string ) (* d2fonts.FontFamily , error ) {
1305- if pathToRegular == "" && pathToItalic == "" && pathToBold == "" && pathToSemibold == "" {
1306- return nil , nil
1310+ func loadFonts (ms * xmain.State , pathToRegular , pathToItalic , pathToBold , pathToSemibold , pathToMono , pathToMonoBold , pathToMonoItalic , pathToMonoSemibold string ) (* d2fonts.FontFamily , * d2fonts.FontFamily , error ) {
1311+ if pathToRegular == "" && pathToItalic == "" && pathToBold == "" && pathToSemibold == "" &&
1312+ pathToMono == "" && pathToMonoBold == "" && pathToMonoItalic == "" && pathToMonoSemibold == "" {
1313+ return nil , nil , nil
13071314 }
13081315
13091316 var regularTTF []byte
13101317 var italicTTF []byte
13111318 var boldTTF []byte
13121319 var semiboldTTF []byte
1320+ var monoTTF []byte
1321+ var monoBoldTTF []byte
1322+ var monoItalicTTF []byte
1323+ var monoSemiboldTTF []byte
13131324
13141325 var err error
13151326 if pathToRegular != "" {
13161327 regularTTF , err = loadFont (ms , pathToRegular )
13171328 if err != nil {
1318- return nil , err
1329+ return nil , nil , err
13191330 }
13201331 }
13211332 if pathToItalic != "" {
13221333 italicTTF , err = loadFont (ms , pathToItalic )
13231334 if err != nil {
1324- return nil , err
1335+ return nil , nil , err
13251336 }
13261337 }
13271338 if pathToBold != "" {
13281339 boldTTF , err = loadFont (ms , pathToBold )
13291340 if err != nil {
1330- return nil , err
1341+ return nil , nil , err
13311342 }
13321343 }
13331344 if pathToSemibold != "" {
13341345 semiboldTTF , err = loadFont (ms , pathToSemibold )
13351346 if err != nil {
1336- return nil , err
1347+ return nil , nil , err
1348+ }
1349+ }
1350+
1351+ if pathToMono != "" {
1352+ monoTTF , err = loadFont (ms , pathToMono )
1353+ if err != nil {
1354+ return nil , nil , err
1355+ }
1356+ }
1357+ if pathToMonoBold != "" {
1358+ monoBoldTTF , err = loadFont (ms , pathToMonoBold )
1359+ if err != nil {
1360+ return nil , nil , err
1361+ }
1362+ }
1363+ if pathToMonoItalic != "" {
1364+ monoItalicTTF , err = loadFont (ms , pathToMonoItalic )
1365+ if err != nil {
1366+ return nil , nil , err
1367+ }
1368+ }
1369+ if pathToMonoSemibold != "" {
1370+ monoSemiboldTTF , err = loadFont (ms , pathToMonoSemibold )
1371+ if err != nil {
1372+ return nil , nil , err
1373+ }
1374+ }
1375+
1376+ var fontFamily * d2fonts.FontFamily
1377+ var monoFontFamily * d2fonts.FontFamily
1378+
1379+ if pathToRegular != "" || pathToItalic != "" || pathToBold != "" || pathToSemibold != "" {
1380+ fontFamily , err = d2fonts .AddFontFamily ("custom" , regularTTF , italicTTF , boldTTF , semiboldTTF )
1381+ if err != nil {
1382+ return nil , nil , err
1383+ }
1384+ }
1385+
1386+ if pathToMono != "" || pathToMonoBold != "" || pathToMonoItalic != "" || pathToMonoSemibold != "" {
1387+ monoFontFamily , err = d2fonts .AddFontFamily ("customMono" , monoTTF , monoItalicTTF , monoBoldTTF , monoSemiboldTTF )
1388+ if err != nil {
1389+ return nil , nil , err
13371390 }
13381391 }
13391392
1340- return d2fonts . AddFontFamily ( "custom" , regularTTF , italicTTF , boldTTF , semiboldTTF )
1393+ return fontFamily , monoFontFamily , nil
13411394}
13421395
13431396const LAYERS = "layers"
0 commit comments