%!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 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