- Computers & electronics
- Software
- Manual
- 173 Pages
nanDECK Manual
nanDECK is a program designed to create custom decks of cards for various purposes. It offers extensive features including range and sequence manipulation, color control, label creation and management, frame creation with various options, expressions for complex operations, and comment support. Users can create PDFs, save images, and convert PDFs to images. It also provides script lists, command-line parameters, keyword wizards, a linked data editor, virtual table, visual editor, configuration settings, deck comparison tools, and shortcuts.
advertisement
Assistant Bot
Need help? Our chatbot has already read the manual and is ready to assist you. Feel free to ask any questions about the device, but providing details will make the conversation more productive.
nanDECK Manual by Andrea “Nand” Nini Program version 1.23.2 – 2017-07-14 Index An overview ....................................................................................................................................................................... 6 Editor commands ................................................................................................................................................................ 9 Getting started… ............................................................................................................................................................... 10 Ranges .............................................................................................................................................................................. 14 Sequences ......................................................................................................................................................................... 15 Colors ............................................................................................................................................................................... 16 Labels ............................................................................................................................................................................... 19 Label functions ................................................................................................................................................................. 24 AUTOLABEL .............................................................................................................................................................. 24 AUTORANGE ............................................................................................................................................................. 24 CONCAT ...................................................................................................................................................................... 24 CONCAT1 .................................................................................................................................................................... 25 DIRFILES ..................................................................................................................................................................... 25 ENVIRONMENT ......................................................................................................................................................... 25 EVAL............................................................................................................................................................................ 25 EXPAND ...................................................................................................................................................................... 26 FILTER ......................................................................................................................................................................... 26 GRADIENTSEQ .......................................................................................................................................................... 27 GROUP ......................................................................................................................................................................... 28 JOIN ............................................................................................................................................................................. 28 LABELRANGE ............................................................................................................................................................ 28 LABELSTRING ........................................................................................................................................................... 29 LENGTH ...................................................................................................................................................................... 29 PRODUCT.................................................................................................................................................................... 29 RANGEADD ................................................................................................................................................................ 30 RANGEREM ................................................................................................................................................................ 30 RANGESUB ................................................................................................................................................................. 30 REPLACE .................................................................................................................................................................... 31 SAVELABEL ............................................................................................................................................................... 31 STRINGLABEL ........................................................................................................................................................... 31 TOKENIZE .................................................................................................................................................................. 31 Frames .............................................................................................................................................................................. 32 Frame functions ................................................................................................................................................................ 36 FRAMEBAR ................................................................................................................................................................ 36 FRAMEBEZIER........................................................................................................................................................... 36 FRAMEBOX ................................................................................................................................................................ 36 FRAMECLOCK ........................................................................................................................................................... 37 FRAMECOUNT ........................................................................................................................................................... 38 FRAMEDISK ............................................................................................................................................................... 38 FRAMEHEX ................................................................................................................................................................ 38 FRAMELINE ............................................................................................................................................................... 39 FRAMELIST ................................................................................................................................................................ 39 FRAMEMELD ............................................................................................................................................................. 39 FRAMEMOSAIC ......................................................................................................................................................... 40 FRAMENET ................................................................................................................................................................. 40 FRAMEPATH .............................................................................................................................................................. 41 FRAMEPER ................................................................................................................................................................. 41 FRAMERECT .............................................................................................................................................................. 42 FRAMESUB ................................................................................................................................................................. 42 FRAMETRANS ........................................................................................................................................................... 42 FRAMETRI .................................................................................................................................................................. 42 Expressions ....................................................................................................................................................................... 44 Comments ......................................................................................................................................................................... 45 Script lists ......................................................................................................................................................................... 46 Create PDF ....................................................................................................................................................................... 47 Save images ...................................................................................................................................................................... 48 Convert a PDF to images .................................................................................................................................................. 48 Command-line parameters ................................................................................................................................................ 49 Keyword wizards .............................................................................................................................................................. 50 Linked data editor ............................................................................................................................................................. 52 2 Virtual table ...................................................................................................................................................................... 53 Visual editor ..................................................................................................................................................................... 55 Configuration .................................................................................................................................................................... 57 Compare decks ................................................................................................................................................................. 60 Shortcuts ........................................................................................................................................................................... 61 References ........................................................................................................................................................................ 61 F.A.Q. ............................................................................................................................................................................... 61 Directives .......................................................................................................................................................................... 63 BASERANGE .............................................................................................................................................................. 63 BATCH ......................................................................................................................................................................... 63 BEZIER ........................................................................................................................................................................ 64 BEZIERS ...................................................................................................................................................................... 65 BLEED ......................................................................................................................................................................... 66 BORDER ...................................................................................................................................................................... 66 BRUSH ......................................................................................................................................................................... 67 BUTTON ...................................................................................................................................................................... 69 CANVAS ...................................................................................................................................................................... 70 CANVASSIZE ............................................................................................................................................................. 71 CANVASWORK .......................................................................................................................................................... 71 CARDS ......................................................................................................................................................................... 71 CARDSIZE ................................................................................................................................................................... 71 CASE ............................................................................................................................................................................ 72 CASEELSE .................................................................................................................................................................. 72 CHROMAKEY............................................................................................................................................................. 72 COLOR ......................................................................................................................................................................... 73 COLORS ...................................................................................................................................................................... 74 COMMENT .................................................................................................................................................................. 74 COPY............................................................................................................................................................................ 76 COPYCARD ................................................................................................................................................................ 77 CORRECTION ............................................................................................................................................................. 77 COUNTER ................................................................................................................................................................... 78 DECK ........................................................................................................................................................................... 78 DICE ............................................................................................................................................................................. 79 DISPLAY ..................................................................................................................................................................... 79 DOWNLOAD ............................................................................................................................................................... 80 DPI ................................................................................................................................................................................ 80 DRAW .......................................................................................................................................................................... 80 DUPLEX ...................................................................................................................................................................... 81 EDGE............................................................................................................................................................................ 81 ELLIPSE ....................................................................................................................................................................... 83 ELSE ............................................................................................................................................................................. 84 ELSEIF ......................................................................................................................................................................... 84 END .............................................................................................................................................................................. 84 ENDFRAME ................................................................................................................................................................ 84 ENDIF .......................................................................................................................................................................... 84 ENDLAYER ................................................................................................................................................................. 85 ENDLINK .................................................................................................................................................................... 85 ENDSECTION ............................................................................................................................................................. 85 ENDSELECT ............................................................................................................................................................... 86 ENDSEQUENCE ......................................................................................................................................................... 86 ENDVISUAL ............................................................................................................................................................... 86 FILL .............................................................................................................................................................................. 87 FOLDER ....................................................................................................................................................................... 87 FONT ............................................................................................................................................................................ 88 FONTALIAS ................................................................................................................................................................ 89 FONTCHANGE ........................................................................................................................................................... 90 FONTRANGE .............................................................................................................................................................. 90 FOOTER ....................................................................................................................................................................... 91 FOR .............................................................................................................................................................................. 92 FRAME ........................................................................................................................................................................ 93 GAP .............................................................................................................................................................................. 93 GRID ............................................................................................................................................................................ 94 3 HEADER ...................................................................................................................................................................... 95 HEXGRID .................................................................................................................................................................... 96 HTMLFILE .................................................................................................................................................................. 97 HTMLFONT ................................................................................................................................................................ 98 HTMLIMAGE .............................................................................................................................................................. 99 HTMLMARGINS......................................................................................................................................................... 99 HTMLTEXT ............................................................................................................................................................... 101 ICON .......................................................................................................................................................................... 102 ICONS ........................................................................................................................................................................ 103 IF................................................................................................................................................................................. 104 IMAGE ....................................................................................................................................................................... 106 IMAGEFILTER .......................................................................................................................................................... 109 IMAGESIZE ............................................................................................................................................................... 109 INCLUDE ................................................................................................................................................................... 109 INPUTCHOICE .......................................................................................................................................................... 111 INPUTLIST ................................................................................................................................................................ 112 INPUTNUMBER ....................................................................................................................................................... 113 INPUTTEXT .............................................................................................................................................................. 114 LAYER ....................................................................................................................................................................... 115 LIMIT ......................................................................................................................................................................... 115 LINE ........................................................................................................................................................................... 117 LINERECT ................................................................................................................................................................. 118 LINK ........................................................................................................................................................................... 119 LINKCOLOR ............................................................................................................................................................. 121 LINKENCODE........................................................................................................................................................... 121 LINKFILTER ............................................................................................................................................................. 121 LINKMULDIS ........................................................................................................................................................... 122 LINKMULTI .............................................................................................................................................................. 122 LINKNEW .................................................................................................................................................................. 123 LINKRANDOM ......................................................................................................................................................... 123 LINKSEP .................................................................................................................................................................... 124 LINKUNI .................................................................................................................................................................... 124 LOG ............................................................................................................................................................................ 124 MACRO...................................................................................................................................................................... 125 MARGINS .................................................................................................................................................................. 126 MOSAIC ..................................................................................................................................................................... 126 NANDECK ................................................................................................................................................................. 127 NEXT.......................................................................................................................................................................... 127 OVERSAMPLE .......................................................................................................................................................... 127 PAGE .......................................................................................................................................................................... 128 PAGEFONT ............................................................................................................................................................... 128 PAGEIMAGE ............................................................................................................................................................. 129 PATTERN .................................................................................................................................................................. 130 PIE .............................................................................................................................................................................. 131 POLYGON ................................................................................................................................................................. 132 PRINT ......................................................................................................................................................................... 133 RECTANGLE............................................................................................................................................................. 134 RENDER .................................................................................................................................................................... 135 RHOMBUS ................................................................................................................................................................ 136 ROUNDRECT ............................................................................................................................................................ 137 RTFFILE .................................................................................................................................................................... 138 RTFTEXT ................................................................................................................................................................... 139 SAVE .......................................................................................................................................................................... 140 SAVEGIFA ................................................................................................................................................................ 141 SAVEPDF .................................................................................................................................................................. 141 SECTION ................................................................................................................................................................... 141 SELECT...................................................................................................................................................................... 142 SEQUENCE ............................................................................................................................................................... 142 SET ............................................................................................................................................................................. 143 SPECIAL .................................................................................................................................................................... 143 STAR .......................................................................................................................................................................... 145 STORE........................................................................................................................................................................ 146 4 TABLE ....................................................................................................................................................................... 146 TAG ............................................................................................................................................................................ 146 TEXT .......................................................................................................................................................................... 148 TEXTFONT................................................................................................................................................................ 150 TEXTLIMIT ............................................................................................................................................................... 150 THREADS .................................................................................................................................................................. 151 TOKEN....................................................................................................................................................................... 151 TRACK ....................................................................................................................................................................... 152 TRACKRECT............................................................................................................................................................. 153 TRIANGLE ................................................................................................................................................................ 154 UNIT........................................................................................................................................................................... 155 VECTOR .................................................................................................................................................................... 155 VISUAL...................................................................................................................................................................... 156 ZOOM ........................................................................................................................................................................ 156 Code examples ................................................................................................................................................................ 157 Wargame counters ...................................................................................................................................................... 157 Dice results ................................................................................................................................................................. 158 Score track .................................................................................................................................................................. 159 Boggle dice ................................................................................................................................................................. 160 Catan map ................................................................................................................................................................... 161 Clock ........................................................................................................................................................................... 162 Hex board ................................................................................................................................................................... 163 Triangle map ............................................................................................................................................................... 164 Chess board................................................................................................................................................................. 165 Trivia cards ................................................................................................................................................................. 166 Hex racetrack .............................................................................................................................................................. 167 Tuckbox ...................................................................................................................................................................... 168 Number wheel ............................................................................................................................................................. 169 Tripples tiles ............................................................................................................................................................... 170 Path tiles ..................................................................................................................................................................... 171 Combinations .............................................................................................................................................................. 172 Standard 52-deck of cards........................................................................................................................................... 173 5 An overview nanDECK is a program capable of creating graphic elements from scripts: every line of a script contains a command, for rendering texts, rectangles and other graphic elements. The program was made for creating cards, but it can be used for many other graphic objects; each card is treated like a different page, in which you can draw different graphical elements. At the start, you can write the script in the large edit box in the center of the window: You can load a script with the “Open deck” button, save it with “Save” and “as” buttons, and create the deck with the buttons “Validate deck” and “Build deck”. Tip: You can do both if you right-click the “Validate deck” button. All commands start with a keyword, an equal sign (=) and a list of parameters; for many commands, the 1st parameter is a range of “cards” in which the command will be executed. The commands without a range will be evaluated only once (for example the BORDER directive to draw a border on all cards, or the CARDS directive for setting the number of the cards in the deck), or for every card (like the FONT directive); in other words, the program creates the 1 st card in the deck, and executes all the script on it, then it switches on the 2 nd card, and executes all the script and so on; each ranged directive is executed only if the range match. Note: the CARDS directive is no longer needed, now the program creates automatically a deck using the information from all the directives in the script. For example, if you have a 10-30 range, the deck will be created with 30 cards. For example, in a game of Werewolf, I need a card with a word “SEER”, three “WEREWOLF” and thirteen “VILLAGER”. The first card will be: FONT = Arial, 32, B, #0000FF TEXT = 1,"SEER", 0, 0, 100%, 100%, center, center With the 1st line, I choose a font: Arial 32, bold, and blue (the #0000FF parameter); with the 2 nd line I draw the word “SEER” in the center of the whole card #1 (starting from 0,0 – top left of the card, 100% width and 100% height). The other cards will be drawn with these lines: FONT = Arial, 24, B, #FF0000 TEXT = 2-4, "WEREWOLF", 0, 0, 100%, 100%, center, center 6 FONT = Arial, 28, B, #000000 TEXT = 5-18, "VILLAGER", 0, 0, 100%, 100%, center, center Note the range 2-4 and 5-18, for three and thirteen cards. Other elements can be added, for example a rectangle: RECTANGLE = 1-18, 0, 0, 100%, 100%, #FFFFFF#000000#FFFFFF@90, empty, 1 The rectangle is on all the cards (range 1-18), from 0,0 – top left, 100% width and 100% height, with a gradient starting from white (#FFFFFF), to black (#000000), again to white, rotated 90°; not filled (empty parameter) and with a border thickness of 1”. The flexibility of the program is that an element can be added on one or more than one card, changing only the range parameter. If you want to add an image on all the cards, you can add a line like this: IMAGE = 1-18, "Logo.png", 0, 0, 20%, 20%, 0, TP In the left bar in the main window you can use these command buttons: New deck: creates a new script. wiz: creates a new script selecting some options. Open deck: open a saved script. Reopen deck: open a saved script, picking one from a list of the last accessed. Save: save the current script. as: save the current script with another name. Exit program: close the program. Validate deck: the program check the syntax of the script. Build deck: the program builds the deck of cards. Print deck: the program print the deck of cards. Save images: the program saves the images of each card of the deck, see page 48. MT: the program can launch several instances of itself, each with a range of the deck. PDF: the program creates a PDF file with all the cards’ images, see page 47. CP: the program creates one image from each page of a PDF, see page 48. GIFa: with this option, you can save the current deck into an animated GIF image (you can choose the delay between images and select an optimized palette). TIFF: with this option, you can save a multi-page TIFF image (with RGB or CMYK color space). Print script: print the current script. Insert >: this button open a menu, where you can insert a color, a font, an image, a symbol, a gradient, an include file, a linked file, a label, a frame or a folder. Linked data: you can edit the data from a linked csv file, see page 52. Find: find a string in the script editor. rpl: find and replace a string in the script editor. 7 +Com: the program adds a comment in the selected lines of the script. -Com: the program removes a comment in the selected lines of the script. Help (F1): the program shows a help page for the current directive. (F2): the program shows a window for modifying the current directive. Config: the configuration options, see page 57. Info: info about the author. In the right bar, you can use these command buttons: Link first: if you check this option, only the first line from a data file (csv or spreadsheet) is read, for testing purpose. Link dis.: if you check this option, the data file (csv or spreadsheet) is not read, and are shown only the fields’ names, for testing purpose. Preview: remove the check in this option if you want to hide the card preview (the rendering is faster). Goto card: click to select a card from the deck to be viewed. Auto build: check this option if you want to see in real time the script’s changes in the preview. Highlight (checkbox): check this option to highlight with colors each line of the editor and each graphic element of the preview. Highlight (button): click to highlight the graphic element of the preview corresponding to the current line of the editor. Partial: the program renders the current card only until the position of the cursor in the editor. Arrow buttons: with these buttons, you move between the cards of the deck (first, prior, next, and last). Card preview: this button shows you an enlarged view of the current card. Canv: this button shows you the canvas (the “zero” card). Visual Editor: the program opens the visual editor window, see page 55. Comp: this button shows a window for comparing different decks of cards. Script list: in this window, you can execute several scripts, in a batch mode, see page 46. Edit: in this window, you can edit the content of a linked spreadsheet file. Table: the program opens the virtual table window, see page 53. The Game Crafter: in this window, you can upload a deck http://www.thegamecrafter.com for printing and/or publishing your game. of card directly to the website All deck: this button selects all the cards in the deck to be rendered (the start-end range is in the two edit box to the left and right of this button). 8 Editor commands CTRL+X CTRL+C CTRL+V Cut Copy Paste CTRL+A CTRL+B CTRL+I CTRL+O CTRL+P Select all Validate and build the current card Insert card’s number (character §) Insert frame’s number (character °) Insert frame’s number (character µ) SHIFT+CTRL+I SHIFT+CTRL+U Block indent Block un-indent CTRL+D CTRL+M CTRL+N CTRL+Y SHIFT+CTRL+Y CTRL+Z SHIFT+CTRL+Z Add new tab with a new version Line break Add new tab (empty) Delete line Delete EOL Undo Redo CTRL+0…9 Go to marker 0…9 SHIFT+CTRL+0…9 Set/remove marker 0…9 SHIFT+CTRL+C SHIFT+CTRL+L SHIFT+CTRL+N SHIFT+CTRL+B Set columns selection Set lines selection Set standard selection Match bracket CTRL+F CTRL+H CTRL+G Find Replace Go to line F1 CTRL+F1 F2 CTRL+F2 F3 CTRL+F3 F4 F5 F6 F7 CTRL+F7 F8 CTRL+F8 F9 CTRL+F9 F10 Help (current line directive) Auto layout (white on black) Modify (current line directive) Auto layout (color) Modify (current line directive, visual mode) Auto layout (black on white) Visual editor Auto build switch Go to card Highlight current line Highlight all lines switch Insert label Insert frame Insert color Insert gradient Partial build switch (build source until current line) Tip: You can copy the current card’s image if you press CTRL+C after a click on the card image. Tip: You can validate and build the current card’s image if you right-click on the card image. Tip: You can validate and build the whole deck if you right-click on the “Validate deck” button. Tip: You can edit more than one script simultaneously, right click on the tab on the upper side of the screen and choose the voice “Add new tab” to add another tab to the editor. 9 Tip: You can move between cards using the mouse wheel. Getting started… This is a simple yet complete tutorial about how to create a deck of cards starting from a spreadsheet file. First, I wrote some data, and save them as Data.xls: Note: each column will be identified with the name in the first line (each must be different). I start nanDECK, and as first line I link that file: LINK = Data.xls Then I save the script, as tut01.txt, in the same folder with the Excel file (if I want to save it in a different folder, in the LINK line I must specify also the path, for example c:\users\nand\desktop\data\data.xls). I want to put the title in the top of the card, then I select a font with the line: FONT = Arial, 24, , #000000 Font name for the 1st parameter, size for the 2nd, and color for the 4th. The 3rd is empty, this is the place for flags like B (bold), I (italic), U (underline) and so on (among others, if you want to shrink the font size to fit the space, use a N flag, if you don’t want to see the text background, use a T flag). If you use more than one flag, put them all in this parameter (for example: BTN). And add the title with this line: TEXT = 1-3, [name], 0, 0, 100%, 20% The 1st parameter is the range, and I want to put this text on three cards (from 1 to 3, then the syntax is 1-3), the 2nd parameter is the column name from the Excel file (enclosed in square brackets), the others are the position (0, 0 is top left), width (100% of the card’s width) and height (20% is a fifth of the card’s height). Note: I can use also values in cm, and I can specify 0, 0, 6, 1.8 (for a default card of 6 x 9 cm), but with percent values I can change the size of the card without having to change every size of every element. With a click on “Validate deck” button, “Build deck” button, the deck is created with three (ugly) cards: 10 Let’s add some images: IMAGE = 1-3, [img], 0, 20%, 100%, 40%, 0, P The 0 in the 7th parameter is the angle of rotation for the image, and the P is for proportionally resize the image, if you have transparent PNGs, add a N flag in the same parameter (i.e. PN). I’ve added the images’ files in the same folder with the spreadsheet and the script, and this is the result after Validate + Build: These lines are for the description: FONT = Arial, 10, , #000000 TEXT = 1-3, [desc], 5%, 65%, 90%, 30%, left, wordwrap I choose a smaller font, and since the description is more than one line, I add left as horizontal alignment and wordwrap as vertical. This is the result: These lines are for the value column: FONT = Arial, 32, T, #FF0000 TEXT = 1-3, [value], 0, 20%, 20%, 40% To make the number readable on every background, I can add an outlined text: FONT = Arial, 32, T, #FFFFFF TEXT = 1-3, [value], 0, 20%, 20%, 40%, center, center, 0, 100, 0.1 The “0, 100, 0.1” are respectively for angle, transparency and outline width. Note that these lines must be added before, because every element in a script is drawn accordingly to its position: first are drawn elements in the first lines, the last drawn are those in the bottom lines. I have four icons (one for each element), each identified with a letter in my Excel file (and on each card, there may be more than one icon). I add these lines in the script: ICON = 1-3, A, air.png ICON = 1-3, E, earth.png ICON = 1-3, F, fire.png 11 ICON = 1-3, W, water.png ICONS = 1-3, [icons], 80%, 20%, 20%, 40%, 20%, 10%, 0, PN In the last line, I specify the icons’ area (80%, 20%, 20%, 40%), the size of each icon (20%, 10%), the angle of rotation (0) and to use proportional resize (P) and PNG transparency (N). I’ve added the four png files in the same folder. And this is the result: Finally, I want to duplicate each card for the number specified in the “num” column, then I add, as first line (before the LINK), this directive: LINKMULTI = num I must also change every range 1-3 into 1-7. This is the result page: 12 This is a more compact version of the script, here the 1 st parameter (the range) is empty for most directives because I want to put the text/images on all the cards, and if I leave the 1 st parameter empty, nanDECK uses as a default 1-n, where n is the number of lines in the Excel file. LINKMULTI = num LINK = Data.xls FONT = Arial, 24, , #000000 TEXT = , [name], 0, 0, 100%, 20% IMAGE = , [img], 0, 20%, 100%, 40%, 0, P FONT = Arial, 10, , #000000 TEXT = , [desc], 5%, 65%, 90%, 30%, left, wordwrap FONT TEXT FONT TEXT = = = = Arial, 32, , [value], Arial, 32, , [value], ICON ICON ICON ICON = = = = , , , , A, E, F, W, T, 0, T, 0, #FFFFFF 20%, 20%, 40%, center, center, 0, 100, 0.1 #FF0000 20%, 20%, 40% air.png earth.png fire.png water.png ICONS = , [icons], 80%, 20%, 20%, 40%, 20%, 10%, 0, PN 13 Ranges Many directives (like IMAGE or TEXT) have a parameter for specifying for which cards will be executed that directive. A card in a range may be specified directly with a number, a list of cards with a list of numbers separated by a comma “,” and a range of cards with the first and last cards separated with a dash “-” or the first card and a number, separated with a number sign “#”. Examples: RECTANGLE RECTANGLE RECTANGLE RECTANGLE = = = = 1, 0, 0, 6, 9, #0000FF "1,3,5,7", 0, 0, 6, 9, #0000FF 1-10, 0, 0, 6, 9, #0000FF 10#5, 0, 0, 6, 9, #0000FF Note: in the 2nd line the range must be enclosed in quote for the presence of commas, however, you can always enclose all ranges in quotes. You can mix the two methods, and use a complex range, like: RECTANGLE = "1-10,12,15,19-20,35#3", 0, 0, 6, 9, #0000FF A number in a range can be the result of an expression (see page 36), and must be enclosed between “{” and “}. For example: RECTANGLE = 1-{2*5}, 0, 0, 6, 9, #0000FF Usually, the order doesn’t matter (1-10 is equal to 10-1) but for one command, COPYCARD, the order is important, because the source range is uses as specified, these two rows are different: COPYCARD = 11-20, 1-10 COPYCARD = 11-20, 10-1 The 1st row gives as result this sequence of cards: 1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10 The 2nd row gives as result this sequence of cards: 1,2,3,4,5,6,7,8,9,10,10,9,8,7,6,5,4,3,2,1 There is a syntax that can be used to change that behavior, useful, for example, to invert sub-ranges of cards (for printing front-back). For example: COPYCARD = 10-18, 1-9$abc>cba The first group of characters is the start pattern, the second group is the destination pattern, reversed in groups of three cards. You can obtain the same result manually writing: COPYCARD = 10-18, "3-1,6-4,9-7" This syntax is useful also if you want to specify a “hollow” range, for example, if you want a rectangle only on even cards: RECTANGLE = 1-10$ab>a, 1, 1, 4, 4, #FF0000 Note: the $abc>cba syntax works only when the card number is defined using a CARDS command. See also: AUTORANGE label function (page 24). 14 Sequences A sequence is a list of values used as a parameter in a directive. Each value is separated using the character pipe “|”. For each card in the directive’s range the program uses a different element in a sequence (restarting from the first if the sequence’ size isn’t enough to fill the range), for example, if you want ten cards, half with the word “odd” and half with the word “even”, you can use the TEXT directive, with a range 1-10 and a sequence of the two words as text parameter (“odd|even”). FONT = Arial, 32, , #000000 TEXT = 1-10, "odd|even", 0, 0, 6, 9, center Sequences may be very long, you can manipulate them in a clearer manner if you use them in labels. Usually a sequence must be on a single line, but you can split a long sequence into multiple lines, starting the first line with a “{” and ending the last line with a “}”. For example: {[long] = "one| two| three| four| five| six| seven| eight| nine| ten"} FONT = Arial, 32, , #000000 TEXT = 1-10, [long], 0, 0, 6, 9, center Tip: The split-line syntax with “{” and “}” can be used not only for sequences, but with every command. 15 Colors In this program, the colors will be defined by a string of seven characters, starting with a number sign “#” and six hexadecimal digits (using the HTML syntax), two for each component (red-green-blue), for example: White #FFFFFF Black #000000 Red #FF0000 Green #00FF00 Blue #0000FF Cyan #00FFFF Magenta #FF00FF Yellow #FFFF00 Tip: if you use the wizard for a new deck (the “wiz” button, to the right of “New deck” button), you can check the “Include labels for HTML colors” to obtain a set of 140 label definition for many colors. Tip: you can choose a color from a color picker, clicking on the button “Insert” and choosing the menu voice “Color”. If instead of a hexadecimal digit you specify a letter “H”, you obtain a random value from 0 to 15. For example, if you want a complete random color, with this syntax you can use #HHHHHH, instead for a random hue of blue, you can use #0000HH, and so on. The letter “L” stands for the last color used, then #LLLLLL is the last color, instead #0000LL is the last blue component used. You can concatenate more than one color to obtain a gradient, followed by a “@” to specify the angle. If you use these special values for the angle, you obtain a special gradient: 360 361 362 363 Radial gradient Elliptical gradient Square gradient Star gradient These are some examples: 16 From black to white, horizontal #FFFFFF#000000@0 From red to blue, vertical #0000FF#FF0000@90 From cyan to magenta, radial #FF00FF#00FFFF@360 From cyan to magenta, elliptical #FF00FF#00FFFF@361 From teal to yellow, square #FFFF00#008080@362 From orange to purple, star #400080#FFA500@363 From red, to green, to blue, horizontal #0000FF#00FF00#FF0000@0 If you omit the “@”, the colors are randomized (and smoothed); specifying a "%" and a number, you set a threshold for the 2nd color, for example: Blue and red, randomized #0000FF#FF0000 Blue and red, randomized 50% #0000FF#FF0000%50 Red and blue, randomized 50% #FF0000#0000FF%50 Blue, green, and red, randomized #0000FF#00FF00#FF0000 Specifying a $ and a number, the colors are smoothed that number of times (without specifying it, the color is smoothed only one time), for example: Blue and red #0000FF#FF0000 Blue and red, no smoothing #0000FF#FF0000$0 Red and blue, two smoothing #FF0000#0000FF$2 If you add a & and a number in the color, the pattern is created with a Perlin Noise algorithm, with a number of iteration equal to the numeric parameter, for example: Blue and red, eight iterations #0000FF#FF0000&8 Blue and red, six iterations #0000FF#FF0000&6 Blue and red, three iterations #0000FF#FF0000&3 If you add a ç in the color, the random pattern is made of stripes (and you can use more ç to make the stripes longer), for example: 17 Blue and red, randomized #0000FF#FF0000 Blue and red, striped #0000FF#FF0000ç Blue and red, striped x 2 #0000FF#FF0000çç Tip: you can choose a gradient from a visual form, clicking on the button “Insert” and choosing the menu voice “Gradient”. 18 Labels A label is used as a variable value in a script, and may be initialized and used several times in the code. It can be initialized with this syntax: [name] = value And used specifying its name (always delimited with “[” and “]”). This is an example: [alpha] = "This is a text" FONT = Arial, 32, , #000000 TEXT = 1-10, [alpha], 0, 0, 6, 9, center If the label contains a sequence (see page 15), you can obtain the number of elements contained using the syntax “(name)”. It can be used directly as a parameter or in an expression. For example: [alpha] = one|two|three FONT = Arial, 32, , #000000 TEXT = 1-{(alpha)*2}, [alpha], 0, 0, 6, 9, center The result deck will be composed of six cards, with the word sequence one-two-three-one-two-three. When you define a label, there are some characters you can use as prefix or postfix for the [name] to obtain special behavior. [name]number = value The resulting value is the original value repeated number times. Instead, with these letters as a prefix, you can use this program as a combinatorial engine: C P E F B CR PR ER combination permutation derangement (permutation with no element in its original position) circular shift (right) circular shift (left) combination with repetitions permutation with repetitions derangement with repetitions C[name]number P[name]number E[name]number F[name]number B[name]number = = = = = object1|object2…objectN object1|object2…objectN object1|object2…objectN object1|object2…objectN object1|object2…objectN These syntaxes create two labels with a combination and a permutation of number objects from the sequences, for example: C[label1]2 P[label2]2 E[label3]2 F[label4]2 B[label5]2 = = = = = A|B|C A|B|C A|B|C A|B|C A|B|C these labels will be translated into: [label1] [label2] [label3] [label4] [label5] = = = = = AB|AC|BC AB|AC|BA|BC|CA|CB BA|BC|CA AB|BC|CA AB|CA|BC 19 With repetitions: CR[label1]2 = A|B|C PR[label2]2 = A|B|C ER[label3]2 = A|B|C the result will be: [label1] = AA|AB|AC|BB|BC|CC [label2] = AA|AB|AC|BA|BB|BC|CA|CB|CC [label3] = BA|BC|CA|CC Special flags: D X S N A Z I O remove duplicate elements remove “rotated” elements remove elements with the same “structure” randomize elements sort elements in ascending order sort elements in descending order keep only crossing paths keep only paths that doesn’t cross themselves The “D” flag is useful when you have multiple elements in combinations/repetitions, for example: C[label1]2 = A|B|C|C will be evaluated as: [label1] = AB|AC|AC|BC|BC|CC If you don’t want repetitions, you can add the “D” flag (as a prefix) and the result will be: [label1] = AB|AC|BC|CC The “X” flag need a longer explanation. Let’s say, you need to create tiles with 4 quadrants, with all the combination of three elements (plains, woods and mountains), this is the starting script: CARDSIZE = [QUARTER1] [QUARTER2] [QUARTER3] [QUARTER4] 4, 4 = 0, = 0, = 4, = 0, 0, 0, 0, 4, 2, 4, 4, 2, 2, 0, 4, 2, 0, 2, 2, 4, 4 2 2 4 PR[SCHEMA]4 = P|F|M [ALL] = 1-{(SCHEMA)} [COLOR_P] = #00FF00 [COLOR_F] = #008000 [COLOR_M] = #C0C0C0 TRIANGLE TRIANGLE TRIANGLE TRIANGLE = = = = [ALL], [ALL], [ALL], [ALL], [QUARTER1], [QUARTER2], [QUARTER3], [QUARTER4], [COLOR_[SCHEMA:1,1]] [COLOR_[SCHEMA:2,1]] [COLOR_[SCHEMA:3,1]] [COLOR_[SCHEMA:4,1]] This is the result (4 pages of 81 tiles): 20 The tiles are all different, but not if you rotate them, for example, PFPF is equal to FPFP (rotated 90°). To eliminate them, you can use the “X” prefix. This is the result (1 page of 24 tiles): The “X” flag can be used more than once, to specify that not all the “rotations” will be considered as equals; for example, with only one “X”, the sequence 0102 is equal to: 1020 0201 2010 In a square token with a number on each side, this is equal to 90° rotations. Instead, with “XX”, the sequence 0102 is equal only to 0201 (in a square token, this is equal to considering only rotations of 180°, or rather, that rotations of 90° aren’t considered). The “S” flag remove elements with the same structure: for example, the sequence 0102 has the same structure of the sequence 1210. In the previous example, from the 24 tiles, only six have a different structure: The “N” flag will be used if you want to randomize the sequence, if you write, for example: N[elements] = alpha|beta|gamma|delta it will be randomly evaluated each time you validate the deck, for example as: [elements] = beta|gamma|delta|alpha If you want to analyze only a sub-string from the result of the permutation/combination engine or an external linked file, you can use the “:” syntax to extract a sub-string, the syntax is [label:start,number] where start is the starting character and number is the length of the sub-string in characters. For example, in the script about tiles in the previous page, every line extracts only a character from the label (composed of four characters), and associates it with another label: TRIANGLE TRIANGLE TRIANGLE TRIANGLE = = = = [ALL], [ALL], [ALL], [ALL], [QUARTER1], [QUARTER2], [QUARTER3], [QUARTER4], [COLOR_[SCHEMA:1,1]] [COLOR_[SCHEMA:2,1]] [COLOR_[SCHEMA:3,1]] [COLOR_[SCHEMA:4,1]] If the label [SCHEMA] was, as an example, “PFPM”, these lines will be evaluated as: 21 TRIANGLE TRIANGLE TRIANGLE TRIANGLE = = = = [ALL], [ALL], [ALL], [ALL], [QUARTER1], [QUARTER2], [QUARTER3], [QUARTER4], [COLOR_P] [COLOR_F] [COLOR_P] [COLOR_M] Tip: you can view a list of labels, their contents, and choose one of them from a list, clicking on the button “Insert” and choosing the menu voice “Label”. You can extract a single element in a sequence using the ? operator in an expression (delimited with curly brackets { and }). If you omit the number, it’s used the current card (i.e. is the same to use ? or ?§). For example, this script will print the letter “c”: [ALPHA] = a|b|c|d|e FONT = ARIAL, 32, , #000000 TEXT = 1, {ALPHA?3}, 0, 0, 100%, 100% There is also a syntax for creating labels with a condition and with a for…next cycle (note that you can’t define a label between standard IF…ENDIF or FOR…NEXT blocks): [label]%[condition], variable, start, end, step = value The [condition] parameter must be a label, it cannot be written directly because a condition is too complex to be evaluated correctly in a single line. This is an example: [check1]=[a]=1 [check2]=[a]<>1 [color]%[check1]=#FF0000 [color]%[check2]=#0000FF In this example, if [a] is 1, the label [color] is red (#FF0000), if [a] isn’t 1, the label [color] is blue (#0000FF). The condition can be omitted, in this case the label is defined only if it doesn’t already exist. In this example, the label [alpha] is red, and the label [beta] is blue: [alpha]=#FF0000 [alpha]%=#0000FF [beta]%=#0000FF The label creation can be repeated in a for…next cycle, for example, if you want to define ten labels, with powers of two, you can write: [lab(count)]%,(count),1,9 = {(count)^2} Note that the condition parameter is empty (the comma after the % symbol), and that if the step parameter is omitted, its value is assumed equal to one. The variable (count) can be anything (the parentheses aren’t really needed). The result is equal to write this code: [lab1]=1 [lab2]=4 [lab3]=9 [lab4]=16 [lab5]=25 [lab6]=36 [lab7]=49 [lab8]=64 [lab9]=81 An alternate syntax for the definitions of labels in a loop is this: [label]%[condition], variable, [sequence] = value 22 In this syntax, a step in the loop is executed for each value of the sequence (value that is replaced in the variable), for example: [seq] = alfa|beta|gamma [lab_(var)]%, (var), [seq] = test_(var) The result is equal to this code: [lab_alfa]=test_alfa [lab_beta]=test_beta [lab_gamma]=test_gamma 23 Label functions AUTOLABEL This function creates a label containing a sequence of numbers. This is the syntax: [name] = AUTOLABEL(start, end, step, separator) For example, this line: [a] = AUTOLABEL(1, 10, 2) will be evaluated as: [a] = 1|3|5|7|9|11 The standard separator is the pipe (the “|” character), if you want a different separator, you can specify it as the 4 th parameter. AUTORANGE This function calculates a range starting from the previous AUTORANGE (or card 1, if it was the first), the only parameter is a number of cards. This is the syntax: [name] = AUTORANGE(number) For example, these rows: [a] = AUTORANGE(10) [b] = AUTORANGE(5) [c] = AUTORANGE(8) will be evaluated as: [a] = 1-10 [b] = 11-15 [c] = 16-23 You can reset the counter, using a negative number as parameter. For example, these rows: [a] = AUTORANGE(10) [b] = AUTORANGE(-5) [c] = AUTORANGE(8) will be evaluated as: [a] = 1-10 [b] = 1-5 [c] = 6-13 CONCAT This function creates a label concatenating different strings, this is the syntax: [name] = CONCAT(parameter1, number1, parameter2, number2, … parameterN, numberN) Each parameter is repeated a number of times equal to the next parameter. This is an example: [test] = CONCAT(#000000, 3, #FFFFFF, 2) 24 Will be evaluated as: [test] = #000000#000000#000000#FFFFFF#FFFFFF CONCAT1 This function is equivalent to CONCAT, with a repetition of each parameter of one, this is the syntax: [name] = CONCAT(parameter1, parameter2, … parameterN) DIRFILES This function creates a sequence label using names of files from a folder (and subfolders), this is the syntax: [name] = DIRFILES(path, extension) The extension can be a sequence of extensions, like jpg|bmp|gif. This is an example: [img] = DIRFILES("c:\images\", jpg) and it will be evaluated as: [img] = "c:\images\one.jpg|c:\images\two.jpg|c:\images\three.jpg" Instead of an extension, you can specify in the 2nd parameter a file mask (with * and ? as wildcards). For example: [img] = DIRFILES("c:\images\", "img*.jpg") ENVIRONMENT This function reads an environment variable from the operating system, this is the syntax: [name] = ENVIRONMENT(variable) For example, this reads the path for the user folder: [folder] = ENVIRONMENT(userprofile) EVAL This function creates a sequence with the results of the evaluation of another sequence, this is the syntax: [name] = EVAL(sequence) This is an example: [alfa] = {1+1}|{2*3}|{3^3} [beta] = EVAL([alfa]) These two lines are equivalent to: [beta] = 2|6|27 Note: you obtain the same result with a single line: [beta] = EVAL({1+1}|{2*3}|{3^3}) 25 EXPAND This function creates a sequence replicating itself number1 times, with each element replicated number2 times (this parameter is option, if not specified is treated equal to one): [name] = EXPAND(sequence, number1, number2) This is an example: [alfa] = a|b|c [beta] = EXPAND([alfa], 2, 3) These two lines are equivalent to: [beta] = a|a|a|b|b|b|c|c|c|a|a|a|b|b|b|c|c|c FILTER This function creates a sequence taking elements from another sequence, filtering and grouping them using some rules. The basic syntax is: [name] = FILTER([name], filter1, filter2 … filterN) In the filterN parameters you can use wildcards: ? for any character, * for any characters, and use ranges of characters within parenthesis (as an example, 1(0-9) matches a number from 10 to 19). For example, this script will print only elements that start with a zero (four elements on eight): [ALPHA] = 000|001|010|011|100|101|110|111 [BETA] = FILTER([ALPHA], 0*) FONT = ARIAL, 32, , #000000 TEXT = 1-{(BETA)}, [BETA], 0, 0, 100%, 100% In the 1st parameter you can specify these additional flags: § > < + @ # $ ^ ~ = £ ° % ! & ¬ _ the sorted/added elements are used to create the new sequence sort characters from an element in ascending order before comparing it to the filters sort characters from an element in descending order before comparing it to the filters add numbers from an element before comparing it to the filters keep only the characters specified after this flag discard all the characters specified after this flag counts the maximum occurrences of a character(s) in the same element counts the maximum occurrences of specific character(s) in all positions on the previous accepted elements counts all the occurrences of specific character(s) in all positions on the previous accepted elements counts the maximum occurrences of specific character(s) in the same position on the previous accepted elements counts the maximum occurrence of a straight of characters set the rule for evaluating a straight (if not specified, is used the ASCII sequence of letters/numbers) replace a character(s) with another(s), all the couples are specified after this flag counts the distance (in characters) between two copies of the same characters, specified after this flag the element is evaluated from his position within the sequence, starting from one the condition (for including or not an element) is reversed (for inserting the symbol, type ALT + 0172) if an element is not included, a null string is added in its position You can combine multiple flags, and use a space if you want to mix two similar functions, for example, a $ followed by $$ can be coded as “$ $$”. For example, this script will print only elements that contains a zero and two ones (three elements on eight): [ALPHA] = 000|001|010|011|100|101|110|111 [BETA] = FILTER(>[ALPHA], 011) FONT = ARIAL, 32, , #000000 26 TEXT = "1-{(BETA)}", [BETA], 0, 0, 100%, 100% The flags “>”, “<”, “+”, “$”, “^”, “=”, and “%” can be repeated, when you must consider elements not as single characters, but as strings composed with more than one characters. For example, the element “0123” gives these results: + ++ > >> < << 6 24 0123 0123 3210 2301 This is as example for utilization of “$” flag. First, a label is created with all the permutations (with repetitions) of four elements from a set of five (a, b, c, d, and e), then, another label is created filtering only the occurrence of a three-of-akind and four-of-a-kind: pr[a]4 = a|b|c|d|e [b] = FILTER($[a], 3, 4) FONT = ARIAL, 64, , #000000 TEXT = 1-{(b)}, [b], 0, 0, 100%, 100% In this example, the same sequence is filtered to get only the labels that contains one or less repetitions of the same character in the same position: pr[a]4 = a|b|c|d|e [b] = FILTER(=[a], 0, 1) FONT = ARIAL, 64, , #000000 TEXT = 1-{(b)}, [b], 0, 0, 100%, 100% In this example, the characters “a”, “d”, and “g” are replaced with the numbers “1”, “2”, and “3”: [test_a] = abc|def|ghi [test_b] = FILTER(§[test_a]%a1d2g3) The result sequence [test_b] is equal to: 1bc|2ef|3hi You can create a sequence of parameters with a “FOR=” keyword, for example, if you want ten numbers, instead of adding all of them you can use a single parameter like “1-10FOR=-” (the 2nd minus symbol is the position of the counter in the result. Instead of a parameter used as a filter, you can specify a “mask” (with the prefix “MASK=”), that is used to apply the filter only to some characters of the elements from the sequence; you specify a character that you want to consider with a “1”, and a character to ignore with a “0”. For example, if you want to apply the rules only to the even characters of a ten-character string, use this parameter: MASK=0101010101 If there are more than one rule in the 1st parameter, and if you specify a number before the mask keyword, that mask is applied only to a single rule (1 for the 1 st rule, 2 for the 2nd, and so on). GRADIENTSEQ This function creates a sequence of gradients, splitting one into several sections, the syntax is: [name] = GRADIENTSEQ(gradient, number) For example, with this line the program creates a sequence of three gradients: [gradient] = GRADIENTSEQ(#000000#FF0000@0, 3) 27 GROUP This function takes all the elements in a sequence and removes all the duplicate elements, optionally, it can return a count of all the elements. For example: [alfa] = a|b|a|e|c|c|c|a|b|f|d|e [beta] = GROUP([alfa]) [gamma] = GROUP([alfa], COUNT) The two resulting sequences contain these values: [beta] = a|b|c|d|e|f [gamma] = 3|2|3|1|2|1 JOIN This function uses alternatively the elements from two (or more) sequences for building a new sequence, the syntax is: [name] = JOIN(sequence1, sequence2, … sequenceN) The length of the new sequence is equal to the longest source sequence. This is an example: [label1] = A|B [label2] = 1|2|3|4 [label3] = JOIN([label1], [label2]) The 3rd label will be evaluated as: [label3] = A1|B2|A3|B4 LABELRANGE This function creates a range, using elements from a sequence. The syntax for this function is: [name] = LABELRANGE(sequence, item, offset) If you specify the optional item parameter, the range is created with only the cards matching the item parameter position (wildcards * and ? are accepted). If you don’t specify the item parameter, the default element from a sequence is considered “1”. The offset parameter, if specified, will be added to every card of the range. For example: [sequence] = 0|1|1|0|0|1 [label] = LABELRANGE([sequence]) Result: [label] = "2,3,6" The item parameter can also accept these operators (in the format operatorvalue): = the item’s position from the sequence is included if it’s equal to the value (this operator can be omitted), <> the item’s position from the sequence is included if it’s different from the value, > the item’s position from the sequence is included if it’s greater than the value, < the item’s position from the sequence is included if it’s smaller than the value, >= the item’s position from the sequence is included if it’s greater or equal to the value, <= the item’s position from the sequence is included if it’s smaller or equal to the value. @ the item’s position from the sequence is included if the value is contained in it. # the item’s position from the sequence is included if the value isn’t contained in it. 28 For example: [sequence] = 1|2|3|4|5|6|7|8|9|10 [label] = LABELRANGE([sequence], >=5) Result: [label] = "5,6,7,8,9,10" LABELSTRING This function creates a string with elements taken from a sequence. The syntax for this function is: [name] = LABELSTRING(sequence, number) Without the optional number parameter, the result is a single string, taken from concatenating every element of the sequence. If you specify a number as 2nd parameter, for every nth element a new element of the sequence is created. For example: [sequence] = A|B|C|D|E|F [label] = LABELSTRING([sequence]) These two lines are equivalent to: [label] = ABCDEF Another example: [sequence] = A|B|C|D|E|F [label] = LABELSTRING([sequence], 2) Result: [label] = AB|CD|EF LENGTH This function creates a new sequence with the lengths of the elements of the sequence in the 1 st (and only) parameter, the syntax is: [name] = LENGTH(sequence) For example: [sequence] = ABC|DE|F|GH|IJK|LMNO [label] = LENGTH([sequence]) Result: [label] = 3|2|1|2|3|4 PRODUCT This function combines two (or more) sequences, in the result every element of the first sequence is combined with every element of the second sequence (and so on), the syntax is: [name] = PRODUCT(sequence1, sequence2, … sequenceN) The length of the new sequence is equal to the product of the length of all source sequences. This is an example: [label1] = A|B 29 [label2] = 1|2|3|4 [label3] = PRODUCT([label1], [label2]) The 3rd label will be evaluated as: [label3] = A1|A2|A3|A4|B1|B2|B3|B4 RANGEADD This function combines several ranges in one, the syntax is: [range] = RANGEADD(range1, range2, … rangeN) For example: [range1] = "1-3" [range2] = "2-4" [range3] = "8-10" [range] = RANGEADD([range1],[range2],[range3]) Result: [range] = "1-4,8-10" RANGEREM This function extracts a sub-range from another range, this is the syntax: [sub-range] = RANGEREM(range1, range2, ... rangeN) This directive removes the ranges range2, ... rangeN from range1. For example: [range1] [range2] [range3] [range4] = = = = "1-10" "3,4" "7-9" RANGEREM([range1], [range2], [range[3]) Result: [range4] = "1-2,5-6,10" RANGESUB This function extracts a sub-range from another range, this is the syntax: [sub-range] = RANGESUB(range, start, number) The sub-range starts from the element specified by the start parameter, and is composed of number elements. If the number parameter is missing (or equal to zero) the sub-range goes to the end of the initial range; if the start parameter is equal to zero, the sub-range starts from the last element taken with another RANGESUB function (or from the start of the initial range), in a behavior like that implemented with AUTORANGE function. For example: [range1] = "1-10" [range2] = RANGESUB([range1], 3, 4) Result: 30 [range2] = "3-6" REPLACE This function replaces in a string (or a sequence) all instances of a substring with another. The syntax for this function is: [name] = REPLACE("string", "from", "to") SAVELABEL This function saves the content of a label (or more than one label) into a CSV text file or a spreadsheet file (if the extension of the filename is .xls or .xlsx). The syntax for this function is: [name] = SAVELABEL("filename", label1 , label2, … labelN) The result label [name] contains the filename. Note: do not use the [ ] in the label parameters. STRINGLABEL This function creates a sequence label with elements taken from a string. The syntax for this function is: [name] = STRINGLABEL("string", length) The optional length parameter sets the number of characters taken for each element of the sequence. If omitted, the length is one character. For example, these two lines are equivalent: [label] = STRINGLABEL("This is a test") [label] = "T|h|i|s| |i|s| |a| |t|e|s|t" TOKENIZE This function extracts a substring from a string, using a separator that slices the string into several tokens, and a number that specify the single token extracted. The syntax for this function is: [name] = TOKENIZE("string", number, separator) If the separator is not specified, is assumed to be equal to “|” (pipe), note that is the same separator for the elements in a sequence. For example: [result] = TOKENIZE("Alpha-Beta-Gamma", 2, -) The [result] label would be equal to “Beta” 31 Frames A frame is a special label, used when you need to identify a rectangular area used for placing a graphical content. A frame is defined used this syntax: <name> = position x, position y, width, height And can be used for example with a RECTANGLE directive: RECTANGLE = 1, <name>, #000000 This is a behavior that can be done also with a label, but in a frame, you can add an alignment and a specific size, with this syntax: <name, alignment, width, height> The “alignment” can be a flag from this list: TL TC TR CL CC CR BL BC BR top-left top-center top-right center-left center-center center-right bottom-left bottom-center bottom-right An example with all these nine alignments: <frame> = 1, 1, 4, 7 FONT = Arial, 16, , #FFFFFF, #0000FF RECTANGLE = 1, <frame>, #CCCCFF TEXT = 1, "TL", <frame, TL, 1, 1>, CENTER, TEXT = 1, "TC", <frame, TC, 1, 1>, CENTER, TEXT = 1, "TR", <frame, TR, 1, 1>, CENTER, TEXT = 1, "CL", <frame, CL, 1, 1>, CENTER, TEXT = 1, "CC", <frame, CC, 1, 1>, CENTER, TEXT = 1, "CR", <frame, CR, 1, 1>, CENTER, TEXT = 1, "BL", <frame, BL, 1, 1>, CENTER, TEXT = 1, "BC", <frame, BC, 1, 1>, CENTER, TEXT = 1, "BR", <frame, BR, 1, 1>, CENTER, CENTER CENTER CENTER CENTER CENTER CENTER CENTER CENTER CENTER Image 1 Result: Image 1 One between width and height can be expanded to the full extent of frame’s width or height, using this syntax and one of these alignments for width: <name, alignment, height> TW CW BW top aligned, full width center aligned, full width bottom aligned, full width Example: <frame> = 1, 1, 4, 7 FONT = Arial, 16, , #FFFFFF, #0000FF RECTANGLE = 1, <frame>, #CCCCFF TEXT = 1, "TW", <frame, TW, 1>, CENTER, CENTER TEXT = 1, "CW", <frame, CW, 1>, CENTER, CENTER TEXT = 1, "BW", <frame, BW, 1>, CENTER, CENTER Result: Image 2 32 Image 2 This syntax and these alignments are used for a full height: <name, alignment, width> HL HC HR full height, left aligned full height, center aligned full height, right aligned <frame> = 1, 1, 4, 7 FONT = Arial, 16, , #FFFFFF, #0000FF RECTANGLE = 1, <frame>, #CCCCFF TEXT = 1, "HL", <frame, HL, 1>, CENTER, CENTER TEXT = 1, "HC", <frame, HC, 1>, CENTER, CENTER TEXT = 1, "HR", <frame, HR, 1>, CENTER, CENTER Image 3 Result: Image 3 Another type of syntax can be used to extract only a position (useful with lines): <name, alignment> PTL PTC PTR PCL PCC PCR top-left top-center top-right center-left center-center center-right PBL PBC PBR bottom-left bottom-center bottom-right <frame> = RECTANGLE LINE = 1, LINE = 1, Image 4 1, 1, 4, 7 = 1, <frame>, #CCCCFF <frame, PTL>, <frame, PBR>, #FF0000, 0.2 <frame, PTR>, <frame, PBL>, #FF0000, 0.2 Result: Image 4 Instead of using two frames, you can also combine two alignment of this type in a single frame, for example, with this script the result is the same of the Image 4: <frame> = RECTANGLE LINE = 1, LINE = 1, 1, 1, 4, 7 = 1, <frame>, #CCCCFF <frame, PTL, PBR>, #FF0000, 0.2 <frame, PTR, PBL>, #FF0000, 0.2 Instead of using a size (width or height) in cm, you can use a fraction of the whole frame size, using a number followed by “%%” (instead, a single “%” gives you a size equal to a fraction of the whole card). For example: <frame> = 1, 1, 4, 7 FONT = Arial, 16, , #FFFFFF, #0000FF RECTANGLE = 1, <frame>, #CCCCFF TEXT = 1, "TL", <frame, TL, 50%%, 50%%>, CENTER, CENTER Result: Image 5 Image 5 Tip: you can view a list of frames, their contents, and choose one of them from a list, clicking on the button “Insert” and choosing the menu voice “Frame”. With these syntaxes, you can align a sub-frame starting from the last sub-frame, in the four directions: TS BS top aligned, full width bottom aligned, full width 33 SL SR left aligned, full height right aligned, full height <frame> = 1, 1, 4, 7 FONT = Arial, 16, , #FFFFFF, #0000FF TEXT = 1, TS1, <frame, TS, 1>, CENTER, FONT = Arial, 16, , #FFFFFF, #00FF00 TEXT = 1, TS2, <frame, TS, 1>, CENTER, FONT = Arial, 16, , #FFFFFF, #FF0000 TEXT = 1, TS3, <frame, TS, 1>, CENTER, FONT = Arial, 16, , #000000, #FFFF00 TEXT = 1, TS4, <frame, TS, 0>, CENTER, CENTER CENTER CENTER CENTER Result: Image 6 In this example, the first frame can also be referenced with TW, and the result didn’t change. If you specify a zero as the width/height of the element, it fills all the available space (the 4th frame in this example). Image 6 With these flags, the program extracts three coordinates from the four of a frame, useful when using the TRIANGLE directive (see page 154), for a shape that fills half of the frame: HTL HTR HBL HBR top left, top right, and bottom left top left, top right, and bottom right top left, bottom left, and bottom right top right, bottom left, and bottom right For example: <frame> = 1, 1, 4, 7 RECTANGLE = 1, <frame>, #CCCCFF TRIANGLE = 1, <frame, HTL>, #FF0000 Image 7 Result: Image 7 These flags give also three coordinates: TTL TTC TTL TCL TCR TBL TBC TBR an arrowhead with the point to the top-left corner of the frame an arrowhead with the point to the center of the top side of the frame an arrowhead with the point to the top-right corner of the frame an arrowhead with the point to the center of the left side of the frame an arrowhead with the point to the center of the right side of the frame an arrowhead with the point to the bottom-left corner of the frame an arrowhead with the point to the center of the bottom side of the frame an arrowhead with the point to the bottom-right corner of the frame For example: Image 8 <frame> = 1, 1, 4, 7 RECTANGLE = 1, <frame>, #CCCCFF TRIANGLE = 1, <frame, TTC>, #FF0000 Result: Image 8 34 With several functions, you can create groups of frames, and referencing them with wildcards (the list is after this chapter): * ? ~ ! ° / a group of any characters, any one character, a random frame from a group, the first frame from a group, the frame is then deleted from the frame group (instead of the first frame, a random frame is selected if used with the “~” symbol), this is not a wildcard used in a frame name, but instead is used when the frame number is needed in a standard expression (with “{” and “}” delimiters), normally, the frames created with a function are added to the existing ones; with this character in the frames’ name, the definition rewrites the previous frames (the name is considered without “/”). Finally, in a frame name with ! or ~ wildcards, you can specify more than one frame adding a number before the symbol. For example, if you want three random green box from a grid, three blue and three red you can write: [base] = FRAMEBOX(0, 0, 6, 9, 1, 1, E) RECTANGLE = 1, <3!~base*>, #00FF00 RECTANGLE = 1, <3!~base*>, #0000FF RECTANGLE = 1, <3!~base*>, #FF0000 GRID = 1, 0, 0, 6, 9, #000000, 0.1, 6, 9 Image 9 Result: Image 9 Note: without the “!” symbol, the randomized frames may overlay themselves. Instead, without the “~” symbol, the frames are extracted from the start of the group. For example, with this script: [base] = FRAMEBOX(0, 0, 6, 9, 1, 1, E) RECTANGLE = 1, <3!base*>, #00FF00 RECTANGLE = 1, <3!base*>, #0000FF RECTANGLE = 1, <3!base*>, #FF0000 GRID = 1, 0, 0, 6, 9, #000000, 0.1, 6, 9 Result: Image 10 Image 10 35 Frame functions FRAMEBAR This function creates a list of frames (see page 32) arranged in a line. The syntax for this function is: [name] = FRAMEBAR(x1, y1, x2, y2, frame width, frame height, number, zoom) The frames are created with a name composed from the [name] and a number, the number goes from “1” to the 7 th parameter. Example: [bar] = FRAMEBAR(0, 0, 6, 6, 1, 1, 5) You can use frames with wildcards (? for any one character, * for a group of any characters), can use the tilde (~) symbol as a flag for addressing a random frame, the exclamation mark (!) as a flag for deleting the frame after use, and referencing the current frame’s number with the degree (°) symbol (in an expression) or the current frame’s name with the micro (µ) symbol (in an expression). The zoom optional parameter is used if you want to resize the frame of a percent (100 is equal to no change). FRAMEBEZIER This function creates a list of frames (see page 32) arranged in a Bezier curve. The syntax for this function is: [name] = FRAMEBEZIER(x1, y1, hx1, hy1, hx2, hy2, x2, y2, frame width, frame height, number, zoom) The frames are created with a name composed from the [name] and a number, the number goes from “1” to the 11 th parameter. Example: [bezier] = FRAMEBAR(0, 0, 3, 0, 3, 6, 6, 6, 1, 1, 10) You can use frames with wildcards (? for any one character, * for a group of any characters), can use the tilde (~) symbol as a flag for addressing a random frame, the exclamation mark (!) as a flag for deleting the frame after use, and referencing the current frame’s number with the degree (°) symbol (in an expression) or the current frame’s name with the micro (µ) symbol (in an expression). The zoom optional parameter is used if you want to resize the frame of a percent (100 is equal to no change). FRAMEBOX This function creates a list of frames (see page 32), based on a rectangular grid. The syntax for this function is: [name] = FRAMEBOX(x, y, width, height, cell width, cell height, flags, zoom x, zoom y) The last parameters (zoom x and zoom y) are optional, if not specified are equal to 100 (no zoom); if you want half sized frames, you can specify 50, if you want double sized frames, the value is 200, and so on. The zoom can be different between horizontal and vertical values. The frames are created with a name composed from the [name] and the flag in the 7th parameter. You can use these flags: L N C E R . letters numbers coordinates coordinates with letters and numbers coordinates with letters and numbers (numbers are reversed) separator for C flag 36 _ W B separator for C flag separator for C flag add only “white” squares in a chessboard add only “black” squares in a chessboard With these flags, coordinates are added to each frame name: L N C E C. CC_ A, B, C, D... 1, 2, 3, 4... 0101,0102,0103...0201,0202,0203... A1,A2,A3...B1,B2,B3... 1.1,1.2,1.3...2.1,2.2,2.3... 1-1,1-2,1-3...2-1,2-2,2-3... 1_1,1_2,1_3...2_1,2_2,2_3... If you didn’t specify any flag, the frames are created with the same name. Example: [box] = FRAMEBOX(0, 0, 4, 3, 1, 1, C_) The resulting frames will be: <BOX1_1> <BOX1_2> <BOX1_3> <BOX2_1> <BOX2_2> <BOX2_3> <BOX3_1> <BOX3_2> <BOX3_3> <BOX4_1> <BOX4_2> <BOX4_3> = = = = = = = = = = = = 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 1 1 1 1 1 1 1 1 1 1 1 You can use frames with wildcards (? for any one character, * for a group of any characters), can use the tilde (~) symbol as a flag for addressing a random frame, the exclamation mark (!) as a flag for deleting the frame after use, and referencing the current frame’s number with the degree (°) symbol (in an expression), or the current frame’s name with the micro (µ) symbol (in an expression). For example, if you want to split an image into 4 images (in a 2 x 2 pattern) and save them, you can use this script: [a] = FRAMEBOX(0, 0, 6, 9, 3, 4.5, N) IMAGE = 1, "c:\my images\earth.jpg", 0, 0, 6, 9, 0 SAVE = 1, "c:\my images\earth _{°}.jpg", <a*> FRAMECLOCK This function creates a list of frames (see page 32) arranged in a circle (like a clock’s quadrant). The syntax for this function is: [name] = FRAMECLOCK(x, y, width, height, frame width, frame height, number, angle, zoom, start, end, factor) The frames are created with a name composed from the [name] and a number, the number goes from “1” to the 7 th parameter. Example: [clock] = FRAMECLOCK(0, 0, 4, 4, 1, 1, 8) 37 You can use frames with wildcards (? for any one character, * for a group of any characters), can use the tilde (~) symbol as a flag for addressing a random frame, the exclamation mark (!) as a flag for deleting the frame after use, and referencing the current frame’s number with the degree (°) symbol (in an expression) or the current frame’s name with the micro (µ) symbol (in an expression). The angle optional parameter is used if you want to rotate all the frames of a precise degree. The zoom optional parameter is used if you want to resize the frame of a percent (100 is equal to no change). The start and end optional parameters are used if you want to draw only an arc instead of full circle (both are degrees). The factor optional parameter, if not zero, creates a spiral of frames, instead of a circle (positive for clockwise spirals, negative for anti-clockwise spirals). FRAMECOUNT This function creates a label with the number of frames from a frame name. The syntax for this function is: [name] = FRAMECOUNT(name) In the [name] parameter you can use wildcards (? for any one character, * for a group of any characters). FRAMEDISK With this function, you can define a group of frames, specifying two frames, and including all the frames in the circle drawn used the first frame as a center and the latter as a radius. It works with frames created from FRAMEBOX and FRAMEHEX functions. The syntax is: [diskgroup] = FRAMEDISK(frame1, frame2) For example: CARDSIZE = 18, 20 HEXGRID = 1, 0, 0, 18, 20, 1,, #000000, EMPTY, 0.1 [base] = FRAMEHEX(0, 0, 18, 20, 1, E) [diskgroup] = FRAMEDISK(basee6, basee4) POLYGON = 1, <diskgroup>, 6, 90, #FF0000 FRAMEHEX This function creates a list of frames (see page 32), based on a hexagonal grid. The syntax for this function is: [name] = FRAMEHEX(x, y, width, height, hex size, flags, zoom x, zoom y) The last parameters (zoom x and zoom y) are optional, if not specified are equal to 100 (no zoom); if you want half sized frames, you can specify 50, if you want double sized frames, the value is 200, and so on. The zoom can be different between horizontal and vertical values. The frames are created with a name composed from the [name] and the flag in the 6th parameter. You can use these flags: L N C E . _ O I X A S letters numbers coordinates coordinate with letters + numbers separator for C flag separator for C flag separator for C flag outer frame (the default, it creates a frame suitable for drawing a circle outside the hex) inner frame (it creates a frame suitable for drawing a circle inside the hex) uses a pattern for obtaining “easy to cut” hexagons (“trihexagonal” tiling) the hexes are arranged in horizontal lines instead of vertical the line (or the column, if the A flag is specified) starts with a shifted hex With these flags, coordinates are added to each frame name: 38 L) A, B, C, D... N) 1, 2, 3, 4... C) 0101,0102,0103...0201,0202,0203... E) A1,A2,A3...B1,B2,B3... C.) 1.1,1.2,1.3...2.1,2.2,2.3... C-) 1-1,1-2,1-3...2-1,2-2,2-3... C_) 1_1,1_2,1_3...2_1,2_2,2_3... If you didn’t specify any flag, the frames are created with the same name. You can use frames with wildcards (? for any one character, * for a group of any characters), can use the tilde (~) symbol as a flag for addressing a random frame, the exclamation mark (!) as a flag for deleting the frame after use and referencing the current frame with the degree (°) symbol (in an expression). For example, this script draws a circle on a random hex of the first column of a grid: CARDSIZE = 18, 20 HEXGRID = 1, 0, 0, 18, 20, 1, , #000000, EMPTY, 0.1 [base] = FRAMEHEX(0, 0, 18, 20, 1, E) ELLIPSE = 1, <~basea*>, #FF0000 FRAMELINE With this function, you can define a group of frames, specifying a first frame, a last frame, and including all the frames in the shortest path between the two. It works with frames created from FRAMEBOX and FRAMEHEX functions. The syntax is: [linegroup] = FRAMELINE(frame1, frame2) For example: CARDSIZE = 18, 20 HEXGRID = 1, 0, 0, 18, 20, 1,, #000000, EMPTY, 0.1 [base] = FRAMEHEX(0, 0, 18, 20, 1, E) [linegroup] = FRAMELINE(basea1, baseh9) POLYGON = 1, <linegroup>, 6, 90, #FF0000 FRAMELIST With this function, you can define a group of frames, and use a single command on all of them. The syntax is: [group] = FRAMELIST(frame1, frame2, frame3,…) You can specify a single frame for parameter, or use another group of frames. If you use a minus sign (-) before the name, the order with frames in a group are added is completely reversed (from bottom to top, from right to left); with a pound sign (£) the frames are reversed on each line (from top to bottom, from right to left); with a dollar sign ($) the frames are in bidirectional order (from left to right in the first row, then right to left in the next row, and so on…). For example, this script draws three circles on the first three hexes in the top-left corner of a grid: CARDSIZE = 18, 20 HEXGRID = 1, 0, 0, 18, 20, 1,, #000000, EMPTY, 0.1 [base] = FRAMEHEX(0, 0, 18, 20, 1, E) [group] = FRAMELIST(basea1, basea2, baseb1) ELLIPSE = 1, <group>, #FF0000 FRAMEMELD With this function, you create a new frame, merging several others. The syntax is [newframe] = FRAMEMELD(frame1, frame2, frame3,…) 39 For example: CARDSIZE = 18, 20 HEXGRID = 1, 0, 0, 18, 20, 1,, #000000, EMPTY, 0.1 [base] = FRAMEHEX(0, 0, 18, 20, 1, E) [group] = FRAMEDISK(basef3, basef1) POLYGON = 1, <group>, 6, 90, #FF0000 [meld] = FRAMEMELD(based1, baseh5) ELLIPSE = 1, <meld>, #0000FF, EMPTY, 0.2 FRAMEMOSAIC This function reads all the images in a folder, arrange them in a rectangle, and creates a new group of frames, one for each image. If the images fill more than one instance of that rectangle, you can use a page parameter to specify which rectangle is drawn from all the possible choices. The frames are created with a name composed from the [name] and a number, the number starts from “1”. The syntax for this function is: [newframe] = FRAMEMOSAIC("folder", position x, position y, width, height, page, flags, zoom Parameters: “folder”: a folder to search, eventually with a file pattern, position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the rectangle (in cm), height: height of the rectangle (in cm), page: if not specified, is equal to 1, flags: one or more of these flags H V S the schema is mirrored horizontally the schema is mirrored vertically the images are read also in the subfolders zoom: if not specified, is equal to 100 FRAMENET This function creates a new group of frames, composed with all possible couple from two groups of frames, eventually including only these contained with a range of distances. The syntax is: [newframe] = FRAMENET(frame group 1, frame group 2, min distance, max distance, flags) In the flags parameter, you can use one or more of these flags: L N 1 2 3 4 the frame(s) added is from the center of the starting frame to the center of the ending frame (it can be used for drawing lines), this is the default option, the frame(s) added is the ending frame, the frame(s) added are only from the 1st quadrant (top-right), the frame(s) added are only from the 2nd quadrant (bottom-right), the frame(s) added are only from the 3rd quadrant (bottom-left), the frame(s) added are only from the 4th quadrant (top-left). 40 If you didn’t specify any of flags 1234, the frames are taken from all the starting lists. For example, this is a net from all the points in a rectangular grid, with a maximum distance of four units: [net0] = FRAMEBOX(0, 0, 6, 9, 1, 1, L) [net1] = FRAMENET(net0*, net0*, 0, 4) LINERECT = 1, <net1>, #000000 Another example, this is a “star map”, connecting ten random “planets” in a hexagonal grid with a distance from two to four units: [map0] = FRAMEHEX(0, 0, 6, 9, 0.1, L, 50%) [map1] = FRAMELIST(10!~map0*) [map2] = FRAMENET(map1, map1, 2, 4) LINERECT = 1, <map2>, #000000 ELLIPSE = 1, <map1>, #0000FF FRAMEPATH With this function, you can define a group of frames, specifying a first frame, a last frame, and including all the frames in the shortest path between the two, and optionally delete them. It works with frames created from FRAMEBOX. The syntax is: [pathgroup] = FRAMEPATH(frame1, frame2, flags) In the flags parameter, you can use one or more of these flags: F L D S E T add frame1 to the result group add frame2 to the result group delete the frames used for the path delete the frame used as 1st parameter (start frame) delete the frame used as 2nd parameter (end frame) use the shortest path For example: [grid] = FRAMEBOX(0, 0, 6, 9, 0.5, 0.5, C) [path1] = FRAMEPATH(grid0203, grid1116, D) [path2] = FRAMEPATH(grid0203, grid1116, D) [path3] = FRAMEPATH(grid0203, grid1116, D) RECTANGLE = 1, <grid*>, #0000FF, #FF0000, 0.1 ELLIPSE = 1, <path1>, #AAAAAA, #00FF00, 0.05 ELLIPSE = 1, <path2>, #AAAAAA, #0000FF, 0.05 ELLIPSE = 1, <path3>, #AAAAAA, #FF0000, 0.05 FRAMEPER This function creates a new group of frames, adding for each starting frame the four frames from its sides (the starting frame is considered rectangular). The syntax is: [newframe] = FRAMEPER(frame group, width, flags, margin) The width parameter specifies the width of the left and right frames, and the height of top and bottom frames. In the flags parameter, you can use one or more of these flags: 1 2 3 4 V a frame for the top side of the rectangular frame is added to the result, a frame for the right side of the rectangular frame is added to the result, a frame for the bottom side of the rectangular frame is added to the result, a frame for the left side of the rectangular frame is added to the result, with this flag the frames are created in vertical order (instead of a horizontal order). 41 If you didn’t specify any of flags 1234, all the four frames are added. The margin parameter specifies how much space is added to the left and to the right (for horizontal sides) and to the top and to the bottom (for vertical sides) of the frame. FRAMERECT With this function, you can define a group of frames, specifying two frames, and including all the frames in the rectangle drawn used the first frame as top-left and the latter as bottom-right. It works with frames created from FRAMEBOX and FRAMEHEX functions. The syntax is: [rectgroup] = FRAMERECT(frame1, frame2) For example: CARDSIZE = 18, 20 HEXGRID = 1, 0, 0, 18, 20, 1,, #000000, EMPTY, 0.1 [base] = FRAMEHEX(0, 0, 18, 20, 1, E) [rectgroup] = FRAMERECT(baseb3, basei6) POLYGON = 1, <rectgroup>, 6, 90, #FF0000 FRAMESUB With this function, you can define a new frame from another frame (1 st parameter), removing items from a third frame (2nd parameter). The syntax is: [group] = FRAMESUB(frame1, frame2) For example, this script uses two square group of frames for creating a third hollow group of frames (subtracting the second from the first): [grp_a] [grp_b] [grp_c] ELLIPSE = = = = FRAMEBOX(0, 0, 6, 6, 1, 1, C) FRAMEBOX(1, 1, 4, 4, 1, 1, C) FRAMESUB(grp_a*, grp_b*) 1, <grp_c*>, #00FF00 FRAMETRANS This function creates a new group of frames, taking all the frames from a group, and applying to them a horizontal and a vertical offset, and optionally a change in width and height. The syntax is: [newframe] = FRAMETRANS(frame group, horizontal offset, vertical offset, width change, height change) For example, this line takes all frames from group test, and creates a group test_trans shifted right of 0.5: [test_trans] = FRAMETRANS(test, 0.5, 0) FRAMETRI With this function, you can define a group of frames, specifying three frames, and including all the frames in the triangle drawn used the frames as vertexes. It works with frames created from FRAMEBOX and FRAMEHEX functions. The syntax is: [trianglegroup] = FRAMETRI(frame1, frame2, frame3, flags) You can use these flags in the 4th parameter: O = doesn’t include the outer frames I = doesn’t include the inner frames 42 For example: CARDSIZE = 18, 20 HEXGRID = 1, 0, 0, 18, 20, 1,, #000000, EMPTY, 0.1 [base] = FRAMEHEX(0, 0, 18, 20, 1, E) [trianglegroup] = FRAMETRI(baseb3, basei6, basec10) POLYGON = 1, <trianglegroup>, 6, 90, #FF0000 43 Expressions Expressions may be used to calculate numeric parameters or numbers in TEXT parameters, these delimited with “{” and “}”. You can use numbers (integer and decimal separated with a dot “.”), parenthesis and these operators: + * / ^ # £ addition subtraction multiplication division exponentiation modulus integer division For changing the order of operations, you can use “(“, “)”, “{” and “}”, these are treated like the same. You can’t use “[” and “]” (used for labels). For example, these are valid expressions: RECTANGLE = 1, 0, 0, (1+2)*2, (1+2)^2, #FF0000 TEXT = 1, "Result {(2+2)^2}", 0, 0, 6, 9, center This is a special variable: the paragraph character (§) gives you the current card number; for example, that script creates ten cards, each with a number from 1 to 10: FONT = Arial, 32, , #000000 TEXT = 1-10, "{§}", 0, 0, 6, 9, center That script creates ten cards, each with a random number from 1 to 100: FONT = Arial, 32, , #000000 TEXT = 1-10, "{1d100}", 0, 0, 6, 9, center Counters are variables, that can be used in expressions; there are two kind of counter, these are used for integer values: A B C D E F G H I J And these are used for floating-point values: AA BB CC DD EE FF GG HH II JJ A counter can be initialized with COUNTER directive: COUNTER = 1, A, 1 and later re-used in an expression: RECTANGLE = 1, 0, 0, A, A, #00FF00 A counter can be auto-incremented with a pre- and/or a post- number. If A has a value of 10, this command: TEXT = 1, "{1A2}", 0, 0, 3, 3, center will give an output of 11, and A will have a value of 13 after that line. The counter D is a special case, it has been changed for default into a dice (see DICE keyword, page 79), to give a random value, the syntax is ndf, where n is the number of dice, each with f faces. If not specified, n is set to one, and f is set to six. These are special symbols: 44 Z X Format Repeat The “Z” symbol may be used when you need to format a decimal value with a fixed number of digits. The syntax is valueZmask, when the mask a sequence of zero “0” characters for the integer part, a dot “.” and a sequence of zero “0” for the decimal part. For example: FONT = Arial, 32, , #000000 TEXT = 1, "{4/3Z00.00}", 0, 0, 6, 9, center, center The result will be a “01.33” printed on the card. The syntax for the “X” symbol is textXnumber, and duplicates the text for a number of times. For example: FONT = Arial, 32, , #000000 TEXT = 1-5, "{*X§}", 0, 0, 6, 9, center, center Will output an asterisk on the 1st card, two asterisks on the 2 nd card, three on the 3rd and so on. Comments Comments can be inserted in scripts, marking them with a character on the start of the line. The character can be an apostrophe (‘) or a semicolon (;) or a custom character selected from the “Config” window. Example: CARDS = 52 ‘This is a standard deck From the “Config” window you can also check the “Use in-line comments marked by …” option, and after that you can use a syntax like that: CARDS = 52 ‘‘ This is a standard deck If you use a custom character, and open your script on another computer (with a different configuration) your comments will not be evaluated as such. To avoid this problem, you must include a COMMENT directive at the start of your script (see page 73). You can apply or remove the current comment’s character in a block of selected text with two buttons on the right side of the main window: “+Com” for apply comments and “-Com” for removing comments. 45 Script lists If you must work on multiple scripts, you can create a list for manipulating them. You can activate this option clicking on the button “Script list”: With the buttons on the right side you can create a new list, open an old list, save the current list (with the current name or specifying another), add another script to the list, remove a script and sort the list. You can also open the selected script, or open all of them (in multiple tabs), create a list from all the current scripts and erase the selected script. With the button “Run list” you can launch a “Validate and build” task on all the scripts listed in this window, choosing the output for them with the “Output” box: you can print the result, create PDF, and save the images in bmp, jpg, png or tiff format (the latter with standard and CMYK color space). With the “Filename number” box you can choose if the filename must be chosen from card number or card count: it can be different if you use a PRINT directive (see page 133) in your scripts. 46 Create PDF The button “PDF” in the main window opens this form: With this form, you can specify a filename and an author for the PDF file. PDF/A: with this option, the PDF file is saved in this format. Use JPEG Compression form images: with this option enabled all the images in the PDF file are internally stored in JPEG format. Use scaled images: with this option enabled, the program uses a high image compression for the PDF file, reducing its size (and its quality). PDF compression level: you can choose between four standard compression level for the images (None, Low, Default and Max). Save a copy with a CMYK color space: if you have installed Ghostscript (http://www.ghostscript.com) you can also save it with CMYK color space (instead of RGB), specifying the path for the executable (Gswin32c.exe), and use an ICC color profile. 47 Save images The button “MT” in the main window opens this form: With this form, you can specify a path for saving the cards’ images, the file format, the number of threads to be used, the DPI (see page 80) and oversampling (see page 127) values. Note: every thread uses a separate memory pool, thus it’s possible to use more than 4GBytes of memory. Convert a PDF to images The button “CP” in the main window opens this form: If you have installed Ghostscript (http://www.ghostscript.com) you can convert PDF files into images. The first field is for the Ghostscript’s executable; the second is the name of the PDF file, the third is for the resulting images (you can use the § character for the page number); the fourth field is for the DPI resolution of the final images. 48 Command-line parameters You can run nanDECK from the command line (if you want to execute a script in a batch, for example). The syntax is: nanDECK <script file> <action> The action parameter can be one of the following: /createbmp /createjpg /createpng /creategif /createtif /createtifcmyk the program creates all the cards and saves them in bmp/jpg/png/gif/tif formats (also with CMYK color space), one file for each card /creategifa /createpdf /createpdfa the program creates all the cards and saves them in one single file in animated-gif or pdf format /print the program creates all the cards and prints them with the default printer /exec the program runs the script (useful when using SAVE directive) /range= /output= /dpi= /oversample= /name= /[label]=value the program creates only a range of the card, with the syntax start-end (for example /range=1-10) this is the path for the resulting files you can specify a different DPI value (the value in the script isn’t used) you can specify an oversample value (the value in the script isn’t used) the program uses a label for the name of the card when saved as individual images the program adds a label with that name and that value For example, to save all images obtained with script “c:\my scripts\test01.txt” in png files, you can write: nanDECK “c:\my scripts\test01.txt” /createpng To create a pdf with all the cards, you can write: nanDECK “c:\my scripts\test01.txt” /createpdf The images are created in the same folder for the script, and for multiple images, a number will be added to the end of the filename. In the 1st example, the images will be named: c:\my scripts\test01_01.png c:\my scripts\test01_02.png c:\my scripts\test01_03.png … In the 2nd example, the file will be named: c:\my scripts\test01.pdf If you leave the action parameter empty, the program will only load the script specified in the 2nd parameter. 49 Keyword wizards In this program, you can use a wizard for inserting keywords (and specifying all the parameters). In the main editor, if you want to insert a directive, right click on an empty row and a menu appears, with all the keywords, if you click on one entry, the corresponding wizard form will be showed: For every keyword, a different wizard form appears, with all the parameters (obligatory and optional). The same window appears if you press “F2” (modify) key on a pre-existent row. For example, this is the RECTANGLE wizard form: 50 Optional parameters are in italic (like Thickness in the above form). A hint for the syntax is show in the bottom of the form, with the “Confirm”, “Help” (it points to the RECTANGLE help page) and “Cancel” buttons. For some parameters, there are buttons for inserting specific values (like colors and gradients). For position and size there is a specific form (“Pick rect.” Button, in the above form): The rectangle can be moved and resized, dragging it with the mouse; you can use the rightmost buttons to change the rectangle size or position into some standard values. Tip: you can go directly to this form, pressing the key F3 (or clicking the “Visual edit” button) where you are on a line with a graphic directive. In the wizard form, if you double click in a field, you can choose a label name from a list (you can see also the label’s value): Tip: in every field, you can use the mouse wheel to increase / decrease a numeric value. 51 Linked data editor If you use a LINK directive (see page 119) to use a CSV data file, you can edit directly this file using the “Linked data” button. If you click on it, the program shows you a list of linked files. If you choose one of this, a window opens itself, showing you a table with the file content. For example: You can modify directly a cell clicking on it (there is a larger edit box on the bottom of the window), you can also change the table’ sorting with a click on the column (one click sets an ascending order, another click sets a descending order, it doesn’t work for larger fields). With the buttons on the right you can do some tasks, like insert or delete a record, add, delete or rename a column (a field), update the lists of data (in the drop-down menu in each field), hide or show the editor, open an external RTF editor (for the current field) or close the window. The two buttons “Validate deck” and “Build deck” on the left are replicated from the main window. With the other buttons on the left you enable or disable the current row (putting a ‘ in front of it), or enable or disable all the rows. You can also enable only the current row, or setting the range for the deck building. With the buttons on the lower side of the window (under the edit box) you can move the current record (first, previous, next and last), add (+), delete (-), edit (the triangle), confirm (the check sign) or discard (X) the changes in a record. All the change made in this window to the linked file will be saved if you save the main script file. Tip: you can instantly build a single card with a double click on one row of data. Tip: you can instantly open the external RTF editor with a double click on the lower editor. Tip: you can select the external RTF in the “Config” button from the main window. 52 Virtual table The “Virtual table” option is a desktop in which you can put the result of card rendering, you can use it for saving images for a manual or play test the drawing of cards from a deck. Without modifying your script, you can view the Virtual table clicking on the button “Table” after building a deck. Then you can see a window with your deck in the center of the screen, and you can use these commands: Mouse commands on decks click double click shift double click right click resize shift resize ctrl resize select deck draw a card face up draw a card face down rotate deck 90° resize deck image resize deck image without keeping size ratio resize deck image from the center Mouse commands on cards click double click right click resize shift resize ctrl resize select card turn card face down/face up rotate card 90° resize card image resize card image without keeping size ratio resize card image from the center ctrl click mouse wheel pick all the cards and the decks under the cursor and create a new deck zoom table In the bottom line of the window you can read the number of cards in the selected deck. On the right panel, you have these controls: Reset table Reset deck Display deck this button reset to the initial state all the decks and the elements on the table this button reset to the initial state the selected deck this button draws all cards in the deck, and position them left to right, top to bottom in the table 53 Select a card Delete Draw (number) Position Rotate Position +Position slider Align to Grid Zoom slider 1:1 button Card preview Show canvas Auto select Show tags Bring to front Move stacks Save image Close this button lets you to select a single card from a deck this button deletes the selected object (deck, card, or token) the number of cards specified is drawn each time you double click on a deck the card drawn from the deck is placed to this position, relative to its deck after a card is draw, the position is moved to the next the card drawn is placed in a slightly random direction the amount of the offset of the position when the last option is enabled the card drawn is placed in a grid of the same size of the card this slider enlarges or reduce the table size this button reset the zoom this button show the current card, enlarged the canvas is shown as a background image the elements of the table are selected automatically when the mouse pass over them the tags (see page 146) are shown in the four quadrants of the table an object clicked is pushed to the front, before all the other objects when you move a card, all the other cards on top of it are also moved the table is saved as a bmp file you close this window This is the window that the program shows you to select a single card from a deck: There are two directives that you can use in your script to customize the Virtual table: the DECK directive splits the cards in more than one deck, and the TOKEN directive creates some elements to be used on the table, with a fixed text or a randomized value, in the latter case you can “roll” the token with a double click on it. Example: … DECK = "1-26", "Red", #FF0000, 30% DECK = "27-52", "Black", #0000FF, 30% TOKEN = "{1d6}", 50, 50, #FFFFFF, #0000FF, 1 TOKEN = "{1d6}", 50, 50, #FFFFFF, #FF0000, 1 TOKEN = "$", 100, 50, #FFFFFF, #00FF00, 10 54 Visual editor You can open the Visual Editor with a click on the “Visual editor” button, or pressing F4 on the keyboard, this is the main form: The visual directives are a subset of the standard ones, and are loaded from a section of the source delimited with VISUAL / ENDVISUAL directives, for example: VISUAL ELLIPSE = 1, 0, 0, 100%, 100%, #0000FF ENDVISUAL With this script, when you press the “Visual Editor” button, the program loads the lines between VISUAL / ENDVISUAL in the visual GUI, and you can modify them, or add new directives (with the toolbox on the left of the window). When you press the “Confirm” button, all the objects are inserted in the source, between VISUAL / ENDVISUAL, so there is a two-way interaction between source and GUI (but only in a section of the source). Non-visual directives are not allowed in this section (the program gives an error in the validation step). If the VISUAL / ENDVISUAL section is not present, the program shows you an empty GUI (but you can add new objects) and when you return to the source, a visual section is added to the end of it. You can see at the right of the GUI window a list of directives, that will go to the source if confirmed, that are layered from the top (first, to the rear) to the bottom (last, to the front). They can be drag and dropped across the list to change their layer position (the result is shown immediately in the main panel). At the top right of the window there are some buttons to navigate through the deck (and add or delete cards), a combo box for choosing a label / sequence to be inserted in directives like TEXT or IMAGE and another combo box for choosing a sequence to be used with a LABELRANGE function to choose a range (the object is shown only when the item of the sequence is equal to “1”). The last combo box is when you want to link the object to a frame (only frames defined within VISUAL / ENDVISUAL section are shown); these frames are shown by clicking on the “Frames” tab (all other objects are locked); in this tab, you can also enable only a group of frames: to define a group you can create frames with a group/name syntax (for example: group1/frame1, group1/frame2, etc.). If you enable the option “Change objects’ 55 frames”, when you choose a group the program will move all the objects that has frames with compatible names to the new frames. In the bottom left of the windows there are the controls for showing h/v rulers, a grid (with the number of horizontal and vertical steps) and snap/size to the grid, a slider for zooming in and out the card, and a button “1:1” for restoring a 100% zoom and four buttons to move the selected object in the four directions (these buttons are linked to the arrows keys on the keyboard). In the bottom right there are nine buttons, to move the selected element to these positions. If you use the right mouse, the element instead of being moved is resized (for example, the CC button resize it to the whole card). Mouse controls: • double click (on the command, to the right of the screen): modify comment, lock and group of an object, • right click (on the object and the command): modify the parameters utilized for rendering, • use mouse wheel for zooming the card’s image, • use CTRL + mouse wheel to move between cards. Shortcuts: F2 Del CTRL+D CTRL+L CTRL+U LEFT DOWN UP RIGHT modify current element delete current element duplicate the current object, lock the position of the current object, unlock the position of the current object, move the current object one pixel to the left, move the current object down one pixel, move the current object up one pixel, move the current object one pixel to the right. 56 Configuration The “Config” button on the main window brings you to the configuration window: Deck file location: the program can run in two modes, the default “on RAM” setting uses RAM for the card rendering, it is fast, but if you have many high-resolution cards it can slow down the whole computer (when the RAM is full). Instead the “on disk” setting is slower, but it can render many high-resolution cards without slowing down your PC. The same is true if you have very large decks (thousands of cards). Validate & Build buttons: usually “Validate” and “Build” are two distinct buttons in the main window. With this option, you can have one single button “Validate & Build”; if you click it, the script will be first validated, and if valid, the deck will be built next. Default for deck file’s extension: with this option, you can choose the default extension between “.txt” and “.nde” (and assigning these files to the nanDECK program, and open them with a double click). Default comment char: with this option, you can choose the character used for commenting lines, and changing all of them from one to another, you can also use a custom character (instead of the default ‘ and ;). Use in-line comment marked by ;;: if you enable this option, you can use a double comment char for inserting comments on the same line used for commands. For example (with the default “;” comment char): CARDSIZE = 6, 9 ;; default card size Editor text color, Editor background color, Editor highlighter color, Editor structures color, Editor text error, Editor background error: with these buttons, you can change the default colors for the editor text, background, highlighted line, lines that contain special directives, text and background for lines that contain errors (and re-setting them to the default values by pressing the Default button). 57 Editor text size: this number sets the size of the font for the editor’s character (the default is 10). Precision visual ïƒ script: this is the number of digits for fractional values that the software uses when an object in visual editor is converted to a script line. Editor RTF: this is the path to the executable file called when you want to edit a field text in a linked file with an external RTF editor. You can also choose the default executable linked with an “.rtf” file extension. Inkscape exe: this is the path to the executable file for Inkscape, used with the VECTOR directive (see page 155) when you want to use it for the rendering, instead of the internal engine (the default, less accurate). Reload last work’ session at startup: with this option enabled, at the start the program loads the file(s) opened in the last session. Check at startup for a new program version (online): with this option enabled, at the start the program checks online if a new release is available for the download, and warns you in the window’s title. Check for matching parenthesis on “Validate deck”: with this option enabled, the program checks if the parenthesis match in all your script. Auto-save script on “Build deck” command: with this option enabled, the program always saves the script when you click on the “Build deck” button. Don’t show script after validation: usually the program, after the validation procedure, writes the script in the lower box in the main window. With this option enabled, the script is not written (speeding up the validation process). Write log to file <nandeck.log>: with this option enable, you can save the program log (all the text shown in the lower box in the main window) in a text file. Open PDF after creation: with this option enabled, after a PDF is created, the program opens it, using the default application associated with “.pdf” extension. Use ADO for Excel files: with this option for loading files from Excel is used an ADO library, is slower than the internal method, but you can open files that are concurrently open in Excel. Use %TEMP% folder for RTF/HTML work files: these directives create a temporary file, if you enable this option that file will be create in the temporary folder, if you disable this option it will be created in the current folder. Note that if you have projects in folder linked to a cloud service (like Dropbox™) you should enable this option. DPI = 75 for “Auto build” feature: if you have enabled the “Auto build” option, if this option is enabled, the preview is done at a lower resolution (useful for slow PC). Use placeholders for missing image files: if you specify file images that doesn’t exists, the program creates them (a random color bitmap with the name of the file repeated on it) and shows you in a window the list of the missing files. Stop build when errors are found in the script: with this option enabled, the validate procedure is stopped when an error is found in the editor, if it is disabled, the line with errors are highlighted and the validation is completed. Always shows hint panel: with this option enabled the bottom panel with the keyword’s help is shown always, and not only when a keyword is present in the current editor line. Use fast rotation library (Windows only): use an alternative rotation library that uses routines available only on Windows (when the program is executed for the first time on Wine, this option is unchecked). Use tabs in editor: if you enable this option, each tab key is converted to the specified number of spaces. Show label/image preview: with this option enabled, when the caret is on a label, its content (text or image) is shown in the lower part of the main window. Load font files in program’s folder at start: if this option is enabled, nanDECK, when it’s started, loads all the font files that are found in the same folder with its executable. 58 Use older factor for shadows and outlines in HTML: when they were first implemented, shadows and outlines with HTMLFONT use a value for size that wasn't correct; now it’s fixed, but if you want to use the older routines, check this option. Cache images: with this option enabled, all the files loaded with an IMAGE directive are stored in RAM, for a faster reload; if you need more RAM for your deck, uncheck this option. BATCH directive: for security reason the BATCH directive (see page 63) must be enabled before use, selecting an option from “Disabled”, “Enabled (with confirmation)”, and “Enabled”. Enable Internet Explorer 11 for HTMLTEXT / HTMLFILE: as a default a program can’t use Internet Explorer features beyond version 6, until there is a specific entry in Windows’ Regedit; by using this button the program writes that correct entry. 59 Compare decks When you have loaded more than one deck (adding another tab with CTRL+N) you can view them side to side by clicking on the “Comp” button in the right side of the main window: You can browse the decks with the arrow buttons (linked by default, but you can remove this feature with the “Linked” checkbox) and you can zoom in or out with the two buttons “+” and “-”. 60 Shortcuts At the start, nanDECK reads a shortcuts.txt file from the same folder, and creates shortcuts for every line read (or combinations of lines). You can recall these clips of text with combinations of keys like Ctrl + Alt + letter or Ctrl + Alt + Shift + letter. The lines associated with the letter character, lower of uppercase, (identified before a “:” colon) are inserted in the main editor (in the current edit position). For example, if you have this shortcuts.txt file (created with Notepad or another text editor): r:RECTANGLE = 1, 0, 0, 100%, 100%, #0000FF T:FONT = ARIAL, 32, , #000000 TEXT = 1, "Test", 0, 0, 100%, 100% You can press Ctrl + Alt + r for the RECTANGLE line or Ctrl + Alt + Shift + t for the FONT + TEXT lines. References E-mail [email protected] Website http://www.nandeck.com Yahoo! Group http://tech.groups.yahoo.com/group/nandeck BoardGameGeek Guild http://www.boardgamegeek.com/guild/454 F.A.Q. 1) When I must use quotes (“)? This program uses an interpreter for the evaluation of all parameters, this code separates them using commas (,). So, if a parameter has a comma in it, you must enclose the parameter in quotes. Otherwise, if a parameter has no commas, the quotes are optional (the program will accept the parameter with or without quote), but for some parameter quotes are an error (for numeric parameters, for example). Correct examples: IMAGE = "1-10", "c:\my images\earth.jpg", 0, 0, 6, 9, 0 IMAGE = 1-10, c:\my images\earth.jpg, 0, 0, 6, 9, 0 TEXT = 1-10, "This, is a test", 0, 0, 6, 9 Note: quotes in ranges aren’t needed. Wrong example: TEXT = 1-10, This, is a test, 0, 0, 6, 9 The 2nd parameter will be split into “This” for 2nd parameter and “is a test” for 3th. 2) How I can insert quotes (or another character) in a text? You can use \n\ syntax to insert a character in a text, with n being the ASCII code of that character, for example, if you want to enclose a text in quotes (ASCII 34) or add a new line (ASCII 13): FONT = Arial, 32, , #000000 TEXT = 1, "I say \34\Hello\34\", 0, 0, 6, 9, center, center Note that \13\ works with TEXT directive, instead with HTMLTEXT you must use the HTML tag <br>. 3) Why this program uses so much memory? 61 This program has two settings for storing cards during creation: RAM or disk. The default setting is in RAM, and you can change that in the “Config” window, remember that RAM is faster (and you can run multiple instances of the program) but the computer may slow down when it starts using swap space; on disk is slower (can you can’t run multiple instances) but the speed remains the same even with very large decks (or higher DPI settings). 4) Why there is option (X) if you can use (Y)? When writing this program, I tried to maintain backward compatibility with previous version, so you can do the same thing in more than one way. For example: WWTOP option for vertical alignment in TEXT command is equal to CENTER, for backward compatibility. 5) There is a Linux version? No, but if you install Wine you can run the same nanDECK version for Windows on your Linux, with all the major features; also, if you want better compatibility, you can download and install the “Microsoft core fonts”. Wine Microsoft core fonts http://www.winehq.org/ http://sourceforge.net/projects/corefonts/files/the%20fonts/ Note: with a recent update, nanDECK uses a DLL (FONTSUB.DLL) that is not present in every distribution, if this is the case the program won’t start, you must download a zip that includes this file from here: http://www.nand.it/nandeck/nandeck_wine.zip 6) There is a Mac version? No, but if you install Winebottler (and XQuartz) you can run the same nanDECK version for Windows on your OSX, with all the major features. You can use also an emulator like Virtual Box (free) or Parallels (commercial software). Winebottler XQuartz http://winebottler.kronenberg.org/ http://xquartz.macosforge.org/ Note: with a recent update, nanDECK uses a DLL (FONTSUB.DLL) that is not present in every distribution, if this is the case the program won’t start, you must download a zip that includes this file from here: http://www.nand.it/nandeck/nandeck_wine.zip 62 Directives BASERANGE For each card in a range an element is extracted from a sequence, and as a default the first element from the sequence is paired from the first card in the range. The only exception is when you have a LABELRANGE function (see page 28): in this case, the nth element from the sequence is paired with the nth card from the deck. With this directive, you can change this behavior. Syntax: BASERANGE = “range”, flag Parameters: “range”: a range of cards, flag: values accepted are: ON OFF the nth element from the sequence is paired with the nth card from the deck the nth element from the sequence is paired with the nth card from the range BATCH This directive executes an external batch script (a text file with a “.bat.” extension). For security reasons, you must enable the relative option in the Configuration form: here you can choose between “Disabled”, “Enabled (with confirmation)”, and “Enabled”. Syntax: BATCH = “batch file” Parameters: “batch file”: path and name for a batch file. Example: BATCH = "c:\bat\copy_files.bat" 63 BEZIER This directive draws a Bezier curve from a starting point (x1, y1) to an ending point (x2, y2), using two “handles” (h1 and h2). Syntax: BEZIER = “range”, x1, y1, h1_x, h1_y, h2_x, h2_y, x2, y2, html color, thickness, end arrow, start arrow Parameters: “range”: a set of cards, x1, y1: coordinates of starting point (in cm), h1_x, h1_y: coordinates of handle for starting point (in cm), h2_x, h2_y: coordinates of handle for ending point (in cm), x2, y2: coordinates of ending point (in cm), html color: color of the curve, in the same format used for HTML. You can also specify a gradient, thickness: thickness of the curve (in cm), if omitted, the curve is 1 pixel wide, end arrow: width of the arrow (in cm), if omitted (or zero) there is no arrow at the end of the curve, start arrow: width of the arrow (in cm), if omitted (or zero) there is no arrow at the start of the curve. Example: BEZIER BEZIER BEZIER BEZIER = = = = 1, 1, 1, 1, 1.5, 0, 1.5, 4.5, 4.5, 0, 4.5, 4.5, 0, 3, 3, 3, 3, 6, 0, 6, 3, 6, 3, 3, 4.5, 4.5, 4.5, 1.5, 4.5, 1.5, 6, 6, #FF0000, 6, 3, #FF0000, Result: Image 11 64 9, #0000FF, 0.15 9, #0000FF, 0.15 0.15 0.15 Image 11 BEZIERS This directive draws a Bezier curve from a starting point (from the last BEZIERS directive) to an ending point (x, y), using two “handles” (one from the last directive and one from parameter h). The first directive sets only the starting point, for each subsequent directive a curve is drawn (the starting point for the next curve is the ending point of the last). For restarting the process, you can specify a BEZIERS with only the range parameter. Syntax: BEZIERS = “range”, x, y, h_x, h_y, html color, thickness, end arrow, start arrow Parameters: “range”: a set of cards, x, y: coordinates of starting/ending point (in cm), h_x, h_y: coordinates of handle for starting/ending point (in cm), html color: color of the curve, in the same format used for HTML. You can also specify a gradient, thickness: thickness of the curve (in cm), if omitted, the curve is 1 pixel wide, end arrow: width of the arrow (in cm), if omitted (or zero) there is no arrow at the end of the curve, start arrow: width of the arrow (in cm), if omitted (or zero) there is no arrow at the start of the curve. Example: BEZIERS BEZIERS BEZIERS BEZIERS = = = = 1, 1, 1, 1, 0, 0, 0, 0, 0, 3, 6, 9, 3, 3, 3, 3, 0, 3, 6, 9, #000000, #FF0000, #00FF00, #0000FF, 0.1 0.1, 0.5 0.1, 0.5 0.1, 0.5 Result: Image 12 Image 12 65 BLEED This directive fills the space beyond a rectangle with the colors from the border of the rectangle, if you don't specify the size of the outer rectangle, this directive fills the whole card. Syntax: BLEED = “range”, pos_x, pos_y, width, height, pos_x2, pos_y2, width2, height2 Parameters: “range”: a set of cards pos_x: horizontal position (in cm) pos_y: vertical position (in cm) width: width of the rectangle (in cm) height: height of the rectangle (in cm) pos_x2: horizontal position (in cm) of the outer rectangle pos_y2: vertical position (in cm) of the outer rectangle width2: width of the outer rectangle (in cm) height2: height of the outer rectangle (in cm) Examples: BLEED = "1-10", 1, 1, 4, 7 BLEED = "1-10", 1, 1, 4, 7, 0.5, 0.5, 5, 6 BORDER This directive draws a border around all the cards. Syntax: BORDER = border type, html color, thickness, guidelines, guide color, mark size, horizontal guide offset, vertical guide offset Parameters: border type: the type of border can be chosen between: RECTANGLE ROUNDED MARK NONE draws a rectangle draws a rectangle with rounded corners draws cut marks no border html color: color of the border, in the same format used for HTML, black if not specified, thickness: thickness of the border (in cm), if omitted, it is 1 pixel wide, Note: the thickness of the border is measured on two cards; if you use a thickness of 1 cm, for example, on each card the border is 0.5 cm wide. guidelines: this is for drawing lines beyond the card’s boundaries (over the page’s margins). You can choose between: 66 NONE DOTTED SOLID MARK MARKDOT no guidelines (the default) dotted lines solid lines draws cut marks only (solid lines) draws cut marks only (dotted lines) guide color: color of the guidelines, in the same format used for HTML, black if not specified, mark size: length of the cut marks (in cm) for MARK border type, horizontal guide offset: horizontal guides are displaced of an offset (in cm), zero if not specified, vertical guide offset: vertical guides are displaced of an offset (in cm), equal to horizontal offset if not specified. Examples: BORDER = RECTANGLE BORDER = ROUNDED, #0000FF, 0.5 BRUSH This directive changes the style used for filling the shapes in these directives: ELLIPSE FILL HEXGRID PIE POLYGON RECTANGLE ROUNDRECT STAR TRIANGLE Syntax: BRUSH="range", style, image file, width, height Parameters: “range”: a set of cards, style: you can choose a style between these options: SOLID DIAGLEFT DIAGRIGHT SQUARE CROSS HORIZONTAL VERTICAL CUSTOM draws a solid fill (the default), fills with lines, drawn diagonally from top right to bottom left, fills with lines, drawn diagonally from top left to bottom right, fills with squares, fills with squares, rotated 45°, fills with lines, drawn horizontally, fills with lines, drawn vertically, fills with an image image file: the image file used for filling the shapes width: width of the image, in cm height: height of the image, in cm Examples: 67 BRUSH="1-10", SQUARE BRUSH="1-10", CUSTOM, "dots.gif", 5%, 5% 68 BUTTON This directive draws a 3D rectangle over a set of cards. This directive works only if you have previously drawn something in the specified area. Syntax: BUTTON = “range”, position x, position y, width, height, depth, flags Parameters: “range”: a set of cards, position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the rectangle (in cm), height: height of the rectangle (in cm), depth: width of the 3D border, flags: one or more of the following flags: Image 13 I O G from out to in from in to out gradient effect Example: RECTANGLE = RECTANGLE = BUTTON = 1, BUTTON = 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 5, 4, 4, 4, 4, 3, 3, 3, #00FFFF 3, #00FFFF 0.3, I 0.3, O Result: Image 13 69 CANVAS With this directive, the program splits the canvas (card 0) onto a range of cards. The canvas’ size can be decided with a CANVASSIZE directive (see page 71). Syntax: CANVAS = “range” Parameters: “range”: a set of cards. Tip: You can view the content of the canvas bitmap with a click on the button “Canv” (to the right of the “Card preview” button). You can reduce/enlarge it with a double-click on the image. For example, if you must draw a large circle, to be split onto six cards, you can use the CANVASSIZE/CANVAS directives, like in this script: BORDER = MARK CANVASSIZE = 18, 18 CANVAS = 1-6 ELLIPSE = 0, 0, 0, 18, 18, #0000FF#FF0000@360 FONT = Arial, 48, , #000000 TEXT= 1-9, {§}, 0, 0, 2, 2, CENTER, CENTER This is the resulting printed page (I’ve added a number in the top-left corner of each card for helping identify them): 70 CANVASSIZE This directive sets the size of the canvas (card number 0). If omitted, is considered to be 6 cm x 9 cm. The card 0 is a card that isn’t printed with the deck, is can have a different size than the standard card and can be used in two ways: as a drawing board to realize special effects, and to draw a larger card that must be split onto several standard cards, using the CANVAS directive (see page 70). Syntax: CANVASSIZE = width, height Example: CANVASSIZE = 12, 18 CANVASWORK This directive tells the program to draw the canvas (card 0) after drawing the range of cards specified in the parameter. Syntax: CANVASWORK = “range” Parameters: “range”: a set of cards. CARDS This directive can be used to specify the total number of cards that compose the current deck. Syntax: CARDS = number This directive is somehow obsolete, if you don’t specify it, the total number of cards is deducted from the other directives. For example, in that script the total number of cards is set to 20: RECTANGLE = "1-5,15-20", 0, 0, 6, 9, #00FF00 But, if you specify also a CARDS directive, the cards’ number is forced. For example, in that script the total number of cards is set to 15 (and the extra cards specified in RECTANGLE are ignored): CARDS = 15 RECTANGLE = "1-5,15-20", 0, 0, 6, 9, #00FF00 CARDSIZE This directive sets the size of cards (in cm). If omitted, is considered to be 6 cm x 9 cm. Syntax: CARDSIZE = width, height Examples: CARDSIZE = 5, 10 CARDSIZE = 2.5, 2.5 71 CASE This directive is used in a structure SELECT…ENDSELECT to specify a code that must be executed when the value in the SELECT is equal to a specific value (see page 142). Syntax: CASE = value Parameters: value: a string, number, label or expression that can be evaluated. CASEELSE This directive is used in a structure SELECT…ENDSELECT to specify a code that must be executed only if all the CASEs directives are not executed (see page 142). Syntax: CASEELSE Parameters: None CHROMAKEY This directive sets the color to be treated as transparent during image loading (with IMAGE directive, see page 106). The default transparent color, if CHROMAKEY was not used, is the color in the top-left pixel of the image. Syntax: CHROMAKEY = html color / corner type, level Parameters: corner type: the color will be picked from one of the four corners: TOPLEFT TOPRIGHT BOTTOMLEFT BOTTOMRIGHT level: if specified, are treated as transparent also the colors within a level of difference from the base transparent color (calculated as a distance in CIELab space). Examples: CHROMAKEY = #FFFFFF CHROMAKEY = TOPLEFT 72 COLOR This directive modifies the colors, brightness, contrast and saturation of images (and text) being rendered on a range of cards. See directives IMAGE (page 106), ICONS (page 103), PATTERN (page 130) and TEXT (page 146). Syntax: COLOR = “range”, html color, brightness/contrast/saturation Parameters: “range”: a set of cards, html color: color used for rendering the image, in the same format used for HTML. If you want to maintain the original colors, you must use a median gray (#808080). Image 14 brightness/contrast/saturation: a triplet of brightness, contrast and saturation value, used for rendering the image, written in hexadecimal format (like an html color), starting with an ampersand (&) character. If you want to maintain some of the original values, use the median value (hexadecimal 80). If this parameter is omitted, are used three neutral values (&808080). Examples: COLOR = 1, #00FF00 IMAGE = 1, "c:\images\earth.jpg", 0, 0, 6, 9, 0, P Result: Image 14 COLOR = 1, #808080, &FF8080 IMAGE = 1, "c:\images\earth.jpg", 0, 0, 6, 9, 0, P Result: Image 15 73 Image 15 COLORS This directive writes from one to four colors into as many variables, that can be used instead of a color value. Syntax: COLORS = “range”, html color1, html color2 , html color3 , html color4, html color 5 Parameters: “range”: a set of cards, html color1: a color value, in HTML format, that is stored into variable #ZZZZZZ html color2: a color value, in HTML format, that is stored into variable #YYYYYY html color3: a color value, in HTML format, that is stored into variable #XXXXXX html color4: a color value, in HTML format, that is stored into variable #WWWWWW html color5: a color value, in HTML format, that is stored into variable #VVVVVV Instead of a color, you can use another variable, or the syntax #XçY to read a color located at position X, Y of the current card (you can use also % with each value, for example: #50%ç50%). With the syntax #X1çY1çX2çY2 you can read the most used color in an image, (the image starts from X1, Y1 and end to X2, Y2). With the syntax #X1çY1çX2çY2çMinçMax you can read the most used color in an image, (the image starts from X1, Y1 and end to X2, Y2), excluding colors with percent brightness lower than Min and higher than Max. With the syntax #AAAAAA>#BBBBBB<#CCCCCC you can select between two color: if the brightness of color #A is more or equal to 50%, the variable is set to color #B, if the brightness is less than 50%, the variable is set to color #C. Every color can be also modified adding a value for saturation and a value for brightness change (in percent), with the syntax #000000+saturation+brightness (the values for saturation and brightness can also be negatives). Example: COLORS = 1, COLORS = 2, COLORS = 3, RECTANGLE = #FF0000 #00FF00 #0000FF 1-3, 0, 0, 100%, 100%, #ZZZZZZ COMMENT This directive sets the character used for comments, and eventually activate the in-line comments. The utilization of this directive is equivalent to the settings in the "Config" section of the program. Syntax: COMMENT = character, INLINE Parameters: character: the character used for comments, it must be the first character of the line, INLINE: the same character (doubled) will be used for in-line comments. Examples: 74 COMMENT = & & This is a comment COMMENT = !, INLINE RECTANGLE=1, 0, 0, 6, 9, #00FF00 !! This is another comment 75 COPY This directive does a copy-and-paste of a section of a card into another position on the same card. If you want to copy a section of a card onto another card, you must use the SAVE and IMAGE directives (see page 140). Syntax: COPY = “range”, position x start, position y start, width start, height start, position x end, position y end, width end, height end, angle, flags Parameters: “range”: a set of cards, position x start: starting horizontal position (in cm) of the image, position y start: starting vertical position (in cm) of the image, width start: starting width of the image (in cm), height start: starting height of the image (in cm), position x end: ending horizontal position (in cm) of the image, position y end: ending vertical position (in cm) of the image, width end: ending width of the image (in cm), height end: ending height of the image (in cm), angle: angle of image rotation, can be 0 for no rotation, flags: in this parameter, you can specify a special behavior for the image, possible values are: H V Horizontal mirror Vertical mirror Example: Image 16 IMAGE = 1, " c:\images\earth.jpg", 0, 0, 3, 3.5, 0, P FONT = Arial, 16, , #FFFFFF, #00000 TEXT = 1, "Earth", 0, 3.5, 3, 1, CENTER, CENTER COPY = 1, 0, 0, 3, 4.5, 3, 0, 3, 4.5, 0, H COPY = 1, 0, 0, 3, 4.5, 0, 4.5, 3, 4.5, 0, V COPY = 1, 0, 0, 3, 4.5, 3, 4.5, 3, 4.5, 0, HV Result: Image 16 76 COPYCARD This directive duplicates cards from a source range to a destination range. Both source and destination ranges can be single cards. Syntax: COPYCARD = “destination range”, “source range” Parameters: “destination range”: a set of cards, “source range”: a set of cards. Example: COPYCARD = "5-8", "1-2" This is the deck, before the directive: CARD 1 CARD 2 CARD 3 CARD 4 This is the deck, after the directive: CARD 1 CARD 2 CARD 3 CARD 4 CARD 1 CARD 2 CARD 1 CARD 2 CORRECTION This directive enables/disables the pixel correction. If enabled, one pixel is added to width and heights of ELLIPSE, RECTANGLE, ROUNDRECT, and RHOMBUS directives. The correction default is ON. Syntax: CORRECTION = “range”, flag Parameters: “range”: a range of cards, “flag”: values accepted are: ON OFF Pixel correction enabled Pixel correction disabled Example: CORRECTION = 1, OFF 77 COUNTER This directive sets a counter to a value. A counter is a variable that can be used in expressions (see page 36). This directive can be used with a dice (see DICE directive, page 79) to revert it into a counter. Note: after the build a warning is issued if one counter is used in an expression without being initialized. Syntax: COUNTER = “range”, counter, value Parameters: “range”: a set of cards, counter: valid counters are: A B C D E F G H I J AA BB CC DD EE FF GG HH II JJ value: a value, it can be a fixed number or an expression. Examples: COUNTER = "1", A, 100 COUNTER = "1-10", B, 2D6 DECK This directive prepares a deck of cards to be used in the “Virtual table” option (see page 53). If you don’t use this directive, the program prepares a deck to be used in the virtual table with all the cards. Syntax: DECK = “range”, “name”, html color, height, flag, card back, pos_x, pos_y Parameters: “range”: a set of cards, “name”: the name of the deck, html color: deck color in the same format used for HTML, height: height of the deck (in pixels), you can also specify a % of the screen’s height. The deck’s width is proportional to the height. flag: you can specify these options: R N the deck is shuffled (the default) the deck is not shuffled (the order of the cards is those specified in “range” parameter) card back: if you specify a number for this parameter, for the deck image (back of cards) is used that card (taken from the deck) instead of a color. You can also use a range of cards for this parameter, pos_x: horizontal position for the deck (in pixels), you can also specify a % of the screen’s width, pos_y: vertical position for the deck (in pixels), you can also specify a % of the screen’s height. Example: DECK = 1-13, "Hearts", #FF0000, 50% 78 DICE This directive converts one counter into a dice (it can be used later in expressions). Syntax: DICE = “range”, counter, “dice range”, dice number, flags, default 1, default 2 Parameters: “range”: a set of cards, counter: valid counters are: A B C D E F G H I J dice range: a range of values, from which is taken the result of the dice roll, dice number: the number of dice rolled, flags: the syntax for this parameter is fng, where f is the flag that specify how the dice are grouped, n is a number that specify how much dice are used, and g is the flag that specify how the dice to be grouped are chosen from the main pool. The 1st flag can be chosen between: + sum (the default, if not specified) * multiply subtract # absolute value after subtracting £ concatenate ^ concatenate without duplicates The 2nd flag can be chosen between: + upper dice (the default, if not specified) lower dice default 1: the value to be used if the number before the dice is missing, default 2: the value to be used if the number after the dice is missing, Example, for rolling four dice (with values from one to six) and sum the upper three: DICE = 1, A, "1-6", 4, +3+ DISPLAY This directive draws a range of cards to the canvas (card 0), resizing it accordingly, and save it with a filename (if specified). If the range is omitted, all the deck is drawn and saved. The width parameter is the number of cards in horizontal, if omitted, is chosen the maximum number from the factors of the total number of the cards. Syntax: DISPLAY = ”filename”, starting card, ending card, width Example: DISPLAY = "c:\deck.png", 1, 10 79 DOWNLOAD This directive downloads a file from Internet, if the file doesn’t already exist in the specified path. Syntax: DOWNLOAD = URL, filename Parameters: URL: the URL for a file, it must start with http:// or https://, filename: the path and filename for the downloaded file, if omitted, the path is the current folder, and the name is taken from the URL parameter. Example: DOWNLOAD = http://game-icons.net/icons/delapouite/originals/png/sheep.png You can also use two sequences, one for the URLs and one for the filenames. DPI This directive sets the resolution of cards (in Dots Per Inch). If omitted, is considered to be 300 (the default for printing); if you want to show the cards on screen, you can use a value of 150. Syntax: DPI = number Note that with a value too high, the time of rendering can be very long, and the program uses more memory (or disk space). Example: DPI = 150 DRAW This directive draws a number of cards from a deck in the “Virtual table” option (see page 53). If you don’t use this directive, the program prepares a deck to be used in the virtual table with all the cards. If you specify a new name, a deck is created with the card drawn, if you leave the 2 nd parameter empty, the cards drawn are shown into the table as separated objects. Syntax: DRAW = “name”, “name_new”, number, flag, pos_x, pos_y Parameters: “name”: the name of the deck from which the cards are drawn, “name_new”: the name of the deck created with the cards drawn, Number: the number of cards drawn, flag: you can specify these options: U D the cards are drawn face up the cards are drawn face down (the default) 80 pos_x: horizontal position for the cards/deck drawn (in pixels), you can also specify a % of the screen’s width, pos_y: vertical position for the cards/deck drawn (in pixels), you can also specify a % of the screen’s height. Example: DRAW = "standard", "new", 10, U DUPLEX This directive copies a card (or a range of cards) to another position (or range) calculated automatically by the software, it is useful to manage duplicates or synchronize the front and back of cards for a duplex printing. See also PRINT directive (see page 133). Syntax: DUPLEX = “front card(s)”, “back card(s)”, number Parameters: “front card(s)”: a card or a range of card to be copied, “back card(s)”: a card or a range of card to be copied, front-to-back with the card(s) specified in the 1st parameter, number: if specified, the card is replicated a number of times; if not specified, it is treated like one copy. Example: DUPLEX = 1-10, 11 DUPLEX = 12-21, 22, 2 EDGE This directive changes the style used for drawing the lines / boundaries with these directives: BEZIER ELLIPSE HEXGRID LINE LINERECT GRID PIE POLYGON RECTANGLE ROUNDRECT STAR TRACK TRACKRECT TRIANGLE Syntax: EDGE = “range”, style, pattern Parameters: “range”: a set of cards, style: you can choose a style between these options: 81 SOLID DASH DOT DASHDOT DASHDOTDOT CUSTOM draws a solid line (the default), draws a dashed line, draws a dotted line, draws a line alternating a dash and a dot, draws a line alternating a dash and two dots, draws a line using a custom pattern pattern: a pattern for the custom style, this pattern can be composed of: O D S dot dash space These letters can be repeated, for example “OSDSOS” is a valid pattern. 82 ELLIPSE This directive draws an ellipse (or a circle) in a set of cards. Syntax: ELLIPSE = “range”, position x, position y, width, height, html color, html color, thickness Parameters: “range”: a set of cards, Image 17 position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the ellipse (in cm), height: height of the ellipse (in cm), html color: border color of the ellipse, in the same format used for HTML. You can also specify a gradient. Image 18 html color: inner color of the ellipse, in the same format used for HTML, if not specified the inner color is the same of border color. You can also specify “EMPTY” for a hollow ellipse or a gradient. thickness: thickness of the border of the ellipse (in cm), if omitted, the ellipse’s border is 1 pixel wide. Examples: ELLIPSE = 1, 1, 1, 4, 7, #00FF00 Result: Image 17 ELLIPSE = 1, 1, 1, 4, 7, #FF00FF, EMPTY, 0.1 Result: Image 18 ELLIPSE = 1, 1, 1, 4, 7, #FF0000#0000FF@90 Result: Image 19 83 Image 19 ELSE This directive is used in a structure IF…ENDIF to specify a code that must be executed only if the test in the IF directive is not true (see page 104). Syntax: ELSE Parameters: none ELSEIF This directive is used in a structure IF…ENDIF to specify a code that must be executed only if the test in this line is true and the test in the first IF directive is false (see page 104). Syntax: … ELSEIF = value1 operator value2 … Parameters: value: a string, number, label or expression that can be evaluated, operator: the condition is evaluated using the two values and this operator, you can use one operator from the same listed for the IF directive. END This directive is used to close a MACRO…END structure (see page 125). Syntax: END Parameters: none ENDFRAME This directive closes a FRAME…ENDFRAME definition (see page 93). Syntax: ENDFRAME Parameters: none ENDIF This directive is used to close an IF…ENDIF structure (see page 104). 84 Syntax: ENDIF Parameters: none ENDLAYER This directive closes a LAYER…ENDLAYER definition (see page 115). Syntax: ENDLAYER Parameters: none ENDLINK This directive closes a LINK…ENDLINK definition (see page 119). Syntax: ENDLINK Parameters: none Example: linkmulti=num link= num,string 1,alpha 2,beta 3,gamma endlink [all]="1-{(num)}" font=Arial,48,,#000000 text=[all],[num],0,0,100%,50% text=[all],[string],0,50%,100%,50% ENDSECTION This directive closes a SECTION…ENDSECTION definition (see page 141). Syntax: ENDSECTION Parameters: none 85 ENDSELECT This directive is used to close a SELECT…ENDSELECT structure (see page 142). Syntax: ENDSELECT Parameters: none ENDSEQUENCE This directive is used to close a SEQUENCE…ENDSEQUENCE structure (see page 142). Syntax: ENDSEQUENCE Parameters: none ENDVISUAL This directive closes a VISUAL…ENDVISUAL definition (see page 55). Syntax: ENDVISUAL Parameters: none 86 FILL This directive fills a region with a color (the region is delimited by another color). Syntax: FILL = “range”, position x, position y, html fill color, html border color Parameters: “range”: a set of cards, position x: horizontal initial position (in cm) of the fill, position y: vertical initial position (in cm) of the fill, html fill color: color of the fill. You can also specify a gradient, html border color: this color is the boundary for the fill. Example: LINE LINE LINE LINE LINE FILL FILL = = = = = = = 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 5, 0, 2, 2, 1, 8, 0, 0, 9, 2, 7, 6, 1, #0000FF, 0.1 6, 8, #0000FF, 0.1 1, 9, #0000FF, 0.1 5, 9, #0000FF, 0.1 6, 0, #0000FF, 0.1 #FFFF00#FF8000@0, #0000FF #FF8000#FFFF00@0, #0000FF Image 20 Result: Image 20 FOLDER This directive sets the current working directory (if you don't specify it, it will be used the folder where the script is located). Syntax: FOLDER = “path” Parameters: “path”: the folder to be used as current working directory. Example: FOLDER = "c:\projects\test" 87 FONT This directive sets the font for any following TEXT command (see page 148). Note that there isn’t any reference to a range of cards. If you want a ranged command, you can use FONTRANGE instead (see page 89). Syntax: FONT = “font name”, size, style, html color, html color, outline x, outline y, step x, step y Parameters: “font name”: character font name (string), size: character font size, in typographical points (1 point = 1/72 of an inch), style: character font style and flag used for visualization, values accepted are: B I U bold italic underline S T N C R H Q E Z F V P O D G strikeout Image 21 transparent font background do not clip text at the boundary circular text circular text, reversed circular text, half circumference circular text, one quarter circumference circular text, three quarter circumference the text follows the curve drawn with the last BEZIER directive the size is reduced until the text fits in the rectangle specified by TEXT directive (this value is stored in TF var) vertical text do not clip text area beyond the rectangle transparent font text (flag T is ignored) the text is placed in the rectangle’s diagonal (from top-left to bottom-right) the text is placed in the rectangle’s diagonal (from top-right to bottom-left) html color: character color, in the same format used for HTML. You can also specify a gradient, html color: background color, in the same format used for HTML. You can also specify a gradient. This parameter can be omitted (it will be used the last background color used, or white if none was specified), if you specified T as a style flag, the background color will not be used. Tip: you can choose the font with a Windows standard dialog, clicking on the button “Insert” and choosing the menu voice “Font”. Examples (the difference was in the T flag in the 2 nd FONT command): RECTANGLE = 1, 0, 0, 6, 4, #FF0000 FONT = "Arial", 32, B, #FFFFFF, #0000FF TEXT = 1, "TEST", 0, 1, 6, 2, center Result: Image 21 RECTANGLE = 1, 0, 0, 6, 4, #FF0000 FONT = "Arial", 32, BT, #FFFFFF, #0000FF TEXT = 1, "TEST", 0, 1, 6, 2, center Result: Image 22 outline x: horizontal expansion in cm, with that parameter the text will be replicated horizontally from –x to +x, 88 Image 22 outline y: vertical expansion in cm, with that parameter the text will be replicated vertically from –y to +y. step x: the number of times the text is printed horizontally. step y: the number of times the text is printed vertically. Example: FONT = "Arial", 32, B, #FFFFFF, #0000FF, 0.1, 0.1 TEXT = 1, "TEST", 0, 1, 6, 2, center Result: Image 23 Image 23 FONTALIAS This directive enables/disables the font anti-aliasing, using the Operating System’s routines. It’s useful to remove colored pixels in the text’s boundaries, especially when using HTMLTEXT (see page 98) or RTFTEXT (see page 139) directives with transparent background. Syntax: FONTALIAS = “range”, flag Parameters: “range”: a range of cards, flag: values accepted are: ON OFF Font anti-aliasing enabled Font anti-aliasing disabled Example: {[html_on]="<style type='text/css'>p {font-size: 32px}</style><p> ANTIALIASING ON</p>"} {[html_off]="<style type='text/css'>p {font-size: 32px}</style><p> ANTIALIASING OFF</p>"} ELLIPSE = 1, 0, 0, 6, 3, #FF0000 ELLIPSE = 1, 0, 3, 6, 3, #FF0000 FONTALIAS = 1, ON HTMLTEXT = 1, [html_on], 0, 0, 6, 3, #FFFFFF, 0, T FONTALIAS = 1, OFF HTMLTEXT = 1, [html_off], 0, 3, 6, 3, #FFFFFF, 0, T Result: Image 24 89 Image 24 FONTCHANGE This directive changes a font in the script with another. It’s useful when you want to test a script on a computer that doesn’t have a font, and you didn’t want to change all the occurrences (or use a label). Syntax: FONTCHANGE = “old font”, “new font” Parameters: “old font”: the font that you want to be changed, “new font”: the font that you want to use instead. Example: FONTCHANGE = “Calibri”, “Times New Roman” FONTRANGE This command is equivalent to FONT (see page 88) but is applied to a range of cards (specified by the 1 st parameter). Syntax: FONT = “range”, “font name”, size, style, html color, html color, outline x, outline y, step x, step y Parameters: “range”: a range of cards, “font name”: character font name (string), size: character font size, in typographical points (1 point = 1/72 of an inch), style: character font style and flag used for visualization, values accepted are: B I U S T N C R H Q E Z F V P O D G bold italic underline strikeout transparent font background do not clip text at the boundary circular text circular text, reversed circular text, half circumference circular text, one quarter circumference circular text, three quarter circumference the text follows the curve drawn with the last BEZIER directive the size is reduced until the text fits in the rectangle specified by TEXT directive vertical text do not clip text area beyond the rectangle transparent font text (flag T is ignored) the text is placed in the rectangle’s diagonal (from top-left to bottom-right) the text is placed in the rectangle’s diagonal (from top-right to bottom-left) html color: character color, in the same format used for HTML. You can also specify a gradient, html color: background color, in the same format used for HTML. You can also specify a gradient, outline x: horizontal expansion in cm, with that parameter the text will be replicated horizontally from –x to +x, 90 outline y: vertical expansion in cm, with that parameter the text will be replicated vertically from –y to +y. step x: the number of times the text is printed horizontally. step y: the number of times the text is printed vertically. Tip: you can choose the font with a Windows standard dialog, clicking on the button “Insert” and choosing the menu voice “Font”. FOOTER This directive prints a text in the page’s footer specified by a page range (with a syntax like cards’ range). Syntax: FOOTER = “page range”, “text”, horizontal alignment Parameters: “page range”: a set of pages, if empty the text is printed onto all the pages, “text”: the text to be printed, you can also use four variables: {P} {N} {D} {T} page number total page number date time horizontal alignment: the text’s horizontal alignment in the page, values accepted are: LEFT CENTER RIGHT left aligned centered right aligned Examples: FOOTER = "1-3", "Deck 1", CENTER FOOTER = "", "printed {D} {T}", RIGHT 91 FOR This directive executes the code between a FOR row and a NEXT row (see page 127), exiting when the counter value is equal to end value, starting from start value and adding a step value at each loop. Syntax: FOR = counter, start value, end value, step Parameters: counter: the variable counter storing the value, can be chosen between A B C E F G H I J, start value: starting value for the counter, end value: ending value for the counter, step: increment for counter at each loop, if not specified is assumed to be 1. Example: FOR = A, 1, 4 FOR = B, 1, 7 RECTANGLE = 1, A, B, 1, 1, #FF0000, #0000FF NEXT NEXT Result: Image 25 92 Image 25 FRAME This directive is used in a FRAME…ENDFRAME structure to define frames using characters in rectangular patterns, for example, if you want to define three frames, one for the card, one for an image and one for the text below, you can write these lines: FRAME AAAAAA ABBBBA ABBBBA ABBBBA ACCCCA ACCCCA AAAAAA ENDFRAME The result is equal to these lines: <A>=0%,0%,100%,100% <B>=16.7%,14.3%,66.7%,42.9% <C>=16.7%,57.1%,66.7%,28.6% With this method, you can create 36 frames (one for each letter/number), the names are case-insensitive. Syntax: FRAME = list of split frames Parameters: list of split frames: if you add here some frames, these frames are treated individually, and are not merged in a single frame. In the last example, if you specify B as a parameter, instead of one frame, the program creates twelve frames (all named B). GAP This directive sets a space between cards in printed pages. If the directive GAP is not specified, there will be no gap between cards. Syntax: GAP = horizontal gap, vertical gap, flag Parameters: horizontal gap: horizontal space (in cm), vertical gap: vertical spaces (in cm). flag: values accepted are: ON: to enable a guideline in the mid of the gap OFF: to disable it (the default) If the directive GAP is not specified, there is no gap between cards. Example: GAP = 1, 1 93 GRID This directive draws a grid in a set of cards. Syntax: GRID = "range", position x, position y, width, height, html color, thickness, horizontal cells, vertical cells, pattern Parameters: “range”: a set of cards, position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the rectangle (in cm), height: height of the rectangle (in cm), html color: border color of the grid, in the same format used for HTML. You can also specify a gradient, thickness: thickness of the grid (in cm), if set to zero, the grid’s border will be 1 pixel wide, horizontal cells: number of horizontal cells, vertical cells: number of vertical cells, pattern: a pattern for the line used to draw the grid, this pattern can be composed of: O D S dot dash space These letters can be repeated, for example “OSDSOS” is a valid pattern. Example: GRID = 1, 1, 1, 4, 4, #FF0000#0000FF@90, 0.1, 3, 3 Result: Image 26 Image 26 94 HEADER This directive prints a text in the page’s header specified by a page range (with a syntax like cards’ range). Syntax: HEADER = “page range”, “text”, horizontal alignment Parameters: “page range”: a set of pages, if empty the text is printed onto all the pages, “text”: the text to be printed, you can also use four variables: {P} {N} {D} {T} page number total page number date time horizontal alignment: the text’s horizontal alignment in the page, values accepted are: LEFT CENTER RIGHT left aligned centered right aligned Examples: HEADER = "1-3", "Deck 1", CENTER HEADER = "", "printed {D} {T}", RIGHT 95 HEXGRID This directive draws a hexagonal grid in a set of cards. Syntax: HEXGRID = “range”, pos_x, pos_y, width, height, hex side, flags, html color, html color, thickness Parameters: “range”: a set of cards, pos_x: horizontal position (in cm), pos_y: vertical position (in cm), width: width of the rectangle (in cm), height: height of the rectangle (in cm), hex side: length of the hexagon’ side (in cm), flags: you can use the following flags: D L N C E . _ X add a dot in the center of the hexagon add a label in each hexagon (A, B, C...) add a label in each hexagon (1, 2, 3...) add a label in each hexagon (11, 12, 13...21, 22, 23...) add a label in each hexagon (A1, A2, A3...B1, B2, B3...) add a separator for C flag add a separator for C flag add a separator for C flag doesn’t draws the grid (useful if you want only a dot or a label) html color: border color of the grid, in the same format used for HTML. You can also specify a gradient, html color: inner color of the hexagons, in the same format used for HTML, if not specified the inner color is the same of border color. You can also specify “EMPTY” for a hollow (and transparent) hexagon or a gradient, thickness: thickness of the grid (in cm), if omitted, the grid’s border is 1 pixel wide. Example: FONT = ARIAL, 10, , #000000 HEXGRID = 1, 0, 0, 6, 9, 1, N, #000000, #00FF00 Result: Image 27 Image 27 96 HTMLFILE This directive prints the HTML text loaded from a filename in the cards specified by a range. Syntax: HTMLFILE = “range”, “filename”, position x, position y, width, height, html color , angle, flags, alpha-channel Parameters: “range”: a set of cards, “filename”: the HTML filename for text to be printed (eventually with a pathname), position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the text’s rectangle (in cm), height: height of the text’s rectangle (in cm), html color: background color for text, angle: angle of text rotation, you must specify 0 for no rotation, flags: you can specify one or more flags, chosen between: T H V I E 2 4 8 Transparent background for text Horizontal mirror Vertical mirror HTML rendering with internal engine HTML rendering with Explorer Render a x2 image (don’t use if you already have an OVERSAMPLE directive) Render a x4 image (don’t use if you already have an OVERSAMPLE directive) Render a x8 image (don’t use if you already have an OVERSAMPLE directive) alpha-channel: level of transparency of text, from 0 (full transparent) to 100 (full solid). If omitted, the level is set to 100 (full solid). You can also specify an angle for the transparency, with the format level@angle; in this case, the level of transparency is the starting level, ending with 0 (full transparent). Example: HTMLFILE = 1, "c:\test.html", 0, 0, 6, 9, #FFFFFF, 0, T Result: Image 28 Image 28 97 HTMLFONT This directive creates a tag that can be used for recalling a font in an HTMLTEXT directive (see page 101). If you create a tag with name example, in HTML you can assign these characteristics in an HTML text delimited with <example> and </example> tags. Note that for default the text in HTMLTEXT is word-wrapped, so there isn’t a flag to enable it. There are three special tags: th, tr, and td, that are used with the HTML tags of the same names (i.e. in tables). Syntax: HTMLFONT = “html tag”, “font name”, size, style, html color, alignment, shadow x, shadow y, shadow blur, shadow color, outline color, outline width, indent Parameters: “html tag”: a name used for referencing the font, “font name”: character font name (string), size: character font size, in typographical points (1 point = 1/72 of an inch), style: character font style and flag used for visualization, values accepted are: B I U S O N R C T bold italic underline strikeout shadow over outline (the default is outline over shadow) do not resize this font when using F flag in HTMLTEXT (see page 101) the outline of the font is done in a more refined way break lines at every character the HTML syntax is formatted for table cells html color: character color, in the same format used for HTML, you can also specify a gradient. alignment: the text’s horizontal alignment, values accepted are: left center right justify left aligned centered right aligned the text is justified The horizontal alignment is optional, if omitted is considered to be equal to left, shadow x: the horizontal offset for a shadow drawn under the text. Note: all the shadow’s parameters work only with flag E, and Internet Explorer must be version 11 or more, shadow y: the vertical offset for a shadow drawn under the text, shadow blur: if you specify this parameter, the shadow is blurred, shadow color: the color for the text’ shadow, in the same format used for HTML, outline color: the color for the text’s outline, in the same format used for HTML, outline width: the width for the text’s outline, indent: the indentation in cm of the first line (you can specify a negative number for hanging indentation). 98 Note: if an alignment is omitted, the program use a <span> tag with the font info, otherwise, the program uses a <div> tag. In other words, if you want to use different font on the same line, it’s possible only with a <span> tag, and you must omit the alignment parameter. Example: HTMLFONT = alpha, Arial, 32, , #000000 HTMLFONT = beta, "Times New Roman", 18, I, #0000FF HTMLTEXT = 1, "<beta>This is a </beta><alpha>test</alpha>", 0, 0, 100%, 100% Image 29 Result: Image 29 HTMLIMAGE To simplify insertion of images in HTMLTEXT directives (see page 101), you can specify a name with this directive, associated with a filename, width and height. When an HTMLTEXT is rendered, the name is substituted with an HTML tag for the image, with the correct size. Syntax: HTMLIMAGE = “range”, “name”, “filename”, width, height, flags “range”: a set of cards, “name”: the name associated to the image (replaced in HTML), “filename”: the filename for the image, width: width of the image (in cm), height: height of the image (in cm), flags: you can specify one or more flags, chosen between: P T M B Proportional Image alignment to the top of text (only with Explorer) Image alignment to the middle of text (only with Explorer) Image alignment to the bottom of text (only with Explorer) Example: HTMLIMAGE = 1, "(one)", "image.bmp", 1, 1, P HTMLTEXT = 1, "<p>Test (one)</p>", 0, 0, 6, 9, #FFFFFF, 0, T HTMLMARGINS This directive adds the settings for margins and vertical alignment to an existing tag (that was created with HTMLFONT directive, see page 98) to be used in HTMLTEXT directive (see page 101); this directive works only with E flag in HTMLTEXT (MS Explorer). Syntax: HTMLMARGINS = “html tag”, top margin, left margin, right margin, bottom margin, alignment, line spacing, width, height Parameters: “html tag”: a name used for referencing the font, top margin: the size of the top margin, in cm, 99 left margin: the size of the left margin, in cm, right margin: the size of the right margin, in cm, bottom margin: the size of the bottom margin, in cm, alignment: the text’s vertical alignment, values accepted are: top center bottom top aligned centered bottom aligned line spacing: the text’s line spacing in %, the default is 100 is for a single line, width: the width of a table cell, in cm (it works only when T flag is used in HTMLFONT), height: the height of a table cell, in cm (it works only when T flag is used in HTMLFONT). Example: HTMLFONT = alpha, Arial, 32, , #000000 HTMLMARGINS = alpha, 0.5, 1, 1 HTMLTEXT = 1, "<alpha>test</alpha>", 0, 0, 100%, 100%, #FFFFFF, 0, E 100 HTMLTEXT This directive prints a text, using HTML format, in the cards specified by a range. This directive is useful if you want to print a text with multiple size, font, attributes, colors and so on. For expressions, you must include them in double curly parentheses {{ … }}. You can add also one or more images, using a keyword(s), coded with the HTMLIMAGE directive (see page 99). Syntax: HTMLTEXT = “range”, “text”, position x, position y, width, height, html color , angle, flags, alpha-channel Parameters: “range”: a set of cards, “text”: the HTML text to be printed, position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the text’s rectangle (in cm), height: height of the text’s rectangle (in cm), html color: background color for text, angle: angle of text rotation, you must specify 0 for no rotation, flags: you can specify one or more flags, chosen between: T H V I E 2 4 8 R B F M L Transparent background for text Horizontal mirror Vertical mirror HTML rendering with internal engine HTML rendering with MS Explorer Render a x2 image (don’t use if you already have an OVERSAMPLE directive) Render a x4 image (don’t use if you already have an OVERSAMPLE directive) Render a x8 image (don’t use if you already have an OVERSAMPLE directive) Vertical text Transparent background, better rendering of png, works only with E flag (MS Explorer) The text is resized to fit the box (MS Explorer) The images are resized with the text (only if using F flag, MS Explorer) TEXTLIMIT variables are calculated more accurately (MS Explorer) alpha-channel: level of transparency of text, from 0 (full transparent) to 100 (full solid). If omitted, the level is set to 100 (full solid). You can also specify an angle for the transparency, with the format level@angle; in this case, the level of transparency is the starting level, ending with 0 (full transparent). Example: {[html]="<p><b>Text</b> example</p> <p><b>Image</b> example</p> <img src='c:\earth.jpg'>"} HTMLTEXT = 1, [html], 0, 0, 6, 9, #FFFFFF, 0, T Result: Image 30 Image 30 101 ICON This directive assigns a single character (key) to an image, to be used later with an ICONS directive (see page 97). Syntax: ICON = “range”, key, “image file” Parameters: “range”: a set of cards, key: a character used to identify the image (like “A”), “image file”: an existent image file (eventually with a path), formats allowed are bmp, gif, png, jpg, and tif. Example: ICON = "1-10", A, "c:\images\image1.jpg" ICON = "1-10", B, "c:\images\image2.jpg" ICON = "1-10", C, "c:\images\image3.jpg" 102 ICONS This directive prints a number of images in a rectangular area, like a multi-image PATTERN directive (see page 130), the “keys” parameter identifies the images used, defined before with some ICON directives (see page 97). For example, if you write: ICON = "1-10", A, "c:\images\image1.jpg" ICON = "1-10", B, "c:\images\image2.jpg" ICON = "1-10", C, "c:\images\image3.jpg" Later you can use a key of “ABC” to print the three images all together in a rectangular area. This directive is useful when you must convert to images an output from the combination/permutation engine. You can also use the “<” special character to add a backspace and draw two images in the same place; for example, a key like “P<2” means that the image assigned to “2” is printed over the image assigned to “P”. Syntax: ICONS = “range”, keys, position x, position y, width, height, image width, image height, angle, flags, horizontal alignment, vertical alignment, alpha-channel, key length, width factor, height factor Parameters: “range”: a set of cards, keys: a string, composed by characters assigned to images with ICON directives, position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the rectangle in which the images are printed (in cm), height: height of the rectangle in which the images are printed (in cm), image width: width of the single image to be printed (in cm), image height: height of the single image to be printed (in cm), angle: angle of image rotation, if not specified it is assumed to be 0 (for no rotation), flags: in this parameter, you can specify a special behavior for images, possible values are: T A R N P V Transparent Anti-aliasing Reverse, reversing the filling order of pattern’s elements (from bottom to top) Use PNG transparency Proportional Vertical pattern horizontal alignment: the images’ horizontal alignment in the rectangle, values accepted are: LEFT CENTER RIGHT left aligned centered (the default) right aligned vertical alignment: the images’ vertical alignment in the rectangle, values accepted are: TOP CENTER BOTTOM top aligned centered (the default) bottom aligned 103 alpha-channel: level of transparency of image, from 0 (full transparent) to 100 (full solid). If omitted, the level is set to 100 (full solid), key length: the default length of the character string utilized for key is one character, but a different length can be specified here, the "keys" parameter length must be a multiple, width factor: the width of the image is adjusted with this factor, adding space if more than 100, removing space if less than 100 (if not specified, the width factor of the image is 100), height factor: the height of the image is adjusted with this factor, adding space if more than 100, removing space if less than 100 (if not specified, the height factor of the image is 100). Example: RECTANGLE = 1, 0, 0, 6, 6, #0000FF ICON = 1, A, "c:\images\dot_red.gif" ICON = 1, B, "c:\images\dot_blue.gif" ICON = 1, C, "c:\images\dot_black.gif" ICONS = 1, BAC, 0, 0, 6, 6, 2, 2, 0, T, CENTER, CENTER Result: Image 31 IF Image 31 The IF…ENDIF structure can be used to create sections of code that must be executed only if are verified some conditions. Syntax: IF = value1 operator value2 … ELSEIF = value3 operator value4 … ELSEIF = value5 operator value6 … … ELSE … ENDIF Parameters: value: a string, number, label or expression that can be evaluated, operator: the condition is evaluated using the two values and this operator, you can use one operator from this list: = > < >= <= <> @ # value1 and value2 are equal value1 is major than value2 value1 is minor than value2 value1 is major or equal than value2 value1 is minor or equal than value2 value1 and value 2 are different value1 is contained into value2 value1 is not contained into value2 More than one test can be combined using Boolean logic, every test must be enclosed in parenthesis, and these are the accepted keywords: _TRUE_ _FALSE_ _NOT_ _AND_ 104 _OR_ If in an expression there are more than one logic operator, they are evaluated with these priorities (if they have the same priorities, they are evaluated from left to right): 1) _NOT_ 2) _AND_ 3) _OR_ Examples: ; choose a value between R, E and T [check] = R IF = [check] = R RECTANGLE = 1, 0, 0, 6, 9, #0000FF ELSEIF = [check] = E ELLIPSE = 1, 0, 0, 6, 9, #00FF00 ELSEIF = [check] = T TRIANGLE = 1, 3, 0, 6, 9, 0, 9, #FF0000 ELSE RECTANGLE = 1, 0, 0, 6, 9, #000000 ENDIF ; complex logic if=([a]=1) _AND_ _NOT_ ([b]=3) ; in this example, the _AND_ operator is evaluated first if=([a]=1) _OR_ ([b]=1) _AND_ ([c]=1) ; in this example, the _OR_ operator is evaluated first if=(([a]=1) _OR_ ([b]=1)) _AND_ ([c]=1) Note: if you want to use a sequence as argument for the IF directive, you must extract an element using the ? operator (and § for the number of the current card) inside an expression (with curly brackets). For example: IF = {sequence?§} = element 105 IMAGE This directive can be used to add an external image to a range of cards. Syntax: IMAGE = range, image file, position x, position y, width, height, angle, flag, alpha-channel, texture width, texture height, skew horizontal, skew vertical, image width, image height, pos-split x, pos-split y, copy width, copy height Parameters: range: a set of cards (the standards rules about ranges will be applied), image file: an existent image file (eventually with a path), formats allowed are bmp, gif, png, jpg, and tif, position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the image (in cm), height: height of the image (in cm), angle: angle of image rotation, can be 0 for no rotation. These are the required parameters. This directive can be used for a background on all your cards, or a logo on top-right, or a centered image. Simply specify range, image, position and angle. For example: IMAGE = 1, "c:\images\earth.jpg", 0, 0, 6, 9, 0 Result: Image 32 Image 32 Note that the image will fill the destination rectangle, the standard behavior of this command is resizing the original image and altering the aspect ratio for width and height. If you want to maintain the original aspect you must use a flag, as additional parameter. RECTANGLE = 1, 0, 0, 6, 9, #0000FF IMAGE = 1, "c:\images\earth.jpg", 0, 0, 6, 9, 0, P Result: Image 33 flag: in this parameter you can specify any, some or all of these letters: Image 33 P A G H V T X N R D C Proportional Anti-aliasing Grayscale Horizontal mirror Vertical mirror Transparent Texture Use PNG transparency Don’t adjust size for rotated images Use DPI from image file Extends the image cropping the borders With the “P” flag, the image will be resized maintaining the original aspect ratio. The previous background remains unchanged in the zone not occupied by the image. With the “A” flag, to the image will be applied a smoothing filter. There aren’t other settings related to that parameter. With the “G” flag, the image will be reduced to tones of gray (256 levels maximum). There aren’t other settings related to that parameter. 106 With the “H” or “V” flags, the image will be mirrored in the corresponding direction (these flags may be used both with the same image). If the “T” flag is used, the image will be rendered with a transparent color. If the CHROMAKEY directive was not used before, the transparent color is assumed to be the first pixel of the image (top left pixel). With the CHROMAKEY directive (see relative entry, page 72), you can specify a pixel from another corner, or directly a color. With the “X” flag, the image is used to fill the destination space (see texture width/height parameters). With the “N” flag, the image is loaded reading the transparency information (only PNG format). Without the “R” flag, a rotated image is stretched to be fully included in the destination rectangle, with this flag, the directive maintains the original size for the rotated image. With the “D” flag, the size of the image is adjusted reading the DPI from the file (only with BMP, PNG, and JPG formats). alpha-channel: level of transparency of image, from 0 (full transparent) to 100 (full solid). If omitted, the level is set to 100 (full solid). You can also specify an angle for the transparency, with the format level@angle; in this case, the level of transparency is the starting level, ending with 0 (full transparent), for example: RECTANGLE = 1, 0, 0, 6, 9, #0000FF IMAGE = 1, "c:\images\earth.jpg", 0, 0, 6, 9, 0, P, 100@90 Image 34 Result: Image 34 texture width: width of the texture (in cm), used only with “X” flag, if omitted the default is the image’s width, texture height: height of the texture (in cm), used only with “X” flag, if omitted the default is the image’s height. This is an example of using a texture to fill a space on a card (note, the alpha-channel is specified because you can’t leave the parameter empty), with texture size 1x1 cm (remember, the card is 6x9 cm): Image 35 IMAGE = 1, "c:\images\earth.jpg", 0, 0, 6, 9, 0, X, 100, 1, 1 Result: Image 35 skew horizontal: draw the image shifted horizontally (to the right for positive number, to the left for negative), the value 1 is the image’s width (you can use a decimal value), skew vertical: draw the image shifted vertically (to the bottom for positive number, to the top for negative), the value 1 is the image’s height (you can use a decimal value). This is an example for the skew effect (horizontal, value 0.5), note that the second image was vertically mirrored and printed with an alpha-channel value of 60. Image 36 RECTANGLE = 1, 0, 0, 6, 9, #000000 IMAGE = 1, "c:\images\earth.jpg", 0, 0, 6, 6, 0 IMAGE = 1, "c:\images\earth.jpg", 0, 6, 6, 3, 0, V, 60, 0, 0, 0.5, 0 Result: Image 36 image width: if this parameter is specified, the image isn’t enlarged to the whole rectangle, but instead is drawn with this width (in cm), image height: if this parameter is specified, the image isn’t enlarged to the whole rectangle, but instead is drawn with this width (in cm), pos-split x: if this parameter is a positive value, the image is positioned at that % of width, with a width equal to the parameter image width; if this parameter is a negative one, the image is split horizontally at that % of his width, and the two halves are positioned at the edge of the rectangle, 107 pos-split y: if this parameter is a positive value, the image is positioned at that % of height, with a height equal to the parameter image height; if this parameter is a negative one, the image is split vertically at that % of his height, and the two halves are positioned at the edge of the rectangle, copy width: if the image is split horizontally, the empty gap between the two halves is filled with a % of the image, starting from the cut point, copy height: if the image is split vertically, the empty gap between the two halves is filled with a % of the image, starting from the cut point. Tip: you can choose a name (and path) from a Windows standard dialog, clicking on the button “Insert” and choosing the menu voice “Image”. Tip: if you drag and drop an image file in nanDECK’s window, an IMAGE line is added with the path and filename of the image. 108 IMAGEFILTER This directive sets the filter using when images are loaded and resized in a card (with IMAGE, ICONS, PATTERN, HTMLTEXT/HTMLFILE, RTFTEXT/RTFFILE, and OVERSAMPLE directives). If not specified, the default filter is LINEAR. Syntax: IMAGEFILTER = filter name Parameter: filter name: the filter may be one of the following: NEAREST DRAFT LINEAR COSINE SPLINE LANCZOS MITCHELL Example: IMAGEFILTER=LANCZOS IMAGESIZE This directive reads an image and writes in two variables the image’s width and height (in pixel). Syntax: IMAGESIZE = “range”, “image file” The variables are: IW IH image’s width image’s height Parameters: “range”: a set of cards, “image file”: an existent image file (eventually with a path), formats allowed are bmp, gif, png and jpg. Example: IMAGESIZE = 1, "c:\images\earth.jpg" IMAGE = 1, "c:\images\earth.jpg", 0, 0, 6, 6, 0, P FONT = Arial, 16, , #000000 TEXT = 1, "Width={IW}" ,0 ,7 ,6 ,1 ,left, center TEXT = 1, "Height={IH}" ,0 ,8 ,6 ,1 ,left, center Result: Image 37 Image 37 INCLUDE This directive includes another script file in the current script, as if it was copied and pasted. You can omit the path if the included file is in the same directory of the including script. Syntax: 109 INCLUDE = “filename” Examples: INCLUDE = "c:\test\alpha.txt" INCLUDE = beta.txt Tip: you can choose a name (and path) from a Windows standard dialog, clicking on the button “Insert” and choosing the menu voice “Include”. 110 INPUTCHOICE With this directive, the user can input a variable text that can be used as a label value, this text can be chosen between the values from a sequence. The text confirmed is stored to a file with the same name of the script and “ini” for extension, or can be saved to a specific configuration file, to be loaded in a subsequent execution. Syntax: INPUTCHOICE = “label”, “description”, “default”, “values” Parameters: “label”: the label for storing input text, “description”: a text shown before the input box, “default”: starting value for the label, “values”: a sequence with the available choices. Example: INPUTCHOICE = "color", "Choose a color, please:", "Red", "Red|Green|Blue" This is the resulting input form: 111 INPUTLIST With this directive, the user can input a variable text that can be used as a label value, this text can be chosen between the values from a sequence. The text confirmed is stored to a file with the same name of the script and “ini” for extension, or can be saved to a specific configuration file, to be loaded in a subsequent execution. Syntax: INPUTLIST = “label”, “description”, “default”, “values” Parameters: “label”: the label for storing input text, “description”: a text showed before the input box, “default”: starting value for the label, “values”: a sequence with the available choices. Example: INPUTLIST = "color", "Choose a color, please:", "Red", "Red|Green|Blue" This is the resulting input form: 112 INPUTNUMBER With this directive, the user can input a variable integer number that can be used as a label value, this number can be chosen between a minimum and a maximum value. The number confirmed is stored to a file with the same name of the script and “ini” for extension, or can be saved to a specific configuration file, to be loaded in a subsequent execution. Syntax: INPUTNUMBER = “label”, “description”, default, min, max Parameters: “label”: the label for storing input number, “description”: a text shown before the input box, default: starting value for the number, min: minimum value for the number, max: maximum value for the number. Example: INPUTNUMBER = "name", "Choose a number, please:", 5, 1, 10 113 INPUTTEXT With this directive, the user can input a variable text that can be used as a label value. The text confirmed is stored to a file with the same name of the script and “ini” for extension, or can be saved to a specific configuration file, to be loaded in a subsequent execution. Syntax: INPUTTEXT = “label”, “description”, “default”, flags Parameters: “label”: the label for storing input text, “description”: a text showed before the input box, “default”: starting value for the label. flags: in this parameter, you can add a flag for a special effect, like: F G C R The program shows a button for browsing a file (to be added in the text field), The program shows a button for browsing a graphical file (to be added in the text field), The program shows a button for selecting a color, The program shows a button for selecting a color gradient. Example: INPUTTEXT = "name", "Input you name, please:", "John" 114 LAYER The directives between a structure LAYER…ENDLAYER are drawn in a separate card, then printed on the main card. Since the drawing directives like the RECTANGLE doesn’t support alpha transparency, they can be drawn in this mode with a LAYER structure. Syntax: LAYER = alpha-channel, offset_x, offset_y, angle Parameters: alpha-channel: level of transparency of the layer, from 0 (full transparent) to 100 (full solid). If omitted, the level is set to 100 (full solid). You can also specify an angle for the transparency, with the format level@angle; in this case, the level of transparency is the starting level, ending with 0 (full transparent). offset_x: the horizontal offset of layer offset_y: the vertical offset of layer angle: the angle of rotation of layer Example: LAYER = 50 RECTANGLE = 1, 3, 0.5, 3, 8, #FF0000 FONT = Arial, 24, T, #000000 TEXT = 1, Alfa, 3, 5, 3, 5 ENDLAYER LIMIT This directive fills four variables with the coordinates of latest drawn object’s boundaries (in cm), from various command (*). You can use these variables in other commands. Syntax: LIMIT = “range” The four variables are: PL PR PT PB (left) (right) (top) (bottom) Parameters: “range”: a set of cards (*) This directive works with this list of directives: BEZIER BEZIERS BUTTON COPY ELLIPSE GRID HEXGRID HTMLFILE HTMLTEXT 115 ICONS IMAGE LINE LINERECT PATTERN PIE POLYGON RECTANGLE RHOMBUS ROUNDRECT RTFFILE RTFTEXT STAR TEXT TRACK TRACKRECT TRIANGLE 116 LINE This directive draws a line from a point (x1, y1) to another point (x2, y2). Syntax: LINE = “range”, x1, y1, x2, y2, html color, thickness, pattern, end arrow, start arrow Parameters: “range”: a set of cards, x1, y1: coordinates of first point (in cm), x2, y2: coordinates of second point (in cm), html color: color of the line, in the same format used for HTML. You can also specify a gradient, thickness: thickness of the line (in cm), if omitted, the line is 1 pixel wide, pattern: a pattern for the line, this pattern can be composed of: O D S dot dash space These letters can be repeated, for example “OSDSOS” is a valid pattern, end arrow: width of the arrow (in cm), if omitted (or zero) there is no arrow at the end of the line, start arrow: width of the arrow (in cm), if omitted (or zero) there is no arrow at the start of the line. Example: LINE LINE LINE LINE LINE LINE LINE LINE = = = = = = = = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 5, 5, 5, 5, 5, 5, 5, 5, 1, 2, 3, 4, 5, 6, 7, 8, #0000FF#FF0000@0 #0000FF#FF0000@0, #0000FF#FF0000@0, #0000FF#FF0000@0, #0000FF#FF0000@0, #0000FF#FF0000@0, #0000FF#FF0000@0, #0000FF#FF0000@0, 0.05 0.1 0.15 0.2 0.25 0.3 0.35, OSDSOS Result: Image 38 117 Image 38 LINERECT This directive draws a line from a vertex of a rectangle to the opposite vertex. Syntax: LINE = “range”, pos_x, pos_y, width, height, html color, thickness, pattern, end arrow, start arrow Parameters: “range”: a set of cards, pos_x: horizontal position (in cm), pos_y: vertical position (in cm), width: width of the rectangle (in cm), height: height of the rectangle (in cm), html color: color of the line, in the same format used for HTML. You can also specify a gradient, thickness: thickness of the line (in cm), if omitted, the line is 1 pixel wide, pattern: a pattern for the line, this pattern can be composed of: O D S dot dash space These letters can be repeated, for example “OSDSOS” is a valid pattern, end arrow: width of the arrow (in cm), if omitted (or zero) there is no arrow at the end of the line, start arrow: width of the arrow (in cm), if omitted (or zero) there is no arrow at the start of the line. Example: LINERECT LINERECT LINERECT LINERECT LINERECT LINERECT LINERECT LINERECT = = = = = = = = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, #0000FF#FF0000@0 #0000FF#FF0000@0, #0000FF#FF0000@0, #0000FF#FF0000@0, #0000FF#FF0000@0, #0000FF#FF0000@0, #0000FF#FF0000@0, #0000FF#FF0000@0, Result: Image 39 118 0.05 0.1 0.15 0.2 0.25 0.3 0.35, OSDSOS Image 39 LINK This directive is used to link data, written as a text file (CSV format) or a spreadsheet (with xls, xlsx, or extensions), with the current script. The data linked are referenced in the script as sequences. If the fields’ names are omitted, the fields are referenced using the names contained in the first row of the file. For text files, the character used to separate fields’ data can be changed using the LINKSEP directive (see page 123). See also the LINKMULTI directive (page 122) if you need to duplicate the data rows, and the “Linked data editor” chapter (page 52). Syntax for text files: LINK = “filename”, field1, field2, ... fieldN If you omit the “filename” parameter, the program reads the data directly from the script file, until it reads a ENDLINK directive (see page 85). Syntax for Excel files: LINK = “filename!sheet”, field1, field2, ... fieldN If you didn’t specify the sheet’s name, the program reads the 1 st sheet in the file (for example, “sheet1”). Tip: you can choose a name (and path) from a Windows standard dialog, clicking on the button “Insert” and choosing the menu voice “Link”. Tip: if you drag and drop a spreadsheet file in nanDECK’s window, a LINK line is added with the path and filename of the spreadsheet. If the spreadsheet file doesn’t exist, the program asks if you want to create it (with the names of the fields specified in the line as the parameters field1, field2, etc. Examples: LINK = "c:\test\data01.txt" LINK = "c:\test\data02.txt", size, speed, weight LINK = "c:\test\data01.xls" LINK = "c:\test\data01.xls!sheet2" With the 2nd example, in the script these fields are referenced as [size], [speed] and [weight]. Example of file “data02.txt”: 1,2,3 4,5,6 7,8,9 10,11,12 The program will translate the data file in these sequences: [size]=1|4|7|10 [speed]=2|5|8|11 [weight]=3|6|9|12 You can also link a Google Sheet document, using the ID of the file instead of “filename” parameter, but you must share it first, following these steps: 119 • select the file in Google Drive web page, • click the Share icon (the icon with the “little man” in top-right button bar), • click the dropdown menu below “Link sharing on” in the window, • select a link sharing option, one of the “Anyone with the link…” option. Now Google shows you a link like this: https://docs.google.com/spreadsheets/d/1s_p1gcL2BBO_zYIe_v8bADjWzFtc0hh_eY8DIw8OPfY/edit?usp=sharing The ID of the sheet is the bold part, copy it and paste it in a nanDECK line like this: LINK=1s_p1gcL2BBO_zYIe_v8bADjWzFtc0hh_eY8DIw8OPfY You can also select one of the sheets, with this syntax: LINK=ID!Sheet_name But you must enable the web sharing, with these steps: • open the spreadsheet in a browser, • select from menu File ïƒ Publish to the Web, • click on “Publish” button. 120 LINKCOLOR This directive is used to create a sequence with the colors from spreadsheet’s cells; it must be used before the LINK directive (see page 119). Syntax: LINKCOLOR = sequence_name, field_name, flag Parameters: sequence_name: is the name of the sequence field_name: is the name of the field from the spreadsheet flag: it specifies if the color read is from the background or the font, if not specified is read from the background F font B background LINKENCODE This directive is used to specify which characters are replaced with \n\ encoding (where n is the ASCII code) when read from a spreadsheet file with the LINK directive (see page 119). As default, characters encoded are [ ] { }. Syntax: LINKENCODE = string LINKFILTER This directive is used to filter the rows in a linked file. You can specify more than one LINKFILTER directive for a linked file, and must be used before the LINK directive (see page 119). Syntax: LINKSEP = field_name operator value Parameters: field_name: is the name of the field for the filter operator: these are the possible operators used for the filter = equal > major < minor >= major or equal <= minor or equal <> different @ contained into # not contained into value: is the value used for the filter Example: Linked file: Name, count Alpha, 1 Beta, 2 121 Gamma, 3 With this script line: LINKFILTER = count < 3 LINK = linked.csv The resulting linked file will be: Name, count Alpha, 1 Beta, 2 If you want to clear all filter, you can use this directive with “CLEAR” parameter: LINKSEP = CLEAR LINKMULDIS When a linked file is used with a LINKMULTI directive (see page 122), you can specify with this directive one or more fields that aren't replicated; instead of a replica, a single element in a sequence field is taken for each record. It must be used before the LINK directive (see page 119). Syntax: LINKMULDIS = field1, field2, …, fieldN For example, if this is a linked file: name, count, data Alpha, 1, a Beta, 2, b|c Gamma, 3, d|e And you add these lines to your script: LINKMULTI = count LINKMULDIS = data LINK = linked.csv The resulting linked file will be: name, count, data Alpha, 1, a Beta, 2, b Beta, 2, c Gamma, 3, d Gamma, 3, e Gamma, 3, d Note: if a sequence is smaller than the requested number of replicated rows, it’s extended (like the d|e sequence in the example, extended to d|e|d for the three rows). LINKMULTI This directive is used to specify a field, used for identifying a multiplier for a line in a linked file. It must be used before the LINK directive (see page 119) and it must refer an existing field in the linked file (or a field specified in the LINK directive). Syntax: 122 LINKMULTI = field name The field must contain a number. For example, if this is a linked file: Name, count Alpha, 1 Beta, 2 Gamma, 3 And you add these lines to your script: LINKMULTI = count LINK = linked.csv The resulting linked file will be: Name, count Alpha, 1 Beta, 2 Beta, 2 Gamma, 3 Gamma, 3 Gamma, 3 LINKNEW This directive is used to specify a string, used in substitution for a carriage return read with the LINK directive (see page 119). If you don’t specify a LINKNEW directive in your script file, every carriage return read is replaced by \13\. Syntax: LINKNEW = string If you want to use a linked file with an HTMLTEXT directive, you should convert all the carriage returns with the corresponding HTML code, i.e.: LINKNEW = <br> LINKRANDOM This directive enables/disables the randomization of lines read with a LINK directive (see page 119). It must be used before the LINK directive (see page 119). Syntax: LINKRANDOM = flag Parameter: “flag”: values accepted are: ON OFF To enable randomization To disable randomization (the default) Example: LINKRANDOM = ON LINK = linked.csv 123 LINKSEP This directive is used to specify the character used in a link file to separate fields. It must be used before the LINK directive (see page 119). If this command is omitted, is used the default separator, a comma “,”. Syntax: LINKSEP = character You can also specify a special character with the syntax \n\. For example, for a tab you can use this line: LINKSEP = \9\ Example: LINKSEP = ; LINK = linked.csv LINKUNI This directive enables/disables the conversion of Unicode characters when read from a spreadsheet file (to be used with an HTMLTEXT directive, see page 101); this directive must be used before the LINK command (see page 119). Syntax: LINKUNI = flag Parameter: flag: values accepted are: ON OFF to enable the Unicode conversion (the default) to disable the Unicode conversion LOG This directive appends a string in a text file, if the file doesn't exist, it will be created. If you don’t specify a value, the file is deleted instead. Syntax: LOG = “range”, “file”, “value” Parameters: “range”: a set of cards, “file”: name of the file, “value”: the string that will be written in the text file Example: LOG = 1-10, "log.txt", "Card n° {§}" 124 MACRO With this directive, you can create new procedures, to be used like other directives. The END directive marks the end of the new procedure, and you can specify a list of parameters, delimited with parenthesis, to be reused in the script block. You can also specify a default value for each parameter, then if you didn’t use a parameter when you call a macro, the default value is used instead. In a macro, you can recall another macro, but you can’t create recursive macros. Syntax: MACRO = name, (parameter1)value1, (parameter2)value2, … … END Example: [black] = #000000 [red] = #FF0000 [blue] = #0000FF ; MACRO = dot, (rng), (x), (y), (r) ELLIPSE = (rng), (x)-(r), (y)-(r), (r)*2, (r)*2, [red][blue]@0 END ; MACRO = shadow, (rng), (x), (y), (w), (h), (txt), (col) FONTRANGE = (rng), Arial, 20, B, [black] TEXT = (rng), "(txt)", (x)+0.08, (y)+0.08, (w), (h), CENTER, CENTER, 0, 50 FONTRANGE = (rng), Arial, 20, BT, (col) TEXT = (rng), "(txt)", (x), (y), (w), (h), CENTER END ; MACRO = card, (rng), (txt), (x), (y), (w), (h), (col) shadow = (rng), (x), (y), (w), (h), (txt), (col) dot = (rng), (x), (y), 0.5 dot = (rng), (x)+(w), (y), 0.5 dot = (rng), (x), (y)+(h) ,0.5 dot = (rng), (x)+(w), (y)+(h), 0.5 END ; card = 1, "Test1", 1, 1, 4, 3, [red][blue]@0 card = 1, "Test2", 1, 6, 2, 2, [red][blue]@0 Result: Image 40 125 Image 40 MARGINS This directive sets the page’s margins. If the directive MARGINS is not specified, the standard margins are 1 cm (each). Syntax: MARGINS = left, right, top, bottom Parameters: left: left margin (in cm), right: right margin (in cm), top: top margin (in cm), bottom: bottom margin (in cm). Example: MARGINS = 2, 2, 1, 1 MOSAIC This directive reads all the images in a folder, and arrange them in a rectangle. If the images fill more than one instance of that rectangle, you can use a page parameter to specify which rectangle is drawn from all the possible choices. Syntax: MOSAIC = “range”, “folder”, position x, position y, width, height, page, flags, zoom Parameters: “range”: a set of cards, “folder”: a folder to search, eventually with a file pattern, position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the rectangle (in cm), height: height of the rectangle (in cm), page: if not specified, is equal to 1, flags: one or more of these flags H V S the schema is mirrored horizontally the schema is mirrored vertically the images are read also in the subfolders zoom: if not specified, is equal to 100 Example: MOSAIC = 1, "images\*.png", 0, 0, 0, 100% 126 NANDECK This directive executes another instance of the program, loads a script, render all the cards and saves them to disk. Then the execution continues with the next line. This directive is executed only one time with each run of the script. Syntax: NANDECK = “source”, output, “path”, dpi, oversample, “range” Parameters: “source”: another nanDECK script, output: this flag specifies the format of the saved images, you can choose between: BMP JPG PNG GIF GIFA TIF PDF “path”: the path for the saved images, if isn't specified, the images are saved in the save folder of the source, dpi: the resolution for the images (see page 80), the default is 300, oversample: the value for the oversample (see page 127), the default is 1 (no oversample), “range”: you can specify a range if you don't want to render all the deck. Example: NANDECK = "c:\scripts\test.txt", PNG, "c:\output" NEXT This directive closes a FOR…NEXT loop (see page 92). Syntax: NEXT Parameters: none OVERSAMPLE If you specify a parameter greater than one, the program works with cards 2x, 3x, or greater than the size specified, and then resize them to the original size, using the filter specified with IMAGEFILTER directive (see page 109). It’s useful to smooth every element of the cards, especially with small size one. Syntax: OVERSAMPLE = number Example: OVERSAMPLE = 2 127 With this directive, the memory required (and the rendering time) is much more than usual. PAGE This directive sets the paper’ size and orientation (for printing and PDF creation). Syntax: PAGE = width, height, orientation, flags, html color, no border range Parameters: width: page width (in cm) height: page height (in cm) orientation: the orientation can be chosen between: LANDSCAPE PORTRAIT horizontal vertical flags: in this parameter, you can specify a special behavior for pages, possible values are: H V E O the cards are horizontally centered the cards are vertically centered guides are not printed on even pages guides are not printed on odd pages html color: paper color, in the same format used for HTML. no border range: if a range is specified, the border isn’t printed on these cards. If the directive PAGE is not specified, the standard is 21 x 29.7 (A4), portrait, no flags. Example: PAGE = 21, 29.7, LANDSCAPE PAGEFONT This directive changes the font’s characteristics for page’s headers (see page 95) and footers (see page 91). If you don’t specify this directive in your script, it will be used Arial 10, black. Syntax: PAGEFONT = “font name”, size, style, html color Parameters: “font name”: character’s name (string), size: character’s size (integer), in typographical points = 1/72 of an inch, style: character’ style, values accepted are: B I U S bold italic underline strikeout 128 html color: character’s color, in the same format used for HTML. Examples: PAGEFONT = Arial, 10, B, #000000 PAGEFONT = "Times new roman", 16, IU, #FF0000 PAGEIMAGE This directive draws an image centered on all the printed pages (like a watermark). Syntax: PAGEIMAGE = “image file”, flags Parameters: “image file”: the image to be printed, flag: one or more of the following flags: P E O proportional don’t print on even pages don’t print on odd pages Example: PAGEIMAGE = watermark.pnk, P 129 PATTERN This directive prints repeated images in a rectangular area. If you want to print different images instead, you can use the ICON directive (see page 97). Syntax: PATTERN = “range”, “image file”, number, position x, position y, width, height, image width, image height, angle, flags, horizontal alignment, vertical alignment, alpha-channel Parameters: “range”: a set of cards, “image file”: an existent image file (eventually with a path), formats allowed are bmp, gif, png, jpg, and tif, number: the number of images printed (you can also use a sequence here), position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the rectangle in which the images are printed (in cm), height: height of the rectangle in which the images are printed (in cm), image width: width of the single image to be printed (in cm), image height: height of the single image to be printed (in cm), angle: angle of image rotation, if not specified it is assumed to be 0 (for no rotation), flags: in this parameter, you can specify a special behavior for images, possible values are: T A R N P V Transparent Anti-aliasing Reverse, reversing the filling order of pattern’s elements (from bottom to top) Use PNG transparency Proportional Vertical pattern horizontal alignment: the images’ horizontal alignment in the rectangle, values accepted are: LEFT left aligned CENTER centered (the default) RIGHT right aligned vertical alignment: the images’ vertical alignment in the rectangle, values accepted are: TOP top aligned CENTER centered (the default) BOTTOM bottom aligned Image 41 alpha-channel: level of transparency of image, from 0 (full transparent) to 100 (full solid). If omitted, the level is set to 100 (full solid). Examples: [img] = "c:\images\dot_red.gif" RECTANGLE = 1, 0, 0, 6, 5, #0000FF PATTERN = 1, [img], 5, 0, 1, 6, 3, 1.5, 1.5, 0, T, CENTER, CENTER Result: Image 41 130 PIE This directive draws a pie slice in a set of cards. Syntax: PIE = “range”, position x, position y, width, height, start angle, end angle, html color, html color, thickness Parameters: “range”: a set of cards, Image 42 position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the pie (in cm), height: height of the pie (in cm), start angle: start angle of pie (0=north, 90=east, 180=south, 270=west) Image 43 end angle: end angle of pie (0=north, 90=east, 180=south, 270=west) html color: border color of the pie, in the same format used for HTML. You can also specify a gradient. html color: inner color of the pie, in the same format used for HTML, if not specified the inner color is the same of border color. You can also specify “EMPTY” for a hollow pie or a gradient. thickness: thickness of the border of the pie (in cm), if omitted, the pie’s border is 1 pixel wide. Examples: PIE = 1, 1, 3, 4, 4, 0, 90, #00FF00 Result: Image 42 PIE = 1, 1, 3, 4, 4, 90, 270, #FF00FF, EMPTY, 0.1 Result: Image 43 PIE = 1, 1, 3, 4, 4, 0, 270, #FF0000#0000FF@90 Result: Image 44 131 Image 44 POLYGON This directive draws a polygon in a set of cards. Syntax: POLYGON = “range”, position x, position y, width, height, sides, angle, html color, html color, thickness Parameters: “range”: a set of cards, Image 45 position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the polygon (in cm), height: height of the polygon (in cm), sides: number of sides (3 = triangle, 4 = square, 5 = pentagon, and so on…), Image 46 angle: angle of rotation (in degrees), html color: border color of the polygon, in the same format used for HTML. You can also specify a gradient. html color: inner color of the polygon, in the same format used for HTML, if not specified the inner color is the same of border color. You can also specify “EMPTY” for a hollow polygon or a gradient. thickness: thickness of the border of the polygon (in cm), if omitted, the polygon’s border is 1 pixel wide. Examples: POLYGON = 1, 1, 1, 4, 7, 3, 45, #00FF00 Result: Image 45 POLYGON = 1, 1, 1, 4, 7, 4, 0, #FF00FF, EMPTY, 0.1 Result: Image 46 POLYGON = 1, 1, 1, 4, 7, 5, 0, #FF0000#0000FF@90 Result: Image 47 132 Image 47 PRINT This directive restricts the deck creation to the specified cards. Syntax: PRINT = “range” Parameters: “range”: a range of cards. If you specify the “DUPLEX” parameter, the range is built using information from the DUPLEX directives (see page 80). Examples: PRINT = "1-3, 8, 10-12" PRINT = DUPLEX 133 RECTANGLE This directive draws a rectangle in a set of cards. Syntax: RECTANGLE = “range”, position x, position y, width, height, html color, html color, thickness Parameters: “range”: a set of cards, position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the rectangle (in cm), height: height of the rectangle (in cm), html color: border color of the rectangle, in the same format used for HTML. You can also specify a gradient. html color: inner color of the rectangle, in the same format used for HTML, if not specified the inner color is the same of border color. You can also specify “EMPTY” for a hollow rectangle or a gradient. thickness: thickness of the border of the rectangle (in cm), if omitted, the rectangle’s border is 1 pixel wide. Image 48 Examples: RECTANGLE = 1, 1, 1, 4, 7, #00FF00 Result: Image 48 RECTANGLE = 1, 1, 1, 4, 7, #FF00FF, EMPTY, 0.1 Result: Image 49 RECTANGLE = 1, 1, 1, 4, 7, #FF0000#0000FF@90 Image 49 Result: Image 50 Image 50 134 RENDER With this directive, the program renders only a range of cards. If omitted, all the deck is rendered. If a name is specified, the range is associated with this string, and can be selected on a window, for a faster switch on multiple ranges. Syntax: RENDER = starting card, ending card, name Examples: RENDER = 10, 20 RENDER = 1, 10, "full deck" RENDER = 1, 5, "first half" RENDER = 6, 10, "second half" 135 RHOMBUS This directive draws a rhombus in a set of cards. Syntax: RHOMBUS = “range”, position x, position y, width, height, html color, html color, thickness Parameters: “range”: a set of cards, position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the rhombus (in cm), height: height of the rhombus (in cm), html color: border color of the rhombus, in the same format used for HTML. You can also specify a gradient. html color: inner color of the rhombus, in the same format used for HTML, if not specified the inner color is the same of border color. You can also specify “EMPTY” for a hollow rhombus or a gradient. thickness: thickness of the border of the rhombus (in cm), if omitted, the rectangle’s border is 1 pixel wide. Examples: RHOMBUS = 1, 1, 1, 4, 7, #00FF00 Result: Image 51 Image 51 136 ROUNDRECT This directive draws a rounded rectangle in a set of cards. Syntax: RECTANGLE = “range”, position x, position y, width, height, html color, html color, thickness, horizontal factor, vertical factor Parameters: “range”: a set of cards, position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the rounded rectangle (in cm), height: height of the rounded rectangle (in cm), html color: border color of the rounded rectangle, in the same format used for HTML. You can also specify a gradient. html color: inner color of the rounded rectangle, in the same format used for HTML, if not specified the inner color is the same of border color. You can also specify “EMPTY” for a hollow rounded rectangle or a gradient. thickness: thickness of the border of the rounded rectangle (in cm), if omitted, the rectangle’s border is 1 pixel wide. horizontal factor: rounding horizontal factor for the rectangle (1 for a circle), if omitted the default is 5. vertical factor: rounding vertical factor for the rectangle (1 for a circle), if omitted the default is equal to horizontal factor parameter (or 5, if the latter is missing). Image 52 Note that if you want rounded corners with the same aspect, the horizontal/vertical factors must have a ratio proportional to the width/height of the rectangle. Examples: ROUNDRECT = 1, 1, 1, 4, 7, #00FF00 Result: Image 52 ROUNDRECT = 1, 1, 1, 4, 7, #FF00FF, EMPTY, 0.1, 2 Result: Image 53 ROUNDRECT = 1, 1, 1, 4, 7, #FF0000#0000FF@90 Result: Image 54 Image 53 Image 54 137 RTFFILE This directive prints the RTF text loaded from a filename in the cards specified by a range. This directive is useful if you want to print a text from a document written using a word-processor (every program has the option to save a file in RTF format). Syntax: RTFFILE = “range”, “filename”, position x, position y, width, height, html color , angle, flags, alpha-channel Parameters: “range”: a set of cards, “filename”: the RTF filename for text to be printed (eventually with a pathname), position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the text’s rectangle (in cm), height: height of the text’s rectangle (in cm), html color: background color for text, angle: angle of text rotation, you must specify 0 for no rotation, flags: you can specify one or more flags, chosen between: T H V Transparent background for text Horizontal mirror Vertical mirror alpha-channel: level of transparency of text, from 0 (full transparent) to 100 (full solid). If omitted, the level is set to 100 (full solid). You can also specify an angle for the transparency, with the format level@angle; in this case, the level of transparency is the starting level, ending with 0 (full transparent). Example: RTFFILE = 1, "c:\temp\document.rtf", 0, 0, 6, 8, #FFFF80, 0 Result: Image 55 Image 55 138 RTFTEXT This directive prints a text, using RTF format, in the cards specified by a range. This directive is useful if you want to print a text with multiple size, font, attributes, colors and so on. For expression, you must include them in double curly parentheses {{ … }}. Syntax: RTFTEXT = “range”, “text”, position x, position y, width, height, html color , angle, flags, alpha-channel Parameters: “range”: a set of cards, “text”: the RTF text to be printed, position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the text’s rectangle (in cm), height: height of the text’s rectangle (in cm), html color: background color for text, angle: angle of text rotation, you must specify 0 for no rotation, flags: you can specify one or more flags, chosen between: T H V Transparent background for text Horizontal mirror Vertical mirror alpha-channel: level of transparency of text, from 0 (full transparent) to 100 (full solid). If omitted, the level is set to 100 (full solid). You can also specify an angle for the transparency, with the format level@angle; in this case, the level of transparency is the starting level, ending with 0 (full transparent). Example: RTFTEXT = 1, "{\rtf normal\par{\b bold}\par{\i italic}\par{\ul underline}}", 0, 0, 6, 6, #FFFF80, 0 Result: Image 56 Image 56 139 SAVE This directive saves the full or partial image(s) of card(s) specified by a range in a file(s). You can use expressions like {§} to specify different filenames for different cards in the range. The image can also be loaded in another card with IMAGE directive (see page 106). The formats you can use for the image are BMP, JPG, PNG and GIF, if you didn’t specify an extension for the filename, the default is BMP. If you didn’t specify a size, the default is all the card. Syntax: SAVE = “range”, “filename”, position x, position y, width, height, transparent_color, zipfile, transparent_image Parameters: “range”: a set of cards, “filename”: the name of the file created (.bmp extension), position x: horizontal start of saved area (in cm), position y: vertical start of saved area (in cm), width: width of the saved area (in cm), height: height of the saved area (in cm), transparent_color: for PNG and GIF, if this parameter is specified, the file is save with this color as transparent, for PNG files you can also specify more than one color (for example #0000FF#00FF00 for two colors) and add also a level of transparency, in the format #xxyyyyyy, where xx = transparency level (from 00 = full transparent to FF = full solid) and yy = color, zipfile: if this parameter is specified, the image file is added to this zip file, transparent_image: if this parameter is specified (a PNG image), is used as transparency mask for the saved image. Examples: SAVE = 1-3, "card{§}.bmp", 0, 0, 6, 9 RECTANGLE = 1, 1, 1, 4, 7, #0000FF#FF0000@90 RECTANGLE = 1, 0, 0, 6, 9, #000000, EMPTY, 0.5 SAVE = 1, "temp.bmp", 0, 0, 6, 9 IMAGE = 1, "temp.bmp", 3, 0, 3, 4.5, 0, A Result: Image 57 140 Image 57 SAVEGIFA This directive saves the full deck of cards in an animated GIF file specified in “filename” parameter. Syntax: SAVEGIFA = “filename”, msec Parameters: “filename”: the name of the file to be created (.gif extension) msec: the delay between each frame (the default is 1000 = 1 second) Example: SAVEGIFA = deck.gif Note: there isn’t a “range” parameter because only the final deck can be printed (and then exported in an animated GIF file). If you want a partial deck, use also a RENDER directive. SAVEPDF This directive saves the full deck of cards in a PDF file specified in “filename” parameter. Syntax: SAVEPDF = “filename” Parameters: “filename”: the name of the file to be created (.pdf extension) Example: SAVEPDF = deck.pdf Note: there isn’t a “range” parameter because only the final deck can be printed (and then exported in a PDF file). If you want a partial deck, use also a RENDER directive. SECTION The directives contained between SECTION and ENDSECTION directives are associated with the parameter “name”, and can be activated or deactivated (using the “flag” parameter), this option can be selected on a window, for a faster activation/deactivation for multiple names. In this window, there are three buttons: one for enabling all the sections, one for disabling all the sections, and one (named “Cycle build”) that validates and builds in sequence all the sections (enabling only one at each cycle). Syntax: SECTION = “name”, flag The parameter flag can be set equal to: ON OFF to enable the section to disable the section Example: SECTION = "Border", ON 141 BORDER = RECTANGLE ENDSECTION SELECT The SELECT…ENDSELECT structure can be used to create sections of code that must be executed only if are verified some conditions. In the default mode, a value is evaluated and only the CASE code with the same value is executed; you can also add an operator to be used for the test evaluation. Syntax: SELECT = value … CASE = value1 … CASE = value2 … … CASEELSE … ENDSELECT Parameters: value: a string, number, label or expression that can be evaluated. Example: CARDS = 4 [TEST] = 1|2|3|4 SELECT = [TEST] CASE = 1 RECTANGLE = 1-4, 0, 0, 100%, 100%, #FF0000 CASE = <4 ELLIPSE = 1-4, 0, 0, 100%, 100%, #0000FF CASEELSE RHOMBUS = 1-4, 0, 0, 100%, 100%, #00FF00 ENDSELECT SEQUENCE This directive is used to start a SEQUENCE…ENDSEQUENCE structure, for creating one or more sequences. Syntax: SEQUENCE = label_name Parameters: label_name: the name of the label Each line in this structure is added to the sequence with the name specified as a parameter. Example: SEQUENCE = Title Earth Moon Mars Venus Jupiter 142 ENDSEQUENCE There is an alternative syntax, for creating multiple sequences. Each line in this structure must contains the name of the sequence and a value, separated with a pipe | character. For example, this script creates five sequences of two elements each: SEQUENCE = Title |Earth Image |Earth.jpg Description |Earth is the third planet from the Sun. Radius |6.371 Orbital Period|365 Title |Moon Image |Moon.jpg Description |The Moon is Earth's only natural satellite. Radius |1.737 Orbital Period|26 ENDSEQUENCE That script is equivalent to this: [Title] = Earth|Moon [Image] = Earth.jpg|Moon.jpg [Description] = Earth is the third planet from the Sun.| The Moon is Earth's only natural satellite. [Radius] = 6.371|1.737 [Orbital Period] = 365|26 SET This directive sets a label with a value. Note: since the syntax [label] is replaced in the validations step, if you want to read a value memorized with a SET directive, you must use the {label?n} syntax, where n is the index of the sequence (use 1 if it’s a single value). Syntax: SET = “range”, label_name, label_value Parameters: “range”: a set of cards, label_name: the name of the label to be changed (or added, if not exists) label_value: the value of the label SPECIAL This directive is used to change the special symbols used for some variables. Syntax: SPECIAL = card’s number character, frame’s number character, frame’s name character Parameters: Card’s number character: the character used for the number of the current card (default §). 143 Frame’s number character: the character used for the number of the current frame (default °). Frame’s name character: the character used for the name of the current frame (default µ). Example: SPECIAL = $, ^, ? 144 STAR This directive draws a star in a set of cards. Syntax: STAR = “range”, position x, position y, width, height, tips, angle, factor, html color, html color, thickness Parameters: Image 58 “range”: a set of cards, position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the star (in cm), height: height of the star (in cm), Image 59 tips: number of tips, angle: angle of rotation (in degrees), factor: from 0 (very pointy star) to 100 (polygon), html color: border color of the star, in the same format used for HTML. You can also specify a gradient. Image 60 html color: inner color of the star, in the same format used for HTML, if not specified the inner color is the same of border color. You can also specify “EMPTY” for a hollow star or a gradient. thickness: thickness of the border of the star (in cm), if omitted, the star’s border is 1 pixel wide. Examples: STAR = 1, 1, 1, 4, 7, 3, 0, 20, #00FF00 Result: Image 58 STAR = 1, 1, 1, 4, 7, 5, 0, 50, #FF00FF, EMPTY, 0.1 Result: Image 59 STAR = 1, 1, 1, 4, 7, 6, 90, 80, #FF0000#0000FF@90 Result: Image 60 145 STORE This directive enables/disables the storing of cards to the deck. The default behavior is that the program memorizes the images of the cards, but it can be disabled, useful when you don't want to print them or create a PDF, but need only the images, to be saved with a SAVE directive (see page 140). Syntax: STORE = “range”, flag Parameters: “range”: a range of cards, flag: values accepted are: ON OFF to enable the storing of cards (the default) to disable the storing of cards TABLE This directive open the virtual table (see page 53) at the end of the building process. Syntax: TABLE = number, flags Parameters: number: the number of cards drawn when you double click a deck, flags: you can choose these flags: R L U B O P A C S T F M the drawn card is placed at the right of the deck the drawn card is placed at the left of the deck the drawn card is placed at the top of the deck the drawn card is placed at the bottom of the deck the drawn position is rotated the drawn position is randomized enable the alignment to grid show the canvas as a background image automatic selection of object show the tags bring the selected object to the front move complete stacks of cards TAG This directive assign a label and a numeric value to a card (or a range of cards). This tag is shown in the Virtual Table (see page 53) when a card is put in a specific location of the table (if more than one card is in one location, the values of all the tags with the same name are summed up). Syntax: TAG = “range”, name, value Parameters: “range”: a set of cards, 146 name: the name of the tag, value: the value of the tag (it can be a sequence of values). Examples: TAG = 1-10, card, 1 TAG = 1-20, value, 1|2|3|4|5 147 TEXT This directive writes a text on a range of cards. The font used is specified using FONT (see page 88) or FONTRANGE (see page 89) command. Syntax: TEXT = “range”, “text”, position x, position y, width, height, horizontal alignment, vertical alignment, angle, alphachannel, outline width, circle offset, circle angle Parameters: “range”: a set of cards, “text”: the text to be printed, position x: horizontal position (in cm), position y: vertical position (in cm), width: width of the rectangle used to draw the text (in cm), you can specify a negative number for a text mirrored horizontally, height: height of the rectangle used to draw the text (in cm), you can specify a negative number for a text mirrored vertically, horizontal alignment: the text’s horizontal alignment in the rectangle, values accepted are: left center right left aligned centered right aligned The horizontal alignment is optional, if omitted is equal to center. vertical alignment: the text’s vertical alignment in the rectangle, values accepted are: top center bottom wordwrap wwtop wwcenter wwbottom charwrap top aligned centered bottom aligned the text is top aligned and word-wrapped in the rectangle the text is top aligned and word-wrapped in the rectangle the text is center aligned and word-wrapped in the rectangle the text is bottom aligned and word-wrapped in the rectangle the text is centered, spaced and word-wrapped (every character) in a pattern The vertical alignment is optional, if omitted is equal to center. angle: angle of text rotation, if omitted is 0 (no rotation), alpha-channel: level of transparency of text, from 0 (full transparent) to 100 (full solid). If omitted, the level is set to 100 (full solid). You can also specify an angle for the transparency, with the format level@angle; in this case, the level of transparency is the starting level, ending with 0 (full transparent), outline width: if you specify a number, the font is drawn as outlined, with this number as line's width. Circle offset: if you specify a number, this is the offset for a circular text (from 0 to 100), the default is 25. Circle angle: if you specify a number, this is the angle of each letter in a circular text, the default is 0. 148 If you want a more flexible command for text, you can use RTFTEXT (or RTFFILE). With these commands, you can use multiple fonts, size, colors, size and more (justified alignment, tab settings), anything you can write with an RTF editor. Tip: you can choose a single specific symbol or character from a visual form, clicking on the button “Insert” and choosing the menu voice “Symbol”. Examples: RECTANGLE = 1, 1, 1, 4, 7, #0000FF FONT = Arial, 16, T, #FFFFFF TEXT = 1, "center-top", 1, 1, 4, 2, center, top TEXT = 1, "center-center", 1, 3, 4, 3, center, center TEXT = 1, "center-bottom", 1, 6, 4, 2, center, bottom Result: Image 61 RECTANGLE = 1, 1, 1, 4, 7, #0000FF FONT = Arial, 16, T, #FFFFFF TEXT = 1, "left-top", 1, 1, 4, 2, left, top TEXT = 1, "left-center", 1, 3, 4, 3, left, center TEXT = 1, "left-bottom", 1, 6, 4, 2, left, bottom Image 61 Image 62 Image 63 Image 64 Image 65 Image 66 Result: Image 62 RECTANGLE = 1, 1, 1, 4, 7, #0000FF FONT = Arial, 16, T, #FFFFFF TEXT = 1, "right-top", 1, 1, 4, 2, right, top TEXT = 1, "right-center", 1, 3, 4, 3, right, center TEXT = 1, "right-bottom", 1, 6, 4, 2, right, bottom Result: Image 63 [test] = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean fermentum ipsum eu sapien." RECTANGLE = 1, 1, 1, 4, 7, #0000FF FONT = Arial, 12, T, #FFFFFF TEXT = 1, [test], 1, 1, 4, 7, left, wwtop Result: Image 64 [test] = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean fermentum ipsum eu sapien." RECTANGLE = 1, 1, 1, 4, 7, #0000FF FONT = Arial, 12, T, #FFFFFF TEXT = 1, [test], 1, 1, 4, 7, center, wwcenter Result: Image 65 [test] = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. fermentum ipsum eu sapien." 149 Aenean RECTANGLE = 1, 1, 1, 4, 7, #0000FF FONT = Arial, 12, T, #FFFFFF TEXT = 1, [test], 1, 1, 4, 7, right, wwbottom Result: Image 66 TEXTFONT This directive writes a text on a range of cards, it uses the parameters both from TEXT (see page 148) and FONT (see page 88) directives. Syntax: TEXTFONT = “range”, “text”, position x, position y, width, height, horizontal alignment, vertical alignment, angle, alpha-channel, “font name”, size, style, html color font, html color background, outline width, circle offset, circle angle TEXTLIMIT This directive fills four variables with the coordinates of latest drawn text’s boundaries (in cm), from TEXT command (see page 148). You can use these variables in other commands. Syntax: TEXTLIMIT = “range” The four variables are: TL TR TT TB (left) (right) (top) (bottom) Parameters: “range”: a set of cards Example: FONT = Arial, 16, , #000000 TEXT = 1, "This is a test", 0, 0, 6, 2, center, center TEXTLIMIT = 1 LINE = 1, TL, 0, TL, 2, #000000, 0.05 LINE = 1, TR, 0, TR, 2, #000000, 0.05 LINE = 1, 0, TT, 6, TT, #000000, 0.05 LINE = 1, 0, TB, 6, TB, #000000, 0.05 Result: Image 67 150 Image 67 THREADS When the deck is built, if you specify a number different from one, nanDECK executes n copies of itself that render a section of the current deck. The main program waits until all the sections are complete, and loads them in the current deck. With a multithreaded CPU, the result is a shorter time for building a deck. Syntax: THREADS = number Parameter: number: the number of threads that must be used. Example: THREADS = 4 Note: this method works if the cards are made independently each other, it can't be used if in the script there are keywords like COPYCARD or DUPLEX. TOKEN This directive prepares a token to be used in the “Virtual table” option (see page 53). A token in the Virtual table can be a simple counter with a text that can be moved or stacked, or a dice that can be rolled to obtain random values. Syntax: TOKEN = “text”, width, height, html font color, html background color, number, pos_x, pos_y Parameters: “text”: the text visualized in the token, can be an empty string or it can be used an expression. If you use an expression with a “d” for a random value, it can be rolled like a die with a double-click of the mouse on the token itself, width: width of the token (in pixels), you can also specify a % of the screen width, height: height of the token (in pixels), you can also specify a % of the screen height, html font color: font color in the same format used for HTML, html background color: background color in the same format used for HTML, number: the number of tokens (one, if not specified), if more than one the tokens are stacked together on the table, pos_x: horizontal position for the token (in pixels), you can also specify a % of the screen’s width, pos_y: vertical position for the token (in pixels), you can also specify a % of the screen’s height. Examples: TOKEN = "{1d6}", 50, 50, #FFFFFF, #0000FF TOKEN = "$", 100, 50, #FFFFFF, #00FF00, 10 151 TRACK This directive draws a racetrack section from a point (x1, y1) to another point (x2, y2). Syntax: TRACK = “range”, x1, y1, x2, y2, track width, html color, num. lanes, num. spaces, flags, thickness, left factor, right factor, pattern Parameters: “range”: a set of cards, x1, y1: coordinates of first point (in cm), x2, y2: coordinates of second point (in cm), track width: width of the track (in cm), html color: color of the track, in the same format used for HTML. You can also specify a gradient, num. lanes: the number of the lanes that compose the track, the minimum is one. num. spaces: the number of spaces long the track, the minimum is one. flags: you can choose these flags: S E H L C R F the track section is closed at the start the track section is closed at the end even lanes are drawn forward one half space the track is linked, using a line, to the last track drawn on the same card the track is linked, using a curve, to the last track drawn on the same card don't draw external right link don't draw external left link thickness: thickness of the track’s line (in cm), if omitted, the line is 1 pixel wide, left factor: for curved link, this parameter set the width of the curve, for the left side of the track, left factor: for curved link, this parameter set the width of the curve, for the right side of the track, pattern: a pattern for the track’s line, this pattern can be composed of: O D S dot dash space These letters can be repeated, for example “OSDSOS” is a valid pattern. Example: TRACK = 1, 1, 8, 5, 1, 1, #000000, 3, 4, SE, 0.1 Result: Image 68 152 Image 68 TRACKRECT This directive draws a racetrack section from a vertex of a rectangle to the opposite vertex. Syntax: TRACK = “range”, pos_x, pos_y, width, height, track width, html color, num. lanes, num. spaces, flags, thickness, left factor, right factor, pattern Parameters: “range”: a set of cards, pos_x: horizontal position (in cm), pos_y: vertical position (in cm), width: width of the rectangle (in cm), height: height of the rectangle (in cm), track width: width of the track (in cm), html color: color of the track, in the same format used for HTML. You can also specify a gradient, num. lanes: the number of the lanes that compose the track, the minimum is one. num. spaces: the number of spaces long the track, the minimum is one. flags: you can choose these flags: S E H L C R F the track section is closed at the start the track section is closed at the end even lanes are drawn forward one half space the track is linked, using a line, to the last track drawn on the same card the track is linked, using a curve, to the last track drawn on the same card don't draw external right link don't draw external left link thickness: thickness of the track’s line (in cm), if omitted, the line is 1 pixel wide, left factor: for curved link, this parameter set the width of the curve, for the left side of the track, left factor: for curved link, this parameter set the width of the curve, for the right side of the track, pattern: a pattern for the track’s line, this pattern can be composed of: O D S dot dash space These letters can be repeated, for example “OSDSOS” is a valid pattern. 153 TRIANGLE This directive draws a triangle in a set of cards. Syntax: TRIANGLE = “range”, x1, y1, x2, y2, x3, y3, html color, html color, thickness Parameters: Image 69 “range”: a set of cards, x1, y1: coordinates of 1st point (in cm), x2, y2: coordinates of 2nd point (in cm), x3, y3: coordinates of 3rd point (in cm), html color: border color of the triangle, in the same format used for HTML. You can also specify a gradient. Image 70 html color: inner color of the triangle, in the same format used for HTML, if not specified the inner color is the same of border color. You can also specify “EMPTY” for a hollow triangle or a gradient. thickness: thickness of the border of the triangle (in cm), if omitted, the triangle’s border is 1 pixel wide. Examples: TRIANGLE = 1, 1, 8, 3, 1, 5, 8, #00FF00 Result: Image 69 TRIANGLE = 1, 1, 8, 3, 1, 5, 8, #FF00FF, EMPTY, 0.1 Result: Image 70 TRIANGLE = 1, 1, 8, 3, 1, 5, 8, #FF0000#0000FF@90 Result: Image 71 154 Image 71 UNIT This directive chooses a unit to be used with all the numeric size in the script. For a correct use, it’s better to include it in the first line of the script. The default size unit, if UNIT is not used, is the “cm”. Syntax: UNIT = unit type Parameters: unit type: the type of unit can be chosen between: CM MM INCH Example: UNIT = inch Tip: instead of using absolute values, you can always specify a size (in every directive) as a fraction of the whole card, using number followed by the percentage “%”. VECTOR This directive draws a SVG file in a set of cards. Syntax: VECTOR = “range”, “image file”, pos_x, pos_y, width, height, angle, alpha-channel, flags Parameters: “range”: a set of cards “image file”: an existent .svg image file (eventually with a path) pos_x: horizontal position (in cm) pos_y: vertical position (in cm) width: width of the image (in cm) height: height of the image (in cm) angle: angle of image rotation, can be 0 for no rotation alpha-channel: level of transparency of image, from 0 (full transparent) to 100 (full solid). If omitted, the level is set to 100 (full solid) flags: you can choose these flags: I E use the internal engine (default) use Inkscape for image’s rendering (you must specify the path in the Config window) Example: IMAGE=1-10, test.svg, 0, 0, 4, 4 155 Note: with the internal engine, the SVG file specifications aren’t fully implemented, some issues exist (for example, in gradient fill). VISUAL This directive is used to open a VISUAL…ENDVISUAL structure (see “Visual editor”, page 55). Syntax: VISUAL = flags, horizontal steps, vertical steps Parameters: flags: you can choose these flags: H V G P S show the horizontal ruler show the vertical ruler show the grid snap to the grid when you move an object snap to the grid when you resize an object horizontal steps: number of horizontal steps for the grid, vertical steps: number of vertical steps for the grid. ZOOM This directive changes the size of cards (all elements, FONT included). Useful to change the final result without having to modify all the data. If omitted, is considered to be 100 (and there is no change in size). You can specify a 2 nd parameter for vertical zoom, if it’s different from horizontal one. Syntax: ZOOM = horizontal zoom, vertical zoom Examples: ;half size ZOOM = 50 ;double size ZOOM = 200 156 Code examples Wargame counters cardsize=2,2 dpi=600 linkmulti=number link=data.txt [back_ger]=#C0C0C0 [front_ger]=#000000 [out_ger]=#808080 [back_fre]=#8ADDF4 [front_fre]=#000000 [out_fre]=#808080 macro=outline,(range1),(text1),(frame),(font1),(size1),(col1),(col2),(col3) font=(font1),(size1),,(col3),(col2),0.01,0.01 text=(range1),(text1),(frame) font=(font1),(size1),T,(col1),(col2) text=(range1),(text1),(frame) end [all]=1-{(number)} <cnt_all>=0,0,2,2 <val_lft>=0.25,1.25,0.5,0.75 <val_cnt>=0.75,1.25,0.5,0.75 <val_rgt>=1.25,1.25,0.5,0.75 <val_id>=0.25,0,1.5,0.25 <img_cnt>=0.45,0.3,1.1,0.9 <img_cnt2>=0.6,0.5,0.8,0.5 rectangle=[all],0,0,2,2,[back_[nation]] outline=[all],[combat],<val_lft>,Arial,16,[front_[nation]],[back_[nation]],[out_[nation]] outline=[all],[movement],<val_rgt>,Arial,16,[front_[nation]],[back_[nation]],[out_[nation]] if=[command]<>0 outline=[all],[command],<val_cnt>,Arial,16,[front_[nation]],[back_[nation]],[out_[nation]] endif outline=[all],[id],<val_id>,Arial,7,[front_[nation]],[back_[nation]],[out_[nation]] if=[type]=inf line=[all],<img_cnt,PTL>,<img_cnt,PBR>,[front_[nation]],0.04 line=[all],<img_cnt,PBL>,<img_cnt,PTR>,[front_[nation]],0.04 line=[all],<img_cnt,PTL>,<img_cnt,PBR>,[out_[nation]],0.02 line=[all],<img_cnt,PBL>,<img_cnt,PTR>,[out_[nation]],0.02 endif if=[type]=cav line=[all],<img_cnt,PBL>,<img_cnt,PTR>,[front_[nation]],0.04 line=[all],<img_cnt,PBL>,<img_cnt,PTR>,[out_[nation]],0.02 endif if=[type]=arm ellipse=[all],<img_cnt2>,[front_[nation]],EMPTY,0.04 ellipse=[all],<img_cnt2>,[out_[nation]],EMPTY,0.02 endif if=[type]=hq outline=[all],HQ,<img_cnt>,Arial,16,[front_[nation]],[back_[nation]],[out_[nation]] endif rectangle=[all],<img_cnt>,[front_[nation]],"empty",0.05 rectangle=[all],<img_cnt>,[out_[nation]],"empty",0.02 Data file (data.txt): nation,type,combat,movement,command,id,number fre,inf,3,3,0,XXX,2 fre,cav,2,5,0,XX,2 fre,arm,4,4,0,XXX,2 fre,arm,5,4,0,XXX,2 fre,hq,1,4,3,"De Gaulle",1 ger,inf,3,3,0,XXX,2 ger,inf,3,3,0,XXXX,2 ger,arm,6,5,0,XXX,2 ger,arm,5,4,0,XXX,2 ger,hq,1,5,3,Rommel,1 157 Dice results cardsize=18,3 border=rectangle zoom=50 [all]=1-36 <d4>=0,0,3,3 <d6>=3,0,3,3 <d8>=6,0,3,3 <d10>=9,0,3,3 <d12>=12,0,3,3 <d20>=15,0,3,3 [col]=#000000 font=Arial,32,T,[col] polygon=[all],<d4>,3,0,[col],EMPTY,0.1 text=[all],"{1d4}",<d4> polygon=[all],<d6>,4,45,[col],EMPTY,0.1 text=[all],"{1d6}",<d6> polygon=[all],<d8>,4,0,[col],EMPTY,0.1 text=[all],"{1d8}",<d8> line=[all],9,1,10.5,0,[col],0.1 line=[all],10.5,0,12,1,[col],0.1 line=[all],12,1,10.5,3,[col],0.1 line=[all],10.5,3,9,1,[col],0.1 text=[all],"{1d10}",<d10> polygon=[all],<d12>,5,0,[col],EMPTY,0.1 text=[all],"{1d12}",<d12> polygon=[all],<d20>,3,90,[col],EMPTY,0.1 text=[all],"{1d20}",<d20> 158 Score track unit=inch canvassize=15,15 [side_a]=framebox(0,0,14,1,1,1,C) [side_b]=framebox(14,0,1,14,1,1,C) [side_c]=framebox(1,14,14,1,1,1,C) [side_d]=framebox(0,1,1,14,1,1,C) rectangle=0,<side*>,#000000,empty font=arial,16,T,#000000 text=0,"{°-1}",<side_a*> text=0,"{13+°}",<side_b*>,center,center,90 text=0,"{26+16-°}",<side_c*>,center,center,180 text=0,"{40+16-°}",<side_d*>,center,center,270 save=0,"board.png"0,0,15,15 159 Boggle dice N[a]=01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16 [range]=1-{(a)} [d01]=LRYTTE [d02]=VTHRWE [d03]=EGHWNE [d04]=SEOTIS [d05]=ANAEEG [d06]=IDSYTT [d07]=OATTOW [d08]=MTOICU [d09]=AFPKFS [d10]=XLDERI [d11]=HCPOAS [d12]=ENSIEU [d13]=YLDEVR [d14]=ZNRNHL [d15]=NMIQHU [d16]=OBBAOJ CARDSIZE = 4.5, 4.5 FONT = Arial, 96, , #000000 TEXT = [range], [[d[a]]:d6,1], 0, 0, 100%, 100% RECTANGLE = [range], 0, 0, 100%, 100%, #0000FF, EMPTY, 10% 160 Catan map canvassize=35,35 [sea]=framehex(0,0,35,35,3,C) [map]=framedisk(sea43,sea41) 'sea polygon=0,<sea*>,6,90,#000000,#0000FF,0.1 'field polygon=0,<4~!map*>,6,90,#000000,#CEC90B,0.1 'forest polygon=0,<4~!map*>,6,90,#000000,#008000,0.1 'pasture polygon=0,<4~!map*>,6,90,#000000,#80FF00,0.1 'mountain polygon=0,<3~!map*>,6,90,#000000,#C0C0C0,0.1 'hill polygon=0,<3~!map*>,6,90,#000000,#800000,0.1 'desert polygon=0,<~!map*>,6,90,#000000,#FFFF80,0.1 save=0,"catan.jpg",0,0,35,35 161 Clock cardsize=10,10 [clock]=frameclock(1,1,8,8,2,2,12) font=Arial, 32, T, #000000 text=1,"{°}",<clock*>, center, center, °*360/12 ;minutes line=1,5,5,<clock2,PCC>, #0000FF, 0.1 ;hours [hour]=frameclock(2,2,6,6,1,1,12) line=1,5,5,<hour4,PCC>, #FF0000, 0.1 162 Hex board page=21.59,27.94,portrait,hv cardsize=16,24 border=none [base]=framehex(0,0,16,24,0.85,C) [hex01]=frameline(base0101,base0111) [hex02]=frameline(base0201,base0211) [hex03]=frameline(base0302,base0312) [hex04]=frameline(base0402,base0412) [hex05]=frameline(base0503,base0513) [hex06]=frameline(base0603,base0613) [hex07]=frameline(base0704,base0714) [hex08]=frameline(base0804,base0814) [hex09]=frameline(base0905,base0915) [hex10]=frameline(base1005,base1015) [hex11]=frameline(base1106,base1116) polygon=1,<hex*>,6,90,#000000,EMPTY,0.1 163 Triangle map canvassize=21,27 [h]=framehex(0,0,21,27,1,C) star=0,<h*>,6,90,1,#000000,EMPTY,0.05 hexgrid=0,0,0,21,27,1,,#000000,EMPTY,0.05 save=0,"triangle.png",0,0,21,27 164 Chess board With font “Chess Cases”. Link: http://www.enpassant.dk/chess/fonteng.htm#CASES canvassize=18,18 [ch]=framebox(1,1,16,16,2,2,E) {[ch_white]=framelist(cha1,chc1,che1,chg1,chb2,chd2,chf2,chh2,cha3,chc3,che3,chg3,chb4,chd4,chf4,chh4, cha5,chc5,che5,chg5,chb6,chd6,chf6,chh6,cha7,chc7,che7,chg7,chb8,chd8,chf8,chh8)} {[ch_black]=framelist(chb1,chd1,chf1,chh1,cha2,chc2,che2,chg2,chb3,chd3,chf3,chh3,cha4,chc4,che4,chg4, chb5,chd5,chf5,chh5,cha6,chc6,che6,chg6,chb7,chd7,chf7,chh7,cha8,chc8,che8,chg8)} rectangle=0,<ch_white>,#EEEEEE rectangle=0,<ch_black>,#BBBBBB [tt]=framebox(1,0,16,1,2,1,N) [tb]=framebox(1,17,16,1,2,1,N) [t1]=framelist(tt1,tb1) [t2]=framelist(tt2,tb2) [t3]=framelist(tt3,tb3) [t4]=framelist(tt4,tb4) [t5]=framelist(tt5,tb5) [t6]=framelist(tt6,tb6) [t7]=framelist(tt7,tb7) [t8]=framelist(tt8,tb8) [sl]=framebox(0,1,1,16,1,2,N) [sr]=framebox(17,1,1,16,1,2,N) [s1]=framelist(sl1,sr1) [s2]=framelist(sl2,sr2) [s3]=framelist(sl3,sr3) [s4]=framelist(sl4,sr4) [s5]=framelist(sl5,sr5) [s6]=framelist(sl6,sr6) [s7]=framelist(sl7,sr7) [s8]=framelist(sl8,sr8) font=arial,16,,#000000 text=0,a,<t1> text=0,b,<t2> text=0,c,<t3> text=0,d,<t4> text=0,e,<t5> text=0,f,<t6> text=0,g,<t7> text=0,h,<t8> text=0,8,<s1> text=0,7,<s2> text=0,6,<s3> text=0,5,<s4> text=0,4,<s5> text=0,3,<s6> text=0,2,<s7> text=0,1,<s8> font="chess cases",48,T,#000000 [wpa]=p [wkn]=n [wbi]=b [wro]=r [wqu]=q [wki]=k [bpa]=o [bkn]=m [bbi]=v [bro]=t [bqu]=w [bki]=l text=0,[wpa],<ch?7> text=0,[wro],<cha8> text=0,[wkn],<chb8> text=0,[wbi],<chc8> text=0,[wqu],<chd8> text=0,[wki],<che8> text=0,[wbi],<chf8> text=0,[wkn],<chg8> text=0,[wro],<chh8> text=0,[bpa],<ch?2> text=0,[bro],<cha1> text=0,[bkn],<chb1> text=0,[bbi],<chc1> text=0,[bqu],<chd1> text=0,[bki],<che1> text=0,[bbi],<chf1> text=0,[bkn],<chg1> text=0,[bro],<chh1> save=0,chessboard2.png,0,0,18,18 165 Trivia cards linkmulti=num link="q&a.txt" [all]="1-{(id)}" [card_id]=join("Card #",[id]) [background]=#D0D0D0 [ink]=#000000 [col_q]=#FFFF80 [col_a]=#80FF80 rectangle=[all],0,0,100%,100%,[background] font=arial,16,,[ink],[background] text=[all],[card_id],0,0,100%,20%,center,center roundrect=[all],5%,20%,90%,35%,#000000,[col_q],0.1 font=arial,12,,[ink],[col_q] text=[all],[question],10%,22%,80%,31%,left,wordwrap roundrect=[all],5%,60%,90%,35%,#000000,[col_a],0.1 font=arial,12,,[ink],[col_a] text=[all],[answer],10%,62%,80%,31%,left,wordwrap Data file (q&a.txt): id,num,question,answer 1,1,"This is question #1","This is answer #1" 2,1,"This is question #2","This is answer #2" 3,1,"This is question #3","This is answer #3" 4,1,"This is question #4","This is answer #4" 5,1,"This is question #5","This is answer #5" 6,1,"This is question #6","This is answer #6" 7,1,"This is question #7","This is answer #7" 8,1,"This is question #8","This is answer #8" 9,1,"This is question #9","This is answer #9" 10,1,"This is question #10","This is answer #10" 166 Hex racetrack canvassize=42,44 [hexa]=framehex(0,0,42,44,1,C) [hexb]=framedisk(hexa1412,hexa0112) [hexc]=framedisk(hexa1412,hexa0912) [hexd]=framesub(hexb*,hexc*) polygon=0,<hexd*>,6,90,#000000,EMPTY,0.1 save=0,"track.png",0,0,42,44 167 Tuckbox [img1]=none [img2]=none INPUTTEXT="wid","Width (cm)","6" INPUTTEXT="hei","Height (cm)","9" INPUTTEXT="dep","Depth (cm)","3" INPUTCHOICE="extra","Add extra lines","Yes","Yes|No" INPUTTEXT="img1","Box image (front)","",G INPUTTEXT="img2","Box image (rear)","",G [fla]=[dep]/2 [ide]=[fla]/2 [col1]=#000000 [col2]=EMPTY [thi]=0.1 'Uncomment the following line for A4 paper PAGE=21,29.7,PORTRAIT,HV 'Uncomment the following line for Letter paper 'PAGE=21.59,27.94,PORTRAIT,HV BORDER=NONE CARDSIZE=[fla]+[dep]+[hei]+[dep]+[fla],[dep]+[wid]+[dep]+[wid]+[fla] IF=[img1]=none ELSE IMAGE=1,[img1],[fla]+[dep],[dep],[hei],[wid],90,P ENDIF IF=[img2]=none ELSE IMAGE=1,[img2],[fla]+[dep],[dep]+[wid]+[dep],[hei],[wid],90,P ENDIF RECTANGLE=1,[fla]+[dep] ,0 ,[hei],[dep],[col1],[col2],[thi] RECTANGLE=1,[fla] ,[dep] ,[dep],[wid],[col1],[col2],[thi] RECTANGLE=1,[fla]+[dep] ,[dep] ,[hei],[wid],[col1],[col2],[thi] RECTANGLE=1,[fla]+[dep]+[hei],[dep] ,[dep],[wid],[col1],[col2],[thi] RECTANGLE=1,[fla]+[dep] ,[dep]+[wid] ,[hei],[dep],[col1],[col2],[thi] RECTANGLE=1,[fla]+[dep] ,[dep]+[wid]+[dep],[hei],[wid],[col1],[col2],[thi] LINE=1,[fla]+[dep] ,0 ,[fla]+[dep]-[fla],[ide] ,[col1],[thi] LINE=1,[fla]+[dep]-[fla],[ide] ,[fla]+[dep]-[fla],[dep]-[ide],[col1],[thi] LINE=1,[fla]+[dep]-[fla],[dep]-[ide],[fla]+[dep] ,[dep] ,[col1],[thi] LINE=1,[fla]+[dep]+[hei] ,0 ,[fla]+[dep]+[hei]+[fla],[ide] ,[col1],[thi] LINE=1,[fla]+[dep]+[hei]+[fla],[ide] ,[fla]+[dep]+[hei]+[fla],[dep]-[ide],[col1],[thi] LINE=1,[fla]+[dep]+[hei]+[fla],[dep]-[ide],[fla]+[dep]+[hei] ,[dep] ,[col1],[thi] LINE=1,[fla] ,[dep] ,[fla]-[fla],[dep]+[ide] ,[col1],[thi] LINE=1,[fla]-[fla],[dep]+[ide] ,[fla]-[fla],[dep]+[wid]-[ide],[col1],[thi] LINE=1,[fla]-[fla],[dep]+[wid]-[ide],[fla] ,[dep]+[wid] ,[col1],[thi] LINE=1,[fla]+[dep]+[hei]+[dep] ,[dep] ,[fla]+[dep]+[hei]+[dep]+[fla],[dep]+[ide] ,[col1],[thi] LINE=1,[fla]+[dep]+[hei]+[dep]+[fla],[dep]+[ide] ,[fla]+[dep]+[hei]+[dep]+[fla],[dep]+[wid]-[ide],[col1],[thi] LINE=1,[fla]+[dep]+[hei]+[dep]+[fla],[dep]+[wid]-[ide],[fla]+[dep]+[hei]+[dep] ,[dep]+[wid] ,[col1],[thi] LINE=1,[fla]+[dep] ,[dep]+[wid] ,[fla]+[dep]-[fla],[dep]+[wid]+[ide] ,[col1],[thi] LINE=1,[fla]+[dep]-[fla],[dep]+[wid]+[ide] ,[fla]+[dep]-[fla],[dep]+[wid]+[dep]-[ide],[col1],[thi] LINE=1,[fla]+[dep]-[fla],[dep]+[wid]+[dep]-[ide],[fla]+[dep] ,[dep]+[wid]+[dep] ,[col1],[thi] LINE=1,[fla]+[dep]+[hei] ,[dep]+[wid] ,[fla]+[dep]+[hei]+[fla],[dep]+[wid]+[ide],[col1],[thi] LINE=1,[fla]+[dep]+[hei]+[fla],[dep]+[wid]+[ide] ,[fla]+[dep]+[hei]+[fla],[dep]+[wid]+[dep]-[ide],[col1],[thi] LINE=1,[fla]+[dep]+[hei]+[fla],[dep]+[wid]+[dep]-[ide],[fla]+[dep]+[hei],[dep]+[wid]+[dep] ,[col1],[thi] LINE=1,[fla]+[dep] ,[dep]+[wid]+[dep]+[wid] ,[fla]+[dep]+[ide] ,[dep]+[wid]+[dep]+[wid]+[fla],[col1],[thi] LINE=1,[fla]+[dep]+[ide],[dep]+[wid]+[dep]+[wid]+[fla],[fla]+[dep]+[hei]-[ide], [dep]+[wid]+[dep]+[wid]+[fla],[col1],[thi] LINE=1,[fla]+[dep]+[hei]-[ide],[dep]+[wid]+[dep]+[wid]+[fla],[fla]+[dep]+[hei], [dep]+[wid]+[dep]+[wid],[col1],[thi] IF=[extra]=Yes LINE=1,[fla]+[dep]+[hei]-[fla],[dep],[fla]+[dep]+[hei]-[fla],[dep]+[wid],[col1],[thi],DSS { BEZIER=1, [fla]+[dep]+[hei],[dep]+[wid]+[dep]+[wid]/2-[ide], [fla]+[dep]+[hei]-[ide],[dep]+[wid]+[dep]+[wid]/2-[ide], [fla]+[dep]+[hei]-[ide],[dep]+[wid]+[dep]+[wid]/2+[ide], [fla]+[dep]+[hei],[dep]+[wid]+[dep]+[wid]/2+[ide], [col1],[thi]} ENDIF 168 Number wheel [size]=3.5 [numbers]=45 unit=inch cardsize=[size],[size] [num]=frameclock(0.1,0.1,[size]-0.2,[size]-0.2,0.3,0.3,[numbers]) [green]=framelist(num1,num2,num3,num4,num5,num6,num7,num8,num9,num10,num11,num12,num13,num14,num15) [yellow]=framelist(num16,num17,num18,num19,num20,num21,num22,num23,num24,num25,num26,num27,num28,num29,num30) [red]=framelist(num31,num32,num33,num34,num35,num36,num37,num38,num39,num40,num41,num42,num43,num44,num45) font=arial,12,T,#000000 ellipse=1,<green>,#00FF00 ellipse=1,<yellow>,#FFFF00 ellipse=1,<red>,#FF0000 text=1,{°-1},<num*>,center,center,°*360/[numbers]-90 ellipse=1,0,0,100%,100%,#000000,empty,0.01 ellipse=1,48%,48%,4%,4%,#000000,empty,0.01 save=1,"wheel_col.png",0,0,100%,100% 169 Tripples tiles cardsize=2,2 'draw and save an image (an arrow) line=0,1 ,0.2,1 ,1 ,#000000,0.15 line=0,1 ,0.2,1.2,0.4,#0000FF,0.15 line=0,1.2,0.4,0.8,0.4,#0000FF,0.15 line=0,0.8,0.4,1 ,0.2,#0000FF,0.15 save=0,"arrow.bmp",0,0,2,2 'create all the permutations (256) of two elements (0 and 1) taken eight times pr[perm]8=0|1 'takes only the tiles with three '1' [tiles]=filter(+[perm],3) [all]=1-{(tiles)} 'draws a dot ellipse=[all],0.95,0.05,0.1,0.1,#000000 'draws the eight arrows if=[tiles:8,1]=1 image=[all],"arrow.bmp",0,0,2,2,0,T endif if=[tiles:7,1]=1 image=[all],"arrow.bmp",-0.5,-0.5,3,3,45,T endif if=[tiles:6,1]=1 image=[all],"arrow.bmp",0,0,2,2,90,T endif if=[tiles:5,1]=1 image=[all],"arrow.bmp",-0.5,-0.5,3,3,135,T endif if=[tiles:4,1]=1 image=[all],"arrow.bmp",0,0,2,2,180,T endif if=[tiles:3,1]=1 image=[all],"arrow.bmp",-0.5,-0.5,3,3,225,T endif if=[tiles:2,1]=1 image=[all],"arrow.bmp",0,0,2,2,270,T endif if=[tiles:1,1]=1 image=[all],"arrow.bmp",-0.5,-0.5,3,3,315,T endif 170 Path tiles oversample=2 macro=tile,(range),(key),(char),(color),(width) beziers=(range) if=[(key):1,1]=(char) beziers=(range),1,0,1,1,(color),(width) endif if=[(key):2,1]=(char) beziers=(range),2,0,2,1,(color),(width) endif if=[(key):3,1]=(char) beziers=(range),3,1,2,1,(color),(width) endif if=[(key):4,1]=(char) beziers=(range),3,2,2,2,(color),(width) endif if=[(key):5,1]=(char) beziers=(range),2,3,2,2,(color),(width) endif if=[(key):6,1]=(char) beziers=(range),1,3,1,2,(color),(width) endif if=[(key):7,1]=(char) beziers=(range),0,2,1,2,(color),(width) endif if=[(key):8,1]=(char) beziers=(range),0,1,1,1,(color),(width) endif end cardsize=3,3 pxxs[list]8=a|a|b|b|c|c|d|d [range]=1-{(list)} tile=[range],[list],a,#000000,0.2 tile=[range],[list],a,#FFFFFF,0.1 tile=[range],[list],b,#000000,0.2 tile=[range],[list],b,#FFFFFF,0.1 tile=[range],[list],c,#000000,0.2 tile=[range],[list],c,#FFFFFF,0.1 tile=[range],[list],d,#000000,0.2 tile=[range],[list],d,#FFFFFF,0.1 rectangle=[range],0,0,3,3,#000000,EMPTY,0.1 171 Combinations ellipse=0,0,0,6,6,#FF0000#FFFFFF@360 save=0,a.png,0,0,6,6 ellipse=0,0,0,6,6,#00FF00#FFFFFF@360 save=0,b.png,0,0,6,6 ellipse=0,0,0,6,6,#0000FF#FFFFFF@360 save=0,c.png,0,0,6,6 ellipse=0,0,0,6,6,#FF00FF#FFFFFF@360 save=0,d.png,0,0,6,6 ellipse=0,0,0,6,6,#FFFF00#FFFFFF@360 save=0,e.png,0,0,6,6 ellipse=0,0,0,6,6,#00FFFF#FFFFFF@360 save=0,f.png,0,0,6,6 ellipse=0,0,0,6,6,#000000#FFFFFF@360 save=0,g.png,0,0,6,6 c[comb]3=a|b|c|d|e|f|g [all]=1-{(comb)} icon=[all],a,a.png icon=[all],b,b.png icon=[all],c,c.png icon=[all],d,d.png icon=[all],e,e.png icon=[all],f,f.png icon=[all],g,g.png icons=[all],[comb],1.5,1.5,3,6,3,3,0,P 172 Standard 52-deck of cards sequence=number A 2 3 4 5 6 7 8 9 10 endsequence sequence=face J Q K endsequence sequence= suit |\169\ suit_fnt|Symbol suit_col|#FF0000 suit |\168\ suit_fnt|Symbol suit_col|#FF0000 suit |\167\ suit_fnt|Symbol suit_col|#000000 suit |\170\ suit_fnt|Symbol suit_col|#000000 endsequence <corner1_a>=0,0,15%,10% <corner1_b>=0,10%,15%,10% <corner1>=0,0,15%,20% <corner2>=85%,0,15%,20% <corner3>=0,80%,15%,20% <corner4>=85%,80%,15%,20% <core>=15%,20%,70%,60% cards={(suit)*((number)+(face))+1} for=a,1,{(suit)} for=b,1,{(number)} font=Arial,24,,{suit_col?a} text={b+((a)-1)*((number)+(face))},{number?b},<corner1_a> font={suit_fnt?a},32,,{suit_col?a} text={b+((a)-1)*((number)+(face))},{suit?a},<corner1_b> copy={b+((a)-1)*((number)+(face))},<corner1>,<corner2>,0 copy={b+((a)-1)*((number)+(face))},<corner1>,<corner3>,180 copy={b+((a)-1)*((number)+(face))},<corner1>,<corner4>,180 text={b+((a)-1)*((number)+(face))},{{suit?a}Xb},<core>,center,charwrap next next for=a,1,{(suit)} for=b,1,{(face)} font=Arial,24,,{suit_col?a} text={b+((a)-1)*((number)+(face))+(number)},{face?b},<corner1_a> font={suit_fnt?a},32,,{suit_col?a} text={b+((a)-1)*((number)+(face))+(number)},{suit?a},<corner1_b> copy={b+((a)-1)*((number)+(face))+(number)},<corner1>,<corner2>,0 copy={b+((a)-1)*((number)+(face))+(number)},<corner1>,<corner3>,180 copy={b+((a)-1)*((number)+(face))+(number)},<corner1>,<corner4>,180 font=Arial,128,,{suit_col?a} text={b+((a)-1)*((number)+(face))+(number)},{face?b},<core> next next rectangle={(suit)*((number)+(face))+1},0,0,100%,100%,#FF0000#0000FF@90 font=arial,48,TN,#FFFFFF text={(suit)*((number)+(face))+1},"nanDECK",0,0,100%,100%,center,center,-56.31 173
advertisement
Key Features
- Custom card decks
- Extensive range and sequence control
- Label creation and management
- Frame creation with various options
- Script lists and keyword wizards
- Linked data editor and virtual table
- Visual editor and configuration settings
- Deck comparison tools