aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.rst1
-rw-r--r--conf/settings/knot-paper/10mm.yaml14
-rw-r--r--designs/knot-paper-10mm-a4.yaml8
-rw-r--r--src/knot-paper.ps.j2208
4 files changed, 231 insertions, 0 deletions
diff --git a/README.rst b/README.rst
index 7d5d2a5..6cc1f12 100644
--- a/README.rst
+++ b/README.rst
@@ -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