[Printing-architecture] [PATCH] braille: proper support for hardware margins

Samuel Thibault samuel.thibault at ens-lyon.org
Sat Sep 16 16:57:01 UTC 2017


This adds proper support for hardware margins on braille embossers.

Samuel
-------------- next part --------------
=== modified file 'drv/indexv3.drv'
--- drv/indexv3.drv	2015-12-12 12:02:53 +0000
+++ drv/indexv3.drv	2017-09-16 16:44:42 +0000
@@ -1,5 +1,5 @@
 // 
-// Copyright (c) 2015 Samuel Thibault <samuel.thibault at ens-lyon.org>
+// Copyright (c) 2015, 2017 Samuel Thibault <samuel.thibault at ens-lyon.org>
 // 
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
@@ -41,7 +41,7 @@ Filter image/vnd.cups-ubrl 0 imageubrlto
 // Common options
 //
 
-HWMargins 0.5mm 0.5mm 0.5mm 0.5mm
+HWMargins 0mm 5mm 0mm 2mm
 VariablePaperSize true
 MinSize 1in 1in
 

=== modified file 'drv/indexv4.drv'
--- drv/indexv4.drv	2015-12-12 12:02:53 +0000
+++ drv/indexv4.drv	2017-09-16 15:57:20 +0000
@@ -1,5 +1,5 @@
 // 
-// Copyright (c) 2015 Samuel Thibault <samuel.thibault at ens-lyon.org>
+// Copyright (c) 2015, 2017 Samuel Thibault <samuel.thibault at ens-lyon.org>
 // 
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
@@ -41,7 +41,7 @@ Filter image/vnd.cups-ubrl 0 imageubrlto
 // Common options
 //
 
-HWMargins 0.5mm 0.5mm 0.5mm 0.5mm
+HWMargins 5mm 5mm 5mm 5mm
 VariablePaperSize true
 MinSize 1in 1in
 

=== modified file 'filter/braille/filters/cups-braille.sh.in'
--- filter/braille/filters/cups-braille.sh.in	2017-09-14 22:19:36 +0000
+++ filter/braille/filters/cups-braille.sh.in	2017-09-16 16:53:38 +0000
@@ -25,7 +25,7 @@
 # Get an attribute from the ppd file
 getAttribute () {
   ATTRIBUTE=$1
-  VALUE=`grep "^\*$ATTRIBUTE:" "$PPD" | cut -d" " -f2`
+  VALUE=`grep "^\*$ATTRIBUTE:" "$PPD" | cut -d" " -f2-`
   VALUE=${VALUE##\"}
   VALUE=${VALUE%%\"}
   printf "DEBUG: Attribute $ATTRIBUTE is '%s'\n" "$VALUE" >&2
@@ -144,9 +144,48 @@ case "$PAGESIZE" in
     ;;
 esac
 
-#?TODO: hardcoded embosser margin
-PRINTABLEWIDTH=$((PAGEWIDTH - 1000))
-PRINTABLEHEIGHT=$((PAGEHEIGHT - 1000))
+HWMARGINS=$(getAttribute HWMargins)
+printf "DEBUG: HW margins are $HWMARGINS\n" >&2
+HWMARGIN_LEFT="${HWMARGINS%% *}"
+HWMARGINS="${HWMARGINS#* }"
+HWMARGIN_BOTTOM="${HWMARGINS%% *}"
+HWMARGINS="${HWMARGINS#* }"
+HWMARGIN_RIGHT="${HWMARGINS%% *}"
+HWMARGINS="${HWMARGINS#* }"
+HWMARGIN_TOP="${HWMARGINS%% *}"
+
+# Convert from points (1/72 of inch) to 1/100th of mm
+points2mm() {
+  # First get an integer so bash can compute
+  # I.e. convert to 10^15th of point
+  # Note: bash's integer computation will work until about 1000mm, that's plenty :)
+  POINTS="$1"
+  INT_POINTS="${POINTS%.*}"
+  if [ "$INT_POINTS" = "$POINTS" ]
+  then
+    FRAC_POINTS=000000000000000
+  else
+    FRAC_POINTS="${POINTS#*.}000000000000000"
+  fi
+  FRAC_POINTS="${FRAC_POINTS:0:15}"
+  FRAC_POINTS="$INT_POINTS$FRAC_POINTS"
+  # Then we can compute conversion
+  # We round up to be safe
+  FRAC_INCH=$((("$FRAC_POINTS" + 71) / 72))
+  FRAC_CM=$((("$FRAC_INCH" * 254 + 99) / 100))
+  HUNDRENDTH_MM=$((("$FRAC_CM" + 999999999999) / 1000000000000))
+  echo $HUNDRENDTH_MM
+}
+
+MARGIN_LEFT=$(points2mm "$HWMARGIN_LEFT")
+MARGIN_RIGHT=$(points2mm "$HWMARGIN_RIGHT")
+MARGIN_TOP=$(points2mm "$HWMARGIN_TOP")
+MARGIN_BOTTOM=$(points2mm "$HWMARGIN_BOTTOM")
+
+printf "DEBUG: margins are left $MARGIN_LEFT right $MARGIN_RIGHT top $MARGIN_TOP bottom $MARGIN_BOTTOM\n" >&2
+
+PRINTABLEWIDTH=$((PAGEWIDTH - $MARGIN_LEFT - $MARGIN_RIGHT))
+PRINTABLEHEIGHT=$((PAGEHEIGHT - $MARGIN_TOP - $MARGIN_BOTTOM))
 
 
 #



More information about the Printing-architecture mailing list