Subject: [bug#65438] [PATCH 4/4] gnu: Add go-github-com-wraparound-wrap.

From: Liliana Marie Prikler <[email-masked]>
Date: Mon, 21 Aug 2023 20:23:37 +0200

* gnu/packages/patches/go-github-com-wraparound-wrap-free-fonts.patch: New
file.
* gnu/local.mk (dist_patch_DATA): Register it here.
* gnu/packages/golang.scm (go-github-com-wraparound-wrap): New variable.
---
 gnu/local.mk                                  |  1 +
 gnu/packages/golang.scm                       | 52 ++++++++++++
 ...ithub-com-wraparound-wrap-free-fonts.patch | 84 +++++++++++++++++++
 3 files changed, 137 insertions(+)
 create mode 100644 gnu/packages/patches/go-github-com-wraparound-wrap-free-fonts.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index e4f5b2078a..1f10dd7f20 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1314,6 +1314,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/go-github-com-golang-snappy-32bit-test.patch \
   %D%/packages/patches/go-github-com-urfave-cli-fix-tests.patch \
   %D%/packages/patches/go-github-com-urfave-cli-v2-fix-tests.patch \
+  %D%/packages/patches/go-github-com-wraparound-wrap-free-fonts.patch \
   %D%/packages/patches/go-skip-gc-test.patch			\
   %D%/packages/patches/gourmet-sqlalchemy-compat.patch		\
   %D%/packages/patches/gpaste-fix-paths.patch			\
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 1617182243..b6e25b5183 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -74,6 +74,7 @@ (define-module (gnu packages golang)
   #:use-module (gnu packages base)
   #:use-module ((gnu packages bootstrap) #:select (glibc-dynamic-linker))
   #:use-module (gnu packages check)
+  #:use-module (gnu packages fonts)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnupg)
@@ -2512,6 +2513,57 @@ (define-public go-github-com-signintech-gopdf
     (description "gopdf is a Go library for generating PDF documents.")
     (license license:expat)))
 
+(define-public go-github-com-wraparound-wrap
+  (package
+    (name "go-github-com-wraparound-wrap")
+    (version "0.3.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/Wraparound/wrap")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0scf7v83p40r9k7k5v41rwiy9yyanfv3jm6jxs9bspxpywgjrk77"))
+              (patches (search-patches
+                        "go-github-com-wraparound-wrap-free-fonts.patch"))))
+    (build-system go-build-system)
+    (arguments
+     (list
+      #:import-path "github.com/Wraparound/wrap/"
+      #:tests? #f                       ; no tests
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'build
+            (lambda* (#:key import-path #:allow-other-keys)
+              (invoke "go" "install" "-v" "-x"
+                      "-ldflags=-s -w"
+                      (string-append import-path "cmd/wrap"))))
+          (add-after 'wrap 'wrap-fonts
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (for-each
+               (lambda (program)
+                 (wrap-program program
+                   `("XDG_DATA_DIRS" suffix
+                     ,(map dirname
+                           (search-path-as-list '("share/fonts")
+                                                (map cdr inputs))))))
+               (find-files (string-append (assoc-ref outputs "out")
+                                          "/bin"))))))))
+    (propagated-inputs (list go-github-com-spf13-cobra
+                             go-github-com-signintech-gopdf
+                             go-github-com-flopp-go-findfont))
+    (inputs (list font-liberation font-gnu-freefont))
+    (home-page "https://github.com/Wraparound/wrap")
+    (synopsis "Format Fountain screenplays")
+    (description
+     "Wrap is a command line tool that is able to convert Fountain files into a
+correctly formatted screen- or stageplay as an HTML or a PDF.  It supports
+standard Fountain, but also has some custom syntax extensions such as
+translated keywords and acts.")
+    (license license:gpl3)))
+
 (define-public go-torproject-org-pluggable-transports-goptlib
   (package
     (name "go-torproject-org-pluggable-transports-goptlib")
diff --git a/gnu/packages/patches/go-github-com-wraparound-wrap-free-fonts.patch b/gnu/packages/patches/go-github-com-wraparound-wrap-free-fonts.patch
new file mode 100644
index 0000000000..91b187a2d3
--- /dev/null
+++ b/gnu/packages/patches/go-github-com-wraparound-wrap-free-fonts.patch
@@ -0,0 +1,84 @@
+Index: wrap-source/pkg/pdf/fonts.go
+===================================================================
+--- wrap-source.orig/pkg/pdf/fonts.go
++++ wrap-source/pkg/pdf/fonts.go
+@@ -36,15 +36,15 @@ var (
+ 		BoldItalic:     []string{"Courier Prime Bold Italic.ttf"},
+ 	}
+ 
+-	CourierNew = Font{
+-		RomanName:      "Courier New",
+-		Roman:          []string{"Courier New.ttf", "cour.ttf"},
+-		BoldName:       "Courier New Bold",
+-		Bold:           []string{"Courier New Bold.ttf", "courbd.ttf"},
+-		ItalicName:     "Courier New Italic",
+-		Italic:         []string{"Courier New Italic.ttf", "couri.ttf"},
+-		BoldItalicName: "Courier New Bold Italic",
+-		BoldItalic:     []string{"Courier New Bold Italic.ttf", "courbi.ttf"},
++	LiberationMono = Font{
++		RomanName:      "Liberation Mono Regular",
++		Roman:          []string{"LiberationMono-Regular.ttf"},
++		BoldName:       "Liberation Mono Bold",
++		Bold:           []string{"LiberationMono-Bold.ttf"},
++		ItalicName:     "Liberation Mono Italic",
++		Italic:         []string{"LiberationMono-Italic.ttf"},
++		BoldItalicName: "Liberation Mono Bold Italic",
++		BoldItalic:     []string{"LiberationMono-BoldItalic.ttf"},
+ 	}
+ 
+ 	FreeMono = Font{
+@@ -151,9 +151,8 @@ func loadFonts() {
+ 		err := loadFont(CourierPrime)
+ 
+ 		if err != nil {
+-			// Courier New should be available on macOS and Windows
+ 			fmt.Fprintln(os.Stderr, "Warning: "+err.Error())
+-			err = loadFont(CourierNew)
++			err = loadFont(LiberationMono)
+ 
+ 			if err != nil {
+ 				// FreeMono as a final attempt
+Index: wrap-source/pkg/cli/pdf.go
+===================================================================
+--- wrap-source.orig/pkg/cli/pdf.go
++++ wrap-source/pkg/cli/pdf.go
+@@ -22,7 +22,7 @@ var pdfCmd = &cobra.Command{
+ var (
+ 	pdfProductionFlag bool
+ 	useCourierPrime   bool
+-	useCourierNew     bool
++	useLiberationMono     bool
+ 	useFreeMono       bool
+ 	pageSize          string
+ 	font              string
+@@ -31,7 +31,7 @@ var (
+ func init() {
+ 	pdfCmd.Flags().BoolVarP(&pdfProductionFlag, "production", "p", false, "add scene numbers and other production text")
+ 	pdfCmd.Flags().BoolVar(&useCourierPrime, "use-courier-prime", false, "force the usage of Courier Prime")
+-	pdfCmd.Flags().BoolVar(&useCourierNew, "use-courier-new", false, "force the usage of Courier New")
++	pdfCmd.Flags().BoolVar(&useLiberationMono, "use-courier-new", false, "force the usage of Liberation Mono")
+ 	pdfCmd.Flags().BoolVar(&useFreeMono, "use-freemono", false, "force the usage of GNU FreeMono")
+ 	pdfCmd.Flags().StringVar(&pageSize, "page-size", "", "choose page size (letter or a4)")
+ 	pdfCmd.RegisterFlagCompletionFunc("page-size", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
+@@ -46,8 +46,8 @@ func pdfRun(cmd *cobra.Command, args []s
+ 	// Evaluate font selection
+ 	pdf.AutoFontSelection = false
+ 
+-	if (font != "" && atLeastOne(useCourierPrime, useCourierNew, useFreeMono)) ||
+-		moreThanOne(useCourierPrime, useCourierNew, useFreeMono) {
++	if (font != "" && atLeastOne(useCourierPrime, useLiberationMono, useFreeMono)) ||
++		moreThanOne(useCourierPrime, useLiberationMono, useFreeMono) {
+ 		// The fonts are mutualy exclusive so throw an error
+ 		handle(errors.New("tried to force multiple fonts at the same time"))
+ 	}
+@@ -77,8 +77,8 @@ func pdfRun(cmd *cobra.Command, args []s
+ 	} else if useCourierPrime {
+ 		pdf.SelectedFont = pdf.CourierPrime
+ 
+-	} else if useCourierNew {
+-		pdf.SelectedFont = pdf.CourierNew
++	} else if useLiberationMono {
++		pdf.SelectedFont = pdf.LiberationMono
+ 
+ 	} else if useFreeMono {
+ 		pdf.SelectedFont = pdf.FreeMono
-- 
2.41.0