diff options
-rw-r--r-- | README.rst | 1 | ||||
-rw-r--r-- | conf/settings/knot-paper/10mm.yaml | 14 | ||||
-rw-r--r-- | designs/knot-paper-10mm-a4.yaml | 8 | ||||
-rw-r--r-- | src/knot-paper.ps.j2 | 208 |
4 files changed, 231 insertions, 0 deletions
@@ -14,6 +14,7 @@ The following types are currently available: * hex paper; * pointed paper (squares marked by small points at the corner instead of lines); +* knot paper (squares with a point pattern to draw celtic knots); * music paper; customizable for paper size, design size and colours. diff --git a/conf/settings/knot-paper/10mm.yaml b/conf/settings/knot-paper/10mm.yaml new file mode 100644 index 0000000..955f5f2 --- /dev/null +++ b/conf/settings/knot-paper/10mm.yaml @@ -0,0 +1,14 @@ +x_len: 10 mm +y_len: 10 mm + +x_point_len: 20 mm +y_point_len: 10 mm +odd_x_trasl: 10 mm + +point: 1 mm + +x_trasl: 0 mm +y_trasl: 0 mm + +x_point_trasl: 0 mm +y_point_trasl: 0 mm diff --git a/designs/knot-paper-10mm-a4.yaml b/designs/knot-paper-10mm-a4.yaml new file mode 100644 index 0000000..050da0d --- /dev/null +++ b/designs/knot-paper-10mm-a4.yaml @@ -0,0 +1,8 @@ +template: knot-paper +paper: a4 +margins: 10mm +theme: thin_lines +settings: 10mm +override: + margin_top: 14 mm + margin_bottom: 13 mm diff --git a/src/knot-paper.ps.j2 b/src/knot-paper.ps.j2 new file mode 100644 index 0000000..3a8baf2 --- /dev/null +++ b/src/knot-paper.ps.j2 @@ -0,0 +1,208 @@ +%!PS-Adobe-1.0 +%%Title: knot-paper - part of rpgTools by Elena of Valhalla +%%Pages:1 +%%BoundingBox: {{ bounding_box }} +%%DocumentPaperSizes: {{ paper_name }} +%%CreationDate: 2024/04/26 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%EndComments +%%BeginProlog +% Copyright (C) 2024 Elena Grandi +% All rights reserved. +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions are met: +% +% * Redistributions of source code must retain the above copyright +% notice, this list of conditions and the following disclaimer. +% * Redistributions in binary form must reproduce the above copyright +% notice, this list of conditions and the following disclaimer in the +% documentation and/or other materials provided with the distribution. +% * Neither the name of the <organization> nor the +% names of its contributors may be used to endorse or promote products +% derived from this software without specific prior written permission. +% +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +% DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +% (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +% LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +% ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +% (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +% SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +% ------ Usage ---------------------------------------------------------------- + +% To use this file either send it to a postscript printer, or use your +% favourite postscript interpreter to visualize and print it. + +% You can customize the result by changing the values in the Settings +% section below (see the comments for details) + +% ------ sizes ---------------------------------------------------------------- +% This will allow you to give measurements in inches or millimiters +% do not change +/inch {72 mul} def +/mm {0.03937 inch mul} def + +% ------ Settings ------------------------------------------------------------- + +% ------ Basic settings + +% page size: if you change this, you should change the BoundingBox +% in line 4 accordingly (you CAN'T use mm or inch over there) +/PageWidth {{ page_width }} def +/PageHeight {{ page_height }} def + +/SquaXLen {{ x_len }} def % hor spacing between lines +/SquaYLen {{ y_len }} def % ver spacing between lines + +/PointXLen {{ x_point_len }} def % hor spacing between points +/PointYLen {{ y_point_len }} def % ver spacing between points +/OddXTrasl {{ odd_x_trasl }} def % hor traslation of points on odd lines + +% line width and color for thin lines +/LineSizeThin {{ thin_line_size }} def +/LineColoThin {{ thin_line_color }} def +% line width and color for border +/LineSizeBord {{ border_line_size }} def +/LineColoBord {{ border_line_color }} def +% point size +/PointSize {{ point }} def +/PointLineSize {{ heavy_line_size }} def +/PointLineColo {{ heavy_line_color }} def + +/BackColo {{ background_color }} def % background color + +% white margins +/BorderTop {{ margin_top }} def +/BorderBottom {{ margin_bottom }} def +/BorderLeft {{ margin_left }} def +/BorderRight {{ margin_right }} def + +% ------ Advanced settings + +% translation of the starting point of the pattern +/PattTrasX {{ x_trasl }} def +/PattTrasY {{ y_trasl }} def + +% ------ Behaviour + +% Whether to print a line around the margins (1) or not (0) +/WillPrintBorder {{ 1 if border else 0 }} def + +% From here on you shouldn't worry about changing or configuring anything +% ------ Variables ------------------------------------------------------------ + +% number of vert and hor lines +/SquaXNum PageWidth BorderLeft sub BorderRight sub SquaXLen div def +/SquaYNum PageHeight BorderTop sub BorderBottom sub SquaYLen div def + +% starting vert and hor line num +/SquaXSta PattTrasX SquaXLen div cvi neg def +/SquaYSta PattTrasY SquaYLen div cvi neg def + +% ending vert and hor line num +/SquaXEnd SquaXNum SquaXSta add def +/SquaYEnd SquaYNum SquaYSta add def + +% number of vert and hor points +/PointXNum PageWidth BorderLeft sub BorderRight sub PointXLen div def +/PointYNum PageHeight BorderTop sub BorderBottom sub PointYLen div def + +% starting vert and hor point num +/PointXSta PattTrasX PointXLen div cvi neg def +/PointYSta PattTrasY PointYLen div cvi neg def + +% ending vert and hor line num +/PointXEnd PointXNum PointXSta add def +/PointYEnd PointYNum PointYSta add def + +% ------ Procedures ----------------------------------------------------------- + +% Describes the printable area (does NOT print anything) +/UsedArea { + newpath + BorderLeft BorderBottom moveto + BorderLeft PageHeight BorderTop sub lineto + PageWidth BorderRight sub PageHeight BorderTop sub lineto + PageWidth BorderRight sub BorderBottom lineto + closepath +} def + +/PrintPoint { %stk: x y + newpath + 1 index + 1 index + moveto + PointSize 0 rmoveto + PointSize 0 360 arc + closepath + PointLineSize setlinewidth + PointLineColo setrgbcolor + fill + stroke +} def + +%%EndProlog +%%Page: 1 + +% set printing area +UsedArea clip + +% print background +BackColo setrgbcolor +UsedArea fill + +% print hor thin line pattern +newpath + SquaXSta 1 SquaXEnd { %for + SquaXLen mul BorderLeft add PattTrasX add BorderBottom moveto + 0 PageHeight BorderTop sub BorderBottom sub rlineto + } for + LineSizeThin setlinewidth + LineColoThin setrgbcolor +stroke + +% print vert thin line pattern +newpath + SquaYSta 1 SquaYEnd { %for + SquaYLen mul BorderBottom add PattTrasY add BorderLeft exch moveto + PageWidth BorderLeft sub BorderRight sub 0 rlineto + } for + LineSizeThin setlinewidth + LineColoThin setrgbcolor +stroke + +% print points +BorderLeft PattTrasX add PointXLen sub % x starting position +PointXLen % step +PageWidth % stop +{ % for + dup + BorderBottom PattTrasY add PointYLen sub % y starting position + PointYLen 2 mul % step + PageHeight % stop + { %for + 1 index exch PrintPoint + } for + BorderBottom PattTrasY add PointYLen 2 mul sub % y starting position + PointYLen 2 mul % step + PageHeight % stop + { %for + 1 index OddXTrasl add exch PrintPoint + } for +} for + +% print border (if WillPrintBorder is not 0 ) +WillPrintBorder 0 ne { + LineSizeBord setlinewidth + LineColoBord setrgbcolor + UsedArea stroke +} if + +showpage +%%Trailer |