modernc.org/knuth@v0.0.4/gftodvi/api.go (about)

     1  // Copyright 2023 The Knuth 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  //go:generate make generate
     6  
     7  // Package gftodvi is the GFtoDVI program by Tomas Rokicki, transpiled to Go.
     8  //
     9  //	http://mirrors.ctan.org/systems/knuth/dist/mfware/gftodvi.web
    10  package gftodvi // modernc.org/knuth/gftodvi
    11  
    12  import (
    13  	"fmt"
    14  	"io"
    15  	"runtime/debug"
    16  
    17  	"modernc.org/knuth"
    18  )
    19  
    20  // program GF_to_DVI( output);
    21  
    22  // Main executes the gftodvi program using the supplied arguments.
    23  func Main(gfFile io.Reader, dviFile, stdout, stderr io.Writer, open func(string) (io.Reader, error)) (mainErr error) {
    24  	defer func() {
    25  		switch x := recover().(type) {
    26  		case nil:
    27  			// ok
    28  		case signal:
    29  			switch {
    30  			case mainErr == nil:
    31  				mainErr = fmt.Errorf("aborted")
    32  			default:
    33  				mainErr = fmt.Errorf("aborted: %v", mainErr)
    34  			}
    35  		default:
    36  			mainErr = fmt.Errorf("PANIC %T: %[1]v, error: %v\n%s", x, mainErr, debug.Stack())
    37  		}
    38  	}()
    39  
    40  	(&prg{
    41  		gfFile:  knuth.NewBinaryFile(gfFile, nil, 1, nil),
    42  		dviFile: knuth.NewBinaryFile(nil, dviFile, 1, nil),
    43  		tfmFile: knuth.NewBinaryFile(nil, nil, 1, open),
    44  		stdout:  knuth.NewTextFile(nil, stdout, nil),
    45  		stderr:  knuth.NewTextFile(nil, stderr, nil),
    46  	}).main()
    47  	return nil
    48  }