LibreLogo Toolbar/text/swriter/LibreLogo.xhpLibreLogoLogoTurtle graphicsLibreLogoLibreLogo is a simple, native, Logo-like programming environment with turtle vector graphics for teaching of computing (programming and word processing), DTP and graphic design. See http://www.numbertext.org/logo/librelogo.pdf.LibreLogo toolbarThe LibreLogo toolbar (View » Toolbars » Logo) contains turtle moving, program run and stop, home and clear screen and syntax highlighting/translating icons and an input bar (command line).Turtle moving iconsThey are equivalents of the Logo commands “FORWARD 10”, “BACK 10”, “LEFT 15”, “RIGHT 15”. Clicking on one of the icons will also focus the turtle shape scrolling the page to its position.Program run and startClick on the icon “run” to execute the text of the Writer document as a LibreLogo program.Click on the icon “stop” to stop the program execution.HomeClick on the icon “home” to reset the position and settings of the turtle.Clear screenClick on the icon “clear screen” to remove the drawing objects of the document.Command lineHit Enter in the command line to execute its content. To stop the program use the icon “stop”.Hold down the Enter to repeat the command line, for example, on the following command sequence: FORWARD 200 LEFT 89 To reset the command line click triple in it or press Ctrl-A to select the previous commands, and type the new commands.Syntax highlighting/TranslatingIt expands and upper case Logo commands in the Writer document. Change the language of the document (Tools » Options » Language Settings » Languages » Western) and click on this icon to translate the Logo program to the selected language.Program editingLibreLogo drawings and programs use the same Writer document. The LibreLogo canvas is on the first page of the Writer document. You can insert a page break before the LibreLogo programs and set the zoom/font size for a comfortable two page layout for LibreLogo programming: left (first) page is the canvas, right (second) page is for the LibreLogo programs.LibreLogo programming languageLibreLogo is a native, easily localisable, Logo-like programming language. It is back-compatible with the older Logo systems in the case of the simple Logo programs used in education, eg. TO triangle :size REPEAT 3 [ FORWARD :size LEFT 120 ] END
triangle 10 triangle 100 triangle 200 Differences from the Logo programming languageList members are comma separated: POSITION [0, 0]Program blocks and lists are differentProgram blocks need space or new line at parenthesization: REPEAT 10 [ FORWARD 10 LEFT 36 ]Lists need close parenthesization: POSITION [0, 0], and not POSITION [ 0, 0 ]1-line function declarations are not supported (TO and END need new lines).Other features of LibreLogoThe colon is optional before the variable names. TO triangle size REPEAT 3 [ FORWARD size LEFT 120 ] END String notation supports also orthographical and Python syntax. PRINT "word" ; original Logo syntax PRINT “Arbitrary text.” ; orthography, Writer PRINT 'Arbitrary text.' ; Python syntax Python list and string handling PRINT “text”[2] ; print “x” PRINT “text”[1:3] ; print “ex” Python-like FOR loopPython-like variable declaration: x = 15 PRINT x There are no extra query functions: PRINT FILLCOLOR p = POSITION PRINT p REPEAT 10 [ POSITION ANY POSITION p ] Alternative parenthesization in function calls TO star size color FILLCOLOR color REPEAT 5 [ LEFT 72 FORWARD size RIGHT 144 FORWARD size ] FILL END
star 100 “red” star (100, “green”) star(100, “blue”) LibreLogo commandsBasic syntaxCase sensitivityCommands, color constants are case insensitive: PRINT “Hello, World!” print “Hello, World, again!” Variable names are case sensitive: a = 5 A = 7 PRINT a PRINT A Program linesLines of a LibreLogo program are paragraphs in the LibreOffice Writer document. A program line can contain multiple commands: PRINT “Hello, World!” PRINT “LibreLogo” CommentsLines or line parts are comments from a semicolon to the end of the line (paragraph): ; some comments PRINT 5 * 5 ; some comments Break program lines to multiple paragraphsIt’s possible to break a program line for more paragraphs using the character tilde at the end of the line: PRINT “This is a very long ” + ~ “warning message” Turtle movingFORWARD (fd) FORWARD 10 ; move forward 10pt (1pt = 1/72 inch) FORWARD 10pt ; see above FORWARD 0.5in ; move forward 0.5 inch (1 inch = 2.54 cm) FORWARD 1" ; see above FD 1mm FD 1cm BACK (bk) BACK 10 ; move back 10pt LEFT (lt) LEFT 90 ; turn counterclockwise 90 degrees LEFT 90° ; see above LT 3h ; see above (clock position) LT any ; turn to a random position RIGHT (rt) RIGHT 90 ; turn clockwise 90 degrees PENUP (pu) PENUP ; turtle will move without drawing PENDOWN (pd) PENDOWN ; turtle will move with drawing POSITION (pos) POSITION [0, 0] ; turn and move to the top-left corner POSITION PAGESIZE ; turn and move to the bottom-right corner POSITION [PAGESIZE[0], 0] ; turn and move to the top-right corner POSITION ANY ; turn and move to a random position HEADING (seth) HEADING 0 ; turn north HEADING 12h ; see above HEADING ANY ; turn to a random position Other turtle commandsHIDETURTLE (ht) HIDETURTLE ; hide turtle (until the showturtle command) SHOWTURTLE (st) SHOWTURTLE ; show turtle HOME HOME ; reset initial turtle settings and position CLEARSCREEN (cs) CLEARSCREEN ; remove drawing objects of the document FILL and CLOSE FILL ; close and fill the actual line shape CLOSE ; close the actual line shape Pen settingsPENSIZE (ps) PENSIZE 100 ; line width is 100 points PENSIZE ANY ; equivalent of PENSIZE RANDOM 10 PENCOLOR/PENCOLOUR (pc) PENCOLOR “red” ; set red pen color (by color name, see color constants) PENCOLOR [255, 255, 0] ; set yellow color (RGB list) PENCOLOR 0xffff00 ; set yellow color (hexa code) PENCOLOR 0 ; set black color (0x000000) PENCOLOR ANY ; random color PENCOLOR [5] ; set red color (by color identifier, see color constants) PENCOLOR “invisible” ; invisible pen color for shapes without visible outline PENCOLOR “~red” ; set random red color PENJOINT/LINEJOINT PENJOINT “rounded” ; rounded line joint (default) PENJOINT “miter” ; sharp line joint PENJOINT “bevel” ; bevel line joint PENJOINT “none” ; without line joint PENSTYLE PENSTYLE “solid” ; solid line (default) PENSTYLE “dotted” ; dotted line PENSTYLE “dashed” ; dashed line
; custom dot–dash pattern specified by a list with the following arguments: ; – number of the neighbouring dots ; – length of a dot ; – number of the neighbouring dashes ; – length of a dash ; – distance of the dots/dashes ; – type (optional): ; 0 = dots are rectangles (default) ; 2 = dots are squares (lengths and distances are relative to the pensize)
PENSTYLE [3, 1mm, 2, 4mm, 2mm, 2] ; ...––...––...–– Fill settingsFILLCOLOR/FILLCOLOUR (fc) FILLCOLOR “blue” ; fill with blue color, see also PENCOLOR FILLCOLOR “invisible” CIRCLE 10 ; unfilled circle FILLSTYLE FILLSTYLE 0 ; fill without hatches (default) FILLSTYLE 1 ; black single hatches (horizontal) FILLSTYLE 2 ; black single hatches (45 degrees) FILLSTYLE 3 ; black single hatches (-45 degrees) FILLSTYLE 4 ; black single hatches (vertical) FILLSTYLE 5 ; red crossed hatches (45 degrees) FILLSTYLE 6 ; red crossed hatches (0 degrees) FILLSTYLE 7 ; blue crossed hatches (45 degrees) FILLSTYLE 8 ; blue crossed hatches (0 degrees) FILLSTYLE 9 ; blue triple crossed FILLSTYLE 10 ; black wide single hatches (45 degrees)
; custom hatches specified by a list with the following arguments: ; – style (1 = single, 2 = double, 3 = triple hatching) ; – color ; – distance ; – degree
FILLSTYLE [2, “green”, 3pt, 15°] ; green crossed hatches (15 degrees) Drawing objectsCIRCLE CIRCLE 100 ; draw a circle shape (diameter = 100pt) ELLIPSE ELLIPSE [50, 100] ; draw an ellipse with 50 and 100 diameters ELLIPSE [50, 100, 2h, 12h] ; draw an elliptical sector (from 2h clock position to 12h) ELLIPSE [50, 100, 2h, 12h, 2] ; draw an elliptical segment ELLIPSE [50, 100, 2h, 12h, 3] ; draw an elliptical arc SQUARE SQUARE 100 ; draw a square shape (size = 100pt) RECTANGLE RECTANGLE [50, 100] ; draw a rectange shape (50×100pt) RECTANGLE [50, 100, 50] ; draw a rectangle POINT POINT ; draw a point with size and color of the pen LABEL LABEL “text” ; print text in the turte position LABEL 'text' ; see above LABEL "text ; see above (only for single words) TEXT CIRCLE 10 TEXT “text” ; set text of the actual drawing object Font settingsFONTCOLOR/FONTCOLOUR FONTCOLOR “green” ; set font color FONTFAMILY FONTFAMILY “Linux Libertine G” ; set font (family) FONTFAMILY “Linux Libertine G:smcp=1” ; set also font feature (small caps) FONTFAMILY “Linux Libertine G:smcp=1&onum=1” ; small caps + old figures FONTSIZE FONTSIZE 12 ; set 12pt FONTWEIGHT FONTWEIGHT “bold” ; set bold font FONTWEIGHT “normal” ; set normal weight FONTSTYLE FONTSTYLE “italic” ; set italic variant FONTSTYLE “normal” ; set normal variant PICTURE (pic)PICTURE is for shape grouping;starting new line shapes;keeping the consistency of positions and line shapes at the left border.Shape grouping ; PICTURE [ LibreLogo_commands ] PICTURE [ FORWARD 100 CIRCLE 100 ] ; tree-like grouped shape See also “Group” in LibreOffice Writer Help. TO tree location PENUP POSITION location HEADING 0 PENDOWN PICTURE [ FORWARD 100 CIRCLE 100 ] ; tree-like grouped shape END
PICTURE [ tree [30, 50] tree [100, 50] ] ; grouped shapes in a grouped shape Starting new line shapes PICTURE ; start a new line shape FORWARD 10 PICTURE FORWARD 10 ; two line shapes Consistency at the left borderUse picture to keep the consistency of positions and line shapes at the left border of Writer: PICTURE [ CIRCLE 20 POSITION [-100, 100] CIRCLE 20 ] LoopsREPEAT ; REPEAT number [ commands ]
REPEAT 10 [ FORWARD 10 LEFT 45 CIRCLE 10 ] ; repeat 10 times ; number is optional
REPEAT [ POSITION ANY ] ; endless loop REPCOUNTLoop variable (also in the FOR and WHILE loops). REPEAT 100 [ FORWARD REPCOUNT LEFT 90 ] FOR INLoop for the list elements: FOR i IN [1, 5, 7, 9, 11] [ FORWARD i LEFT 90 ] Loop for the characters of a character sequence: FOR i IN “text” [ LABEL i FORWARD 10 ] WHILE WHILE TRUE [ POSITION ANY ] ; endless loop WHILE REPCOUNT <= 10 [ FORWARD 50 LEFT 36 ] ; as REPEAT 10 [ ... ] BREAKStop the loop. REPEAT [ ; endless loop POSITION ANY IF REPCOUNT = 100 [ BREAK ] ; equivalent of the REPEAT 100 [ ... ] ] CONTINUEJump into the next iteration of the loop. REPEAT 100 [ POSITION ANY IF REPCOUNT % 2 <> 0 [ CONTINUE ] CIRCLE 10 ; draw circles on every 2nd positions ] ConditionsIF ; IF condition [ true block ] ; IF condition [ true block ] [ false block ]
IF a < 10 [ PRINT “Small” ] IF a < 10 [ PRINT “Small” ] [ PRINT “Big” ] AND, OR, NOTLogical operators. IF a < 10 AND NOT a < 5 [ PRINT “5, 6, 7, 8 or 9” ] SubroutinesTO, ENDNew word (or procedure). TO triangle REPEAT [ FORWARD 100 RIGHT 120 ] FILL END
REPEAT 10 [ triangle PENUP POSITION ANY PENDOWN ] OUTPUTReturn value of the function. TO randomletter OUTPUT RANDOM “qwertzuiopasdfghjklyxcvbnm” END
PRINT randomletter + randomletter + randomletter ; print 3-letter random character sequence STOPReturn from the procedure. TO example number IF number < 0 [ STOP ] PRINT SQRT number ; print square root ]
example 100 example -1 ; without output and error example 25 Default variablesANYDefault random value of colors, etc. PENCOLOR ANY ; random pen color TRUELogical value. WHILE TRUE [ POSITION ANY ] ; endless loop PRINT TRUE ; print true FALSELogical value. WHILE NOT FALSE [ POSITION ANY ] ; endless loop PRINT FALSE ; print false PAGESIZE PRINT PAGESIZE ; print list of the page sizes in points, eg. [595.30, 841.89] PI/π PRINT PI ; print 3.14159265359 Input/OutputPRINT PRINT “text” ; print “text” in a dialog box PRINT 5 + 10 ; print 15 INPUT PRINT INPUT “Input value?” ; ask and print a string by a query dialog box PRINT FLOAT (INPUT “First number?”) + FLOAT (INPUT “Second number?”) ; simple calculator SLEEP SLEEP 1000 ; wait for 1000 ms (1 sec) GLOBALSet global variables used in procedures. GLOBAL about about = “LibreLogo”
TO example PRINT about GLOBAL about ; when we want to add a new value about = “new value for the global variable” END
example PRINT about FunctionsRANDOM PRINT RANDOM 100 ; random float number (0 <= x < 100) PRINT RANDOM “text” ; random letter of the “text” PRINT RANDOM [1, 2] ; random list element (1 or 2) INT PRINT INT 3.8 ; print 3 (integer part of 3.8) PRINT INT RANDOM 100 ; random integer number (0 <= x < 100) PRINT INT “7” ; convert the string parameter to integer FLOAT ; convert the string parameter to float number PRINT 2 * FLOAT “5.5” ; print 11.0 STR ; convert the number parameter to string PRINT “Result: ” + STR 5 ; print “Result: 5” PRINT 10 * STR 5 ; print 5555555555 SQRT PRINT SQRT 100 ; print 10, square root of 100 SIN PRINT SIN 90 * PI/180 ; print 1.0 (sinus of 90° in radians) COS PRINT COS 0 * PI/180 ; print 1.0 (sinus of 0° in radians) ROUND PRINT ROUND 3.8 ; print 4 (rounding 3.8) PRINT ROUND RANDOM 100 ; random integer number (0 <= x <= 100) ABS PRINT ABS -10 ; print 10, absolute value of -10 COUNT PRINT COUNT “text” ; print 4, character count of “text” PRINT COUNT [1, 2, 3] ; print 3, size of the list SET ; Convert list to Python set PRINT SET [4, 5, 6, 6] ; print {4, 5, 6} PRINT SET [4, 5, 6, 6] | SET [4, 1, 9] ; print {1, 4, 5, 6, 9}, union PRINT SET [4, 5, 6, 6] & SET [4, 1, 9] ; print {4}, intersection PRINT SET ([4, 5, 6, 6]) - SET [4, 1, 9] ; print {5, 6}, difference PRINT SET [4, 5, 6, 6] ^ SET [4, 1, 9] ; print {1, 5, 6, 9}, symmetric difference RANGE ; Python-like list generation PRINT RANGE 10 ; print [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] PRINT RANGE 3 10 ; print [3, 4, 5, 6, 7, 8, 9] PRINT RANGE 3 10 3 ; print [3, 6, 9]
FOR i in RANGE 10 50 10 [ ; loop for [10, 20, 30, 40] FORWARD i LEFT 90 ] LIST ; remove the repeating elements of a list using set and list conversion PRINT LIST (SET [1, 3, 5, 5, 2, 1]) ; print [1, 3, 5, 2] TUPLEConversion to Python tuple (non-modifiable list) PRINT TUPLE [4, 5] SORTEDIt returns with a sorted list. PRINT SORTED [5, 1, 3, 4] ; print [1, 3, 4, 5] SUBSubstitue character sequences using regex (regular expression) patterns. PRINT SUB (“t”, “T”, “text”) ; print “Text”, replacing “t” with “T” PRINT SUB (“(.)”, “\\1\\1”, “text”) ; print “tteexxtt”, doubling every characters SEARCHSearch character sequences patterns using regex patterns. IF SEARCH (“\w”, word) [ PRINT “Letter in the word.” ] FINDALLFind all character sequences in the input string matching the given regex pattern. PRINT FINDALL(“\w+”, “Dogs, cats.”) ; print [“Dogs”, “cats”], the list of the words. MIN PRINT MIN [1, 2, 3] ; print 1, the lowest element of the list MAX PRINT MAX [1, 2, 3] ; print 3, the greatest element of the list Color constants PENCOLOR “SILVER” ; set by name PENCOLOR [1] ; set by identifiers PENCOLOR “~SILVER” ; random silver color