...

Source file src/gonum.org/v1/plot/font/liberation/liberation.go

Documentation: gonum.org/v1/plot/font/liberation

     1  // Copyright ©2021 The Gonum Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // Package liberation exports the Liberation fonts as a font.Collection.
     6  package liberation // import "gonum.org/v1/plot/font/liberation"
     7  
     8  import (
     9  	"fmt"
    10  	"sync"
    11  
    12  	"github.com/go-fonts/liberation/liberationmonobold"
    13  	"github.com/go-fonts/liberation/liberationmonobolditalic"
    14  	"github.com/go-fonts/liberation/liberationmonoitalic"
    15  	"github.com/go-fonts/liberation/liberationmonoregular"
    16  	"github.com/go-fonts/liberation/liberationsansbold"
    17  	"github.com/go-fonts/liberation/liberationsansbolditalic"
    18  	"github.com/go-fonts/liberation/liberationsansitalic"
    19  	"github.com/go-fonts/liberation/liberationsansregular"
    20  	"github.com/go-fonts/liberation/liberationserifbold"
    21  	"github.com/go-fonts/liberation/liberationserifbolditalic"
    22  	"github.com/go-fonts/liberation/liberationserifitalic"
    23  	"github.com/go-fonts/liberation/liberationserifregular"
    24  	stdfnt "golang.org/x/image/font"
    25  	"golang.org/x/image/font/opentype"
    26  
    27  	"gonum.org/v1/plot/font"
    28  )
    29  
    30  var (
    31  	once       sync.Once
    32  	collection font.Collection
    33  )
    34  
    35  func Collection() font.Collection {
    36  	once.Do(func() {
    37  		addColl(font.Font{}, liberationserifregular.TTF)
    38  		addColl(font.Font{Style: stdfnt.StyleItalic}, liberationserifitalic.TTF)
    39  		addColl(font.Font{Weight: stdfnt.WeightBold}, liberationserifbold.TTF)
    40  		addColl(font.Font{
    41  			Style:  stdfnt.StyleItalic,
    42  			Weight: stdfnt.WeightBold,
    43  		}, liberationserifbolditalic.TTF)
    44  
    45  		// mono variant
    46  		addColl(font.Font{Variant: "Mono"}, liberationmonoregular.TTF)
    47  		addColl(font.Font{
    48  			Variant: "Mono",
    49  			Style:   stdfnt.StyleItalic,
    50  		}, liberationmonoitalic.TTF)
    51  		addColl(font.Font{
    52  			Variant: "Mono",
    53  			Weight:  stdfnt.WeightBold,
    54  		}, liberationmonobold.TTF)
    55  		addColl(font.Font{
    56  			Variant: "Mono",
    57  			Style:   stdfnt.StyleItalic,
    58  			Weight:  stdfnt.WeightBold,
    59  		}, liberationmonobolditalic.TTF)
    60  
    61  		// sans-serif variant
    62  		addColl(font.Font{Variant: "Sans"}, liberationsansregular.TTF)
    63  		addColl(font.Font{
    64  			Variant: "Sans",
    65  			Style:   stdfnt.StyleItalic,
    66  		}, liberationsansitalic.TTF)
    67  		addColl(font.Font{
    68  			Variant: "Sans",
    69  			Weight:  stdfnt.WeightBold,
    70  		}, liberationsansbold.TTF)
    71  		addColl(font.Font{
    72  			Variant: "Sans",
    73  			Style:   stdfnt.StyleItalic,
    74  			Weight:  stdfnt.WeightBold,
    75  		}, liberationsansbolditalic.TTF)
    76  
    77  		n := len(collection)
    78  		collection = collection[:n:n]
    79  	})
    80  
    81  	return collection
    82  }
    83  
    84  func addColl(fnt font.Font, ttf []byte) {
    85  	face, err := opentype.Parse(ttf)
    86  	if err != nil {
    87  		panic(fmt.Errorf("vg: could not parse font: %+v", err))
    88  	}
    89  	fnt.Typeface = "Liberation"
    90  	if fnt.Variant == "" {
    91  		fnt.Variant = "Serif"
    92  	}
    93  	collection = append(collection, font.Face{
    94  		Font: fnt,
    95  		Face: face,
    96  	})
    97  }
    98  

View as plain text