You can subscribe to this list here.
2011 |
Jan
|
Feb
|
Mar
|
Apr
(12) |
May
(7) |
Jun
(4) |
Jul
(1) |
Aug
(22) |
Sep
(3) |
Oct
(2) |
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2012 |
Jan
|
Feb
(21) |
Mar
(9) |
Apr
(8) |
May
(5) |
Jun
(11) |
Jul
(7) |
Aug
(1) |
Sep
|
Oct
(1) |
Nov
(4) |
Dec
(1) |
2013 |
Jan
(15) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(20) |
Jul
(6) |
Aug
(4) |
Sep
(4) |
Oct
(5) |
Nov
|
Dec
(2) |
2014 |
Jan
(2) |
Feb
(1) |
Mar
(7) |
Apr
(11) |
May
(14) |
Jun
(4) |
Jul
(13) |
Aug
(7) |
Sep
(10) |
Oct
(19) |
Nov
(3) |
Dec
|
2015 |
Jan
|
Feb
|
Mar
|
Apr
(15) |
May
(12) |
Jun
(16) |
Jul
(12) |
Aug
(15) |
Sep
(1) |
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
(1) |
Mar
(3) |
Apr
(2) |
May
|
Jun
|
Jul
|
Aug
(28) |
Sep
(1) |
Oct
(4) |
Nov
(31) |
Dec
(21) |
2017 |
Jan
(31) |
Feb
(3) |
Mar
(3) |
Apr
(14) |
May
|
Jun
(3) |
Jul
|
Aug
(18) |
Sep
(5) |
Oct
(8) |
Nov
(9) |
Dec
(8) |
2018 |
Jan
(17) |
Feb
(3) |
Mar
(16) |
Apr
|
May
|
Jun
(1) |
Jul
(15) |
Aug
(1) |
Sep
(8) |
Oct
(8) |
Nov
(13) |
Dec
(4) |
2019 |
Jan
(4) |
Feb
(6) |
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
(15) |
Sep
(1) |
Oct
|
Nov
(3) |
Dec
(8) |
2020 |
Jan
(3) |
Feb
(3) |
Mar
(1) |
Apr
(9) |
May
(21) |
Jun
(6) |
Jul
(21) |
Aug
(14) |
Sep
(3) |
Oct
(8) |
Nov
(5) |
Dec
(7) |
2021 |
Jan
(3) |
Feb
(12) |
Mar
(6) |
Apr
(1) |
May
(2) |
Jun
(7) |
Jul
(21) |
Aug
(26) |
Sep
(10) |
Oct
(4) |
Nov
(3) |
Dec
(4) |
2022 |
Jan
(15) |
Feb
(3) |
Mar
|
Apr
(4) |
May
|
Jun
(5) |
Jul
(12) |
Aug
(64) |
Sep
(14) |
Oct
(19) |
Nov
(13) |
Dec
(6) |
2023 |
Jan
(1) |
Feb
(6) |
Mar
(3) |
Apr
(4) |
May
(3) |
Jun
(21) |
Jul
(5) |
Aug
(1) |
Sep
(1) |
Oct
(3) |
Nov
(2) |
Dec
|
2024 |
Jan
(11) |
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
(1) |
Jul
(1) |
Aug
(10) |
Sep
|
Oct
|
Nov
|
Dec
|
From: <or...@us...> - 2023-11-14 16:00:47
|
Revision: 1085 http://sourceforge.net/p/bsf4oorexx/code/1085 Author: orexx Date: 2023-11-14 16:00:44 +0000 (Tue, 14 Nov 2023) Log Message: ----------- 20231114 Add HTML color named RebeccaPurple (cf. https://www.w3schools.com/colors/colors_names.asp). Modified Paths: -------------- sandbox/rgf/jdor/JavaDrawingHandler.java sandbox/rgf/jdor/doc/jdor_doc.html Modified: sandbox/rgf/jdor/JavaDrawingHandler.java =================================================================== --- sandbox/rgf/jdor/JavaDrawingHandler.java 2023-11-14 15:13:41 UTC (rev 1084) +++ sandbox/rgf/jdor/JavaDrawingHandler.java 2023-11-14 16:00:44 UTC (rev 1085) @@ -487,6 +487,7 @@ predefinedColors.put("PLUM" , new Color( (int) 221, (int) 160, (int) 221 )); // #DDA0DD cf. JavaFX' Color predefinedColors.put("POWDERBLUE" , new Color( (int) 176, (int) 224, (int) 230 )); // #B0E0E6 cf. JavaFX' Color predefinedColors.put("PURPLE" , new Color( (int) 128, (int) 0, (int) 128 )); // #800080 cf. JavaFX' Color + predefinedColors.put("REBECCAPURPLE" , new Color( (int) 102, (int) 51, (int) 153 )); // #663399 cf. JavaFX' Color predefinedColors.put("RED" , Color.RED ); // java.awt.Color predefinedColors.put("ROSYBROWN" , new Color( (int) 188, (int) 143, (int) 143 )); // #BC8F8F cf. JavaFX' Color predefinedColors.put("ROYALBLUE" , new Color( (int) 65, (int) 105, (int) 225 )); // #4169E1 cf. JavaFX' Color Modified: sandbox/rgf/jdor/doc/jdor_doc.html =================================================================== --- sandbox/rgf/jdor/doc/jdor_doc.html 2023-11-14 15:13:41 UTC (rev 1084) +++ sandbox/rgf/jdor/doc/jdor_doc.html 2023-11-14 16:00:44 UTC (rev 1085) @@ -789,42 +789,40 @@ previously defined color gets gets returned via the Rexx variable <em>RC</em>. The following color names get predefined and can be directly used (cf. the constants defined for <a href="https://google.com/search?q=javadoc+javafx+8+Color" target="_blank"><em>javafx.scene.paint.Color</em></a> - which show the color they represent): + which show the color they represent; see e.g. <a href="https://www.w3schools.com/colors/colors_names.asp" target="_blank">W3schools HTML color names</a>): <div style="margin: 1em 2em 1em 2em;"> - <em>ALICEBLUE</em>, <em>ANTIQUEWHITE</em>, <em>AQUA</em>, <em>AQUAMARINE</em>, <em>AZURE</em>, - <em>BEIGE</em>, <em>BISQUE</em>, <em>BLACK</em>, <em>BLANCHEDALMOND</em>, <em>BLUE</em>, - <em>BLUEVIOLET</em>, <em>BROWN</em>, <em>BURLYWOOD</em>, <em>CADETBLUE</em>, <em>CHARTREUSE</em>, - <em>CHOCOLATE</em>, <em>CORAL</em>, <em>CORNFLOWERBLUE</em>, <em>CORNSILK</em>, <em>CRIMSON</em>, - <em>CYAN</em>, <em>DARKBLUE</em>, <em>DARKCYAN</em>, <em>DARKGOLDENROD</em>, <em>DARKGRAY</em>, - <em>DARK_GRAY</em>, <em>DARKGREEN</em>, <em>DARKGREY</em>, <em>DARKKHAKI</em>, <em>DARKMAGENTA</em>, - <em>DARKOLIVEGREEN</em>, <em>DARKORANGE</em>, <em>DARKORCHID</em>, <em>DARKRED</em>, - <em>DARKSALMON</em>, <em>DARKSEAGREEN</em>, <em>DARKSLATEBLUE</em>, <em>DARKSLATEGRAY</em>, - <em>DARKSLATEGREY</em>, <em>DARKTURQUOISE</em>, <em>DARKVIOLET</em>, <em>DEEPPINK</em>, - <em>DEEPSKYBLUE</em>, <em>DIMGRAY</em>, <em>DIMGREY</em>, <em>DODGERBLUE</em>, <em>FIREBRICK</em>, - <em>FLORALWHITE</em>, <em>FORESTGREEN</em>, <em>FUCHSIA</em>, <em>GAINSBORO</em>, - <em>GHOSTWHITE</em>, <em>GOLD</em>, <em>GOLDENROD</em>, <em>GRAY</em>, <em>GREEN</em>, - <em>GREENYELLOW</em>, <em>GREY</em>, <em>HONEYDEW</em>, <em>HOTPINK</em>, <em>INDIANRED</em>, - <em>INDIGO</em>, <em>IVORY</em>, <em>KHAKI</em>, <em>LAVENDER</em>, <em>LAVENDERBLUSH</em>, - <em>LAWNGREEN</em>, <em>LEMONCHIFFON</em>, <em>LIGHTBLUE</em>, <em>LIGHTCORAL</em>, - <em>LIGHTCYAN</em>, <em>LIGHTGOLDENRODYELLOW</em>, <em>LIGHTGRAY</em>, <em>LIGHT_GRAY</em>, - <em>LIGHTGREEN</em>, <em>LIGHTGREY</em>, <em>LIGHTPINK</em>, <em>LIGHTSALMON</em>, - <em>LIGHTSEAGREEN</em>, <em>LIGHTSKYBLUE</em>, <em>LIGHTSLATEGRAY</em>, <em>LIGHTSLATEGREY</em>, - <em>LIGHTSTEELBLUE</em>, <em>LIGHTYELLOW</em>, <em>LIME</em>, <em>LIMEGREEN</em>, <em>LINEN</em>, - <em>MAGENTA</em>, <em>MAROON</em>, <em>MEDIUMAQUAMARINE</em>, <em>MEDIUMBLUE</em>, - <em>MEDIUMORCHID</em>, <em>MEDIUMPURPLE</em>, <em>MEDIUMSEAGREEN</em>, <em>MEDIUMSLATEBLUE</em>, - <em>MEDIUMSPRINGGREEN</em>, <em>MEDIUMTURQUOISE</em>, <em>MEDIUMVIOLETRED</em>, - <em>MIDNIGHTBLUE</em>, <em>MINTCREAM</em>, <em>MISTYROSE</em>, <em>MOCCASIN</em>, - <em>NAVAJOWHITE</em>, <em>NAVY</em>, <em>OLDLACE</em>, <em>OLIVE</em>, <em>OLIVEDRAB</em>, - <em>ORANGE</em>, <em>ORANGERED</em>, <em>ORCHID</em>, <em>PALEGOLDENROD</em>, <em>PALEGREEN</em>, - <em>PALETURQUOISE</em>, <em>PALEVIOLETRED</em>, <em>PAPAYAWHIP</em>, <em>PEACHPUFF</em>, - <em>PERU</em>, <em>PINK</em>, <em>PLUM</em>, <em>POWDERBLUE</em>, <em>PURPLE</em>, <em>RED</em>, - <em>ROSYBROWN</em>, <em>ROYALBLUE</em>, <em>SADDLEBROWN</em>, <em>SALMON</em>, <em>SANDYBROWN</em>, - <em>SEAGREEN</em>, <em>SEASHELL</em>, <em>SIENNA</em>, <em>SILVER</em>, <em>SKYBLUE</em>, - <em>SLATEBLUE</em>, <em>SLATEGRAY</em>, <em>SLATEGREY</em>, <em>SNOW</em>, <em>SPRINGGREEN</em>, - <em>STEELBLUE</em>, <em>TAN</em>, <em>TEAL</em>, <em>THISTLE</em>, <em>TOMATO</em>, - <em>TRANSPARENT</em>, <em>TURQUOISE</em>, <em>VIOLET</em>, <em>WHEAT</em>, <em>WHITE</em>, - <em>WHITESMOKE</em>, <em>YELLOW</em>, <em>YELLOWGREEN</em> + <em>AliceBlue<em>, <em>AntiqueWhite<em>, <em>Aqua<em>, <em>Aquamarine<em>, <em>Azure<em>, + <em>Beige<em>, <em>Bisque<em>, <em>Black<em>, <em>BlanchedAlmond<em>, <em>Blue<em>, + <em>BlueViolet<em>, <em>Brown<em>, <em>BurlyWood<em>, <em>CadetBlue<em>, <em>Chartreuse<em>, + <em>Chocolate<em>, <em>Coral<em>, <em>CornflowerBlue<em>, <em>Cornsilk<em>, <em>Crimson<em>, + <em>Cyan<em>, <em>DarkBlue<em>, <em>DarkCyan<em>, <em>DarkGoldenRod<em>, <em>Dark_Gray<em>, + <em>DarkGray<em>, <em>DarkGrey<em>, <em>DarkGreen<em>, <em>DarkKhaki<em>, <em>DarkMagenta<em>, + <em>DarkOliveGreen<em>, <em>DarkOrange<em>, <em>DarkOrchid<em>, <em>DarkRed<em>, <em>DarkSalmon<em>, + <em>DarkSeaGreen<em>, <em>DarkSlateBlue<em>, <em>DarkSlateGray<em>, <em>DarkSlateGrey<em>, + <em>DarkTurquoise<em>, <em>DarkViolet<em>, <em>DeepPink<em>, <em>DeepSkyBlue<em>, <em>DimGray<em>, + <em>DimGrey<em>, <em>DodgerBlue<em>, <em>FireBrick<em>, <em>FloralWhite<em>, <em>ForestGreen<em>, + <em>Fuchsia<em>, <em>Gainsboro<em>, <em>GhostWhite<em>, <em>Gold<em>, <em>GoldenRod<em>, + <em>Gray<em>, <em>Grey<em>, <em>Green<em>, <em>GreenYellow<em>, <em>HoneyDew<em>, <em>HotPink<em>, + <em>IndianRed<em>, <em>Indigo<em>, <em>Ivory<em>, <em>Khaki<em>, <em>Lavender<em>, + <em>LavenderBlush<em>, <em>LawnGreen<em>, <em>LemonChiffon<em>, <em>LightBlue<em>, + <em>LightCoral<em>, <em>LightCyan<em>, <em>LightGoldenRodYellow<em>, <em>Light_Gray<em>, + <em>LightGray<em>, <em>LightGrey<em>, <em>LightGreen<em>, <em>LightPink<em>, <em>LightSalmon<em>, + <em>LightSeaGreen<em>, <em>LightSkyBlue<em>, <em>LightSlateGray<em>, <em>LightSlateGrey<em>, + <em>LightSteelBlue<em>, <em>LightYellow<em>, <em>Lime<em>, <em>LimeGreen<em>, <em>Linen<em>, + <em>Magenta<em>, <em>Maroon<em>, <em>MediumAquaMarine<em>, <em>MediumBlue<em>, <em>MediumOrchid<em>, + <em>MediumPurple<em>, <em>MediumSeaGreen<em>, <em>MediumSlateBlue<em>, <em>MediumSpringGreen<em>, + <em>MediumTurquoise<em>, <em>MediumVioletRed<em>, <em>MidnightBlue<em>, <em>MintCream<em>, + <em>MistyRose<em>, <em>Moccasin<em>, <em>NavajoWhite<em>, <em>Navy<em>, <em>OldLace<em>, + <em>Olive<em>, <em>OliveDrab<em>, <em>Orange<em>, <em>OrangeRed<em>, <em>Orchid<em>, + <em>PaleGoldenRod<em>, <em>PaleGreen<em>, <em>PaleTurquoise<em>, <em>PaleVioletRed<em>, + <em>PapayaWhip<em>, <em>PeachPuff<em>, <em>Peru<em>, <em>Pink<em>, <em>Plum<em>, <em>PowderBlue<em>, + <em>Purple<em>, <em>RebeccaPurple<em>, <em>Red<em>, <em>RosyBrown<em>, <em>RoyalBlue<em>, + <em>SaddleBrown<em>, <em>Salmon<em>, <em>SandyBrown<em>, <em>SeaGreen<em>, <em>SeaShell<em>, + <em>Sienna<em>, <em>Silver<em>, <em>SkyBlue<em>, <em>SlateBlue<em>, <em>SlateGray<em>, + <em>SlateGrey<em>, <em>Snow<em>, <em>SpringGreen<em>, <em>SteelBlue<em>, <em>Tan<em>, <em>Teal<em>, + <em>Thistle<em>, <em>Tomato<em>, <em>Transparent<em>, <em>Turquoise<em>, <em>Violet<em>, + <em>Wheat<em>, <em>White<em>, <em>WhiteSmoke<em>, <em>Yellow<em>, <em>YellowGreen<em> </div> <tr class="ArgumentRowColor"><td><!-- table row --> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-11-14 15:13:43
|
Revision: 1084 http://sourceforge.net/p/bsf4oorexx/code/1084 Author: orexx Date: 2023-11-14 15:13:41 +0000 (Tue, 14 Nov 2023) Log Message: ----------- 20231114 Add javafx.scene.paint.Color constants to predefined colors totalling 48 different predefined colors one can immediately use. Modified Paths: -------------- sandbox/rgf/jdor/JavaDrawingHandler.java sandbox/rgf/jdor/doc/jdor_doc.html Modified: sandbox/rgf/jdor/JavaDrawingHandler.java =================================================================== --- sandbox/rgf/jdor/JavaDrawingHandler.java 2023-10-30 14:02:20 UTC (rev 1083) +++ sandbox/rgf/jdor/JavaDrawingHandler.java 2023-11-14 15:13:41 UTC (rev 1084) @@ -11,7 +11,7 @@ author: Rony G. Flatscher date: 2022-09-05/2022-10-05 - version: 100.20230718 + version: 100.20231114 license: Apache license 2.0 license: @@ -152,7 +152,8 @@ 2023-07-18: - fixed pushImage(): if argument given and output redirected now supplies imageNickName if supplied - add "COLOUR" as synonym for "COLOR" - + 2023-11-14: - define and pregister all javafx.scene.paint.Color constants such that they + can be immediately used (extended from the original predefined java.awt.Color constants) */ package org.oorexx.handlers.jdor; @@ -362,20 +363,159 @@ static { // ---------------------------------------------------------------------- - // Color - predefinedColors.put("BLACK" , Color.BLACK ); - predefinedColors.put("BLUE" , Color.BLUE ); - predefinedColors.put("CYAN" , Color.CYAN ); - predefinedColors.put("DARK_GRAY" , Color.DARK_GRAY ); - predefinedColors.put("GRAY" , Color.GRAY ); - predefinedColors.put("GREEN" , Color.GREEN ); - predefinedColors.put("LIGHT_GRAY" , Color.LIGHT_GRAY ); - predefinedColors.put("MAGENTA" , Color.MAGENTA ); - predefinedColors.put("ORANGE" , Color.ORANGE ); - predefinedColors.put("PINK" , Color.PINK ); - predefinedColors.put("RED" , Color.RED ); - predefinedColors.put("WHITE" , Color.WHITE ); - predefinedColors.put("YELLOW" , Color.YELLOW ); + // Color, includes the javafx.scene.paint.Color constants (web color names) + predefinedColors.put("ALICEBLUE" , new Color( (int) 240, (int) 248, (int) 255 )); // #F0F8FF cf. JavaFX' Color + predefinedColors.put("ANTIQUEWHITE" , new Color( (int) 250, (int) 235, (int) 215 )); // #FAEBD7 cf. JavaFX' Color + predefinedColors.put("AQUA" , new Color( (int) 0, (int) 255, (int) 255 )); // #00FFFF cf. JavaFX' Color + predefinedColors.put("AQUAMARINE" , new Color( (int) 127, (int) 255, (int) 212 )); // #7FFFD4 cf. JavaFX' Color + predefinedColors.put("AZURE" , new Color( (int) 240, (int) 255, (int) 255 )); // #F0FFFF cf. JavaFX' Color + predefinedColors.put("BEIGE" , new Color( (int) 245, (int) 245, (int) 220 )); // #F5F5DC cf. JavaFX' Color + predefinedColors.put("BISQUE" , new Color( (int) 255, (int) 228, (int) 196 )); // #FFE4C4 cf. JavaFX' Color + predefinedColors.put("BLACK" , new Color( (int) 0, (int) 0, (int) 0 )); // #000000 cf. JavaFX' Color + predefinedColors.put("BLACK" , Color.BLACK ); // java.awt.Color + predefinedColors.put("BLANCHEDALMOND" , new Color( (int) 255, (int) 235, (int) 205 )); // #FFEBCD cf. JavaFX' Color + predefinedColors.put("BLUE" , new Color( (int) 0, (int) 0, (int) 255 )); // #0000FF cf. JavaFX' Color + predefinedColors.put("BLUE" , Color.BLUE ); // java.awt.Color + predefinedColors.put("BLUEVIOLET" , new Color( (int) 138, (int) 43, (int) 226 )); // #8A2BE2 cf. JavaFX' Color + predefinedColors.put("BROWN" , new Color( (int) 165, (int) 42, (int) 42 )); // #A52A2A cf. JavaFX' Color + predefinedColors.put("BURLYWOOD" , new Color( (int) 222, (int) 184, (int) 135 )); // #DEB887 cf. JavaFX' Color + predefinedColors.put("CADETBLUE" , new Color( (int) 95, (int) 158, (int) 160 )); // #5F9EA0 cf. JavaFX' Color + predefinedColors.put("CHARTREUSE" , new Color( (int) 127, (int) 255, (int) 0 )); // #7FFF00 cf. JavaFX' Color + predefinedColors.put("CHOCOLATE" , new Color( (int) 210, (int) 105, (int) 30 )); // #D2691E cf. JavaFX' Color + predefinedColors.put("CORAL" , new Color( (int) 255, (int) 127, (int) 80 )); // #FF7F50 cf. JavaFX' Color + predefinedColors.put("CORNFLOWERBLUE" , new Color( (int) 100, (int) 149, (int) 237 )); // #6495ED cf. JavaFX' Color + predefinedColors.put("CORNSILK" , new Color( (int) 255, (int) 248, (int) 220 )); // #FFF8DC cf. JavaFX' Color + predefinedColors.put("CRIMSON" , new Color( (int) 220, (int) 20, (int) 60 )); // #DC143C cf. JavaFX' Color + predefinedColors.put("CYAN" , Color.CYAN ); // java.awt.Color + predefinedColors.put("DARKBLUE" , new Color( (int) 0, (int) 0, (int) 139 )); // #00008B cf. JavaFX' Color + predefinedColors.put("DARKCYAN" , new Color( (int) 0, (int) 139, (int) 139 )); // #008B8B cf. JavaFX' Color + predefinedColors.put("DARKGOLDENROD" , new Color( (int) 184, (int) 134, (int) 11 )); // #B8860B cf. JavaFX' Color + predefinedColors.put("DARKGRAY" , new Color( (int) 169, (int) 169, (int) 169 )); // #A9A9A9 cf. JavaFX' Color + predefinedColors.put("DARKGREEN" , new Color( (int) 0, (int) 100, (int) 0 )); // #006400 cf. JavaFX' Color + predefinedColors.put("DARKGREY" , new Color( (int) 169, (int) 169, (int) 169 )); // #A9A9A9 cf. JavaFX' Color + predefinedColors.put("DARKKHAKI" , new Color( (int) 189, (int) 183, (int) 107 )); // #BDB76B cf. JavaFX' Color + predefinedColors.put("DARKMAGENTA" , new Color( (int) 139, (int) 0, (int) 139 )); // #8B008B cf. JavaFX' Color + predefinedColors.put("DARKOLIVEGREEN" , new Color( (int) 85, (int) 107, (int) 47 )); // #556B2F cf. JavaFX' Color + predefinedColors.put("DARKORANGE" , new Color( (int) 255, (int) 140, (int) 0 )); // #FF8C00 cf. JavaFX' Color + predefinedColors.put("DARKORCHID" , new Color( (int) 153, (int) 50, (int) 204 )); // #9932CC cf. JavaFX' Color + predefinedColors.put("DARKRED" , new Color( (int) 139, (int) 0, (int) 0 )); // #8B0000 cf. JavaFX' Color + predefinedColors.put("DARKSALMON" , new Color( (int) 233, (int) 150, (int) 122 )); // #E9967A cf. JavaFX' Color + predefinedColors.put("DARKSEAGREEN" , new Color( (int) 143, (int) 188, (int) 143 )); // #8FBC8F cf. JavaFX' Color + predefinedColors.put("DARKSLATEBLUE" , new Color( (int) 72, (int) 61, (int) 139 )); // #483D8B cf. JavaFX' Color + predefinedColors.put("DARKSLATEGRAY" , new Color( (int) 47, (int) 79, (int) 79 )); // #2F4F4F cf. JavaFX' Color + predefinedColors.put("DARKSLATEGREY" , new Color( (int) 47, (int) 79, (int) 79 )); // #2F4F4F cf. JavaFX' Color + predefinedColors.put("DARKTURQUOISE" , new Color( (int) 0, (int) 206, (int) 209 )); // #00CED1 cf. JavaFX' Color + predefinedColors.put("DARKVIOLET" , new Color( (int) 148, (int) 0, (int) 211 )); // #9400D3 cf. JavaFX' Color + predefinedColors.put("DARK_GRAY" , Color.DARK_GRAY ); // java.awt.Color + predefinedColors.put("DEEPPINK" , new Color( (int) 255, (int) 20, (int) 147 )); // #FF1493 cf. JavaFX' Color + predefinedColors.put("DEEPSKYBLUE" , new Color( (int) 0, (int) 191, (int) 255 )); // #00BFFF cf. JavaFX' Color + predefinedColors.put("DIMGRAY" , new Color( (int) 105, (int) 105, (int) 105 )); // #696969 cf. JavaFX' Color + predefinedColors.put("DIMGREY" , new Color( (int) 105, (int) 105, (int) 105 )); // #696969 cf. JavaFX' Color + predefinedColors.put("DODGERBLUE" , new Color( (int) 30, (int) 144, (int) 255 )); // #1E90FF cf. JavaFX' Color + predefinedColors.put("FIREBRICK" , new Color( (int) 178, (int) 34, (int) 34 )); // #B22222 cf. JavaFX' Color + predefinedColors.put("FLORALWHITE" , new Color( (int) 255, (int) 250, (int) 240 )); // #FFFAF0 cf. JavaFX' Color + predefinedColors.put("FORESTGREEN" , new Color( (int) 34, (int) 139, (int) 34 )); // #228B22 cf. JavaFX' Color + predefinedColors.put("FUCHSIA" , new Color( (int) 255, (int) 0, (int) 255 )); // #FF00FF cf. JavaFX' Color + predefinedColors.put("GAINSBORO" , new Color( (int) 220, (int) 220, (int) 220 )); // #DCDCDC cf. JavaFX' Color + predefinedColors.put("GHOSTWHITE" , new Color( (int) 248, (int) 248, (int) 255 )); // #F8F8FF cf. JavaFX' Color + predefinedColors.put("GOLD" , new Color( (int) 255, (int) 215, (int) 0 )); // #FFD700 cf. JavaFX' Color + predefinedColors.put("GOLDENROD" , new Color( (int) 218, (int) 165, (int) 32 )); // #DAA520 cf. JavaFX' Color + predefinedColors.put("GRAY" , Color.GRAY ); // java.awt.Color + predefinedColors.put("GREEN" , Color.GREEN ); // java.awt.Color + predefinedColors.put("GREENYELLOW" , new Color( (int) 173, (int) 255, (int) 47 )); // #ADFF2F cf. JavaFX' Color + predefinedColors.put("GREY" , new Color( (int) 128, (int) 128, (int) 128 )); // #808080 cf. JavaFX' Color + predefinedColors.put("HONEYDEW" , new Color( (int) 240, (int) 255, (int) 240 )); // #F0FFF0 cf. JavaFX' Color + predefinedColors.put("HOTPINK" , new Color( (int) 255, (int) 105, (int) 180 )); // #FF69B4 cf. JavaFX' Color + predefinedColors.put("INDIANRED" , new Color( (int) 205, (int) 92, (int) 92 )); // #CD5C5C cf. JavaFX' Color + predefinedColors.put("INDIGO" , new Color( (int) 75, (int) 0, (int) 130 )); // #4B0082 cf. JavaFX' Color + predefinedColors.put("IVORY" , new Color( (int) 255, (int) 255, (int) 240 )); // #FFFFF0 cf. JavaFX' Color + predefinedColors.put("KHAKI" , new Color( (int) 240, (int) 230, (int) 140 )); // #F0E68C cf. JavaFX' Color + predefinedColors.put("LAVENDER" , new Color( (int) 230, (int) 230, (int) 250 )); // #E6E6FA cf. JavaFX' Color + predefinedColors.put("LAVENDERBLUSH" , new Color( (int) 255, (int) 240, (int) 245 )); // #FFF0F5 cf. JavaFX' Color + predefinedColors.put("LAWNGREEN" , new Color( (int) 124, (int) 252, (int) 0 )); // #7CFC00 cf. JavaFX' Color + predefinedColors.put("LEMONCHIFFON" , new Color( (int) 255, (int) 250, (int) 205 )); // #FFFACD cf. JavaFX' Color + predefinedColors.put("LIGHTBLUE" , new Color( (int) 173, (int) 216, (int) 230 )); // #ADD8E6 cf. JavaFX' Color + predefinedColors.put("LIGHTCORAL" , new Color( (int) 240, (int) 128, (int) 128 )); // #F08080 cf. JavaFX' Color + predefinedColors.put("LIGHTCYAN" , new Color( (int) 224, (int) 255, (int) 255 )); // #E0FFFF cf. JavaFX' Color + predefinedColors.put("LIGHTGOLDENRODYELLOW" , new Color( (int) 250, (int) 250, (int) 210 )); // #FAFAD2 cf. JavaFX' Color + predefinedColors.put("LIGHTGRAY" , new Color( (int) 211, (int) 211, (int) 211 )); // #D3D3D3 cf. JavaFX' Color + predefinedColors.put("LIGHTGREEN" , new Color( (int) 144, (int) 238, (int) 144 )); // #90EE90 cf. JavaFX' Color + predefinedColors.put("LIGHTGREY" , new Color( (int) 211, (int) 211, (int) 211 )); // #D3D3D3 cf. JavaFX' Color + predefinedColors.put("LIGHTPINK" , new Color( (int) 255, (int) 182, (int) 193 )); // #FFB6C1 cf. JavaFX' Color + predefinedColors.put("LIGHTSALMON" , new Color( (int) 255, (int) 160, (int) 122 )); // #FFA07A cf. JavaFX' Color + predefinedColors.put("LIGHTSEAGREEN" , new Color( (int) 32, (int) 178, (int) 170 )); // #20B2AA cf. JavaFX' Color + predefinedColors.put("LIGHTSKYBLUE" , new Color( (int) 135, (int) 206, (int) 250 )); // #87CEFA cf. JavaFX' Color + predefinedColors.put("LIGHTSLATEGRAY" , new Color( (int) 119, (int) 136, (int) 153 )); // #778899 cf. JavaFX' Color + predefinedColors.put("LIGHTSLATEGREY" , new Color( (int) 119, (int) 136, (int) 153 )); // #778899 cf. JavaFX' Color + predefinedColors.put("LIGHTSTEELBLUE" , new Color( (int) 176, (int) 196, (int) 222 )); // #B0C4DE cf. JavaFX' Color + predefinedColors.put("LIGHTYELLOW" , new Color( (int) 255, (int) 255, (int) 224 )); // #FFFFE0 cf. JavaFX' Color + predefinedColors.put("LIGHT_GRAY" , Color.LIGHT_GRAY ); // java.awt.Color + predefinedColors.put("LIME" , new Color( (int) 0, (int) 255, (int) 0 )); // #00FF00 cf. JavaFX' Color + predefinedColors.put("LIMEGREEN" , new Color( (int) 50, (int) 205, (int) 50 )); // #32CD32 cf. JavaFX' Color + predefinedColors.put("LINEN" , new Color( (int) 250, (int) 240, (int) 230 )); // #FAF0E6 cf. JavaFX' Color + predefinedColors.put("MAGENTA" , Color.MAGENTA ); // java.awt.Color + predefinedColors.put("MAROON" , new Color( (int) 128, (int) 0, (int) 0 )); // #800000 cf. JavaFX' Color + predefinedColors.put("MEDIUMAQUAMARINE" , new Color( (int) 102, (int) 205, (int) 170 )); // #66CDAA cf. JavaFX' Color + predefinedColors.put("MEDIUMBLUE" , new Color( (int) 0, (int) 0, (int) 205 )); // #0000CD cf. JavaFX' Color + predefinedColors.put("MEDIUMORCHID" , new Color( (int) 186, (int) 85, (int) 211 )); // #BA55D3 cf. JavaFX' Color + predefinedColors.put("MEDIUMPURPLE" , new Color( (int) 147, (int) 112, (int) 219 )); // #9370DB cf. JavaFX' Color + predefinedColors.put("MEDIUMSEAGREEN" , new Color( (int) 60, (int) 179, (int) 113 )); // #3CB371 cf. JavaFX' Color + predefinedColors.put("MEDIUMSLATEBLUE" , new Color( (int) 123, (int) 104, (int) 238 )); // #7B68EE cf. JavaFX' Color + predefinedColors.put("MEDIUMSPRINGGREEN" , new Color( (int) 0, (int) 250, (int) 154 )); // #00FA9A cf. JavaFX' Color + predefinedColors.put("MEDIUMTURQUOISE" , new Color( (int) 72, (int) 209, (int) 204 )); // #48D1CC cf. JavaFX' Color + predefinedColors.put("MEDIUMVIOLETRED" , new Color( (int) 199, (int) 21, (int) 133 )); // #C71585 cf. JavaFX' Color + predefinedColors.put("MIDNIGHTBLUE" , new Color( (int) 25, (int) 25, (int) 112 )); // #191970 cf. JavaFX' Color + predefinedColors.put("MINTCREAM" , new Color( (int) 245, (int) 255, (int) 250 )); // #F5FFFA cf. JavaFX' Color + predefinedColors.put("MISTYROSE" , new Color( (int) 255, (int) 228, (int) 225 )); // #FFE4E1 cf. JavaFX' Color + predefinedColors.put("MOCCASIN" , new Color( (int) 255, (int) 228, (int) 181 )); // #FFE4B5 cf. JavaFX' Color + predefinedColors.put("NAVAJOWHITE" , new Color( (int) 255, (int) 222, (int) 173 )); // #FFDEAD cf. JavaFX' Color + predefinedColors.put("NAVY" , new Color( (int) 0, (int) 0, (int) 128 )); // #000080 cf. JavaFX' Color + predefinedColors.put("OLDLACE" , new Color( (int) 253, (int) 245, (int) 230 )); // #FDF5E6 cf. JavaFX' Color + predefinedColors.put("OLIVE" , new Color( (int) 128, (int) 128, (int) 0 )); // #808000 cf. JavaFX' Color + predefinedColors.put("OLIVEDRAB" , new Color( (int) 107, (int) 142, (int) 35 )); // #6B8E23 cf. JavaFX' Color + predefinedColors.put("ORANGE" , Color.ORANGE ); // java.awt.Color + predefinedColors.put("ORANGERED" , new Color( (int) 255, (int) 69, (int) 0 )); // #FF4500 cf. JavaFX' Color + predefinedColors.put("ORCHID" , new Color( (int) 218, (int) 112, (int) 214 )); // #DA70D6 cf. JavaFX' Color + predefinedColors.put("PALEGOLDENROD" , new Color( (int) 238, (int) 232, (int) 170 )); // #EEE8AA cf. JavaFX' Color + predefinedColors.put("PALEGREEN" , new Color( (int) 152, (int) 251, (int) 152 )); // #98FB98 cf. JavaFX' Color + predefinedColors.put("PALETURQUOISE" , new Color( (int) 175, (int) 238, (int) 238 )); // #AFEEEE cf. JavaFX' Color + predefinedColors.put("PALEVIOLETRED" , new Color( (int) 219, (int) 112, (int) 147 )); // #DB7093 cf. JavaFX' Color + predefinedColors.put("PAPAYAWHIP" , new Color( (int) 255, (int) 239, (int) 213 )); // #FFEFD5 cf. JavaFX' Color + predefinedColors.put("PEACHPUFF" , new Color( (int) 255, (int) 218, (int) 185 )); // #FFDAB9 cf. JavaFX' Color + predefinedColors.put("PERU" , new Color( (int) 205, (int) 133, (int) 63 )); // #CD853F cf. JavaFX' Color + predefinedColors.put("PINK" , Color.PINK ); // java.awt.Color + predefinedColors.put("PLUM" , new Color( (int) 221, (int) 160, (int) 221 )); // #DDA0DD cf. JavaFX' Color + predefinedColors.put("POWDERBLUE" , new Color( (int) 176, (int) 224, (int) 230 )); // #B0E0E6 cf. JavaFX' Color + predefinedColors.put("PURPLE" , new Color( (int) 128, (int) 0, (int) 128 )); // #800080 cf. JavaFX' Color + predefinedColors.put("RED" , Color.RED ); // java.awt.Color + predefinedColors.put("ROSYBROWN" , new Color( (int) 188, (int) 143, (int) 143 )); // #BC8F8F cf. JavaFX' Color + predefinedColors.put("ROYALBLUE" , new Color( (int) 65, (int) 105, (int) 225 )); // #4169E1 cf. JavaFX' Color + predefinedColors.put("SADDLEBROWN" , new Color( (int) 139, (int) 69, (int) 19 )); // #8B4513 cf. JavaFX' Color + predefinedColors.put("SALMON" , new Color( (int) 250, (int) 128, (int) 114 )); // #FA8072 cf. JavaFX' Color + predefinedColors.put("SANDYBROWN" , new Color( (int) 244, (int) 164, (int) 96 )); // #F4A460 cf. JavaFX' Color + predefinedColors.put("SEAGREEN" , new Color( (int) 46, (int) 139, (int) 87 )); // #2E8B57 cf. JavaFX' Color + predefinedColors.put("SEASHELL" , new Color( (int) 255, (int) 245, (int) 238 )); // #FFF5EE cf. JavaFX' Color + predefinedColors.put("SIENNA" , new Color( (int) 160, (int) 82, (int) 45 )); // #A0522D cf. JavaFX' Color + predefinedColors.put("SILVER" , new Color( (int) 192, (int) 192, (int) 192 )); // #C0C0C0 cf. JavaFX' Color + predefinedColors.put("SKYBLUE" , new Color( (int) 135, (int) 206, (int) 235 )); // #87CEEB cf. JavaFX' Color + predefinedColors.put("SLATEBLUE" , new Color( (int) 106, (int) 90, (int) 205 )); // #6A5ACD cf. JavaFX' Color + predefinedColors.put("SLATEGRAY" , new Color( (int) 112, (int) 128, (int) 144 )); // #708090 cf. JavaFX' Color + predefinedColors.put("SLATEGREY" , new Color( (int) 112, (int) 128, (int) 144 )); // #708090 cf. JavaFX' Color + predefinedColors.put("SNOW" , new Color( (int) 255, (int) 250, (int) 250 )); // #FFFAFA cf. JavaFX' Color + predefinedColors.put("SPRINGGREEN" , new Color( (int) 0, (int) 255, (int) 127 )); // #00FF7F cf. JavaFX' Color + predefinedColors.put("STEELBLUE" , new Color( (int) 70, (int) 130, (int) 180 )); // #4682B4 cf. JavaFX' Color + predefinedColors.put("TAN" , new Color( (int) 210, (int) 180, (int) 140 )); // #D2B48C cf. JavaFX' Color + predefinedColors.put("TEAL" , new Color( (int) 0, (int) 128, (int) 128 )); // #008080 cf. JavaFX' Color + predefinedColors.put("THISTLE" , new Color( (int) 216, (int) 191, (int) 216 )); // #D8BFD8 cf. JavaFX' Color + predefinedColors.put("TOMATO" , new Color( (int) 255, (int) 99, (int) 71 )); // #FF6347 cf. JavaFX' Color + predefinedColors.put("TRANSPARENT" , new Color( (int) 0, (int) 0, (int) 0 , (int) 0)); // #00000000 cf. JavaFX' Color + predefinedColors.put("TURQUOISE" , new Color( (int) 64, (int) 224, (int) 208 )); // #40E0D0 cf. JavaFX' Color + predefinedColors.put("VIOLET" , new Color( (int) 238, (int) 130, (int) 238 )); // #EE82EE cf. JavaFX' Color + predefinedColors.put("WHEAT" , new Color( (int) 245, (int) 222, (int) 179 )); // #F5DEB3 cf. JavaFX' Color + predefinedColors.put("WHITE" , Color.WHITE ); // java.awt.Color + predefinedColors.put("WHITESMOKE" , new Color( (int) 245, (int) 245, (int) 245 )); // #F5F5F5 cf. JavaFX' Color + predefinedColors.put("YELLOW" , Color.YELLOW ); // java.awt.Color + predefinedColors.put("YELLOWGREEN" , new Color( (int) 154, (int) 205, (int) 50 )); // #9ACD32 cf. JavaFX' Color // ---------------------------------------------------------------------- // BufferedImage Modified: sandbox/rgf/jdor/doc/jdor_doc.html =================================================================== --- sandbox/rgf/jdor/doc/jdor_doc.html 2023-10-30 14:02:20 UTC (rev 1083) +++ sandbox/rgf/jdor/doc/jdor_doc.html 2023-11-14 15:13:41 UTC (rev 1084) @@ -787,7 +787,46 @@ or the name of a Rexx variable referring to a color which should be used from now on. The previously defined color gets gets returned via the Rexx variable <em>RC</em>. + The following color names get predefined and can be directly used (cf. the constants + defined for <a href="https://google.com/search?q=javadoc+javafx+8+Color" target="_blank"><em>javafx.scene.paint.Color</em></a> + which show the color they represent): + <div style="margin: 1em 2em 1em 2em;"> + <em>ALICEBLUE</em>, <em>ANTIQUEWHITE</em>, <em>AQUA</em>, <em>AQUAMARINE</em>, <em>AZURE</em>, + <em>BEIGE</em>, <em>BISQUE</em>, <em>BLACK</em>, <em>BLANCHEDALMOND</em>, <em>BLUE</em>, + <em>BLUEVIOLET</em>, <em>BROWN</em>, <em>BURLYWOOD</em>, <em>CADETBLUE</em>, <em>CHARTREUSE</em>, + <em>CHOCOLATE</em>, <em>CORAL</em>, <em>CORNFLOWERBLUE</em>, <em>CORNSILK</em>, <em>CRIMSON</em>, + <em>CYAN</em>, <em>DARKBLUE</em>, <em>DARKCYAN</em>, <em>DARKGOLDENROD</em>, <em>DARKGRAY</em>, + <em>DARK_GRAY</em>, <em>DARKGREEN</em>, <em>DARKGREY</em>, <em>DARKKHAKI</em>, <em>DARKMAGENTA</em>, + <em>DARKOLIVEGREEN</em>, <em>DARKORANGE</em>, <em>DARKORCHID</em>, <em>DARKRED</em>, + <em>DARKSALMON</em>, <em>DARKSEAGREEN</em>, <em>DARKSLATEBLUE</em>, <em>DARKSLATEGRAY</em>, + <em>DARKSLATEGREY</em>, <em>DARKTURQUOISE</em>, <em>DARKVIOLET</em>, <em>DEEPPINK</em>, + <em>DEEPSKYBLUE</em>, <em>DIMGRAY</em>, <em>DIMGREY</em>, <em>DODGERBLUE</em>, <em>FIREBRICK</em>, + <em>FLORALWHITE</em>, <em>FORESTGREEN</em>, <em>FUCHSIA</em>, <em>GAINSBORO</em>, + <em>GHOSTWHITE</em>, <em>GOLD</em>, <em>GOLDENROD</em>, <em>GRAY</em>, <em>GREEN</em>, + <em>GREENYELLOW</em>, <em>GREY</em>, <em>HONEYDEW</em>, <em>HOTPINK</em>, <em>INDIANRED</em>, + <em>INDIGO</em>, <em>IVORY</em>, <em>KHAKI</em>, <em>LAVENDER</em>, <em>LAVENDERBLUSH</em>, + <em>LAWNGREEN</em>, <em>LEMONCHIFFON</em>, <em>LIGHTBLUE</em>, <em>LIGHTCORAL</em>, + <em>LIGHTCYAN</em>, <em>LIGHTGOLDENRODYELLOW</em>, <em>LIGHTGRAY</em>, <em>LIGHT_GRAY</em>, + <em>LIGHTGREEN</em>, <em>LIGHTGREY</em>, <em>LIGHTPINK</em>, <em>LIGHTSALMON</em>, + <em>LIGHTSEAGREEN</em>, <em>LIGHTSKYBLUE</em>, <em>LIGHTSLATEGRAY</em>, <em>LIGHTSLATEGREY</em>, + <em>LIGHTSTEELBLUE</em>, <em>LIGHTYELLOW</em>, <em>LIME</em>, <em>LIMEGREEN</em>, <em>LINEN</em>, + <em>MAGENTA</em>, <em>MAROON</em>, <em>MEDIUMAQUAMARINE</em>, <em>MEDIUMBLUE</em>, + <em>MEDIUMORCHID</em>, <em>MEDIUMPURPLE</em>, <em>MEDIUMSEAGREEN</em>, <em>MEDIUMSLATEBLUE</em>, + <em>MEDIUMSPRINGGREEN</em>, <em>MEDIUMTURQUOISE</em>, <em>MEDIUMVIOLETRED</em>, + <em>MIDNIGHTBLUE</em>, <em>MINTCREAM</em>, <em>MISTYROSE</em>, <em>MOCCASIN</em>, + <em>NAVAJOWHITE</em>, <em>NAVY</em>, <em>OLDLACE</em>, <em>OLIVE</em>, <em>OLIVEDRAB</em>, + <em>ORANGE</em>, <em>ORANGERED</em>, <em>ORCHID</em>, <em>PALEGOLDENROD</em>, <em>PALEGREEN</em>, + <em>PALETURQUOISE</em>, <em>PALEVIOLETRED</em>, <em>PAPAYAWHIP</em>, <em>PEACHPUFF</em>, + <em>PERU</em>, <em>PINK</em>, <em>PLUM</em>, <em>POWDERBLUE</em>, <em>PURPLE</em>, <em>RED</em>, + <em>ROSYBROWN</em>, <em>ROYALBLUE</em>, <em>SADDLEBROWN</em>, <em>SALMON</em>, <em>SANDYBROWN</em>, + <em>SEAGREEN</em>, <em>SEASHELL</em>, <em>SIENNA</em>, <em>SILVER</em>, <em>SKYBLUE</em>, + <em>SLATEBLUE</em>, <em>SLATEGRAY</em>, <em>SLATEGREY</em>, <em>SNOW</em>, <em>SPRINGGREEN</em>, + <em>STEELBLUE</em>, <em>TAN</em>, <em>TEAL</em>, <em>THISTLE</em>, <em>TOMATO</em>, + <em>TRANSPARENT</em>, <em>TURQUOISE</em>, <em>VIOLET</em>, <em>WHEAT</em>, <em>WHITE</em>, + <em>WHITESMOKE</em>, <em>YELLOW</em>, <em>YELLOWGREEN</em> + </div> + <tr class="ArgumentRowColor"><td><!-- table row --> <td> <td class="argument"> colorNickName r g b [alpha] @@ -2992,7 +3031,7 @@ <hr width="75%"> <small> - JDOR synopsis of commands, version: 100.20230718 + JDOR synopsis of commands, version: 100.20231114 <br>Acknowledgement: the author wishes to thank DI Walter Pachl <br>for his help in testing and proof reading </small> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-10-30 14:02:22
|
Revision: 1083 http://sourceforge.net/p/bsf4oorexx/code/1083 Author: orexx Date: 2023-10-30 14:02:20 +0000 (Mon, 30 Oct 2023) Log Message: ----------- 20231030 Cater for JDK_JAVA_OPTIONS environment variable, inform user if it gets picked up (like Java does), also (new!) notify user if BSF4Rexx_JavaStartupOptions gets picked up as well. Modified Paths: -------------- branches/850/bsf4oorexx.dev/bin/BSF.CLS Modified: branches/850/bsf4oorexx.dev/bin/BSF.CLS =================================================================== --- branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-10-23 12:27:03 UTC (rev 1082) +++ branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-10-30 14:02:20 UTC (rev 1083) @@ -13,6 +13,18 @@ date: + 2023-10-30, ---rgf, - rework parseJavaOptions() to behave like: + - processes @file options (since JDK 17) + - shows duplicate option names + - process environment variable JDK_JAVA_OPTIONS first + - process environment variable BSF4Rexx_JavaStartupOptions next + - if no classpath argument process environment variable CLASSPATH + - if multiple classpath arguments, then process and collect the + denoted files and create a unified classpath argument (like + java.exe behaves) + - if BSFLoadJava() raises a condition, then show the arguments + supplied to it by Rexx to ease debugging + 2023-06-19, ---rgf, - "BSF.ClipBoard": cater for java.lang.IllegalStateException and indicate success/failure with return values 2023-06-18, ---rgf, - changed class "NullDevice" to "Bsf.NullDevice", made it a singleton, @@ -927,15 +939,16 @@ if BsfInvokedBy()=0 then -- JVM not yet loaded do - -- process Java runtime args, if any - jso=value('BSF4Rexx_JavaStartupOptions', ,"ENVIRONMENT") + -- define hard-coded startup values for Java here + jso="" -- default to none if opsys="MACOSX" then -- as of 2010-02-20: if loading Java via Rexx, awt-event thread does not work jso=(jso "-Djava.awt.headless=true")~strip -- make sure that Java hints at the cause of the problem arr=parseJavaOptions(jso) -- will also add -Djava.class.path with exploded CLASSPATH (exploding asterisks '*' if any) - - .routines["XBSFLOADJAVA"]~callWith(arr) + signal on syntax name syntax_load_java -- if potential errors in options, display them + res=.routines["XBSFLOADJAVA"]~callWith(arr) -- load JVM with the supplied startup values + signal on syntax end -- since 2008-06-22 (rgf) this forces RexxAndJava to prepend type indicators! @@ -955,7 +968,7 @@ if initialize.bsf.dir() then -- setup .bsfrexx do - .bsf4rexx~version="850.20230718" -- set version (date distribution got created) + .bsf4rexx~version="850.20231030" -- set version (date distribution got created) .bsf4rexx~opSys =opsys -- save operating system name as supplied by Rexx' PARSE SOURCE .bsf4rexx~opSys1 =opsys~left(1)~upper -- save operating system name's initial letter in uppercase .bsf4rexx~opSys2 =opsys~left(2)~upper -- save operating system name's first two letters in uppercase @@ -987,9 +1000,17 @@ syntax: raise propagate +syntax_load_java: -- show options in case Java or BSF4ooRexx850 could not be initialized successfully + tab="09"x + .error~say(tab "error initializing Java and BSF4ooRexx850, options supplied to Java:") + len=arr~items~length + do counter c option over arr + .error~say(tab "#" c~right(len)":" pp(option) ) + end + say "---" + raise propagate -- let Rexx create the standard error message - -- ::requires "rgf_util2.rex" -- 20180106, rgf, temporarily because of BSF's unknown usage ::requires "BSF4ooRexx850" library @@ -1449,148 +1470,390 @@ ::routine escapeQuotes return '"'||changestr('"', arg(1), '""')||'"' + + /* ================================================================================================= */ /* parse Java startup options which can be given via the operating system environment variable named 'BSF4Rexx.JavaStartupOptions'; returns an array with each option - stored in its own slot + stored in its own slot; version as of 2023-10-30 + + - options can be combined from JDK_JAVA_OPTIONS plus BSF4Rexx_JavaStartupOptions; + if no classpath got set, use CLASSPATH environment variable if any + + - classpath can be given as: + + - "-Djava.class.path=", "-cp", "--class-path", "--classpath" + - multiple classpath options will be combined + - if not seen use CLASSPATH + + - since JDK 17: @jvmoptions ... jvmoptions path to file + + - values can have '...' or "...", + also entire argument may be quoted like: "-Dsome=o h" or '-Dthing=a b' + */ +/** Parses any supplied options and returns an array in which each option has its own + entry. This version will process the startup option values in the following order: + <ol> + <li>from the environment variable <code>JDK_JAVA_OPTIONS</code>, + <li>from the environment variable <code>BSF4Rexx_JavaStartupOptions</code>, and + <li>from the directly supplied argument, if any. + </ol> + If no classpath related startup option gets supplied, the environment variable + <code>CLASSPATH</code> gets used, if present. + + @param val a string or an array of startup options + @return an array in which each startup option is stored separately +*/ ::routine parseJavaOptions public - parse arg options - a=.array~new - i=0 - deli=" '" || '"' -- delimiters for options/option-values - cpPropertyNeedle="-Djava.class.path=" -- rgf, 2021-02-16 - cpPropertySeen? =.false + use strict arg val=.nil -- can be omitted, a string or an array of strings - do mainLoop=0 while options<>"" - pos=pos("-", options) - if pos=0 then -- no more options available? - do - if i=0 then - do - i=1 -- first (and only) entry - a[i]=options -- remainder of value for previous option - end - else - a[i]=a[i] || options -- remainder of value for previous option + q=.queue~new -- allows to push environment variables to front + if \val~isNil then -- if .nil then CLASSPATH environment variable, if set gets processed + do + if val~isA(.string) then q~queue(val) -- append string + else q~appendAll(val) -- append all string elements of array + end - cpPropertySeen? = cpPropertySeen? | abbrev(a[i],cpPropertyNeedle) - leave mainLoop - end + -- .context~package~local~bDebug=.true -- uncomment: will cause initialization error due to classpath options + .context~package~local~bHints=.true -- show user hints and warnings on .error - preVal=substr(options, 1, pos-1) -- get string before dash, if any + bDebug=(.bDebug=.true) -- test just once, whether debug is set - if preVal<>"" then + if bDebug then .error~say( .context~name"/".line":" "q="pp(q) "q~items="pp(q~items) ) + + if bDebug then + do + jjo="--module-path=tgt/testrgf.jar --add-modules=testrgf.module -Xcheck:jni" + b4r=" -cp . --class-path .. --module-path=tgt/testrgf.jar --add-modules=testrgf.module -Xcheck:jni", + "-classpath . -Djava.class.path .. " -- classpath will not list BSF4ooRexx jar, hence an error when loading 'org/rexxla/bsf/engines/rexx/Java4Rexx' + q~push(b4r) + q~push(jjo) + str=.dateTime~new "BSF.CLS" + if .bHints=.true then do - if preVal~length>1 then -- more left than the delimiting blank char? - do -- this value belongs to previous or first (?) option - tmpVal=substr(preVal,1,length(preVal)-1) - if i=0 then - do - i=1 - a[i]=tmpVal -- some unknown first option? - end - else - a[i]=a[i] || tmpVal -- add to previous option's value - - cpPropertySeen? = cpPropertySeen? | abbrev(a[i],cpPropertyNeedle) - end + .error~say(str "NOTE: Picked up 'JDK_JAVA_OPTIONS':" pp(jjo)) + .error~say(str "NOTE: Picked up 'BSF4Rexx_JavaStartupOption':" pp(b4r)) end + end + else -- make sure processing is JDK_JAVA_OPTIONS -> Bsf4Rexx_JavaStartupOption -> supplied arguments, if any + do + B4R_JSOptions = value("BSF4Rexx_JavaStartupOptions",,"ENVIRONMENT") + if B4R_JSOptions<>"" then q~push(B4R_JSOptions) - -- new option to deal with - tmpPos=pos - i=i+1 - do findNextSwitch=1 while .true - nextSwitchPos=pos(" -", options, tmpPos+1) -- get position of next switch - if nextSwitchPos<>0 then -- a new switch found ? - do - begQuot=pos('"', options, tmpPos+1) - if begQuot<nextSwitchPos then -- a quote, check whether " -" is part of it - do - endQuot=pos('"', options, begQuot+1) - if endQuot>nextSwitchPos then -- oops, " -" is part of string, ignore it + JDK_JAVA_OPTIONS = value("JDK_JAVA_OPTIONS" ,,"ENVIRONMENT") + if JDK_JAVA_OPTIONS<>"" then q~push(JDK_JAVA_OPTIONS) + + if .bHints=.true then + do + str=.dateTime~new "BSF.CLS" + if JDK_JAVA_OPTIONS<>"" then .error~say(str "NOTE: Picked up 'JDK_JAVA_OPTIONS':" pp(JDK_JAVA_OPTIONS)) + if B4R_JSOptions<>"" then .error~say(str "NOTE: Picked up 'BSF4Rexx_JavaStartupOptions':" pp(B4R_JSOptions)) + end + end + + if bDebug then .error~say( .context~name"/".line":" "q~items="pp(q~items) "q~allitems:" pp(q~allitems~toString('L','/\')) ) + + tokens = makeTokens(q~allItems) -- parse all arguments into tokens + arrStartup = makeArgArray(tokens) -- create individual startup options from tokens + + if bDebug then + do + say "--> "~copies(10) + say "arrStartup:" pp(arrStartup~toString('L', "|"'0d0a'x)) + say "<-- "~copies(10) + end + + return arrStartup -- return Rexx array with JVM startup options for loading Java + + +/* Tokenize argument string, return tokens without enclosing quotes in array, keep trailing equal signs if any. */ +makeTokens: procedure + use strict arg arr + + bDebug=(.bDebug=.true) -- test just once, whether debug is set + + tokens=.array~new + do counter c str over arr -- iterate over all startup arguments + if bDebug then .error~say( .context~name"/".line":" "round #" c"/"arr~items "| str="pp(str) ) + nextPos=verify(str, ' ', 'N') -- get position of first non-blank + len =length(str) + + if bDebug then .error~say( .context~name"/".line":" "round #" c"/"arr~items "| nextPos="pp(nextPos) "len="pp(len) ) + + do while nextPos<>0, nextPos<=len + ch=str[nextPos] -- get character + if bDebug then .error~say( .context~name"/".line":" "round #" c"/"arr~items "| top of while," "nextPos="pp(nextPos) "ch="pp(ch) "(str[nextPos])" ) + if pos(ch,'"''')>0 then -- we have an enquoted value, remove quotes, place result in array + do + nextPos2=pos(ch, str, nextPos+1) + + if bDebug then .error~say( .context~name"/".line":" "quote" pp(ch) "nextPos="pp(nextPos) "nextPos2="pp(nextPos2) ) + if nextPos2=0 then -- error, quote not closed! + do + tokens~append("error: quote" pp(ch) "not closed in" pp(str) ) + if bDebug then .error~say( .context~name"/".line":" " ... last appended token:" pp(tokens~lastItem) ) + return tokens + end + -- tokens~append(str~substr(nextPos+1, nextPos2-nextPos-1)) + tokens~append(str~substr(nextPos+1, nextPos2-nextPos-1)) + if bDebug then .error~say( .context~name"/".line":" " ... last appended token:" pp(tokens~lastItem) ) + + nextPos=verify(str, ' ', 'N', nextPos2+1) -- find next non-blank + iterate + end + else if ch<>"-" then -- not a switch, but a value + do + nextPos2=pos(" ", str, nextPos+1) -- find next blank + if nextPos2=0 then -- no blanks, hence everything left is token, we are done + do + tokens~append(substr(str,nextPos)) + if bDebug then .error~say( .context~name"/".line":" " ... last appended token:" pp(tokens~lastItem) ) + nextPos=0 -- we are done + iterate + end + + tmpStr=substr(str, nextPos, nextPos2-nextPos) + if tmpStr="" then + do + nextPos=0 -- we are donde + iterate + end + tokens~append(tmpStr) + if bDebug then .error~say( .context~name"/".line":" " ... last appended token:" pp(tokens~lastItem) ) + + nextPos=nextPos2+1 + end + else -- a switch starting either with "-" or "--" + do + nextPos2=verify(str, " '""=", "M", nextPos+1) -- find next blank or quote + if nextPos2=0 then -- no blank or quote, hence everything left is token, we are done + do + tokens~append(substr(str,nextPos)) + if bDebug then .error~say( .context~name"/".line":" " ... last appended token:" pp(tokens~lastItem) ) + nextPos=0 -- we are done + iterate + end + ch=str[nextPos2] -- get character, a blank or quote + if ch='=' then -- separate switch including equal sign as a token, remainder is value + do + tokens~append(str~substr(nextPos, nextPos2-nextPos+1)) + if bDebug then .error~say( .context~name"/".line":" " ... last appended token:" pp(tokens~lastItem) ) + nextPos=nextPos2+1 -- should be a value, can be enquoted + iterate + end + + if ch=' ' then -- switch ended + do + tokens~append(str~substr(nextPos, nextPos2-nextPos)) + if bDebug then .error~say( .context~name"/".line":" " ... last appended token:" pp(tokens~lastItem) ) + nextPos=verify(str, " ", "N", nextPos2+1) -- get next non-blank + iterate + end + else -- find closing quote + do + nextPos3=pos(ch, str, nextPos2+1) + if nextPos3=0 then -- error, no matching closing quote! do - tmpPos=endQuot -- define new start for looking for next switch - iterate findNextSwitch -- try to find next switch + tokens~append("error: quote" pp(ch) "not closed in" pp(str) ) + if bDebug then .error~say( .context~name"/".line":" " ... last appended token:" pp(tokens~lastItem) ) + return tokens end - end - a[i]=substr(options, pos, nextSwitchPos-pos) - cpPropertySeen? = cpPropertySeen? | abbrev(a[i],cpPropertyNeedle) + -- is there a blank or quote left? + if bDebug then .error~say( .context~name"/".line":" "switch seeking closing quote, nextPos3="pp(nextPos3) "(closing quote present)" ) + tokens~append(str~substr(nextPos2, nextPos3-nextPos2)) + if bDebug then .error~say( .context~name"/".line":" " ... last appended token:" pp(tokens~lastItem) ) + nextPos=verify(str," ","N",nextPos3+1) -- find next non-blank character + iterate + end - options=substr(options, nextSwitchPos+1) - iterate mainLoop - end + tokens~append(substr(nextPos, nextPos2-nextPos-1)) + if bDebug then .error~say( .context~name"/".line":" " ... last appended token:" pp(tokens~lastItem) ) + nextPos=nextPos2+1 + end + end + if bDebug then + do + .error~say + .error~say( .context~name"/".line":" "#" c "- worked on string :" pp(str) ) + .error~say( .context~name"/".line":" " -> current tokens:" pp(tokens~toString('L','|')) ) + .error~say + end + end + if bDebug then + do + .error~say + .error~say( .context~name"/".line":" "DONE! arr :" pp(arr ~toString('L','|')) ) + .error~say + if bDebug then .error~say( .context~name"/".line":" "DONE! tokens:" pp(tokens~toString('L','|')) ) + end - if nextSwitchPos=0 then -- last option in hand - do - a[i]=substr(options, pos) - cpPropertySeen? = cpPropertySeen? | abbrev(a[i],cpPropertyNeedle) - leave mainLoop - end - end + return tokens - end - -- if java.class.path not defined, use CLASSPATH (remove duplicates, explode trailing asterisks '*'; - -- in Java 6 explosion of asterisks was done, at least starting with Java 8 we need to do that!) - if cpPropertySeen?=.false then - do - processedCP=get_processed_classpath() - if processedCP<>"" then -- if CLASSPATH was set, use it in the processed form - a~append(cpPropertyNeedle || processedCP) - end - return a - -/* - 2021-02-16: make sure we explode trailing asterisks (*) to individual paths to contained jar/JAR files, - cf. <https://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html>; - this routine will remove duplicates and non-existing paths, and replace '*' with the jar/JAR files - in that directory +/* create Rexx array with startup-options from supplied tokens; + if classpath is not among the options the environment variable CLASSPATH + will get honored if present */ -get_processed_classpath: procedure - newCP="" -- exploded (new) CLASSPATH - pathSep=.file~pathSeparator -- get system's path separator - currCP=value("CLASSPATH",,"ENVIRONMENT") -- get current value - val=currCP - if val~pos('*')>0 then -- explode asterisks - do - processed =.set~new -- paths to jar/JAR/zip already processed - do until val="" - parse var val path (pathSep) val - if path="" | path="*" then iterate -- skip empty paths or paths that consist of the asterisk only +makeArgArray: procedure + use strict arg tokens -- array of tokens from which arguments get built + arr=.array~new -- Rexx array with each element containing a Java startup option - if processed~hasIndex(path) then iterate -- already processed (a dupe), skip it - processed~put(path) -- memorize that we processed this + cpSeen? =.false -- CLASSPATH supplied with startup arguments? + cpItems =.array~new -- collect all files in case there are multiple classpath arguments (behave like java itself) + cpSeen =.set~new -- collect all files that got added already + seen =.set~new -- used to maintain processed/seen options + cpOptions="-Djava.class.path -cp --class-path -classpath" -- various argument names for CLASSPATH argument - if path~right(1)="*" then -- explode + bDebug=(.bDebug=.true) -- test just once, whether debug is set + + -- options: -Xcheck:jni -Xfuture --add-reads --add-opens + max=tokens~items + do i=1 to max + str=tokens[i] -- get string + if str[1]='-' then -- expected option in hand + do + trailingEqual?= str~right(1)='=' + if trailingEqual? then + key=left(str, length(str)-1) -- remove trailing equal sign (gets appended later) + else + key=str + + if bDebug then .error~say( .context~name"/".line":" "key -->" pp(key) "| cpOptions="pp(cpOptions) "wordpos(key, cpOptions)="pp( wordpos(key, cpOptions) ) ) + + cpInHand?=wordpos(key, cpOptions)>0 -- a classpath option? + + if bDebug, cpInHand? then + .error~say( .context~name"/".line":" "CLASSPATH in hand:" pp(str) "cpSeen?" pp(cpSeen?) ) + + if cpInHand? then -- a classpath argument in hand? + do + if cpSeen? then -- classpath already processed? + say .dateTime~new "BSF.CLS" "WARNING: CLASSPATH argument already processed, another classpath argument encountered:" pp(str) "with the value:" pp(tokens[i+1]) + else + cpSeen?=.true + end + + if key~pos(':')>0 then -- if option contains colon, extract option only + parse var key key ':' . + + bDuplicate?=seen~hasindex(key) -- option already supplied and processed? + seen~put(key) -- remember option + + if bDuplicate? then + say .dateTime~new "BSF.CLS" "WARNING: duplicate key" pp(key) "in startup options" + + -- possible to have a token as: + -- -Dabc.de "aljdld", if original was enquoted like '-Dabc.de "aljdld"' + -- -Dabc.de="aljdld", if original was enquoted like '-Dabc.de="aljdld"' + if str[2]="D", \trailingEqual? then do - dir=path~left(path~length-1) -- remove trailing asterisk - if sysFileExists(dir)=.false then iterate -- non-existing path, skip it - do ext over .array~of('.jar', '.JAR') -- get and add the jar/JAR files found - pattern=path || ext - call sysfiletree pattern, "files.", "fo" - do i=1 to files.0 -- add all found jar files - if processed~hasIndex(files.i) then iterate -- already on new CLASSPATH, skip - processed~put(files.i) - if newCP="" then newCP=files.i - else newCP=newCP || pathSep || files.i + pos=verify(str," '""", 'M') -- does the token contain a blank or quotes, then value already present + if pos>0 then + do + arr~append(str) + iterate + end + end + + -- if next token is a value, supply it, make sure that option is followed by an equal sign + if i<max then + do + nextVal=tokens[i+1] + ch=nextVal~strip~left(1) + if pos(ch,"-@")=0 then -- add value + do + if cpInHand? then -- explode classpath value if necessary + do + if bDebug then .error~say( .context~name"/".line":" "cpInHand?=1, nextVal="pp(nextVal) "tokens[i+1]="pp(tokens[i+1]) ) + call processClassPath nextVal, cpItems, cpSeen + i+=1 + iterate end + arr~append(str || trailingEqual?~?("","=") || nextVal) + i+=1 + iterate end + end + arr~append(str) -- just the option + end + else -- plain value + do + arr~append(str) -- just the option + end + end + + if \cpSeen? then -- no classpath set, use CLASSPATH environment variable, if set + do + cp="-Djava.class.path=" + cpValue=value('CLASSPATH',,'ENVIRONMENT') + if cpValue<>"" then + do + if bDebug then .error~say(.dateTime~new "BSF.CLS" "NOTE: Picked up 'CLASSPATH':" pp(cpValue)) + call processClassPath cpValue, cpItems, cpSeen + arr~append("-Djava.class.path="cpItems~toString('L', .rexxInfo~pathSeparator)) + end + end + else -- create classpath argument + do + arr~append("-Djava.class.path="cpItems~toString('L', .rexxInfo~pathSeparator)) + end + + if bDebug then .error~say( .context~name"/".line":" "DONE! makeArgArray:" pp(arr~toString('L',"|"'0d0a'x)) ) + + return arr + +/* Process CLASSPATH values, explode paths that have a single '*' (use all jar and zip files + in that directory; remove/ignore possible duplicate values +*/ +processClassPath: procedure + use strict arg cpValue, cpItems, cpSeen + + bDebug=(.bDebug=.true) -- test just once, whether debug is set + + if bDebug then .error~say( .context~name"/".line":" "cpValue="pp(cpValue) ) + + ps=.rexxInfo~pathSeparator -- ; (Windows) or : (Unix) + ds=.rexxInfo~directorySeparator -- \ (windows) or / (Unix) + asterisk=ds||'*' + + do while cpValue<>"" + parse var cpValue file (ps) cpValue + if sysFileExists(file) then + do + if \cpSeen~hasIndex(file) then -- honor, if not processed yet + do + cpSeen~put(file) + cpItems~append(file) end - else -- just append + end + else -- if non-existent file has a trailing asterisk, explode it, otherwise ignore + do + if file~right(2)=asterisk then -- \* or /* do - if sysFileExists(path)=.false then iterate -- non-existing path, skip it - if newCP="" then newCP=path - else newCP=newCP || pathSep || path + do ext over ".jar", ".zip" -- seek .jar and .zip files only! + call sysFileTree strip(file,"T")||ext, 'files.', 'FO' -- files only, fully qualified + do i=1 to files.0 -- append all found files + cpItems~append(files.i) + end + end end end end - if newCP="" then return currCP - return newCP + if bDebug then -- show + do + .error~say( .context~name"/".line":" ) + len=cpItems~items~length + do counter c fn over cpItems + .error~say( " #" c~right(len)":" pp(fn) ) + end + end + return + /* ================================================================================================= */ /* ------------------------------------------------------------- routine which mimicks C/Java's "x ? a : b;" @@ -1602,7 +1865,6 @@ return arg(3) - /* ================================================================================================= */ /* ------------------------------------------------------------- floating class method meant for attaching to imported Java This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-10-23 12:27:06
|
Revision: 1082 http://sourceforge.net/p/bsf4oorexx/code/1082 Author: orexx Date: 2023-10-23 12:27:03 +0000 (Mon, 23 Oct 2023) Log Message: ----------- Fix two wrong upcalls (got only changed on the Java side); silence '-Xcheck:jni' by invoking ExceptionCheck(), even if not really necessary (cf. Java's use in awt) Modified Paths: -------------- branches/850/bsf4oorexx.dev/source_cc/BSF4ooRexx.cc Modified: branches/850/bsf4oorexx.dev/source_cc/BSF4ooRexx.cc =================================================================== --- branches/850/bsf4oorexx.dev/source_cc/BSF4ooRexx.cc 2023-10-09 11:02:50 UTC (rev 1081) +++ branches/850/bsf4oorexx.dev/source_cc/BSF4ooRexx.cc 2023-10-23 12:27:03 UTC (rev 1082) @@ -36,6 +36,16 @@ inline jint impl_jniRexxHaltInterpreterInstance (JNIEnv *env, jobject jobj, jstring j_rii_ID) + 2023-10-23, rgf: - silence some warnings when configuring JVM with "-Xcheck:jni"; + needle used: "// rgf, 20231023" + NOTE: Java itself (e.g. awt) does not always + check for exceptions, such that JNI warnings get generated; as long + as a pending Java exception gets handled one way (in native code) or + another (in Java code) + + 2023-10-22, rgf: - correct wrong upcalls (changed return type on Java side, but was not + adjusted on native side) + 2023-02-25, rgf: - remove fprintf() format warning (%lu -> %zu) 2022-10-16, rgf: - resolve asterisk (*) wildcard character in CLASSPATH/java.class.path, needed if Java gets loaded by Rexx as the JVM does not resolve it @@ -1112,21 +1122,21 @@ #if defined (BSF4REXX_32_BIT) #if defined (BSF4REXX_DEBUG_VERSION) - #define BSF_VERSION "850.20230225 org/rexxla/bsf/engines/rexx_DEBUG 32-bit" // version: "MajorNumber"."YYYYMMDD" + #define BSF_VERSION "850.20231023 org/rexxla/bsf/engines/rexx_DEBUG 32-bit" // version: "MajorNumber"."YYYYMMDD" #else - #define BSF_VERSION "850.20230225 org/rexxla/bsf/engines/rexx 32-bit" // version: "MajorNumber"."YYYYMMDD" + #define BSF_VERSION "850.20231023 org/rexxla/bsf/engines/rexx 32-bit" // version: "MajorNumber"."YYYYMMDD" #endif #elif defined (BSF4REXX_64_BIT) #if defined (BSF4REXX_DEBUG_VERSION) - #define BSF_VERSION "850.20230225 org/rexxla/bsf/engines/rexx_DEBUG 64-bit" // version: "MajorNumber"."YYYYMMDD" + #define BSF_VERSION "850.20231023 org/rexxla/bsf/engines/rexx_DEBUG 64-bit" // version: "MajorNumber"."YYYYMMDD" #else - #define BSF_VERSION "850.20230225 org/rexxla/bsf/engines/rexx 64-bit" // version: "MajorNumber"."YYYYMMDD" + #define BSF_VERSION "850.20231023 org/rexxla/bsf/engines/rexx 64-bit" // version: "MajorNumber"."YYYYMMDD" #endif #else #if defined (BSF4REXX_DEBUG_VERSION) - #define BSF_VERSION "850.20230225 org/rexxla/bsf/engines/rexx_DEBUG n/a-bit" // version: "MajorNumber"."YYYYMMDD" + #define BSF_VERSION "850.20231023 org/rexxla/bsf/engines/rexx_DEBUG n/a-bit" // version: "MajorNumber"."YYYYMMDD" #else - #define BSF_VERSION "850.20230225 org/rexxla/bsf/engines/rexx n/a-bit" // version: "MajorNumber"."YYYYMMDD" + #define BSF_VERSION "850.20231023 org/rexxla/bsf/engines/rexx n/a-bit" // version: "MajorNumber"."YYYYMMDD" #endif #endif @@ -2672,6 +2682,13 @@ env->CallObjectMethod(proxy, defaultJVM->mid_RexxProxy_setBsfRegistryKey, j_keyValueWithoutPrefix); + // rgf, 20231023 + if ( env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + env->ExceptionDescribe(); + env->ExceptionClear(); + } + } if (bReturnWithPrefix==1) @@ -2687,7 +2704,8 @@ // allows to unregister a bean from the BSFRegistry inline jint RgfUnregisterBean(JNIEnv *env, jobject rajo, jobject beanName) { - jint refCount=env->CallBooleanMethod(rajo, + // jint refCount=env->CallBooleanMethod(rajo, + jint refCount=env->CallIntMethod(rajo, defaultJVM->mid_RexxAndJava_unregisterBean, beanName); return refCount; @@ -2716,7 +2734,14 @@ jobject j_rexxEngine=env->CallObjectMethod(rajo, defaultJVM->mid_RexxAndJava_getRexxEngine, NULL); + // rgf, 20231023 + if ( env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + env->ExceptionDescribe(); + env->ExceptionClear(); + } + CSTRING c_objID =RgfAddProxyObject(rtc, robj, rpo); // add to OREXX registry, save ID string #if defined (DEBUG_REXX_PROXY) @@ -2949,6 +2974,12 @@ jobject jobj=env->CallObjectMethod(rajo, defaultJVM->mid_RexxAndJava_convFromJNI, j_returnType, jStringValue); // do the conversion + // rgf, 20231023 + if ( env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + env->ExceptionDescribe(); + env->ExceptionClear(); + } env->DeleteLocalRef(jStringValue); return jobj; @@ -2969,14 +3000,15 @@ jobject jobj=env->CallObjectMethod(rajo, defaultJVM->mid_RexxAndJava_convFromRexx, jbeanName); // invoke toString() - env->DeleteLocalRef(jbeanName); - - // TODO: check whether clearing exception is truly o.k. + // rgf, 20231023 if ( env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object { env->ExceptionDescribe(); env->ExceptionClear(); } + + env->DeleteLocalRef(jbeanName); + return jobj; } @@ -3064,7 +3096,14 @@ jstring j_obj_ID=(jstring) env->CallObjectMethod(j_obj, defaultJVM->mid_RexxProxy_getRexxObjectID, NULL); // get obj_ID + // rgf, 20231023 + if ( env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + env->ExceptionDescribe(); + env->ExceptionClear(); + } + tmpStr=(char *) JNU_GetStringNativeChars(env, j_obj_ID); // convert to native string #if defined(DEBUG_RGF_PROCESS_J_ARG1) @@ -3090,6 +3129,13 @@ if (env->IsInstanceOf(j_obj, defaultJVM->clz_NetRexx)==JNI_TRUE) { j_obj=env->CallObjectMethod(j_obj, defaultJVM->mid_NetRexx_toString); + // rgf, 20231023 + if ( env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + env->ExceptionDescribe(); + env->ExceptionClear(); + } + } } #endif @@ -3122,7 +3168,14 @@ jstring j_beanName = (jstring) env->CallObjectMethod(rajo, defaultJVM->mid_RexxAndJava_registerBean4JNI, j_obj); + // rgf, 20231023 + if ( env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + env->ExceptionDescribe(); + env->ExceptionClear(); + } + // get char* beanName, do a bsf.wrap() if available; return that result CSTRING c_beanName = env->GetStringUTFChars(j_beanName, JNI_FALSE); res= rtc->String(c_beanName); // create Rexx string @@ -3367,6 +3420,12 @@ jstring j_obj_ID=(jstring) env->CallObjectMethod(jobj, defaultJVM->mid_RexxProxy_getRexxObjectID, NULL); // get obj_ID + // rgf, 20231023 + if ( env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + env->ExceptionDescribe(); + env->ExceptionClear(); + } // turn into Rexx string, lookup and return the Rexx object char * tmpStr= JNU_GetStringNativeChars(env, j_obj_ID); // convert to native string @@ -3417,6 +3476,12 @@ jstring j_beanName = (jstring) env->CallObjectMethod(rajo, defaultJVM->mid_RexxAndJava_registerBean4JNI, jobj); + // rgf, 20231023 + if ( env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + env->ExceptionDescribe(); + env->ExceptionClear(); + } // get char* beanName, do a bsf.wrap() if available; return that result CSTRING c_beanName = env->GetStringUTFChars(j_beanName, JNI_FALSE); @@ -4299,6 +4364,13 @@ defaultJVM->mid_RexxAndJava_registerBean4JNI, jo); + // rgf, 20231023 + if ( param->env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + param->env->ExceptionDescribe(); + param->env->ExceptionClear(); + } + // get char* beanName, do a bsf.wrap() if available; return that result CSTRING c_beanName = param->env->GetStringUTFChars(j_beanName, JNI_FALSE); RexxStringObject r_beanName = rtc->String(c_beanName); // create Rexx string @@ -4503,7 +4575,14 @@ jstring j_beanName = (jstring) param->env->CallObjectMethod(param->rajo, defaultJVM->mid_RexxAndJava_registerBean4JNI, jo); + // rgf, 20231023 + if ( param->env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + param->env->ExceptionDescribe(); + param->env->ExceptionClear(); + } + // get char* beanName, do a bsf.wrap() if available; return that result CSTRING c_beanName = param->env->GetStringUTFChars(j_beanName, JNI_FALSE); @@ -4666,6 +4745,13 @@ jresult=param->env->CallObjectMethod(param->rajo, defaultJVM->mid_RexxAndJava_lookupBean4JNI, jstr); + // rgf, 20231023 + if ( param->env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + param->env->ExceptionDescribe(); + param->env->ExceptionClear(); + } + param->env->DeleteLocalRef(jstr); } else // any other Rexx object, wrap it up as a (Java) RexxProxy @@ -6973,7 +7059,14 @@ jstring j_beanName = (jstring) param.env->CallObjectMethod(param.rajo, defaultJVM->mid_RexxAndJava_registerBean4JNI, jba); - +/*-- activate to silence -Xcheck:jni a little bit */ + // rgf, 20231023 + if ( param.env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + param.env->ExceptionDescribe(); + param.env->ExceptionClear(); + } +/* -- */ // get char* beanName, do a bsf.wrap() if available; return that result CSTRING c_beanName=param.env->GetStringUTFChars(j_beanName, JNI_FALSE); RexxStringObject r_beanName=context->String(c_beanName); // create Rexx string @@ -7002,6 +7095,15 @@ defaultJVM->mid_RexxAndJava_lookupBean4JNI, jObjectName ); +/*-- activate to silence -Xcheck:jni a little bit */ + // rgf, 20231023 + if ( param.env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + param.env->ExceptionDescribe(); + param.env->ExceptionClear(); + } +/* -- */ + param.env->DeleteLocalRef(jObjectName); if (jba==NULL) // no bean found by the given beanName @@ -7607,6 +7709,13 @@ defaultJVM->mid_RexxAndJava_lookupBean4JNI, j_beanNameOrMsg ); + // rgf, 20231023 + if ( param.env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + param.env->ExceptionDescribe(); + param.env->ExceptionClear(); + } + param.env->DeleteLocalRef(j_beanNameOrMsg); if (jobj==NULL) // no bean found by the given beanName @@ -7972,9 +8081,16 @@ } jstring jstrBeanName=JNU_CreateJavaString(jenv, context->threadContext, rso); - refCount=jenv->CallStaticBooleanMethod(defaultJVM->clz_RexxAndJava, + // refCount=jenv->CallStaticBooleanMethod(defaultJVM->clz_RexxAndJava, + refCount=jenv->CallStaticIntMethod(defaultJVM->clz_RexxAndJava, defaultJVM->mid_RexxAndJava_unregisterBean4JNI, jstrBeanName); + // rgf, 20231023 + if ( jenv->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + jenv->ExceptionDescribe(); + jenv->ExceptionClear(); + } jenv->DeleteLocalRef(jstrBeanName); @@ -8170,7 +8286,14 @@ jobject j_rexxConfiguration=param.env->CallObjectMethod(param.rajo, defaultJVM->mid_RexxAndJava_getRexxConfiguration, NULL); + // rgf, 20231023 + if ( param.env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + param.env->ExceptionDescribe(); + param.env->ExceptionClear(); + } + if (mode==0) // adding a new command handler { CSTRING c_beanName = NULL; // the beanName of the exceptionProxy @@ -8183,6 +8306,13 @@ defaultJVM->mid_RexxAndJava_lookupBean4JNI, j_beanName ); + // rgf, 20231023 + if ( param.env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + param.env->ExceptionDescribe(); + param.env->ExceptionClear(); + } + param.env->DeleteLocalRef(j_beanName); // error: no bean found by the given beanName or object not a RexxCommandHandler @@ -8213,6 +8343,13 @@ jName, // < 250 chars! jobj ); + // rgf, 20231023 + if ( param.env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + param.env->ExceptionDescribe(); + param.env->ExceptionClear(); + } + param.env->DeleteLocalRef(jName); param.env->DeleteLocalRef(jobj); @@ -8229,6 +8366,13 @@ else // get the list (string array) of currently defined Java command handlers { jobjectArray jarr=(jobjectArray) param.env->CallObjectMethod(j_rexxConfiguration, defaultJVM->mid_RexxConfiguration_getCommandHandlersAsStringArray); + // rgf, 20231023 + if ( param.env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + param.env->ExceptionDescribe(); + param.env->ExceptionClear(); + } + if (jarr==NULL || param.env->GetArrayLength(jarr)==0) { ropResult=context->NewArray(0); // define an empty Rexx array @@ -12354,9 +12498,14 @@ struRii->rexxconf=param.env->CallObjectMethod(struRii->rajo, defaultJVM->mid_RexxAndJava_getRexxConfiguration); + // rgf, 20231023 + if ( param.env->ExceptionCheck() ) // lighter (jboolean: JNI_TRUE, if pending exception), does not create exception object + { + param.env->ExceptionDescribe(); + param.env->ExceptionClear(); + } } - // get Java command handler object, if any jstring jaddress=param.env->NewStringUTF(context->CString(address)); @@ -12469,15 +12618,21 @@ } // public abstract Object handleCommand(Object slot, String address, String command); - jobject jresult=NULL; + jobject jresult =NULL; - jstring jcommand=param.env->NewStringUTF(context->CString(command)); + jstring jcommand=NULL; + jmethodID jmid = NULL; - jmethodID jmid=param.env->GetMethodID(param.env->GetObjectClass(jhandler), - CONFIG_REXX_COMMAND_HANDLER_NAME, - CONFIG_REXX_COMMAND_HANDLER_SIGNATURE - ); + if (! param.env->ExceptionCheck()) + { + jcommand=param.env->NewStringUTF(context->CString(command)); + jmid=param.env->GetMethodID(param.env->GetObjectClass(jhandler), + CONFIG_REXX_COMMAND_HANDLER_NAME, + CONFIG_REXX_COMMAND_HANDLER_SIGNATURE + ); + } + if (param.env->ExceptionCheck()) { param.env->ExceptionClear(); // clear the Java exception This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-10-09 11:02:52
|
Revision: 1081 http://sourceforge.net/p/bsf4oorexx/code/1081 Author: orexx Date: 2023-10-09 11:02:50 +0000 (Mon, 09 Oct 2023) Log Message: ----------- 20231009 Commit removal of 641 versions. Modified Paths: -------------- branches/850/README.txt branches/850/bsf4oorexx.dev/bin/BSF.CLS branches/850/bsf4oorexx.dev/information/jdor/jdor_doc.html branches/850/bsf4oorexx.dev/source_java/JavaDrawingHandler.java branches/850/createDistributionForBSF4ooRexx8.cmd branches/850/make-docs-apache.cmd branches/850/samples/1-260_getJavaMembers.rxj branches/850/samples/2-130_JDOR_animate_two_frames.rxj branches/850/samples/3-110_JDOR_animate_composite.rxj Modified: branches/850/README.txt =================================================================== --- branches/850/README.txt 2023-09-13 12:39:45 UTC (rev 1080) +++ branches/850/README.txt 2023-10-09 11:02:50 UTC (rev 1081) @@ -23,7 +23,7 @@ - whenever ooRexx-RFEs linked to BSF4ooRexx get realized by the ooRexx team, apply them in the BSF4ooRexx package (especially the feature where one could learn that the Rexx interpreter is in shutdown mode, such that no callbacks from Java to Rexx are passed on). - whenever ooRexx gets debug and profile APIs, make them available, such that Java based SDKs for ooRexx can be created, - + - maybe add JSR-223 support (can be implemented using a generic BSF 2.4 wrapper), if users would need it. Pleae feel free to add to this document. @@ -30,3 +30,8 @@ 2011-04-05, Rony G. Flatscher + +For debugging JavaFX (rgf, 20230930): + + set BSF4Rexx_JavaStartupOptions=-Djavafx.verbose=true + Modified: branches/850/bsf4oorexx.dev/bin/BSF.CLS =================================================================== --- branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-09-13 12:39:45 UTC (rev 1080) +++ branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-10-09 11:02:50 UTC (rev 1081) @@ -955,7 +955,7 @@ if initialize.bsf.dir() then -- setup .bsfrexx do - .bsf4rexx~version="850.20230621" -- set version (date distribution got created) + .bsf4rexx~version="850.20230718" -- set version (date distribution got created) .bsf4rexx~opSys =opsys -- save operating system name as supplied by Rexx' PARSE SOURCE .bsf4rexx~opSys1 =opsys~left(1)~upper -- save operating system name's initial letter in uppercase .bsf4rexx~opSys2 =opsys~left(2)~upper -- save operating system name's first two letters in uppercase Modified: branches/850/bsf4oorexx.dev/information/jdor/jdor_doc.html =================================================================== --- branches/850/bsf4oorexx.dev/information/jdor/jdor_doc.html 2023-09-13 12:39:45 UTC (rev 1080) +++ branches/850/bsf4oorexx.dev/information/jdor/jdor_doc.html 2023-10-09 11:02:50 UTC (rev 1081) @@ -292,7 +292,7 @@ one can redirect like this (the <em>.output</em> monitor defaults to the <em>.stdout</em> stream): - <pre>ADDRESS JDOR WITH using output (.output) /* activate error redirection */ </pre> + <pre>ADDRESS JDOR WITH using output (.output) /* activate output redirection */ </pre> <li>redirecting <em>ERROR</em>: all commands causing an error or failure condition will supplied together with the kind of error or failure. In the case of a failure more @@ -754,7 +754,7 @@ <!-- -------------------------------------------------------- --> <tr class="CommandRowColumn"><!-- table row --> <td class="cmdNr"> - <td class="command" id="cmdColor"> "color" + <td class="command" id="cmdColor"> "color"<br> "colour" <td colspan="2"> Query, get and set, define and set the color. <br>Querying the current value (no argument supplied) will return it, setting (changing) the value to a new value will return the old (previously set) value @@ -772,6 +772,9 @@ and optionally <em>alpha</em>, a <em>java.awt.Color</em> of that type gets created, registered with the supplied <em>colorNickName</em> and then used for setting the new color. + + <br>The command name <em>colour</em> is an alias, a synonym for this command. + <br>Cf. the Java documentation for the Java class <em>Graphics[2D]</em> and the methods <em>getColor()</em>, <em>setColor(...)</em>, as well as the Java class <em>java.awt.Color</em>. @@ -2982,230 +2985,14 @@ </table> -<p> <!-- rgf 20230603 --> -<p> -<hr width="75%"> -<p> -<h2 id="h2AreaCommands"><em>Area</em> Related Related commands </h2> -<nav> -<a href="#purposeOfJDOR">Purpose</a> | -<a href="#briefOverview">Brief Overview</a> | -<a href="#synopsisOfJDOR">Synopsis JDOR</a> | -<a href="#jdorShapes">JDOR Shapes</a> (<a href="#h2ShapeCommands">Shapes</a>, <a href="#h2PathCommands">Path2D</a>) -</nav> - -<p>The <em>Area</em> (<a href="https://google.com/search?q=javadoc+8+Area" target="_blank"><em>java.awt.geom.Area</em></a>) - shape allows for creating (closed) areas from any kind of <em>Shape</em> and - allows for applying "Constructive Area Geometry (CAG)" operations. - -<p>Here the <em>JDOR</em> commands that are related to any <em>Area</em> <em>Shape</em>: - <p> - <table> - <tr> - <tr class="TableHeader"> - <th> - <th> Command - <th> Argument(s) - <th> Description - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathAppend"> "pathAppend" TODO - <td colspan="3"> The named <em>Path2D</em> shape gets appended by the - named <em>Shape</em> or <em>PathIterator</em>. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName spNickName [connect=.true] - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape, <em>spNickName</em> either a - <em>Shape</em> or <em>PathIterator</em> that should be appended. - The optional <em>connect</em> argument controls whether - the appended shape should get connected with a line segment (default). - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathClone"> "pathClone" - <td colspan="3"> The named <em>Path2D</em> shape gets cloned and returned. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName [clonedNickName] - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape, that gets cloned and returned. If the optional <em>cloneNickName</em> - is specified then the clone gets registered with the uppercased - <em>cloneNickName</em> as index. - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathClose"> "pathClose" - <td colspan="3"> The named <em>Path2D</em> shape will have its current segment - closed by drawing a straight line back to the last <em>pathMoveTo</em> position. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape, of which the last segment gets closed by drawing a line - to the last <em>pathMoveTo</em> position. - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathCurrentPoint"> "pathCurrentPoint" - <td colspan="3"> Returns the current point (the position of the last <em>pathMoveTo</em>) - of the named <em>Path2D</em> shape. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape, which current point gets returned. - <br> - <em>Note:</em> if no <em>pathMoveTo</em> was issued yet, then <em>.nil</em> - gets returned, otherwise a blank delimited Rexx string in - the form of: "<em>x y</em>". - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathCurveTo"> "pathCurveTo" - <td colspan="3"> Creates a cubic parametric curve segment. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName ctrlx1 ctrly1 ctrlx2 ctrly2 x y - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape for which a cubic parametric curve segment gets - created between the points <em>currentPoint</em> - (cf. <em>pathCurrentPoint</em> command above) - and the point with the co-ordinate <em>x/y</em> controlled by the two control points located - at <em>ctrlx1/ctrly1</em> and <em>ctrlx2/ctrly2</em>. - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathLineTo"> "pathLineTo" - <td colspan="3"> Creates a line segment. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName x y - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape for which a line segment gets - created between the points <em>currentPoint</em> - (cf. <em>pathCurrentPoint</em> command above) - and the point with the co-ordinate <em>x/y</em>. - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathMoveTo"> "pathMoveTo" - <td colspan="3"> Adds a point to the path at the supplied position. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName x y - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape for which a point should get added at <em>x/y</em> - (making it the <em>currentPoint</em>, cf. - <em>pathCurrentPoint</em> command above). - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathQuadTo"> "pathQuadTo" - <td colspan="3"> Creates a quadradic parametric curve segment. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName ctrlx ctrly x y - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape for which a quadradic parametric curve segment gets - created between the points <em>currentPoint</em> - (cf. <em>pathCurrentPoint</em> command above) - and the point with the co-ordinate <em>x/y</em> controlled by - the control point located at <em>ctrlx/ctrly</em>. - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathReset"> "pathReset" - <td colspan="3"> The named <em>Path2D</em> shape will be reset to - become empty. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape, which gets reset to become empty. - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathTransform"> "pathTransform" - <td colspan="3"> The named <em>Path2D</em> shape gets transformed. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName tNickName - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape, that gets transformed as defined by <a href="#cmdTransform"><em>tNickName</em> - (an <em>AffineTransform</em>)</a> retrieved from the registry, and - if does not exist from a Rexx variable by that name. - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathWindingRule"> "pathWindingRule" - <td colspan="3"> Queries or sets the <em>winding rule</em> of the named - <em>Path2D</em> shape. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName [newValue] - <td> Returns or sets the <em>winding rule</em> of the <em>Path2D</em> shape - denoted by <em>pNickName</em>. If <em>newValue</em> is supplied, it - needs to be <em>WIND_EVEN_ODD</em> or <em>0</em>, alternatively - <em>WIND_NON_ZERO</em> or <em>1</em>. - - - </table> - - -<p> <center> <hr width="75%"> <small> - JDOR synopsis of commands, version: 100.20230612 + JDOR synopsis of commands, version: 100.20230718 <br>Acknowledgement: the author wishes to thank DI Walter Pachl <br>for his help in testing and proof reading </small> Modified: branches/850/bsf4oorexx.dev/source_java/JavaDrawingHandler.java =================================================================== --- branches/850/bsf4oorexx.dev/source_java/JavaDrawingHandler.java 2023-09-13 12:39:45 UTC (rev 1080) +++ branches/850/bsf4oorexx.dev/source_java/JavaDrawingHandler.java 2023-10-09 11:02:50 UTC (rev 1081) @@ -11,7 +11,7 @@ author: Rony G. Flatscher date: 2022-09-05/2022-10-05 - version: 100.20230606 + version: 100.20230718 license: Apache license 2.0 license: @@ -149,6 +149,9 @@ - added synonyms "areaUnion" for "areaAdd" and "areaXor" for "areaExclusiveOr" 2023-06-11: - added commands "clipboardGet" ("getClipboard"), "clipboardSet" ("setClipboard") 2023-06-12: - added command "clipboardSetWithoutAlpha" ("setClipboardWithoutAlpha") + 2023-07-18: - fixed pushImage(): if argument given and output redirected now supplies imageNickName + if supplied + - add "COLOUR" as synonym for "COLOR" */ @@ -319,7 +322,7 @@ /* static definitions */ // default image sizes - static final public String version = "100.20230612"; + static final public String version = "100.20230718"; static final private int prefWidth = 500; static final private int prefHeight = 500; static private int prefImageType = BufferedImage.TYPE_INT_ARGB; // default with alpha (only png supported) @@ -3827,14 +3830,22 @@ { BufferedImage img = copyImage(bufImage); adImageStack.push(img); // save current image + String nickName = ""; if (arrCommand.length>1) // nickName supplied, store image in HashMap { - String nickName = arrCommand[1]; + nickName=arrCommand[1]; hmImages.put(nickName.toUpperCase(),img); // save in HashMap } if (isOR) { - writeOutput(slot, canonical); + if (arrCommand.length>1) + { + writeOutput(slot, canonical+" "+nickName); + } + else + { + writeOutput(slot, canonical); + } } return img; // return pushed (copy) image } @@ -5507,6 +5518,7 @@ upperCase2Command.put( "AREAUNION" , AREA_ADD ) ; // 2023-06-08 upperCase2Command.put( "AREAXOR" , AREA_EXCLUSIVE_OR ) ; // 2023-06-08 upperCase2Command.put( "CLEAR" , RESET ) ; + upperCase2Command.put( "COLOUR" , COLOR ) ; upperCase2Command.put( "GETCLIPBOARD" , CLIPBOARD_GET) ; // 2023-06-11 upperCase2Command.put( "GOTO" , MOVE_TO ) ; upperCase2Command.put( "LOCATION" , MOVE_TO ) ; // 2022-10-23: new alias Modified: branches/850/createDistributionForBSF4ooRexx8.cmd =================================================================== --- branches/850/createDistributionForBSF4ooRexx8.cmd 2023-09-13 12:39:45 UTC (rev 1080) +++ branches/850/createDistributionForBSF4ooRexx8.cmd 2023-10-09 11:02:50 UTC (rev 1081) @@ -36,9 +36,9 @@ @echo adding javax.servlet.jsp and javax.servlet.http to CLASSPATH set CLASSPATH=%CLASSPATH%;F:\download\java\java2s.com-javax.servlet.jsp\javax.servlet.jsp.jar;F:\download\java\java2s.com-javax.servlet.jsp\javax.servlet-3.0.0.v201112011016.jar -set releaseDate=20230621 -set runDate=20230621 -set doc_date=20230621 +set releaseDate=20230718 +set runDate=20230924 +set doc_date=20230718 @rem values to use for creating the BSF jarfile @rem set bsfDate=20090910 @@ -360,6 +360,11 @@ xcopy samples\* bsf4oorexx\samples\ /s/e/i/r/k/y @rem 2009-02-11, rgf +@rem 2023-07-18, rgf: make "jdor.cls" available via PATH (too many "escaped" JDOR-samples that use it) +@rem and remove it from installation's bsf4oorexx\samples +copy samples\jdor.cls bsf4oorexx +del bsf4oorexx\samples\jdor.cls + del %releaseInstallZip%.zip zip -9r %releaseInstallZip% bsf4oorexx/* zip -d %releaseInstallZip% "*.svn*" "*.idea*" "*bkp*" "*tmp*" "*cachedir*" "*~" "*.idea*" "bin.iml" Modified: branches/850/make-docs-apache.cmd =================================================================== --- branches/850/make-docs-apache.cmd 2023-09-13 12:39:45 UTC (rev 1080) +++ branches/850/make-docs-apache.cmd 2023-10-09 11:02:50 UTC (rev 1081) @@ -18,10 +18,12 @@ rem set docs_apache_dir=docs.apache.bsf -set javadoc_scope=-package +set javadoc_scope=-protected +rem set javadoc_scope=-package rem set javadoc_scope=-private -set doc_date=%runDate% +rem set doc_date=%runDate% +set doc_date=%doc_date% set doc_release_version=%releaseVersion% if not "%doc_release_version%"=="" goto set_doc_date @@ -29,7 +31,7 @@ :set_doc_date if not "%doc_date%"=="" goto continue -set doc_date=20220920 +set doc_date=20230924 :continue set docs_header=-header "%doc_date%, rgf" Modified: branches/850/samples/1-260_getJavaMembers.rxj =================================================================== --- branches/850/samples/1-260_getJavaMembers.rxj 2023-09-13 12:39:45 UTC (rev 1080) +++ branches/850/samples/1-260_getJavaMembers.rxj 2023-10-09 11:02:50 UTC (rev 1081) @@ -2,16 +2,18 @@ /* name: 1-260_getJavaMembers.rxj needs: BSF4ooRexx - date: 2023-07-16 + date: 2023-07-18 author: Rony G. Flatscher purpose: utility routines to dump Java members in sorted order to ease - analyzing the structure of a Java class; by default all - members and all superclass members that are reported by the - appropriate java.lang.Class methods get processed; if the - optional second argument to all routines is set to .false, - then only the class' members are processed, including all - non public members + analyzing the structure of a Java class; + by default all PUBLIC members and all superclass members that + are reported by the appropriate java.lang.Class methods get + processed; + if the optional second argument gets set to .false, then only + the DECLARED class' members are processed, including all + non-public members (superclass members are not looked up in this case) + usage: from the command line: supply the fully qualified name of a Java class from a Rexx program: require this package, e.g. ::requires "1-260_getJavaMembers.rxj" @@ -46,13 +48,13 @@ if javaClassName<>"" then do clz=bsf.loadClass(javaClassName) - -- clz=.java.lang.String - say "get all public members, even inherited ones ..." + say "get all members that get *declared in the class* (no members from superclasses) ..." say + say getAllMembers(clz , .false) -- now show all, even non-public members of clz only + say + say "get all *public members* (even inherited from superclasses) ..." + say say getAllMembers(clz) -- show public members (even inherited) - say - say "get all members that get declared in the class (no members from superclasses) ..." - say getAllMembers(clz , .false) -- now show all, even non-public members of clz only end @@ -72,12 +74,13 @@ use arg clz, bAllPublic=.true mb=.MutableBuffer~new - mb~append(.context~name,": class=",pp(clz~toString), .string~nl) - mb~append(getClasses( clz, bAllPublic), .string~nl) - mb~append(getConstructors( clz, bAllPublic), .string~nl) - mb~append(getFields( clz, bAllPublic), .string~nl) - mb~append(getMethods( clz, bAllPublic), .string~nl) - mb~append("---", .string~nl) + mb~append(.context~name,": class=",pp(clz~toString)) + mb~append(getAnnotations( clz, bAllPublic)) + mb~append(getClasses( clz, bAllPublic)) + mb~append(getConstructors( clz, bAllPublic)) + mb~append(getFields( clz, bAllPublic)) + mb~append(getMethods( clz, bAllPublic)) + mb~append("---") return mb~string @@ -157,6 +160,52 @@ return mb~string +/** Returns a formatted string that contains all annotations of the supplied +* Java class object. +* +* @param clz the Java class object to anaylze +* @param bAllPublic optional argument that defaults to <em>.true</em> which will +* cause only public members (also inherited ones) to be shown; +* if set to <em>.false</em> then all declared members of the +* <em>clz</em> will be shown (but not members of superclasses) +* @return a formatted string +*/ +::routine getAnnotations public + use arg clz, bAllPublic=.true -- by default get all members, not only public + + tab="09"x + if bAllPublic=.true then arr=clz~getAnnotations + else arr=clz~getDeclaredAnnotations + items=arr~items + mb=.MutableBuffer~new + mb~append(.string~nl) + mb~append(tab, " ", .context~name, ": class=", pp(clz~toString), " contains ", pp(items), bAllPublic~?(" public"," declared"), " annotations", .string~nl) + if items=0 then return mb~string + + rel=.relation~new -- index=class name, item=jObject + maxNameLen=0 + do counter c obj over arr + name=obj~annotationType~getTypeName + maxNameLen=max(maxNameLen,name~length) + str=name + rel[str]=obj + end + + len=max(.minLen,items~length) -- for right-adjusting + oldIdx ="" + do counter c idx over rel~allIndexes~sort + if oldIdx<>idx then + do + bag=rel~allAt(idx) + oldIdx=idx + do counter c2 obj over bag + mb~append(tab, " # ", (c+c2-1)~right(len),": ", pp(obj~toString), .string~nl) + end + end + end + return mb~string + + /** Returns a formatted string that contains all fields of the supplied * Java class object. * Modified: branches/850/samples/2-130_JDOR_animate_two_frames.rxj =================================================================== --- branches/850/samples/2-130_JDOR_animate_two_frames.rxj 2023-09-13 12:39:45 UTC (rev 1080) +++ branches/850/samples/2-130_JDOR_animate_two_frames.rxj 2023-10-09 11:02:50 UTC (rev 1081) @@ -16,15 +16,26 @@ rotating and briefly sleeping, such that the top right window gets animated (approximately 30 times per second). + Note: when recording the JDOR commands and later replaying them then at + replay time the same image and window will be addressed, therefore + a) pushing (saving) the built image with the nickname "jImage" + to become able to address it in the drawImage command while replaying + b) use "moveTo 0 0" before rotating such that for replay the left + upper hand corner is reset (building and drawing the image will + be done on the same instance in replay mode) + Date: 2022-10-30 Author: Rony G. Flatscher, WU Vienna - Changes: 2022-11-27 - change current directory to source directory to allow access to png files - Changes: 2023-05-31 - added optional argument ? to show processed JDOR commands - in canonical form for commands directed to "jdor" handler (not "sdor") - - creates and defines JDOR handler explicitly - - changed "new" to "newImage" + Changes: - 2022-11-27 - change current directory to source directory to allow access to png files + - 2023-05-31 - added optional argument ? to show processed JDOR commands + in canonical form for commands directed to "jdor" handler (not "sdor") + - creates and defines JDOR handler explicitly + - changed "new" to "newImage" + - 2023-07-18 - push image with nickname "jImage" to allow fetching it at + replay time; make sure that at replay time the origin is moved + to left upperhand corner ("moveTo 0 0") last change: Revision: $Revision: 951 $ $Author: orexx $ $Date: 2022-08-10 18:06:25 +0200 (Mi., 10 Aug 2022) $ (svn hint: use 'propset svn:keywords "Author Date Revision" filename') @@ -63,6 +74,7 @@ do -- redirect output, show extended error messages if any address jdor with output using (.stdout) error using (.error) + /* note: output that starts with "--" will be treated as comment if feeded to jdor.rxj */ say "--> JDOR commands directed at the 'jdor' handler will get displayed ..." end else @@ -73,20 +85,38 @@ center=w/2 h/2 -- center of image (used in rotate command below) newImage w h -- create new bitmap -address sdor new w h -- create new bitmap with the same dimension -address sdor winFrame .false -- remove frame +if bShowCommands then +do + address sdor new w h with output using (.stdout) error using (.error) -- create new bitmap with the same dimension + address sdor winFrame .false with output using (.stdout) error using (.error) -- remove frame +end +else +do + address sdor new w h -- create new bitmap with the same dimension + address sdor winFrame .false -- remove frame +end winShow -- show frame winAlwaysOnTop .true -- make sure frame is always on top winMoveTo 0 0 -- move to left upper hand corner of screen -address sdor winShow -- show window (without frame) +address sdor winShow with output using (.stdout) error using (.error) -- show window (without frame) winScreenSize -- query current screen's size parse var rc scrW scrH -address sdor winMoveTo (scrW-w) 0 -- move frameless window to upper right hand corner -address sdor winAlwaysOnTop .true -- make sure window remains on top of all other windows +if bShowCommands then +do + address sdor winMoveTo (scrW-w) 0 with output using (.stdout) error using (.error)-- move frameless window to upper right hand corner + address sdor winAlwaysOnTop .true with output using (.stdout) error using (.error)-- make sure window remains on top of all other windows +end +else +do + address sdor winMoveTo (scrW-w) 0 -- move frameless window to upper right hand corner + address sdor winAlwaysOnTop .true -- make sure window remains on top of all other windows +end + + /* note: output that starts with "--" will be treated as comment if feeded to jdor.rxj */ say "--> the two windows are set to be always on top of all other windows" loadImage b4r_logo "bsf4oorexx_256.png" -- load the bsf4oorexx bitmap @@ -103,24 +133,43 @@ loadImage orx_logo "oorexx_256.png" drawImage orx_logo 75 75 + /* note: output that starts with "--" will be treated as comment if feeded to jdor.rxj */ say "--> fetching the current image from the left window ..." image -- query current image, command return value in variable "RC" say "--> image returned in variable ""RC"":" pp(rc) jImage=rc -- save image in Rexx variable named "jImage" -say "--> image~toString:" pp(jImage~toString) +say "--> jImage~toString:" pp(jImage~toString) + +pushImage "jImage" -- push with nickName to have image available upon replay as well say + +moveTo 0 0 -- when redirecting and replaying we make sure to reset current origin -- note the name of a Rexx variable needs to be quoted, otherwise its value gets used -address sdor drawImage "jImage" -- use image from Rexx variable named "jImage" +if bShowCommands then + address sdor drawImage "jImage" with output using (.stdout) error using (.error)-- use image from Rexx variable named "jImage" +else + address sdor drawImage "jImage" -- use image from Rexx variable named "jImage" + sleep 1.5 -- sleep (wait) a bit sleepTime=1/30 -- appr. 30 updates per second + /* note: output that starts with "--" will be treated as comment if feeded to jdor.rxj */ say "--> animate rotating image on the right (frameless) window ..." round=0 do i=0 to 360+90 by 5 -- rotate 1 1/4 rounds ... round+=1 - address sdor rotate i center -- rotate transform - address sdor drawImage "jImage" -- draw image referred to by the Rexx variable "jImage" - address sdor sleep sleepTime -- sleeping causes animation effect + if bShowCommands then + do + address sdor rotate i center with output using (.stdout) error using (.error)-- rotate transform + address sdor drawImage "jImage" with output using (.stdout) error using (.error)-- draw image referred to by the Rexx variable "jImage" + address sdor sleep sleepTime with output using (.stdout) error using (.error)-- sleeping causes animation effect + end + else + do + address sdor rotate i center -- rotate transform + address sdor drawImage "jImage" -- draw image referred to by the Rexx variable "jImage" + address sdor sleep sleepTime -- sleeping causes animation effect + end end say "--> finished after" pp(round) "rotations" Modified: branches/850/samples/3-110_JDOR_animate_composite.rxj =================================================================== --- branches/850/samples/3-110_JDOR_animate_composite.rxj 2023-09-13 12:39:45 UTC (rev 1080) +++ branches/850/samples/3-110_JDOR_animate_composite.rxj 2023-10-09 11:02:50 UTC (rev 1081) @@ -34,6 +34,7 @@ - creates and defines JDOR handler explicitly - changed "new" to "newImage" 2023-06-08 - flashing text shows flashing time left + 2023-07-18 - make sure that all non-JDOR output is a comment starting with "--" license: @@ -88,6 +89,7 @@ locations=.array~of( "bsf4oorexx_256.png" b4r_x b4r_x 50 , - "oorexx4ooo_256.png" (w-b4r_x) (w-b4r_x) 50, - "oorexx_256.png" trunc((w-75)/2) trunc((h-75)/2) 75) + /* note: output that starts with "--" will be treated as comment if feeded to jdor.rxj */ say "--> fade in ..." do loc over locations -- load and draw bitmaps say "--> processing:" pp(loc) @@ -103,6 +105,7 @@ drawImage name size size -- draw image with alpha 1.0 end + /* note: output that starts with "--" will be treated as comment if feeded to jdor.rxj */ say "--> Moving out ..." do counter c loc over locations parse var loc name x y size @@ -142,7 +145,8 @@ str2="seconds)" str=str1 flashTime str2 stringBounds str -- current font and current graphic context -say " str:" pp(str) + /* note: output that starts with "--" will be treated as comment if feeded to jdor.rxj */ +say "--> str:" pp(str) say "--> 'stringBounds str' returned rc:" pp(rc) "(in pixels)" parse var rc x1 y1 width1 height1 -- get fields x2=(w-width1)/2 -- horizontal center position @@ -164,6 +168,7 @@ end -- flash for 5 seconds + /* note: output that starts with "--" will be treated as comment if feeded to jdor.rxj */ say "--> flashing for 5 seconds ..." dt0=.dateTime~new bErase=.true This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-09-13 12:39:48
|
Revision: 1080 http://sourceforge.net/p/bsf4oorexx/code/1080 Author: orexx Date: 2023-09-13 12:39:45 +0000 (Wed, 13 Sep 2023) Log Message: ----------- Minor updates. Modified Paths: -------------- sandbox/rgf/jdor/JavaDrawingHandler.java sandbox/rgf/jdor/doc/jdor_doc.html sandbox/rgf/jdor/samples/2-130_JDOR_animate_two_frames.rxj sandbox/rgf/jdor/samples/3-110_JDOR_animate_composite.rxj Modified: sandbox/rgf/jdor/JavaDrawingHandler.java =================================================================== --- sandbox/rgf/jdor/JavaDrawingHandler.java 2023-08-24 15:40:40 UTC (rev 1079) +++ sandbox/rgf/jdor/JavaDrawingHandler.java 2023-09-13 12:39:45 UTC (rev 1080) @@ -11,7 +11,7 @@ author: Rony G. Flatscher date: 2022-09-05/2022-10-05 - version: 100.20230606 + version: 100.20230718 license: Apache license 2.0 license: @@ -149,6 +149,9 @@ - added synonyms "areaUnion" for "areaAdd" and "areaXor" for "areaExclusiveOr" 2023-06-11: - added commands "clipboardGet" ("getClipboard"), "clipboardSet" ("setClipboard") 2023-06-12: - added command "clipboardSetWithoutAlpha" ("setClipboardWithoutAlpha") + 2023-07-18: - fixed pushImage(): if argument given and output redirected now supplies imageNickName + if supplied + - add "COLOUR" as synonym for "COLOR" */ @@ -319,7 +322,7 @@ /* static definitions */ // default image sizes - static final public String version = "100.20230612"; + static final public String version = "100.20230718"; static final private int prefWidth = 500; static final private int prefHeight = 500; static private int prefImageType = BufferedImage.TYPE_INT_ARGB; // default with alpha (only png supported) @@ -3827,14 +3830,22 @@ { BufferedImage img = copyImage(bufImage); adImageStack.push(img); // save current image + String nickName = ""; if (arrCommand.length>1) // nickName supplied, store image in HashMap { - String nickName = arrCommand[1]; + nickName=arrCommand[1]; hmImages.put(nickName.toUpperCase(),img); // save in HashMap } if (isOR) { - writeOutput(slot, canonical); + if (arrCommand.length>1) + { + writeOutput(slot, canonical+" "+nickName); + } + else + { + writeOutput(slot, canonical); + } } return img; // return pushed (copy) image } @@ -5507,6 +5518,7 @@ upperCase2Command.put( "AREAUNION" , AREA_ADD ) ; // 2023-06-08 upperCase2Command.put( "AREAXOR" , AREA_EXCLUSIVE_OR ) ; // 2023-06-08 upperCase2Command.put( "CLEAR" , RESET ) ; + upperCase2Command.put( "COLOUR" , COLOR ) ; upperCase2Command.put( "GETCLIPBOARD" , CLIPBOARD_GET) ; // 2023-06-11 upperCase2Command.put( "GOTO" , MOVE_TO ) ; upperCase2Command.put( "LOCATION" , MOVE_TO ) ; // 2022-10-23: new alias Modified: sandbox/rgf/jdor/doc/jdor_doc.html =================================================================== --- sandbox/rgf/jdor/doc/jdor_doc.html 2023-08-24 15:40:40 UTC (rev 1079) +++ sandbox/rgf/jdor/doc/jdor_doc.html 2023-09-13 12:39:45 UTC (rev 1080) @@ -292,7 +292,7 @@ one can redirect like this (the <em>.output</em> monitor defaults to the <em>.stdout</em> stream): - <pre>ADDRESS JDOR WITH using output (.output) /* activate error redirection */ </pre> + <pre>ADDRESS JDOR WITH using output (.output) /* activate output redirection */ </pre> <li>redirecting <em>ERROR</em>: all commands causing an error or failure condition will supplied together with the kind of error or failure. In the case of a failure more @@ -754,7 +754,7 @@ <!-- -------------------------------------------------------- --> <tr class="CommandRowColumn"><!-- table row --> <td class="cmdNr"> - <td class="command" id="cmdColor"> "color" + <td class="command" id="cmdColor"> "color"<br> "colour" <td colspan="2"> Query, get and set, define and set the color. <br>Querying the current value (no argument supplied) will return it, setting (changing) the value to a new value will return the old (previously set) value @@ -772,6 +772,9 @@ and optionally <em>alpha</em>, a <em>java.awt.Color</em> of that type gets created, registered with the supplied <em>colorNickName</em> and then used for setting the new color. + + <br>The command name <em>colour</em> is an alias, a synonym for this command. + <br>Cf. the Java documentation for the Java class <em>Graphics[2D]</em> and the methods <em>getColor()</em>, <em>setColor(...)</em>, as well as the Java class <em>java.awt.Color</em>. @@ -2982,230 +2985,14 @@ </table> -<p> <!-- rgf 20230603 --> -<p> -<hr width="75%"> -<p> -<h2 id="h2AreaCommands"><em>Area</em> Related Related commands </h2> -<nav> -<a href="#purposeOfJDOR">Purpose</a> | -<a href="#briefOverview">Brief Overview</a> | -<a href="#synopsisOfJDOR">Synopsis JDOR</a> | -<a href="#jdorShapes">JDOR Shapes</a> (<a href="#h2ShapeCommands">Shapes</a>, <a href="#h2PathCommands">Path2D</a>) -</nav> - -<p>The <em>Area</em> (<a href="https://google.com/search?q=javadoc+8+Area" target="_blank"><em>java.awt.geom.Area</em></a>) - shape allows for creating (closed) areas from any kind of <em>Shape</em> and - allows for applying "Constructive Area Geometry (CAG)" operations. - -<p>Here the <em>JDOR</em> commands that are related to any <em>Area</em> <em>Shape</em>: - <p> - <table> - <tr> - <tr class="TableHeader"> - <th> - <th> Command - <th> Argument(s) - <th> Description - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathAppend"> "pathAppend" TODO - <td colspan="3"> The named <em>Path2D</em> shape gets appended by the - named <em>Shape</em> or <em>PathIterator</em>. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName spNickName [connect=.true] - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape, <em>spNickName</em> either a - <em>Shape</em> or <em>PathIterator</em> that should be appended. - The optional <em>connect</em> argument controls whether - the appended shape should get connected with a line segment (default). - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathClone"> "pathClone" - <td colspan="3"> The named <em>Path2D</em> shape gets cloned and returned. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName [clonedNickName] - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape, that gets cloned and returned. If the optional <em>cloneNickName</em> - is specified then the clone gets registered with the uppercased - <em>cloneNickName</em> as index. - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathClose"> "pathClose" - <td colspan="3"> The named <em>Path2D</em> shape will have its current segment - closed by drawing a straight line back to the last <em>pathMoveTo</em> position. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape, of which the last segment gets closed by drawing a line - to the last <em>pathMoveTo</em> position. - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathCurrentPoint"> "pathCurrentPoint" - <td colspan="3"> Returns the current point (the position of the last <em>pathMoveTo</em>) - of the named <em>Path2D</em> shape. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape, which current point gets returned. - <br> - <em>Note:</em> if no <em>pathMoveTo</em> was issued yet, then <em>.nil</em> - gets returned, otherwise a blank delimited Rexx string in - the form of: "<em>x y</em>". - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathCurveTo"> "pathCurveTo" - <td colspan="3"> Creates a cubic parametric curve segment. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName ctrlx1 ctrly1 ctrlx2 ctrly2 x y - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape for which a cubic parametric curve segment gets - created between the points <em>currentPoint</em> - (cf. <em>pathCurrentPoint</em> command above) - and the point with the co-ordinate <em>x/y</em> controlled by the two control points located - at <em>ctrlx1/ctrly1</em> and <em>ctrlx2/ctrly2</em>. - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathLineTo"> "pathLineTo" - <td colspan="3"> Creates a line segment. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName x y - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape for which a line segment gets - created between the points <em>currentPoint</em> - (cf. <em>pathCurrentPoint</em> command above) - and the point with the co-ordinate <em>x/y</em>. - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathMoveTo"> "pathMoveTo" - <td colspan="3"> Adds a point to the path at the supplied position. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName x y - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape for which a point should get added at <em>x/y</em> - (making it the <em>currentPoint</em>, cf. - <em>pathCurrentPoint</em> command above). - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathQuadTo"> "pathQuadTo" - <td colspan="3"> Creates a quadradic parametric curve segment. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName ctrlx ctrly x y - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape for which a quadradic parametric curve segment gets - created between the points <em>currentPoint</em> - (cf. <em>pathCurrentPoint</em> command above) - and the point with the co-ordinate <em>x/y</em> controlled by - the control point located at <em>ctrlx/ctrly</em>. - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathReset"> "pathReset" - <td colspan="3"> The named <em>Path2D</em> shape will be reset to - become empty. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape, which gets reset to become empty. - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathTransform"> "pathTransform" - <td colspan="3"> The named <em>Path2D</em> shape gets transformed. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName tNickName - <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> - shape, that gets transformed as defined by <a href="#cmdTransform"><em>tNickName</em> - (an <em>AffineTransform</em>)</a> retrieved from the registry, and - if does not exist from a Rexx variable by that name. - - - <!-- -------------------------------------------------------- --> - <tr class="CommandRowColumn"><!-- table row --> - <td class="cmdNr"> - <td class="command" id="cmdPathWindingRule"> "pathWindingRule" - <td colspan="3"> Queries or sets the <em>winding rule</em> of the named - <em>Path2D</em> shape. - - <!-- -------------------------------------- --> - <tr class="ArgumentRowColor"><td><!-- table row --> - <td> - <td class="argument"> pNickName [newValue] - <td> Returns or sets the <em>winding rule</em> of the <em>Path2D</em> shape - denoted by <em>pNickName</em>. If <em>newValue</em> is supplied, it - needs to be <em>WIND_EVEN_ODD</em> or <em>0</em>, alternatively - <em>WIND_NON_ZERO</em> or <em>1</em>. - - - </table> - - -<p> <center> <hr width="75%"> <small> - JDOR synopsis of commands, version: 100.20230612 + JDOR synopsis of commands, version: 100.20230718 <br>Acknowledgement: the author wishes to thank DI Walter Pachl <br>for his help in testing and proof reading </small> Modified: sandbox/rgf/jdor/samples/2-130_JDOR_animate_two_frames.rxj =================================================================== --- sandbox/rgf/jdor/samples/2-130_JDOR_animate_two_frames.rxj 2023-08-24 15:40:40 UTC (rev 1079) +++ sandbox/rgf/jdor/samples/2-130_JDOR_animate_two_frames.rxj 2023-09-13 12:39:45 UTC (rev 1080) @@ -16,15 +16,26 @@ rotating and briefly sleeping, such that the top right window gets animated (approximately 30 times per second). + Note: when recording the JDOR commands and later replaying them then at + replay time the same image and window will be addressed, therefore + a) pushing (saving) the built image with the nickname "jImage" + to become able to address it in the drawImage command while replaying + b) use "moveTo 0 0" before rotating such that for replay the left + upper hand corner is reset (building and drawing the image will + be done on the same instance in replay mode) + Date: 2022-10-30 Author: Rony G. Flatscher, WU Vienna - Changes: 2022-11-27 - change current directory to source directory to allow access to png files - Changes: 2023-05-31 - added optional argument ? to show processed JDOR commands - in canonical form for commands directed to "jdor" handler (not "sdor") - - creates and defines JDOR handler explicitly - - changed "new" to "newImage" + Changes: - 2022-11-27 - change current directory to source directory to allow access to png files + - 2023-05-31 - added optional argument ? to show processed JDOR commands + in canonical form for commands directed to "jdor" handler (not "sdor") + - creates and defines JDOR handler explicitly + - changed "new" to "newImage" + - 2023-07-18 - push image with nickname "jImage" to allow fetching it at + replay time; make sure that at replay time the origin is moved + to left upperhand corner ("moveTo 0 0") last change: Revision: $Revision: 951 $ $Author: orexx $ $Date: 2022-08-10 18:06:25 +0200 (Mi., 10 Aug 2022) $ (svn hint: use 'propset svn:keywords "Author Date Revision" filename') @@ -63,6 +74,7 @@ do -- redirect output, show extended error messages if any address jdor with output using (.stdout) error using (.error) + /* note: output that starts with "--" will be treated as comment if feeded to jdor.rxj */ say "--> JDOR commands directed at the 'jdor' handler will get displayed ..." end else @@ -73,20 +85,38 @@ center=w/2 h/2 -- center of image (used in rotate command below) newImage w h -- create new bitmap -address sdor new w h -- create new bitmap with the same dimension -address sdor winFrame .false -- remove frame +if bShowCommands then +do + address sdor new w h with output using (.stdout) error using (.error) -- create new bitmap with the same dimension + address sdor winFrame .false with output using (.stdout) error using (.error) -- remove frame +end +else +do + address sdor new w h -- create new bitmap with the same dimension + address sdor winFrame .false -- remove frame +end winShow -- show frame winAlwaysOnTop .true -- make sure frame is always on top winMoveTo 0 0 -- move to left upper hand corner of screen -address sdor winShow -- show window (without frame) +address sdor winShow with output using (.stdout) error using (.error) -- show window (without frame) winScreenSize -- query current screen's size parse var rc scrW scrH -address sdor winMoveTo (scrW-w) 0 -- move frameless window to upper right hand corner -address sdor winAlwaysOnTop .true -- make sure window remains on top of all other windows +if bShowCommands then +do + address sdor winMoveTo (scrW-w) 0 with output using (.stdout) error using (.error)-- move frameless window to upper right hand corner + address sdor winAlwaysOnTop .true with output using (.stdout) error using (.error)-- make sure window remains on top of all other windows +end +else +do + address sdor winMoveTo (scrW-w) 0 -- move frameless window to upper right hand corner + address sdor winAlwaysOnTop .true -- make sure window remains on top of all other windows +end + + /* note: output that starts with "--" will be treated as comment if feeded to jdor.rxj */ say "--> the two windows are set to be always on top of all other windows" loadImage b4r_logo "bsf4oorexx_256.png" -- load the bsf4oorexx bitmap @@ -103,24 +133,43 @@ loadImage orx_logo "oorexx_256.png" drawImage orx_logo 75 75 + /* note: output that starts with "--" will be treated as comment if feeded to jdor.rxj */ say "--> fetching the current image from the left window ..." image -- query current image, command return value in variable "RC" say "--> image returned in variable ""RC"":" pp(rc) jImage=rc -- save image in Rexx variable named "jImage" -say "--> image~toString:" pp(jImage~toString) +say "--> jImage~toString:" pp(jImage~toString) + +pushImage "jImage" -- push with nickName to have image available upon replay as well say + +moveTo 0 0 -- when redirecting and replaying we make sure to reset current origin -- note the name of a Rexx variable needs to be quoted, otherwise its value gets used -address sdor drawImage "jImage" -- use image from Rexx variable named "jImage" +if bShowCommands then + address sdor drawImage "jImage" with output using (.stdout) error using (.error)-- use image from Rexx variable named "jImage" +else + address sdor drawImage "jImage" -- use image from Rexx variable named "jImage" + sleep 1.5 -- sleep (wait) a bit sleepTime=1/30 -- appr. 30 updates per second + /* note: output that starts with "--" will be treated as comment if feeded to jdor.rxj */ say "--> animate rotating image on the right (frameless) window ..." round=0 do i=0 to 360+90 by 5 -- rotate 1 1/4 rounds ... round+=1 - address sdor rotate i center -- rotate transform - address sdor drawImage "jImage" -- draw image referred to by the Rexx variable "jImage" - address sdor sleep sleepTime -- sleeping causes animation effect + if bShowCommands then + do + address sdor rotate i center with output using (.stdout) error using (.error)-- rotate transform + address sdor drawImage "jImage" with output using (.stdout) error using (.error)-- draw image referred to by the Rexx variable "jImage" + address sdor sleep sleepTime with output using (.stdout) error using (.error)-- sleeping causes animation effect + end + else + do + address sdor rotate i center -- rotate transform + address sdor drawImage "jImage" -- draw image referred to by the Rexx variable "jImage" + address sdor sleep sleepTime -- sleeping causes animation effect + end end say "--> finished after" pp(round) "rotations" Modified: sandbox/rgf/jdor/samples/3-110_JDOR_animate_composite.rxj =================================================================== --- sandbox/rgf/jdor/samples/3-110_JDOR_animate_composite.rxj 2023-08-24 15:40:40 UTC (rev 1079) +++ sandbox/rgf/jdor/samples/3-110_JDOR_animate_composite.rxj 2023-09-13 12:39:45 UTC (rev 1080) @@ -34,6 +34,7 @@ - creates and defines JDOR handler explicitly - changed "new" to "newImage" 2023-06-08 - flashing text shows flashing time left + 2023-07-18 - make sure that all non-JDOR output is a comment starting with "--" license: @@ -88,6 +89,7 @@ locations=.array~of( "bsf4oorexx_256.png" b4r_x b4r_x 50 , - "oorexx4ooo_256.png" (w-b4r_x) (w-b4r_x) 50, - "oorexx_256.png" trunc((w-75)/2) trunc((h-75)/2) 75) + /* note: output that starts with "--" will be treated as comment if feeded to jdor.rxj */ say "--> fade in ..." do loc over locations -- load and draw bitmaps say "--> processing:" pp(loc) @@ -103,6 +105,7 @@ drawImage name size size -- draw image with alpha 1.0 end + /* note: output that starts with "--" will be treated as comment if feeded to jdor.rxj */ say "--> Moving out ..." do counter c loc over locations parse var loc name x y size @@ -142,7 +145,8 @@ str2="seconds)" str=str1 flashTime str2 stringBounds str -- current font and current graphic context -say " str:" pp(str) + /* note: output that starts with "--" will be treated as comment if feeded to jdor.rxj */ +say "--> str:" pp(str) say "--> 'stringBounds str' returned rc:" pp(rc) "(in pixels)" parse var rc x1 y1 width1 height1 -- get fields x2=(w-width1)/2 -- horizontal center position @@ -164,6 +168,7 @@ end -- flash for 5 seconds + /* note: output that starts with "--" will be treated as comment if feeded to jdor.rxj */ say "--> flashing for 5 seconds ..." dt0=.dateTime~new bErase=.true This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-08-24 15:40:42
|
Revision: 1079 http://sourceforge.net/p/bsf4oorexx/code/1079 Author: orexx Date: 2023-08-24 15:40:40 +0000 (Thu, 24 Aug 2023) Log Message: ----------- 20230824 In case the server rejects, give a hint and a link to the user Modified Paths: -------------- branches/850/bsf4oorexx.dev/oorexx.net/samples/clr/baginski/08-WebClient.rxj Modified: branches/850/bsf4oorexx.dev/oorexx.net/samples/clr/baginski/08-WebClient.rxj =================================================================== --- branches/850/bsf4oorexx.dev/oorexx.net/samples/clr/baginski/08-WebClient.rxj 2023-07-16 12:40:26 UTC (rev 1078) +++ branches/850/bsf4oorexx.dev/oorexx.net/samples/clr/baginski/08-WebClient.rxj 2023-08-24 15:40:40 UTC (rev 1079) @@ -11,10 +11,14 @@ * - Using PROCESS.CLS to start a process * - Comparing two integer values * + * Changes: - 202308-18, rgf: as it may be the case that a web server rejects a + request, the Java exception chain gets shown in full + to allow identifying the reason for a failure + * * license: * * ------------------------ Apache Version 2.0 license ------------------------- - * Copyright (C) 2016 Adrian Baginski + * Copyright (C) 2016 Adrian Baginski, 2023 Rony G. Flatscher * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,7 +34,7 @@ * ----------------------------------------------------------------------------- */ - +signal on syntax WebClient = .clr~new("System.Net.WebClient") -- create a WebClient -- if an argument was supplied while starting this app AND this argument is a valid URL (starts with http at least) IF arg(1)~length > 0 & ABBREV(arg(1), "http") @@ -66,8 +70,19 @@ ELSE SAY pp(url)": ? Neither old HTML nor any HTML5 tags found, tsk!" +exit +syntax: + co=condition('object') -- get all condition information in a Rexx directory + say ppJavaExceptionChain(co) -- show Java exception chain + say "---" + link="https://stackoverflow.com/questions/2582036/an-existing-connection-was-forcibly-closed-by-the-remote-host" + say "Maybe this link is of help:" + say " " link + say "---" + raise propagate -- let ooRexx handle the condition in the usual way + ::REQUIRES CLR.CLS -- get ooRexx.NET (CLR, common language runtime) support ::ROUTINE CountSubStrings PRIVATE This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-07-16 12:40:28
|
Revision: 1078 http://sourceforge.net/p/bsf4oorexx/code/1078 Author: orexx Date: 2023-07-16 12:40:26 +0000 (Sun, 16 Jul 2023) Log Message: ----------- 20230716 Add a utility-like example that lists members of a Java class. Modified Paths: -------------- branches/850/samples/index.html Added Paths: ----------- branches/850/samples/1-260_getJavaMembers.rxj Added: branches/850/samples/1-260_getJavaMembers.rxj =================================================================== --- branches/850/samples/1-260_getJavaMembers.rxj (rev 0) +++ branches/850/samples/1-260_getJavaMembers.rxj 2023-07-16 12:40:26 UTC (rev 1078) @@ -0,0 +1,262 @@ +#!/usr/bin/env rexx +/* + name: 1-260_getJavaMembers.rxj + needs: BSF4ooRexx + date: 2023-07-16 + author: Rony G. Flatscher + purpose: utility routines to dump Java members in sorted order to ease + analyzing the structure of a Java class; by default all + members and all superclass members that are reported by the + appropriate java.lang.Class methods get processed; if the + optional second argument to all routines is set to .false, + then only the class' members are processed, including all + non public members + + usage: from the command line: supply the fully qualified name of a Java class + from a Rexx program: require this package, e.g. + ::requires "1-260_getJavaMembers.rxj" + + license: Apache License 2.0 + + ------------------------ Apache Version 2.0 license ------------------------- + Copyright (C) 2023 Rony G. Flatscher + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ----------------------------------------------------------------------------- +*/ + + -- define constants for this program ("package") +pkgLocal=.context~package~local +pkgLocal~minLen=3 -- define minimal width for counter + +parse source . kind . +if kind="REQUIRES" then return -- we are done setting up + +parse arg javaClassName . -- fetch Java class name, if any +if javaClassName<>"" then +do + clz=bsf.loadClass(javaClassName) + -- clz=.java.lang.String + say "get all public members, even inherited ones ..." + say + say getAllMembers(clz) -- show public members (even inherited) + say + say "get all members that get declared in the class (no members from superclasses) ..." + say getAllMembers(clz , .false) -- now show all, even non-public members of clz only +end + + +::requires "BSF.CLS" -- get ooRexx-Java bridge + +/** Returns a formatted string that contains all members of the supplied +* Java class object. +* +* @param clz the Java class object to anaylze +* @param bAllPublic optional argument that defaults to <em>.true</em> which will +* cause only public members (also inherited ones) to be shown; +* if set to <em>.false</em> then all declared members of the +* <em>clz</em> will be shown (but not members of superclasses) +* @return a formatted string +*/ +::routine getAllMembers public + use arg clz, bAllPublic=.true + + mb=.MutableBuffer~new + mb~append(.context~name,": class=",pp(clz~toString), .string~nl) + mb~append(getClasses( clz, bAllPublic), .string~nl) + mb~append(getConstructors( clz, bAllPublic), .string~nl) + mb~append(getFields( clz, bAllPublic), .string~nl) + mb~append(getMethods( clz, bAllPublic), .string~nl) + mb~append("---", .string~nl) + return mb~string + + +/** Returns a formatted string that contains all classes that get defined in +* the Java class object. +* +* @param clz the Java class object to anaylze +* @return a formatted string +*/ +::routine getClasses public + use arg clz + + tab="09"x + arr=clz~getClasses + items=arr~items + mb=.MutableBuffer~new + mb~append(.string~nl) + mb~append(tab, " ", .context~name,": class=",pp(clz~toString), " contains ", pp(items), " classes", .string~nl ) + if items=0 then return mb~string + + len=max(.minLen,items~length) -- for right-adjusting + do counter c obj over arr + mb~append(tab, " # ", c~right(len),": ", pp(obj~getName), .string~nl) + end + return mb~string + +/** Returns a formatted string that contains all constructors of the supplied +* Java class object. +* +* @param clz the Java class object to anaylze +* @param bAllPublic optional argument that defaults to <em>.true</em> which will +* cause only public members (also inherited ones) to be shown; +* if set to <em>.false</em> then all declared members of the +* <em>clz</em> will be shown (but not members of superclasses) +* @return a formatted string +*/ +::routine getConstructors public + use arg clz, bAllPublic=.true -- by default get all members, not only public + + tab="09"x + if bAllPublic=.true then arr=clz~getConstructors + else arr=clz~getDeclaredConstructors + items=arr~items + mb=.MutableBuffer~new + mb~append(.string~nl) + mb~append(tab, " ", .context~name, ": class=", pp(clz~toString), " contains ", pp(items), bAllPublic~?(" public"," declared"), " constructors", .string~nl) + if items=0 then return mb~string + + rel=.relation~new -- index=class name, item=jObject + maxNameLen=0 + do counter c obj over arr + name=obj~getName + maxNameLen=max(maxNameLen,name~length) + str=obj~getDeclaringClass~getName obj~getName obj~toString + rel[str]=obj + end + + len=max(.minLen,items~length) -- for right-adjusting + oldIdx ="" + oldDeclaringClass="" + do counter c idx over rel~allIndexes~sort + if oldIdx<>idx then + do + parse var idx declaringClass constructorName . + if oldDeclaringClass<>declaringClass then + do + mb~append(tab, " ", " "~right(len)," /// ", pp(declaringClass), " \\\", .string~nl) + oldDeclaringClass=declaringClass + end + bag=rel~allAt(idx) + oldIdx=idx + do counter c2 obj over bag + mb~append(tab, " # ", (c+c2-1)~right(len),": ", pp(obj~toString), .string~nl) + end + end + end + return mb~string + + +/** Returns a formatted string that contains all fields of the supplied +* Java class object. +* +* @param clz the Java class object to anaylze +* @param bAllPublic optional argument that defaults to <em>.true</em> which will +* cause only public members (also inherited ones) to be shown; +* if set to <em>.false</em> then all declared members of the +* <em>clz</em> will be shown (but not members of superclasses) +* @return a formatted string +*/ +::routine getFields public + use arg clz, bAllPublic=.true -- by default get all members, not only public + + tab="09"x + if bAllPublic=.true then arr=clz~getFields + else arr=clz~getDeclaredFields + items=arr~items + mb=.MutableBuffer~new + mb~append(.string~nl) + mb~append(tab, " ", .context~name,": class=",pp(clz~toString), " contains ", pp(items), bAllPublic~?(" public"," declared"), " fields", .string~nl) + if items=0 then return mb~string + + rel=.relation~new -- index=class name, item=jObject + maxNameLen=0 + do counter c obj over arr + name=obj~getName + maxNameLen=max(maxNameLen,name~length) + str=obj~getDeclaringClass~getName obj~getName obj~toString + rel[str]=obj + end + + len=max(.minLen,items~length) -- for right-adjusting + oldIdx ="" + oldDeclaringClass="" + do counter c idx over rel~allIndexes~sort + if oldIdx<>idx then + do + parse var idx declaringClass fieldName . + if oldDeclaringClass<>declaringClass then + do + mb~append(tab, " ", " "~right(len), " /// ", pp(declaringClass), " \\\", .string~nl) + oldDeclaringClass=declaringClass + end + bag=rel~allAt(idx) + oldIdx=idx + do counter c2 obj over bag + mb~append(tab, " # ", (c+c2-1)~right(len),": ", fieldName~left(maxNameLen,'.'), " ", pp(obj~toString), .string~nl) + end + end + end + return mb~string + + +/** Returns a formatted string that contains all methods of the supplied +* Java class object. +* +* @param clz the Java class object to anaylze +* @param bAllPublic optional argument that defaults to <em>.true</em> which will +* cause only public members (also inherited ones) to be shown; +* if set to <em>.false</em> then all declared members of the +* <em>clz</em> will be shown (but not members of superclasses) +* @return a formatted string +*/ +::routine getMethods public + use arg clz, bAllPublic=.true -- by default get all members, not only public + tab="09"x + if bAllPublic=.true then arr=clz~getMethods + else arr=clz~getDeclaredMethods + items=arr~items + mb=.MutableBuffer~new + mb~append(.string~nl) + mb~append(tab, " ", .context~name,": class=",pp(clz~toString), " contains ", pp(items), bAllPublic~?(" public"," declared"), " methods", .string~nl) + if items=0 then return mb~string + + rel=.relation~new -- index=class name, item=jObject + maxNameLen=0 + do counter c obj over arr + name=obj~getName + maxNameLen=max(maxNameLen,name~length) + str=obj~getDeclaringClass~getName obj~getName obj~toString + rel[str]=obj + end + + len=max(.minLen,items~length) -- for right-adjusting + oldIdx ="" + oldDeclaringClass="" + do counter c idx over rel~allIndexes~sort + if oldIdx<>idx then + do + parse var idx declaringClass methodName . + if oldDeclaringClass<>declaringClass then + do + mb~append(tab, " ", " "~right(len), " /// ", pp(declaringClass), " \\\", .string~nl) + oldDeclaringClass=declaringClass + end + bag=rel~allAt(idx) + oldIdx=idx + do counter c2 obj over bag + mb~append(tab, " # ", (c+c2-1)~right(len), ": ", methodName~left(maxNameLen,'.'), " ", pp(obj~toString), .string~nl) + end + end + end + return mb~string Property changes on: branches/850/samples/1-260_getJavaMembers.rxj ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Modified: branches/850/samples/index.html =================================================================== --- branches/850/samples/index.html 2023-07-06 10:49:04 UTC (rev 1077) +++ branches/850/samples/index.html 2023-07-16 12:40:26 UTC (rev 1078) @@ -301,6 +301,12 @@ <br><em>Note:</em> This program runs on Windows only as it exploits <em>OLE</em> (Object Linking and Embedding), MS Word needs to be installed on the system. + <dt><a href="1-260_getJavaMembers.rxj">1-260_getJavaMembers.rxj</a> + <dd>Demonstrate how to create a utility that lists the members of a Java class. Either + run it from the command line and supply a fully qualified Java class name or + require it in your programs and use its public routines to get the members + listed in form of a string. + <dt><a href="2-010_demoJavaArrays.rxj">2-010_demoJavaArrays.rxj</a> <dd>Demonstrate how to create and use Java array objects. @@ -669,6 +675,6 @@ <p> <hr> <p style="font-size: 80%;"> -Rony G. Flatscher, 2010-08-22, ..., 2023-06-17, Wien/Vienna, Austria, Europe +Rony G. Flatscher, 2010-08-22, ..., 2023-07-16, Wien/Vienna, Austria, Europe </body> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-07-06 10:49:07
|
Revision: 1077 http://sourceforge.net/p/bsf4oorexx/code/1077 Author: orexx Date: 2023-07-06 10:49:04 +0000 (Thu, 06 Jul 2023) Log Message: ----------- 20230706 Added (simplified) Chinese, placed character arrow at the other side for RTL languages (Arabian, Hebrew) Modified Paths: -------------- branches/850/samples/JavaFX/fxml_02/fxml_02_ar.properties branches/850/samples/JavaFX/fxml_02/fxml_02_il.properties branches/850/samples/JavaFX/fxml_02/index.html Added Paths: ----------- branches/850/samples/JavaFX/fxml_02/fxml_02_zh.properties Modified: branches/850/samples/JavaFX/fxml_02/fxml_02_ar.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_ar.properties 2023-07-03 16:49:18 UTC (rev 1076) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_ar.properties 2023-07-06 10:49:04 UTC (rev 1077) @@ -1,7 +1,7 @@ ! This is the Arabic (ar) translation for two terms. ! ! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" -year = السنة-> +year = <- السنة ! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" clickMe = انقر فوق لي! Modified: branches/850/samples/JavaFX/fxml_02/fxml_02_il.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_il.properties 2023-07-03 16:49:18 UTC (rev 1076) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_il.properties 2023-07-06 10:49:04 UTC (rev 1077) @@ -1,7 +1,7 @@ ! This is the Hebrew/Israelian (il) translation for two terms. ! ! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" -year = שנה -> +year = <- שנה ! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" clickMe = לחץ עלי! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_zh.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_zh.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_zh.properties 2023-07-06 10:49:04 UTC (rev 1077) @@ -0,0 +1,7 @@ +! This is the Chinese (zh) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = 年份-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = 点我! Modified: branches/850/samples/JavaFX/fxml_02/index.html =================================================================== --- branches/850/samples/JavaFX/fxml_02/index.html 2023-07-03 16:49:18 UTC (rev 1076) +++ branches/850/samples/JavaFX/fxml_02/index.html 2023-07-06 10:49:04 UTC (rev 1077) @@ -67,9 +67,6 @@ <dt> <a href="FXML_02_ar.properties">FXML_02_ar.properties</a> <dd> A properties (text) file defining translations for some text values in the GUI to Arabic. - <dt> <a href="FXML_02_de.properties">FXML_02_de.properties</a> - <dd> A properties (text) file defining translations for some text values in the GUI to German. - <dt> <a href="FXML_02_bg.properties">FXML_02_bg.properties</a> <dd> A properties (text) file defining translations for some text values in the GUI to Bulgarian. @@ -76,6 +73,9 @@ <dt> <a href="FXML_02_cs.properties">FXML_02_cs.properties</a> <dd> A properties (text) file defining translations for some text values in the GUI to Czech. + <dt> <a href="FXML_02_de.properties">FXML_02_de.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to German. + <dt> <a href="FXML_02_en.properties">FXML_02_en.properties</a> <dd> A properties (text) file defining translations for some text values in the GUI to English. @@ -136,11 +136,14 @@ <dt> <a href="FXML_02_uk.properties">FXML_02_uk.properties</a> <dd> A properties (text) file defining translations for some text values in the GUI to Ukrainian. + <dt> <a href="FXML_02_zh.properties">FXML_02_zh.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Chinese (simplified). + </dl> <p> <hr> <p style="font-size: smaller;"> -Rony G. Flatscher, 2018-12-26 - 2023-07-03, Wien/Vienna, Austria, Europe +Rony G. Flatscher, 2018-12-26 - 2023-07-06, Wien/Vienna, Austria, Europe </body> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-07-03 16:49:20
|
Revision: 1076 http://sourceforge.net/p/bsf4oorexx/code/1076 Author: orexx Date: 2023-07-03 16:49:18 +0000 (Mon, 03 Jul 2023) Log Message: ----------- Add Arabian, Bulgarian, Czeck, Finnish, Greek, Hungarian, Letvian, Lithuanian, Dutch, Norwegian, Polish, Romanian, Russian, Swedish, Turkish and Ukrainian. Modified Paths: -------------- branches/850/samples/JavaFX/fxml_02/index.html Added Paths: ----------- branches/850/samples/JavaFX/fxml_02/fxml_02_ar.properties branches/850/samples/JavaFX/fxml_02/fxml_02_bg.properties branches/850/samples/JavaFX/fxml_02/fxml_02_cs.properties branches/850/samples/JavaFX/fxml_02/fxml_02_fi.properties branches/850/samples/JavaFX/fxml_02/fxml_02_gr.properties branches/850/samples/JavaFX/fxml_02/fxml_02_hu.properties branches/850/samples/JavaFX/fxml_02/fxml_02_lt.properties branches/850/samples/JavaFX/fxml_02/fxml_02_lv.properties branches/850/samples/JavaFX/fxml_02/fxml_02_nl.properties branches/850/samples/JavaFX/fxml_02/fxml_02_no.properties branches/850/samples/JavaFX/fxml_02/fxml_02_pl.properties branches/850/samples/JavaFX/fxml_02/fxml_02_ro.properties branches/850/samples/JavaFX/fxml_02/fxml_02_ru.properties branches/850/samples/JavaFX/fxml_02/fxml_02_sv.properties branches/850/samples/JavaFX/fxml_02/fxml_02_tr.properties branches/850/samples/JavaFX/fxml_02/fxml_02_uk.properties Added: branches/850/samples/JavaFX/fxml_02/fxml_02_ar.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_ar.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_ar.properties 2023-07-03 16:49:18 UTC (rev 1076) @@ -0,0 +1,7 @@ +! This is the Arabic (ar) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = السنة-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = انقر فوق لي! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_bg.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_bg.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_bg.properties 2023-07-03 16:49:18 UTC (rev 1076) @@ -0,0 +1,7 @@ +! This is the Bulgarain (bg) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = Година-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = Щракни ме! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_cs.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_cs.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_cs.properties 2023-07-03 16:49:18 UTC (rev 1076) @@ -0,0 +1,7 @@ +! This is the Czech (cs) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = Rok-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = Klikni na mě! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_fi.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_fi.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_fi.properties 2023-07-03 16:49:18 UTC (rev 1076) @@ -0,0 +1,7 @@ +! This is the Finnish (fi) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = Vuosi-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = Klikkaa minua! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_gr.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_gr.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_gr.properties 2023-07-03 16:49:18 UTC (rev 1076) @@ -0,0 +1,7 @@ +! This is the Greek (gr) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = Έτος-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = Κάντε κλικ με! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_hu.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_hu.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_hu.properties 2023-07-03 16:49:18 UTC (rev 1076) @@ -0,0 +1,7 @@ +! This is the Hungarian (hu) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = Év-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = Kattints ide! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_lt.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_lt.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_lt.properties 2023-07-03 16:49:18 UTC (rev 1076) @@ -0,0 +1,7 @@ +! This is the Lithuanian (lt) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = Metai-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = Paspausk mane! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_lv.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_lv.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_lv.properties 2023-07-03 16:49:18 UTC (rev 1076) @@ -0,0 +1,7 @@ +! This is the Latvian (lv) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = Gads-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = Noklikšķiniet uz manis! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_nl.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_nl.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_nl.properties 2023-07-03 16:49:18 UTC (rev 1076) @@ -0,0 +1,7 @@ +! This is the Dutch (nl) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = Jaar-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = Klik hier! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_no.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_no.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_no.properties 2023-07-03 16:49:18 UTC (rev 1076) @@ -0,0 +1,7 @@ +! This is the Norwegian (no) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = År-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = Klikk på meg! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_pl.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_pl.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_pl.properties 2023-07-03 16:49:18 UTC (rev 1076) @@ -0,0 +1,7 @@ +! This is the Polish (pl) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = Rok-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = Kliknij! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_ro.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_ro.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_ro.properties 2023-07-03 16:49:18 UTC (rev 1076) @@ -0,0 +1,7 @@ +! This is the Romanian (ro) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = Anul-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = Click pe mine! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_ru.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_ru.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_ru.properties 2023-07-03 16:49:18 UTC (rev 1076) @@ -0,0 +1,7 @@ +! This is the Russian (ru) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = Год-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = Нажми на меня! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_sv.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_sv.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_sv.properties 2023-07-03 16:49:18 UTC (rev 1076) @@ -0,0 +1,7 @@ +! This is the Swedish (sv) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = År-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = Klicka här! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_tr.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_tr.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_tr.properties 2023-07-03 16:49:18 UTC (rev 1076) @@ -0,0 +1,7 @@ +! This is the Turkish (tr) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = Yıl-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = Beni tıkla! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_uk.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_uk.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_uk.properties 2023-07-03 16:49:18 UTC (rev 1076) @@ -0,0 +1,7 @@ +! This is the Ukrainian (uk) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = Рік-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = Натисніть на мене! Modified: branches/850/samples/JavaFX/fxml_02/index.html =================================================================== --- branches/850/samples/JavaFX/fxml_02/index.html 2023-07-03 15:53:33 UTC (rev 1075) +++ branches/850/samples/JavaFX/fxml_02/index.html 2023-07-03 16:49:18 UTC (rev 1076) @@ -64,9 +64,18 @@ it demonstrates how to incorporate attributes as Rexx variables and updating attributes from the value of a Rexx variable using Rexx script annotations. + <dt> <a href="FXML_02_ar.properties">FXML_02_ar.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Arabic. + <dt> <a href="FXML_02_de.properties">FXML_02_de.properties</a> <dd> A properties (text) file defining translations for some text values in the GUI to German. + <dt> <a href="FXML_02_bg.properties">FXML_02_bg.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Bulgarian. + + <dt> <a href="FXML_02_cs.properties">FXML_02_cs.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Czech. + <dt> <a href="FXML_02_en.properties">FXML_02_en.properties</a> <dd> A properties (text) file defining translations for some text values in the GUI to English. @@ -73,9 +82,18 @@ <dt> <a href="FXML_02_es.properties">FXML_02_es.properties</a> <dd> A properties (text) file defining translations for some text values in the GUI to Spanish. + <dt> <a href="FXML_02_fi.properties">FXML_02_fi.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Finnish. + <dt> <a href="FXML_02_fr.properties">FXML_02_fr.properties</a> <dd> A properties (text) file defining translations for some text values in the GUI to French. + <dt> <a href="FXML_02_gr.properties">FXML_02_gr.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Greek. + + <dt> <a href="FXML_02_hu.properties">FXML_02_gr.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Hungarian. + <dt> <a href="FXML_02_il.properties">FXML_02_il.properties</a> <dd> A properties (text) file defining translations for some text values in the GUI to Hebrew (Israel). @@ -88,6 +106,36 @@ <dt> <a href="FXML_02_jp.properties">FXML_02_jp.properties</a> <dd> A properties (text) file defining translations for some text values in the GUI to Japanese. + <dt> <a href="FXML_02_lt.properties">FXML_02_lt.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Lithuanian. + + <dt> <a href="FXML_02_lv.properties">FXML_02_lv.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Latvian. + + <dt> <a href="FXML_02_nl.properties">FXML_02_nl.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Dutch (The Netherlands). + + <dt> <a href="FXML_02_no.properties">FXML_02_no.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Norwegian. + + <dt> <a href="FXML_02_pl.properties">FXML_02_pl.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Polish. + + <dt> <a href="FXML_02_ro.properties">FXML_02_ro.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Romanian. + + <dt> <a href="FXML_02_ru.properties">FXML_02_ru.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Russian. + + <dt> <a href="FXML_02_sv.properties">FXML_02_sv.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Swedish. + + <dt> <a href="FXML_02_tr.properties">FXML_02_tr.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Turkish. + + <dt> <a href="FXML_02_uk.properties">FXML_02_uk.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Ukrainian. + </dl> <p> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-07-03 15:53:34
|
Revision: 1075 http://sourceforge.net/p/bsf4oorexx/code/1075 Author: orexx Date: 2023-07-03 15:53:33 +0000 (Mon, 03 Jul 2023) Log Message: ----------- 2023-07-03 Update accordingly. Modified Paths: -------------- branches/850/samples/JavaFX/fxml_02/index.html Modified: branches/850/samples/JavaFX/fxml_02/index.html =================================================================== --- branches/850/samples/JavaFX/fxml_02/index.html 2023-07-03 15:48:31 UTC (rev 1074) +++ branches/850/samples/JavaFX/fxml_02/index.html 2023-07-03 15:53:33 UTC (rev 1075) @@ -64,17 +64,35 @@ it demonstrates how to incorporate attributes as Rexx variables and updating attributes from the value of a Rexx variable using Rexx script annotations. + <dt> <a href="FXML_02_de.properties">FXML_02_de.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to German. + <dt> <a href="FXML_02_en.properties">FXML_02_en.properties</a> <dd> A properties (text) file defining translations for some text values in the GUI to English. - <dt> <a href="FXML_02_de.properties">FXML_02_de.properties</a> - <dd> A properties (text) file defining translations for some text values in the GUI to German. + <dt> <a href="FXML_02_es.properties">FXML_02_es.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Spanish. + <dt> <a href="FXML_02_fr.properties">FXML_02_fr.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to French. + + <dt> <a href="FXML_02_il.properties">FXML_02_il.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Hebrew (Israel). + + <dt> <a href="FXML_02_in.properties">FXML_02_in.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Hindi (India). + + <dt> <a href="FXML_02_it.properties">FXML_02_it.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Italian. + + <dt> <a href="FXML_02_jp.properties">FXML_02_jp.properties</a> + <dd> A properties (text) file defining translations for some text values in the GUI to Japanese. + </dl> <p> <hr> <p style="font-size: smaller;"> -Rony G. Flatscher, 2018-12-26, Wien/Vienna, Austria, Europe +Rony G. Flatscher, 2018-12-26 - 2023-07-03, Wien/Vienna, Austria, Europe </body> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-07-03 15:48:33
|
Revision: 1074 http://sourceforge.net/p/bsf4oorexx/code/1074 Author: orexx Date: 2023-07-03 15:48:31 +0000 (Mon, 03 Jul 2023) Log Message: ----------- 20230703 Add Spanish, French, Israelian/Hebrew, Indian/Hindi, Italian and Japanese properties files. Added Paths: ----------- branches/850/samples/JavaFX/fxml_02/fxml_02_es.properties branches/850/samples/JavaFX/fxml_02/fxml_02_fr.properties branches/850/samples/JavaFX/fxml_02/fxml_02_il.properties branches/850/samples/JavaFX/fxml_02/fxml_02_in.properties branches/850/samples/JavaFX/fxml_02/fxml_02_it.properties branches/850/samples/JavaFX/fxml_02/fxml_02_jp.properties Added: branches/850/samples/JavaFX/fxml_02/fxml_02_es.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_es.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_es.properties 2023-07-03 15:48:31 UTC (rev 1074) @@ -0,0 +1,7 @@ +! This is the Spanish (es) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = Año-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = ¡Haz click en mi! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_fr.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_fr.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_fr.properties 2023-07-03 15:48:31 UTC (rev 1074) @@ -0,0 +1,7 @@ +! This is the French (fr) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = Ann\xE9e-> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = Cliquez sur moi ! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_il.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_il.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_il.properties 2023-07-03 15:48:31 UTC (rev 1074) @@ -0,0 +1,7 @@ +! This is the Hebrew/Israelian (il) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = שנה -> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = לחץ עלי! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_in.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_in.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_in.properties 2023-07-03 15:48:31 UTC (rev 1074) @@ -0,0 +1,7 @@ +! This is the Hindi/Indian (in) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = वर्ष -> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = मुझे क्लिक करें! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_it.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_it.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_it.properties 2023-07-03 15:48:31 UTC (rev 1074) @@ -0,0 +1,7 @@ +! This is the Italian (it) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = Anno -> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = Cliccami! Added: branches/850/samples/JavaFX/fxml_02/fxml_02_jp.properties =================================================================== --- branches/850/samples/JavaFX/fxml_02/fxml_02_jp.properties (rev 0) +++ branches/850/samples/JavaFX/fxml_02/fxml_02_jp.properties 2023-07-03 15:48:31 UTC (rev 1074) @@ -0,0 +1,7 @@ +! This is the Japanese (jp) translation for two terms. +! +! the following key is used in the Label with the fx:id="text", where its text attribute states (note the percentage char): text="%year" +year = 年 -> + +! the following key is used in the Button with the fx:id="button", where its text attribute states (note the percentage char): text="%clickMe" +clickMe = クリックしてください! This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-06-21 13:27:25
|
Revision: 1073 http://sourceforge.net/p/bsf4oorexx/code/1073 Author: orexx Date: 2023-06-21 13:27:23 +0000 (Wed, 21 Jun 2023) Log Message: ----------- 20230621 Allow swriter bsf sample to work on macOS as well. Modified Paths: -------------- branches/850/bsf4oorexx.dev/bin/BSF.CLS branches/850/createDistributionForBSF4ooRexx8.cmd branches/850/samples/1-250_swriter_bsf_clipboard.rxj Modified: branches/850/bsf4oorexx.dev/bin/BSF.CLS =================================================================== --- branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-06-20 14:40:26 UTC (rev 1072) +++ branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-06-21 13:27:23 UTC (rev 1073) @@ -852,7 +852,7 @@ BSF_ARRAY_PROXY: MAKEARRAY and SUPPLIER now only return entries with values as does Object Rexx with native arrays) - version: 8.50 (20230620) -- "6" -> Java minimum level "1.6/6.0", 41 -> ooRexx minimum level "4.1" + version: 8.50 (20230621) -- "6" -> Java minimum level "1.6/6.0", 41 -> ooRexx minimum level "4.1" If this program is part of a distribution of an Apache foundation project (e.g. BSF, the Bean Scripting Framework), then the immediately following Apache foundation license @@ -955,7 +955,7 @@ if initialize.bsf.dir() then -- setup .bsfrexx do - .bsf4rexx~version="850.20230620" -- set version (date distribution got created) + .bsf4rexx~version="850.20230621" -- set version (date distribution got created) .bsf4rexx~opSys =opsys -- save operating system name as supplied by Rexx' PARSE SOURCE .bsf4rexx~opSys1 =opsys~left(1)~upper -- save operating system name's initial letter in uppercase .bsf4rexx~opSys2 =opsys~left(2)~upper -- save operating system name's first two letters in uppercase Modified: branches/850/createDistributionForBSF4ooRexx8.cmd =================================================================== --- branches/850/createDistributionForBSF4ooRexx8.cmd 2023-06-20 14:40:26 UTC (rev 1072) +++ branches/850/createDistributionForBSF4ooRexx8.cmd 2023-06-21 13:27:23 UTC (rev 1073) @@ -36,9 +36,9 @@ @echo adding javax.servlet.jsp and javax.servlet.http to CLASSPATH set CLASSPATH=%CLASSPATH%;F:\download\java\java2s.com-javax.servlet.jsp\javax.servlet.jsp.jar;F:\download\java\java2s.com-javax.servlet.jsp\javax.servlet-3.0.0.v201112011016.jar -set releaseDate=20230620 -set runDate=20230620 -set doc_date=20230620 +set releaseDate=20230621 +set runDate=20230621 +set doc_date=20230621 @rem values to use for creating the BSF jarfile @rem set bsfDate=20090910 Modified: branches/850/samples/1-250_swriter_bsf_clipboard.rxj =================================================================== --- branches/850/samples/1-250_swriter_bsf_clipboard.rxj 2023-06-20 14:40:26 UTC (rev 1072) +++ branches/850/samples/1-250_swriter_bsf_clipboard.rxj 2023-06-21 13:27:23 UTC (rev 1073) @@ -17,17 +17,16 @@ the document. Notes: - this example was developed and tested with Apache OpenOffice (AOO) - on Windows and should work unchanged on other operating systems, - but may have issues (especially on macOS); - - the AOO fork LibreOffice seems to have started to drive away - from the AOO-APIs and the AOO runtime behavior (e.g. on macOS - XDesktop~getCurrentFrame may return .nil) + on Windows and should work unchanged on other operating systems - Date: 2023-06-17/19/20 + Date: 2023-06-17/19/20/21 Author: Rony G. Flatscher, WU Vienna - Changes: --- + Changes: 2023-06-21 - get XFrame from document's model, its current controller + and its Frame in order to make sure that we can dispatch + command urls properly via its XDispatchProvider interface + (cf.: "currFrameXDP=document~XModel~getCurrentController~getFrame~XDispatchProvider") last change: Revision: $Revision: 951 $ $Author: orexx $ $Date: 2022-08-10 18:06:25 +0200 (Mi., 10 Aug 2022) $ (svn hint: use 'propset svn:keywords "Author Date Revision" filename') @@ -88,10 +87,14 @@ -- we want to use the dispatch interface, hence: sDispatchHelper=serviceManager~createInstance("com.sun.star.frame.DispatchHelper") + -- note: here a list of ".uno:" commands: <https://wiki.openoffice.org/wiki/Framework/Article/OpenOffice.org_2.x_Commands> + -- from LibreOffice: <https://wiki.documentfoundation.org/Development/DispatchCommands> + -- note: using dispatches to set and get strings to/from clipboard: <https://wiki.openoffice.org/wiki/The_OpenOffice.org_recorder_and_UNO_dispatch_calls> dispatcher=sDispatchHelper~XDispatchHelper - -- note: the currentFrame needs to be queried here, otherwise it may be still .nil! -currFrameXDP=xDesktop~currentFrame~XDispatchProvider -- get XDispatchProvider functionality + -- this way we get the XFrame related to this particular document for dispatching +currFrameXDP=document~XModel~getCurrentController~getFrame~XDispatchProvider + -- define some characters, encoded as UTF-8 female ="e2 99 80"x male ="e2 99 82"x This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-06-20 14:40:29
|
Revision: 1072 http://sourceforge.net/p/bsf4oorexx/code/1072 Author: orexx Date: 2023-06-20 14:40:26 +0000 (Tue, 20 Jun 2023) Log Message: ----------- 20230620 New beta installation packages (zip-archive and Mac). Modified Paths: -------------- branches/850/bsf4oorexx.dev/bin/BSF.CLS branches/850/bsf4oorexx.dev/install/setupBSF.rex branches/850/createDistributionForBSF4ooRexx8.cmd branches/850/samples/1-140_JDOR_images.rxj branches/850/samples/1-140_JDOR_images_reversed.rxj branches/850/samples/1-150_JDOR_string_circle.rxj branches/850/samples/1-170_JDOR_lineHeight.rxj branches/850/samples/1-180_JDOR_sandGlass.rxj branches/850/samples/1-180_JDOR_sandGlass_float_colors.rxj branches/850/samples/1-180_JDOR_sandGlass_log.rxj branches/850/samples/1-180_JDOR_sandGlass_replay_log.rxj branches/850/samples/1-240_Clipboard.rxj branches/850/samples/1-250_swriter_bsf_clipboard.rxj branches/850/samples/1-250_windows_swriter_ole_clipboard.rxj branches/850/samples/1-250_windows_word_ole_clipboard.rxj branches/850/samples/2-130_JDOR_animate_two_frames.rxj branches/850/samples/3-040_quiz1.rxj branches/850/samples/3-050_quiz2.rxj branches/850/samples/3-060_quiz3.rxj branches/850/samples/3-070_ShootOut.rxj branches/850/samples/3-080_ShootOut2.rxj branches/850/samples/3-100_create_bitmap_JDOR_commands.rxj branches/850/samples/3-110_JDOR_animate_composite.rxj Modified: branches/850/bsf4oorexx.dev/bin/BSF.CLS =================================================================== --- branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-06-20 14:40:26 UTC (rev 1072) @@ -9,16 +9,20 @@ last change: $Revision$ $Author$ $Date$ - needs: ooRexx 4.1.0 (cf. <http://www.ooRexx.org>) and BSF4ooRexx 4.0 or greater + needs: ooRexx 5.0.0 (cf. <http://www.ooRexx.org>) and Java 8 or higher - TODO: once BSF4ooRexx defines ooRexx 5.0 to be the minimal supported ooRexx version, then - its new features will be taken advantage of; one being ".context~package~local" to store - the class objects for bsf.import() and bsf.loadClass() instead of ".environment" (used to - be .local): such a change would ca - use changes in BSF4ooRexx as well, which tries to locate - .BSF in .environment; + date: - date: + 2023-06-19, ---rgf, - "BSF.ClipBoard": cater for java.lang.IllegalStateException and indicate + success/failure with return values + 2023-06-18, ---rgf, - changed class "NullDevice" to "Bsf.NullDevice", made it a singleton, + creating and storing singleton as "dev.null" in .environment (defined + by the class method activate): .dev.null can be used in ADDRESS...WITH + for any input/output/error object/stream + - new routines "bsf.asString" and "bsf.stringAsJSO" which allow supplying + explicitly the codepage to use + + 2023-06-15, ---rgf, - BSF.Clipboard: defaultCodepage -> file.encoding, only gettable 2023-06-14, ---rgf, - allow optional codepage argument for "BSF.ClipBoard" method setString @@ -848,7 +852,7 @@ BSF_ARRAY_PROXY: MAKEARRAY and SUPPLIER now only return entries with values as does Object Rexx with native arrays) - version: 8.50 (20230614) -- "6" -> Java minimum level "1.6/6.0", 41 -> ooRexx minimum level "4.1" + version: 8.50 (20230620) -- "6" -> Java minimum level "1.6/6.0", 41 -> ooRexx minimum level "4.1" If this program is part of a distribution of an Apache foundation project (e.g. BSF, the Bean Scripting Framework), then the immediately following Apache foundation license @@ -951,7 +955,7 @@ if initialize.bsf.dir() then -- setup .bsfrexx do - .bsf4rexx~version="850.20230614" -- set version (date distribution got created) + .bsf4rexx~version="850.20230620" -- set version (date distribution got created) .bsf4rexx~opSys =opsys -- save operating system name as supplied by Rexx' PARSE SOURCE .bsf4rexx~opSys1 =opsys~left(1)~upper -- save operating system name's initial letter in uppercase .bsf4rexx~opSys2 =opsys~left(2)~upper -- save operating system name's first two letters in uppercase @@ -968,7 +972,6 @@ .environment~slot.argument=.slot.argument -- putting in .environment to allow FindClass() to find it call getAndSetPathToIcons - .environment~nullDevice=.NullDevice~new -- singleton to swallow SAY/LINEOUT/CHAROUT in redirected OUTPUT/ERROR targets end call create_display.version_entry -- create the display version entry .bsf4rexx~display.version @@ -4338,6 +4341,7 @@ return .java.lang.String~new(BSFRawBytes(str),"UTF-8") + /* ================================================================================================= */ /* ---------------------------------------------------------------------------------------- */ /** The received Java String object (JSO) is rendered as an UTF-8 Rexx string, independent @@ -4365,6 +4369,47 @@ /* ================================================================================================= */ /* ---------------------------------------------------------------------------------------- */ +/** The received Rexx string consists of encoded characters for which a Java string object (JSO) gets +* created and returned. The default encoding assumed is defined as <em>.bsf.ClipBoard~defaultCodepage</em> +* and can be overruled by supplying the encoding explicitly as the second argument. +* +* @param str the Rexx string +* @param codepage the codepage in which the Rexx string is encoded, defaults to <em>.bsf.ClipBoard~defaultCodepage</em> +* @return a reference to the Java String object constructed from the Rexx string +* @since 2023-06-18 +*/ +::routine bsf.stringAsJSO public + use strict arg str, codepage=(.bsf.clipBoard~defaultCodepage) + return .java.lang.String~new(BSFRawBytes(str),codepage) + + +/* ================================================================================================= */ + /* ---------------------------------------------------------------------------------------- */ +/** The received Java (String) object gets rendered as a Rexx string encoded according to + * the <em>.bsf.ClipBoard~defaultCodepage</em> codepage setting. + +* @param obj a Java String object (JSO) reference or a Java object which String value is retrieved and worked upon +* @param codepage the codepage in which the return Rexx string is encoded, defaults to <em>.bsf.ClipBoard~defaultCodepage</em> +* @return a Rexx string encoded according to the <em>codepage</em> constructed from the Java String object +* @since 2023-06-18 +*/ +::routine bsf.asString public + use strict arg obj, codepage=(.bsf.clipBoard~defaultCodepage) + + if obj~isA(.bsf) then -- a Rexx proxy (to a Java object) in hand? + do + if obj~bsf.isA(.java.lang.String)=.false then -- need to get String value from object? + obj=obj~bsf.invokeJSO('toString') -- fetch String value as a Java String object (JSO) + + return BSFRawBytes(obj~getBytes(codepage)) -- render String value to a Rexx string and return it + end + raise syntax 40.900 array ("BSF.CLS/routine/bsf.asString(): wrong argument, must be a Java String object (JSO) or a Java object which String value (result of sending it the 'toString' message) will be processed upon. Instead, received an ooRexx object ["obj"].") + +syntax: + raise propagate + +/* ================================================================================================= */ + /* ---------------------------------------------------------------------------------------- */ -- as of ooRexx 4.1.1 the following scenario may occur: Rexx starts Java and Java calls -- back into ooRexx; this may take place even after the Rexx program ended and as a result the -- Rexx interpreter shuts down; a callback in that situation will cause a crash! @@ -6368,7 +6413,6 @@ /** Routine that makes sure that a RexxAndJava (RexxEngine) instance gets initialized * properly, even if the prolog code does not get executed (to be expected in future * versions of ooRexx 5.x as of 2023-04,11) -* */ ::routine bsf.initRAJinstance public call bsf 'bsfPrefixReturnValue',1 @@ -6377,12 +6421,20 @@ /** This class swallows/intercepts the messages SAY, LINEOUT and CHAROUT and therefore can be used as an ooRexx "nul" (Windows) or "/dev/null" (Unix) target. A singleton - will be placed into .environment with the name "DEV.NULL" such that it can be always - used in redirected targets. + will be placed into .environment under the name "DEV.NULL" such that it can be always + used in <em>address ... with ...</em> as any redirected target referencing it with + the environment symbol <em>.DEV.NULL</em>. + @since 2022-12-04 */ -::class "NullDevice" subclass InputOutputStream --- InputStream: raise notReady +::class "Bsf.NullDevice" subclass InputOutputStream metaclass singleton +::method activate class -- runs in setup phase after all class inits ran + .environment~dev.null=self~new -- create an entry in .environment + +::method init + self~objectName="The NullDevice" -- self documentary + +-- InputStream: raise notReady condition ::method charIn unguarded -- implement abstract method raise notReady ::method chars unguarded -- implement abstract method @@ -6406,6 +6458,10 @@ /** A class that makes it easy for ooRexx programmers to set the * system clipboard to a supplied image or string and to fetch * an image or a string from the clipboard. +* <p><em>Note:</em> it may be the case that accessing the clipboard may not +* be successful as other applications may do that concurrently in which case +* the Java excepetion <em>java.lang.IllegalStateException</em> gets raised +* causing a syntax condition in ooRexx. * * @since 20230611 */ @@ -6418,13 +6474,13 @@ ::method loadPeerClass package class -- load the peer Java class now expose thisClz defaultCodePage thisClz=bsf.loadClass("org.rexxla.bsf.engines.rexx.BsfSystemClipboard") - defaultCodePage=.java.lang.System~getProperty("native.encoding") -- with Java 18 - if defaultCodePage~isNil then + defaultCodePage=.java.lang.System~getProperty("native.encoding") + if defaultCodePage~isNil then -- not set, fall back to "file.encoding" defaultCodePage=.java.lang.System~getProperty("file.encoding") /** This attribute determines which file encoding is used when converting * strings to and from Java. It defaults to the <em>java.lang.System</em> -* property <em>"file.encoding"</em> and if <em>.nil</em> then +* property <em>"native.encoding"</em> and if <em>.nil</em> then * <em>"file.encoding"</em>. */ -- https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html (2023-06-14) @@ -6445,7 +6501,10 @@ */ ::method isEmpty class expose thisClz + signal on syntax return thisClz~isEmpty +synax: + return .nil -- indicate a problem (java.lang.IllegalStateException) accessing system clipboard /* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */ @@ -6459,25 +6518,34 @@ /* ------------------------------------------------------------------------ */ /** Getter method for current types available from the system clipboard. * @return an array of type <em>java.awt.datatransfer.DataFlavor</em>, use the <em>toString</em> -* method on its members +* method on its members, <em>.nil</em> if not successful */ -::method getDataFlavors class +::method getDataFlavors class -- may cause java.lang.IllegalStateException expose thisClz + signal on syntax return thisClz~getDataFlavors +synax: + return .nil -- indicate a problem (java.lang.IllegalStateException) accessing system clipboard /* ------------------------------------------------------------------------ */ /** Clears (empties) the system clipboard. +* @return <em>.true</em> if successful, <em>.false</em> else (e.g. java.lang.IllegalStateException) */ -::method clear class +::method clear class -- may cause java.lang.IllegalStateException expose thisClz + signal on syntax thisClz~clear + return .true +syntax: + return .false -- indicate a problem (java.lang.IllegalStateException) accessing system clipboard /* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */ /** Setter method to set the system clipboard to the supplied image. * @param img the image (<em>java.awt.Image</em>) that should be put into the system clipboard +* @return <em>.true</em> if successful, <em>.false</em> else (e.g. java.lang.IllegalStateException) */ -::attribute image set class +::attribute image set class -- may cause java.lang.IllegalStateException forward message (setImage) /* ------------------------------------------------------------------------ */ @@ -6487,39 +6555,52 @@ * trasnlucency (and if so that it is drawn with a white background), defaults * to <em>.false</em> which may yield image versions on the system clipboard that * are drawn on a black background +* @return <em>.true</em> if successful, <em>.false</em> else (e.g. java.lang.IllegalStateException) */ -::method setImage class +::method setImage class -- may cause java.lang.IllegalStateException expose thisClz use strict arg img, bNoAlpha=.false + signal on syntax if bNoAlpha=.true then thisClz~setImageWithoutAlpha(img) else thisClz~setImage(img) + return .true +syntax: + return .false -- indicate a problem (java.lang.IllegalStateException) accessing system clipboard /* ------------------------------------------------------------------------ */ /** Setter method to set the system clipboard to the supplied image. * @param img the image (<em>java.awt.Image</em>) that should be put into the system clipboard * with no alpha (translucency) in the image +* @return <em>.true</em> if successful, <em>.false</em> else (e.g. java.lang.IllegalStateException) */ -::method setImageWithoutAlpha class +::method setImageWithoutAlpha class -- may cause java.lang.IllegalStateException expose thisClz use strict arg img + signal on syntax self~setImage(img,.true) + return .true +syntax: + return .false -- indicate a problem (java.lang.IllegalStateException) accessing system clipboard /* ------------------------------------------------------------------------ */ /** Getter method to fetch an image from the system clipboard. -* @return image fetched from system clipboard or <em>.nil</em> if no image present +* @return image fetched from system clipboard or <em>.nil</em> if no image present or problem (e.g. java.lang.IllegalStateException) */ -::attribute image get class +::attribute image get class -- may cause java.lang.IllegalStateException forward message (getImage) /* ------------------------------------------------------------------------ */ /** Getter method to fetch an image from the system clipboard. -* @return image fetched from system clipboard or <em>.nil</em> if no image present +* @return image fetched from system clipboard or <em>.nil</em> if no image present or problem (e.g. java.lang.IllegalStateException) */ -::method getImage class +::method getImage class -- may cause java.lang.IllegalStateException expose thisClz + signal on syntax return thisClz~getImage +syntax: + return .nil -- indicate a problem (java.lang.IllegalStateException) accessing system clipboard /* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */ @@ -6531,7 +6612,7 @@ * * @param string the string that should be put into the system clipboard */ -::attribute string set class +::attribute string set class -- may cause java.lang.IllegalStateException forward message (setString) @@ -6544,15 +6625,21 @@ * * @param string the Rexx string that should be put into the system clipboard * @param codepage optonal, a string denoting explicitly the codepage that was used to encode the Rexx string +* @return <em>.true</em> if successful, <em>.false</em> else (e.g. java.lang.IllegalStateException) */ -::method setString class +::method setString class -- may cause java.lang.IllegalStateException expose thisClz defaultCodePage use strict arg str, ... + signal on syntax if arg(2,"exists") then thisClz~setString(.java.lang.String~new(BSFRawBytes(str),arg(2))) else thisClz~setString(str) + return .true +syntax: + return .false -- indicate a problem (java.lang.IllegalStateException) accessing system clipboard + /* ------------------------------------------------------------------------ */ /** Getter method to fetch a string from the system clipboard. * <br>Note: this version does not force a specific codepage to be used sucht @@ -6560,7 +6647,7 @@ * * @return string fetched from system clipboard or <em>.nil</em> if no string present */ -::attribute string get class +::attribute string get class -- may cause java.lang.IllegalStateException forward message (getString) /* ------------------------------------------------------------------------ */ @@ -6570,12 +6657,15 @@ * @param codepage a string denoting the codepage to use to encode the Rexx string to return * * @return string fetched from system clipboard encoded according to <em>codepage</em> or -* <em>.nil</em> if no string present +* <em>.nil</em> if no string present or problem (e.g. java.lang.IllegalStateException) */ -::method getString class +::method getString class -- may cause java.lang.IllegalStateException expose thisClz defaultCodePage use strict arg codepage=(defaultCodePage) + signal on syntax return BsfRawBytes(thisClz~getString(codepage)) +syntax: + return .nil -- indicate a problem (java.lang.IllegalStateException) accessing system clipboard /* /* ------------------------------------------------------------------------ */ Modified: branches/850/bsf4oorexx.dev/install/setupBSF.rex =================================================================== --- branches/850/bsf4oorexx.dev/install/setupBSF.rex 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/bsf4oorexx.dev/install/setupBSF.rex 2023-06-20 14:40:26 UTC (rev 1072) @@ -5,8 +5,11 @@ without any knowledge about Java installation issues) Author: Rony G. Flatscher Date: 2006-01-07 - Version: 1.43 + Version: 1.44 Changed: + 2023-06-15, - fix type (count.0 to count) in determinePath2javaBinary() searching + Java with matching bitness, testing with checkValidJavaExe() + 2022-12-23, - intercept syntax error on Windows if no Java entry in registry found 2022-11-03, - add cmd.eHomeDir"/BSF4ooRexx/lib/" || "*" to classpath to pick up all jars there @@ -2183,7 +2186,8 @@ if pf="" then -- on 32-bit Windows pf=wProgramFiles -- value("ProgramFiles",,"environment") end - searchPattern=pf"\Java\java.exe" + -- searchPattern=pf"\Java\java.exe" + searchPattern=pf"\java.exe" say "determinePath2javaBinary(), java.exe not found yet, looking in ["searchPattern"] and its subdirectories ..." "line #" pp(.line) -- try to locate java.exe, use the last one (assuming it is the newest) call SysFileTree searchPattern, "files.", "FSO" @@ -2194,9 +2198,11 @@ say "determinePath2javaBinary(), java.exe found in" count " places using ["searchPattern"], returning ["files.count"]." "line #" pp(.line) end - do i=1 to count.0 - cmd.eJavaBinary=qw(files.count) - say "determinePath2javaBinary(), checking files."i"/"count.0" ["files.count"]." "line #" pp(.line) + do i=1 to count + cmd.eJavaBinary=qw(files.i) + if checkValidJavaExe(cmd.eJavaBinary)=.false then iterate + + say "determinePath2javaBinary(), checking files."i"/"count.0" ["files.i"]." "line #" pp(.line) tmpJ.=getJavaProps(cmd.eJavaBinary) -- if Java and ooRexx do not match in bitness, look for another Java if tmpJ.sun.arch.data.model<>cmd.eBitness then @@ -2505,3 +2511,20 @@ if sysFileExists(homeDir) then return homeDir -- done return "$HOME" -- not found, fall back to environment variable + + +::routine checkValidJavaExe -- test whether java.exe can be successfully run + use strict arg path2javaexe + signal on syntax + + out=.array~new + command=path2javaexe "-version" + address system command with output using (out) + return (rc=0) -- .true only, if RC=0 +syntax: + return .false + + + + + Modified: branches/850/createDistributionForBSF4ooRexx8.cmd =================================================================== --- branches/850/createDistributionForBSF4ooRexx8.cmd 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/createDistributionForBSF4ooRexx8.cmd 2023-06-20 14:40:26 UTC (rev 1072) @@ -36,9 +36,9 @@ @echo adding javax.servlet.jsp and javax.servlet.http to CLASSPATH set CLASSPATH=%CLASSPATH%;F:\download\java\java2s.com-javax.servlet.jsp\javax.servlet.jsp.jar;F:\download\java\java2s.com-javax.servlet.jsp\javax.servlet-3.0.0.v201112011016.jar -set releaseDate=20230612 -set runDate=20230612 -set doc_date=20230612 +set releaseDate=20230620 +set runDate=20230620 +set doc_date=20230620 @rem values to use for creating the BSF jarfile @rem set bsfDate=20090910 Modified: branches/850/samples/1-140_JDOR_images.rxj =================================================================== --- branches/850/samples/1-140_JDOR_images.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/1-140_JDOR_images.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -41,9 +41,9 @@ limitations under the License. ----------------------------------------------------------------------------- */ - -- make sure we change to program's directory to refer to images with unqualified filenames + -- make sure we change to program's directory to refer to images with unqualified filenames: parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir -- create JDOR handler jdh=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") @@ -72,4 +72,5 @@ if \bShowCommands then say "'sleep 5' ..." sleep 5 -- sleep for five seconds + ::requires "BSF.CLS" -- get ooRexx-Java bridge, contains JDOR Rexx command handler Modified: branches/850/samples/1-140_JDOR_images_reversed.rxj =================================================================== --- branches/850/samples/1-140_JDOR_images_reversed.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/1-140_JDOR_images_reversed.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -42,9 +42,9 @@ limitations under the License. ----------------------------------------------------------------------------- */ - -- make sure we change to program's directory to refer to images with unqualified filenames + -- make sure we change to program's directory to refer to images with unqualified filenames: parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir -- create JDOR handler jdh=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") Modified: branches/850/samples/1-150_JDOR_string_circle.rxj =================================================================== --- branches/850/samples/1-150_JDOR_string_circle.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/1-150_JDOR_string_circle.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -42,7 +42,7 @@ */ -- make sure we change to program's directory to refer to images with unqualified filenames parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir -- create JDOR handler jdh=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") Modified: branches/850/samples/1-170_JDOR_lineHeight.rxj =================================================================== --- branches/850/samples/1-170_JDOR_lineHeight.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/1-170_JDOR_lineHeight.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -45,7 +45,7 @@ */ -- make sure we change current directory to program's directory parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current directory to this program's source directory +oldDir=directory(filespec('location',s)) -- change current directory to this program's source directory -- create JDOR handler jdh=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") Modified: branches/850/samples/1-180_JDOR_sandGlass.rxj =================================================================== --- branches/850/samples/1-180_JDOR_sandGlass.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/1-180_JDOR_sandGlass.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -43,7 +43,7 @@ */ -- make sure we change current directory to program's directory parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir -- create JDOR handler jdh=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") Modified: branches/850/samples/1-180_JDOR_sandGlass_float_colors.rxj =================================================================== --- branches/850/samples/1-180_JDOR_sandGlass_float_colors.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/1-180_JDOR_sandGlass_float_colors.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -44,7 +44,7 @@ */ -- make sure we change current directory to program's directory parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir -- create JDOR handler jdh=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") Modified: branches/850/samples/1-180_JDOR_sandGlass_log.rxj =================================================================== --- branches/850/samples/1-180_JDOR_sandGlass_log.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/1-180_JDOR_sandGlass_log.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -43,7 +43,7 @@ */ -- make sure we change current directory to program's directory parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir -- create JDOR handler jdh=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") Modified: branches/850/samples/1-180_JDOR_sandGlass_replay_log.rxj =================================================================== --- branches/850/samples/1-180_JDOR_sandGlass_replay_log.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/1-180_JDOR_sandGlass_replay_log.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -44,7 +44,7 @@ */ -- make sure we change current directory to program's directory parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir -- create JDOR handler jdh=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") Modified: branches/850/samples/1-240_Clipboard.rxj =================================================================== --- branches/850/samples/1-240_Clipboard.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/1-240_Clipboard.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -16,7 +16,8 @@ Author: Rony G. Flatscher, WU Vienna - Changes: --- + Changes: 2023-06-19, - define "file.encoding" as fallback for "sun.stdout.encoding" + - change to source directory such that png files can be found last change: Revision: $Revision: 951 $ $Author: orexx $ $Date: 2022-08-10 18:06:25 +0200 (Mi., 10 Aug 2022) $ (svn hint: use 'propset svn:keywords "Author Date Revision" filename') @@ -39,6 +40,9 @@ limitations under the License. ----------------------------------------------------------------------------- */ + -- make sure we change to program's directory to refer to images with unqualified filenames +parse source . . s -- get full path to this program +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir say "1) starting up, checking clipboard:" call showFormats @@ -93,8 +97,11 @@ cps ="Cp437", "Cp850", "Cp1252", "UTF-8" -- respective codepage names stdoutEncoding=.java.lang.System~getProperty("sun.stdout.encoding") -- fetch current stdout encoding +if stdoutEncoding=.nil then + stdoutEncoding=.java.lang.System~getProperty("file.encoding") -- fallback + +if stdoutEncoding="cp65001" then stdoutEncoding="UTF-8" -- Java does not accept Microsfot's proprietary "cp65001" say "current stdout's encoding:" pp(stdoutEncoding) -if stdoutEncoding="cp65001" then stdoutEncoding="UTF-8" -- Java does not accept Microsfot's proprietary "cp65001" say do counter c str over strings @@ -128,6 +135,7 @@ say ' .bsf.clipboard~getString('pp(stdoutEncoding)') /* get string from clipboard, we need it encoded with 'pp(stdoutEncoding)' */' say " " pp(.bsf.clipboard~getString(stdoutEncoding)) +call directory oldDir -- change current directory back to original directory ::requires BSF.CLS -- get bidiretional ooRexx-Java bridge Modified: branches/850/samples/1-250_swriter_bsf_clipboard.rxj =================================================================== --- branches/850/samples/1-250_swriter_bsf_clipboard.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/1-250_swriter_bsf_clipboard.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -16,8 +16,15 @@ image to the systme clipboard, which then gets pasted into the document. - Date: 2023-06-17 + Notes: - this example was developed and tested with Apache OpenOffice (AOO) + on Windows and should work unchanged on other operating systems, + but may have issues (especially on macOS); + - the AOO fork LibreOffice seems to have started to drive away + from the AOO-APIs and the AOO runtime behavior (e.g. on macOS + XDesktop~getCurrentFrame may return .nil) + Date: 2023-06-17/19/20 + Author: Rony G. Flatscher, WU Vienna Changes: --- @@ -45,6 +52,9 @@ */ parse source . . fullName -- get source path + -- make sure we change to program's directory to refer to images with unqualified filenames +oldDir=directory(filespec('location',fullName)) -- change current dir to this program's source dir + thisName=filespec("name",fullName) -- extract name parse var thisName name '.' -- remove extension docName=name".odt" -- name of swriter document we create at the end @@ -58,6 +68,10 @@ uri="private:factory/swriter" -- new swriter document document=xcl~loadComponentFromURL(uri,"_blank",0,.uno~noProps) + -- get UNO_CONSTANTs as a Rexx directory +ctlChars=.uno_constants~new("com.sun.star.text.ControlCharacter") -- UNO_CONSTANT +lineBreak=ctlChars~line_break -- get line break ("1") +paraBreak=ctlChars~paragraph_break -- get paragraph break constant text=document~XTextDocument~getText -- get text object dtStart=.dateTime~new @@ -65,8 +79,8 @@ cursor=text~createTextCursor -- create the character based cursor cursor~gotoEnd(.false) -ctlChars=.uno_constants~new("com.sun.star.text.ControlCharacter") -- UNO_CONSTANT -paraBreak=ctlChars~paragraph_break -- get paragraph break constant +text~insertControlCharacter(cursor, paraBreak, .false) +text~insertString(cursor,"Using:" .bsf4rexx~display.version".",.false) text~insertControlCharacter(cursor,paraBreak,.false) text~insertString(cursor,"This is a text sent to swriter using BSF4ooRexx850.",.false) @@ -122,6 +136,25 @@ dispatcher~executeDispatch(currFrameXDP, '.uno:Paste', '', 0, .uno~noProps) text~insertControlCharacter(cursor, paraBreak, .false) + -- now do charset related musings +text~insertControlCharacter(cursor, paraBreak, .false) +text~insertString(cursor, "Here the current Java related encoding properties:", .false) + +properties=.java.lang.System~getProperties +propNames=properties~propertyNames +do propName over propNames~makeArray~sort + if propName~caselessPos("encoding")>0 then + do + str="Java System property named" pp(propName)":" pp(.java.lang.System~getProperty(propName)) + text~insertString(cursor, str, .false) + text~insertControlCharacter(cursor, lineBreak, .false) + end +end +text~insertControlCharacter(cursor, paraBreak, .false) + + -- demonstrate bsf.iconv() to recode Rexx string according to defaultCodepage (native.encoding or file.encoding) +call codePageMusings text, cursor, paraBreak, lineBreak + dtEnd=.dateTime~new text~insertString(cursor, "Done at:" dtEnd "(total duration:" dtStart-dtEnd")", .false) text~insertControlCharacter(cursor, paraBreak, .false) @@ -128,8 +161,53 @@ -- create a proper file-URL url=uno.convertToUrl(directory()"\"docName) -say "url:" pp(url) -- show URL +say "url:" pp(url) -- show URL document~XStorable~storeAsURL(url, .uno~noProps) -- save to file system -- document~XCloseable~close(.false) -::requires UNO.CLS -- get UNO support +call directory oldDir -- change current directory back to original directory + +::requires UNO.CLS -- get UNO support + + + -- Demonstrate BSF.CLS' bsf.stringAsJSO(...) to translate codepage encoded Rexx strings to Java Unicode strings +::routine codePageMusings + use strict arg text, cursor, paraBreak, lineBreak + + text~insertString(cursor, "Code page musings (Rexx strings may be encoded using different codepages):" ,.false) + text~insertControlCharacter(cursor, paraBreak, .false) + + html="German: umlauts='äöüÄÖÜ', sharp s='ß', Yen='¥'." + text~insertString(cursor, "HTML encoded string that indicates the text encoded in different codepages:" pp(html), .false) + text~insertControlCharacter(cursor, paraBreak, .false) + text~insertControlCharacter(cursor, paraBreak, .false) + + -- the test sentence used, encoded in HTML (codepage neutral): + -- German: umlauts='äöüÄÖÜ', sharp s='ß', Yen='¥'. + + -- the following four strings represent the same sentence encoded in different codepages + -- the two vertical bars (||) point at the Yen symbol which in cp437 gets encoded as "9D"x + -- Yen: "9d"x in cp437) || + cp437 ="4765726D616E3A20756D6C617574733D278494818E999A272C20736861727020733D27E1272C2059656E3D279D272E"x + cp850 ="4765726D616E3A20756D6C617574733D278494818E999A272C20736861727020733D27E1272C2059656E3D27BE272E"x + -- 1252, a Windows codepage, based on iso_8859_1, but different in code point range 0x80-0x9F + cp1252 ="4765726D616E3A20756D6C617574733D27E4F6FCC4D6DC272C20736861727020733D27DF272C2059656E3D27A5272E"x + -- UTF-8: one of the Unicode encodings + utf8 ="4765726D616E3A20756D6C617574733D27C3A4C3B6C3BCC384C396C39C272C20736861727020733D27C39F272C2059656E3D27C2A5272E"x + codePages=("cp437",cp437), ("cp850",cp850), ("cp1252",cp1252), ("utf8",utf8) + + dLB="0a"x -- direct LINEBREAK (LINEFEED ASCII control character) + dPB="0d"x -- direct PARABREAK (CARRIAGE RETURN ASCII control character) + tab="09"x + do cpArr over codePages + cp=cpArr[1];str=cpArr[2] + text~insertString(cursor, "Musings with string encoded with codepage" pp(cp)", str:"dLB||tab""pp(str)".", .false) + text~insertControlCharacter(cursor, lineBreak, .false) + + text~insertString(cursor, 'Converting encoded string using bsf.stringAsJSO(str,"'cp'")'dLB||tab'[', .false) + text~insertString(cursor, bsf.stringAsJSO(str,cp), .false) -- Java-interface can deal with Unioode text :) + text~insertString(cursor, "]", .false) + text~insertControlCharacter(cursor, lineBreak, .false) + + text~insertControlCharacter(cursor, paraBreak, .false) + end Modified: branches/850/samples/1-250_windows_swriter_ole_clipboard.rxj =================================================================== --- branches/850/samples/1-250_windows_swriter_ole_clipboard.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/1-250_windows_swriter_ole_clipboard.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -15,7 +15,7 @@ image to the systme clipboard, which then gets pasted into the document. - Date: 2023-06-17 + Date: 2023-06-17/19 Author: Rony G. Flatscher, WU Vienna @@ -50,6 +50,9 @@ end thisName=filespec("name",fullName) + -- make sure we change to program's directory to refer to images with unqualified filenames +oldDir=directory(filespec('location',fullName)) -- change current dir to this program's source dir + parse var thisName name '.' docName=name".odt" -- name of swriter document we create at the end @@ -60,15 +63,20 @@ noProps = .array~new /* empty array (no properties) */ document = desktop~loadComponentFromURL('private:factory/swriter', '_blank', 0, noProps) + -- get the constants as a Rexx directory +ctlChars = getAsDirectory(serviceManager, "com.sun.star.text.ControlCharacter") -- UNO_CONSTANT +lineBreak = ctlChars~line_break -- get line break ("1") +paraBreak = ctlChars~paragraph_break -- get paragraph break constant ("0") + text = document~getText -- get text object dtStart=.dateTime~new -text~setString("Hello, this is ooRexx started at:" dtStart"!") +text~setString("Hello, this is ooRexx started at:" dtStart"! ") + cursor = text~createTextCursor cursor~gotoEnd(.false) - -ctlChars = getAsDirectory(serviceManager, "com.sun.star.text.ControlCharacter") -- UNO_CONSTANT -paraBreak = ctlChars~paragraph_break -- get paragraph break constant text~insertControlCharacter(cursor, paraBreak, .false) +text~insertString(cursor,"Using:" .bsf4rexx~display.version".",.false) +text~insertControlCharacter(cursor, paraBreak, .false) dispatcher=serviceManager~createInstance("com.sun.star.frame.DispatchHelper") @@ -92,7 +100,7 @@ text~insertString(cursor, "Hello from ooRexx again, setting system clipboard to our UTF-8 symbols ... " ,.false) text~insertControlCharacter(cursor, paraBreak, .false) -.bsf.clipboard~setString(utf8Chars,"utf-8") +.bsf.clipboard~setString(utf8Chars,"utf-8") -- note: AOO may not notice this entry into the clipboard on time! text~insertString(cursor, "About to paste the current clipboard content (UTF-8 encoded string): " ,.false) text~insertControlCharacter(cursor, paraBreak, .false) @@ -116,6 +124,25 @@ dispatcher~executeDispatch(desktop~currentFrame, '.uno:Paste', '', 0, noProps) text~insertControlCharacter(cursor, paraBreak, .false) + -- now do charset related musings +text~insertControlCharacter(cursor, paraBreak, .false) +text~insertString(cursor, "Here the current Java related encoding properties:", .false) + +properties=.java.lang.System~getProperties +propNames=properties~propertyNames +do propName over propNames~makeArray~sort + if propName~caselessPos("encoding")>0 then + do + str="Java System property named" pp(propName)":" pp(.java.lang.System~getProperty(propName)) + text~insertString(cursor, str, .false) + text~insertControlCharacter(cursor, lineBreak, .false) + end +end +text~insertControlCharacter(cursor, paraBreak, .false) + + -- demonstrate bsf.iconv() to recode Rexx string according to defaultCodepage (native.encoding or file.encoding) +call codePageMusings text, cursor, paraBreak, lineBreak + dtEnd=.dateTime~new text~insertString(cursor, "Done at:" dtEnd "(total duration:" dtStart-dtEnd")", .false) text~insertControlCharacter(cursor, paraBreak, .false) @@ -126,6 +153,8 @@ document~storeAsURL(url, .array~new) -- document~close(.false) +call directory oldDir -- change current directory back to original directory + ::requires BSF.CLS -- get bidirectional ooRexx-Java bridge /* Routine returns a Rexx directory containing all names and values of the supplied @@ -165,3 +194,49 @@ end end return dir + + -- Demonstrate BSF.CLS' bsf.iconv(...) to recode Rexx strings for the codepage mostlikely assumed by OLE/target application +::routine codePageMusings + use strict arg text, cursor, paraBreak, lineBreak + defaultCodepage=.bsf.clipboard~defaultCodepage + + text~insertString(cursor, "Using .bsf.clipboard~defaultCodepage (in this run:" defaultCodePage") as target codepage for routine ""bsf.iconv(...)"". " ,.false) + text~insertControlCharacter(cursor, paraBreak, .false) + text~insertString(cursor, "Code page musings (Rexx strings may be encoded using different codepages):" ,.false) + text~insertControlCharacter(cursor, paraBreak, .false) + + html="German: umlauts='äöüÄÖÜ', sharp s='ß', Yen='¥'." + text~insertString(cursor, "HTML encoded string that indicates the text encoded in different codepages:" pp(html), .false) + text~insertControlCharacter(cursor, paraBreak, .false) + text~insertControlCharacter(cursor, paraBreak, .false) + + -- the test sentence used, encoded in HTML (codepage neutral): + -- German: umlauts='äöüÄÖÜ', sharp s='ß', Yen='¥'. + + -- the following four strings represent the same sentence encoded in different codepages + -- the two vertical bars (||) point at the Yen symbol which in cp437 gets encoded as "9D"x + -- Yen: "9d"x in cp437) || + cp437 ="4765726D616E3A20756D6C617574733D278494818E999A272C20736861727020733D27E1272C2059656E3D279D272E"x + cp850 ="4765726D616E3A20756D6C617574733D278494818E999A272C20736861727020733D27E1272C2059656E3D27BE272E"x + -- 1252, a Windows codepage, based on iso_8859_1, but different in code point range 0x80-0x9F + cp1252 ="4765726D616E3A20756D6C617574733D27E4F6FCC4D6DC272C20736861727020733D27DF272C2059656E3D27A5272E"x + -- UTF-8: one of the Unicode encodings + utf8 ="4765726D616E3A20756D6C617574733D27C3A4C3B6C3BCC384C396C39C272C20736861727020733D27C39F272C2059656E3D27C2A5272E"x + codePages=("cp437",cp437), ("cp850",cp850), ("cp1252",cp1252), ("utf8",utf8) + + dLB="0a"x -- direct LINEBREAK (LINEFEED ASCII control character) + dPB="0d"x -- direct PARABREAK (CARRIAGE RETURN ASCII control character) + tab="09"x + do cpArr over codePages + cp=cpArr[1];str=cpArr[2] + text~insertString(cursor, "Musings with string encoded with codepage" pp(cp)", str:"dLB||tab""pp(str)".", .false) + text~insertControlCharacter(cursor, lineBreak, .false) + + text~insertString(cursor, 'Converting encoded string using: bsf.iconv(str,"'cp'", "'defaultCodepage'"):'dLB||tab'[', .false) + text~insertString(cursor, bsf.iconv(str,cp,defaultCodepage), .false) -- Java-interface can deal with Unioode text :) + text~insertString(cursor, "]", .false) + text~insertControlCharacter(cursor, lineBreak, .false) + + text~insertControlCharacter(cursor, paraBreak, .false) + end + Modified: branches/850/samples/1-250_windows_word_ole_clipboard.rxj =================================================================== --- branches/850/samples/1-250_windows_word_ole_clipboard.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/1-250_windows_word_ole_clipboard.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -13,7 +13,7 @@ document, then calls "1-250_JDOR_to_clipboard.rxj" which creates and copies an image to the systme clipboard, which then gets pasted into the document. - Date: 2023-06-17 + Date: 2023-06-17/19 Author: Rony G. Flatscher, WU Vienna @@ -48,6 +48,9 @@ end thisName=filespec("name",fullName) + -- make sure we change to program's directory to refer to images with unqualified filenames +oldDir=directory(filespec('location',fullName)) -- change current dir to this program's source dir + parse var thisName name '.' docName=name".docx" -- name of Word document we create at the end @@ -102,6 +105,26 @@ selection~paste selection~typeParagraph + -- now do charset related musings +selection~typeParagraph +selection~typeText("Here the current Java related encoding properties:") + +properties=.java.lang.System~getProperties +propNames=properties~propertyNames +do propName over propNames~makeArray~sort + if propName~caselessPos("encoding")>0 then + do + str="Java System property named" pp(propName)":" pp(.java.lang.System~getProperty(propName)) + selection~typeText(str) + selection~typeText("0b"x) -- Word's line break (VERTICAL TAB ASCII control character) + end +end +selection~typeParagraph + + + -- demonstrate bsf.iconv() to recode Rexx string according to defaultCodepage (native.encoding or file.encoding) +call codePageMusings selection + dtEnd=.dateTime~new selection~typeText("Done at:" dtEnd "(total duration:" dtStart-dtEnd")") selection~typeParagraph @@ -111,4 +134,61 @@ document~saveAs(fileName) -- save document -- word~quit -- quit (close) word +call directory oldDir -- change current directory back to original directory + ::requires BSF.CLS -- get bidirectional ooRexx-Java bridge + + + + -- Demonstrate BSF.CLS' bsf.iconv(...) to recode Rexx strings for the codepage mostlikely assumed by OLE/target application +::routine codePageMusings + -- use strict arg text, cursor, paraBreak, lineBreak + use strict arg selection + defaultCodepage=.bsf.clipboard~defaultCodepage + + selection~typeText("Using .bsf.clipboard~defaultCodepage (in this run:" defaultCodePage") as target codepage for routine ""bsf.iconv(...)"". " ) + selection~typeParagraph + selection~typeText("Code page musings (Rexx strings may be encoded using different codepages):") + selection~typeParagraph + + html="German: umlauts='äöüÄÖÜ', sharp s='ß', Yen='¥'." + selection~typeText("HTML encoded string that indicates the text encoded in different codepages:" pp(html)) + selection~typeParagraph + selection~typeParagraph + + -- the test sentence used, encoded in HTML (codepage neutral): + -- German: umlauts='äöüÄÖÜ', sharp s='ß', Yen='¥'. + + -- the following four strings represent the same sentence encoded in different codepages + -- the two vertical bars (||) point at the Yen symbol which in cp437 gets encoded as "9D"x + -- Yen: "9d"x in cp437) || + cp437 ="4765726D616E3A20756D6C617574733D278494818E999A272C20736861727020733D27E1272C2059656E3D279D272E"x + cp850 ="4765726D616E3A20756D6C617574733D278494818E999A272C20736861727020733D27E1272C2059656E3D27BE272E"x + -- 1252, a Windows codepage, based on iso_8859_1, but different in code point range 0x80-0x9F + cp1252 ="4765726D616E3A20756D6C617574733D27E4F6FCC4D6DC272C20736861727020733D27DF272C2059656E3D27A5272E"x + -- UTF-8: one of the Unicode encodings + utf8 ="4765726D616E3A20756D6C617574733D27C3A4C3B6C3BCC384C396C39C272C20736861727020733D27C39F272C2059656E3D27C2A5272E"x + codePages=("cp437",cp437), ("cp850",cp850), ("cp1252",cp1252), ("utf8",utf8) + + dLB="0b"x -- direct LINEBREAK (VERTICAL TAB ASCII control character) + dPB="0d"x -- direct PARABREAK (CARRIAGE RETURN ASCII control character) + tab="09"x + do cpArr over codePages + cp=cpArr[1];str=cpArr[2] + selection~typeText("Musings with string encoded with codepage" pp(cp)", str:"dLB||tab""pp(str)".") + selection~typeText(dLB) + + selection~typeText('Converting encoded string using: bsf.iconv(str,"'cp'", "'defaultCodepage'"):'dLB||tab'[') + selection~typeText(bsf.iconv(str,cp,defaultCodepage)) -- Java-interface can deal with Unioode text :) + selection~typeText("]") + selection~typeText(dLB) + + selection~typeText('Setting system clipboard with encoded string using: .bsf.clipboard~setString(str,"'cp'") and then pasting it into the document:'dLB||tab'[') + .bsf.clipboard~setString(str,cp) + selection~paste + selection~typeText("]") + selection~typeText(dLB) + + selection~typeParagraph + end + Modified: branches/850/samples/2-130_JDOR_animate_two_frames.rxj =================================================================== --- branches/850/samples/2-130_JDOR_animate_two_frames.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/2-130_JDOR_animate_two_frames.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -49,7 +49,7 @@ */ -- make sure we change current directory to program's directory parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir -- create two JDOR handlers, one for each window/image jdor=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") call BsfCommandHandler "add", "JDOR", jdor @@ -127,4 +127,6 @@ if \bShowCommands then say "'sleep 5' ..." sleep 5 +call directory oldDir -- change current directory back to original directory + ::requires "BSF.CLS" -- get ooRexx-Java bridge, contains JDOR Rexx command handler Modified: branches/850/samples/3-040_quiz1.rxj =================================================================== --- branches/850/samples/3-040_quiz1.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/3-040_quiz1.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -50,7 +50,7 @@ title="US Capitals Quiz" fn ="uscaps.txt" parse source . . thisScript -- get fully qualified path of this script - fn =fileSpec("l",thisScript) || fn -- turn into fully qualified path + fn =fileSpec("location",thisScript) || fn -- turn into fully qualified path self~setupQuestions(fn) -- define button texts Modified: branches/850/samples/3-050_quiz2.rxj =================================================================== --- branches/850/samples/3-050_quiz2.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/3-050_quiz2.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -54,7 +54,7 @@ title="US Capitals Quiz" fn ="uscaps.txt" parse source . . thisScript -- get fully qualified path of this script - fn =fileSpec("l",thisScript) || fn -- turn into fully qualified path + fn =fileSpec("location",thisScript) || fn -- turn into fully qualified path self~setupQuestions(fn) -- define button texts Modified: branches/850/samples/3-060_quiz3.rxj =================================================================== --- branches/850/samples/3-060_quiz3.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/3-060_quiz3.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -63,7 +63,7 @@ title="US Capitals Quiz" fn ="uscaps.txt" parse source . . thisScript -- get fully qualified path of this script - fn =fileSpec("l",thisScript) || fn -- turn into fully qualified path + fn =fileSpec("location",thisScript) || fn -- turn into fully qualified path self~setupQuestions(fn) -- define button texts Modified: branches/850/samples/3-070_ShootOut.rxj =================================================================== --- branches/850/samples/3-070_ShootOut.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/3-070_ShootOut.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -132,7 +132,7 @@ -- read answers from file parse source . . thisScript -- get fully qualified path of this script -fn =fileSpec("l",thisScript) || "ShootAnswers.txt" -- turn into fully qualified path +fn =fileSpec("location",thisScript) || "ShootAnswers.txt" -- turn into fully qualified path answers = .stream~new(fn)~arrayin /* read answers from file */ userData~answers = answers -- save answers for later use Modified: branches/850/samples/3-080_ShootOut2.rxj =================================================================== --- branches/850/samples/3-080_ShootOut2.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/3-080_ShootOut2.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -165,7 +165,7 @@ /* read answers from file */ parse source . . thisScript -- get fully qualified path of this script -mainUserData~file.name=fileSpec("l",thisScript) || "ShootAnswers.txt" +mainUserData~file.name=fileSpec("location",thisScript) || "ShootAnswers.txt" call readAnswersFromFile mainUserData /* pack the elements, show the window, bring it to the front */ Modified: branches/850/samples/3-100_create_bitmap_JDOR_commands.rxj =================================================================== --- branches/850/samples/3-100_create_bitmap_JDOR_commands.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/3-100_create_bitmap_JDOR_commands.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -54,7 +54,7 @@ */ -- make sure we change current directory to program's directory parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir jdor=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") -- create a JDOR handler call BsfCommandHandler "add", "JDOR", jdor -- add the JDOR handler to ooRexx @@ -245,6 +245,8 @@ say "--> command for operating system:" pp(cmd) -- show generated bitmap address system cmd -- submit command to operating system +call directory oldDir -- change current directory back to original directory + ::requires "BSF.CLS" -- get ooRexx-Java bridge, contains JDOR Rexx command handler ::routine quote -- enquote path in double-quotes (to cater for paths that may have blanks) Modified: branches/850/samples/3-110_JDOR_animate_composite.rxj =================================================================== --- branches/850/samples/3-110_JDOR_animate_composite.rxj 2023-06-20 12:42:07 UTC (rev 1071) +++ branches/850/samples/3-110_JDOR_animate_composite.rxj 2023-06-20 14:40:26 UTC (rev 1072) @@ -55,7 +55,7 @@ */ -- make sure we change current directory to program's directory parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir /* Cf. e.g. <https://docs.oracle.com/javase/tutorial/2d/advanced/compositing.html> */ @@ -197,4 +197,6 @@ sleep 0.3 say "--> we are done." +call directory oldDir -- change current directory back to original directory + ::requires "BSF.CLS" -- get ooRexx-Java bridge, contains JDOR Rexx command handler This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-06-20 12:42:09
|
Revision: 1071 http://sourceforge.net/p/bsf4oorexx/code/1071 Author: orexx Date: 2023-06-20 12:42:07 +0000 (Tue, 20 Jun 2023) Log Message: ----------- 20230620 use directory() to change current directory back, dialog instead of serif font. Modified Paths: -------------- sandbox/rgf/jdor/samples/1-140_JDOR_images.rxj sandbox/rgf/jdor/samples/1-140_JDOR_images_reversed.rxj sandbox/rgf/jdor/samples/1-150_JDOR_string_circle.rxj sandbox/rgf/jdor/samples/1-170_JDOR_lineHeight.rxj sandbox/rgf/jdor/samples/1-180_JDOR_sandGlass.rxj sandbox/rgf/jdor/samples/1-180_JDOR_sandGlass_float_colors.rxj sandbox/rgf/jdor/samples/1-180_JDOR_sandGlass_log.rxj sandbox/rgf/jdor/samples/1-180_JDOR_sandGlass_replay_log.rxj sandbox/rgf/jdor/samples/1-250_JDOR_to_clipboard.rxj sandbox/rgf/jdor/samples/2-130_JDOR_animate_two_frames.rxj sandbox/rgf/jdor/samples/3-100_create_bitmap_JDOR_commands.rxj sandbox/rgf/jdor/samples/3-110_JDOR_animate_composite.rxj Modified: sandbox/rgf/jdor/samples/1-140_JDOR_images.rxj =================================================================== --- sandbox/rgf/jdor/samples/1-140_JDOR_images.rxj 2023-06-17 17:02:18 UTC (rev 1070) +++ sandbox/rgf/jdor/samples/1-140_JDOR_images.rxj 2023-06-20 12:42:07 UTC (rev 1071) @@ -41,9 +41,9 @@ limitations under the License. ----------------------------------------------------------------------------- */ - -- make sure we change to program's directory to refer to images with unqualified filenames + -- make sure we change to program's directory to refer to images with unqualified filenames: parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir -- create JDOR handler jdh=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") @@ -72,4 +72,5 @@ if \bShowCommands then say "'sleep 5' ..." sleep 5 -- sleep for five seconds + ::requires "BSF.CLS" -- get ooRexx-Java bridge, contains JDOR Rexx command handler Modified: sandbox/rgf/jdor/samples/1-140_JDOR_images_reversed.rxj =================================================================== --- sandbox/rgf/jdor/samples/1-140_JDOR_images_reversed.rxj 2023-06-17 17:02:18 UTC (rev 1070) +++ sandbox/rgf/jdor/samples/1-140_JDOR_images_reversed.rxj 2023-06-20 12:42:07 UTC (rev 1071) @@ -42,9 +42,9 @@ limitations under the License. ----------------------------------------------------------------------------- */ - -- make sure we change to program's directory to refer to images with unqualified filenames + -- make sure we change to program's directory to refer to images with unqualified filenames: parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir -- create JDOR handler jdh=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") Modified: sandbox/rgf/jdor/samples/1-150_JDOR_string_circle.rxj =================================================================== --- sandbox/rgf/jdor/samples/1-150_JDOR_string_circle.rxj 2023-06-17 17:02:18 UTC (rev 1070) +++ sandbox/rgf/jdor/samples/1-150_JDOR_string_circle.rxj 2023-06-20 12:42:07 UTC (rev 1071) @@ -42,7 +42,7 @@ */ -- make sure we change to program's directory to refer to images with unqualified filenames parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir -- create JDOR handler jdh=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") Modified: sandbox/rgf/jdor/samples/1-170_JDOR_lineHeight.rxj =================================================================== --- sandbox/rgf/jdor/samples/1-170_JDOR_lineHeight.rxj 2023-06-17 17:02:18 UTC (rev 1070) +++ sandbox/rgf/jdor/samples/1-170_JDOR_lineHeight.rxj 2023-06-20 12:42:07 UTC (rev 1071) @@ -45,7 +45,7 @@ */ -- make sure we change current directory to program's directory parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current directory to this program's source directory +oldDir=directory(filespec('location',s)) -- change current directory to this program's source directory -- create JDOR handler jdh=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") Modified: sandbox/rgf/jdor/samples/1-180_JDOR_sandGlass.rxj =================================================================== --- sandbox/rgf/jdor/samples/1-180_JDOR_sandGlass.rxj 2023-06-17 17:02:18 UTC (rev 1070) +++ sandbox/rgf/jdor/samples/1-180_JDOR_sandGlass.rxj 2023-06-20 12:42:07 UTC (rev 1071) @@ -43,7 +43,7 @@ */ -- make sure we change current directory to program's directory parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir -- create JDOR handler jdh=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") Modified: sandbox/rgf/jdor/samples/1-180_JDOR_sandGlass_float_colors.rxj =================================================================== --- sandbox/rgf/jdor/samples/1-180_JDOR_sandGlass_float_colors.rxj 2023-06-17 17:02:18 UTC (rev 1070) +++ sandbox/rgf/jdor/samples/1-180_JDOR_sandGlass_float_colors.rxj 2023-06-20 12:42:07 UTC (rev 1071) @@ -44,7 +44,7 @@ */ -- make sure we change current directory to program's directory parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir -- create JDOR handler jdh=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") Modified: sandbox/rgf/jdor/samples/1-180_JDOR_sandGlass_log.rxj =================================================================== --- sandbox/rgf/jdor/samples/1-180_JDOR_sandGlass_log.rxj 2023-06-17 17:02:18 UTC (rev 1070) +++ sandbox/rgf/jdor/samples/1-180_JDOR_sandGlass_log.rxj 2023-06-20 12:42:07 UTC (rev 1071) @@ -43,7 +43,7 @@ */ -- make sure we change current directory to program's directory parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir -- create JDOR handler jdh=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") Modified: sandbox/rgf/jdor/samples/1-180_JDOR_sandGlass_replay_log.rxj =================================================================== --- sandbox/rgf/jdor/samples/1-180_JDOR_sandGlass_replay_log.rxj 2023-06-17 17:02:18 UTC (rev 1070) +++ sandbox/rgf/jdor/samples/1-180_JDOR_sandGlass_replay_log.rxj 2023-06-20 12:42:07 UTC (rev 1071) @@ -44,7 +44,7 @@ */ -- make sure we change current directory to program's directory parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir -- create JDOR handler jdh=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") Modified: sandbox/rgf/jdor/samples/1-250_JDOR_to_clipboard.rxj =================================================================== --- sandbox/rgf/jdor/samples/1-250_JDOR_to_clipboard.rxj 2023-06-17 17:02:18 UTC (rev 1070) +++ sandbox/rgf/jdor/samples/1-250_JDOR_to_clipboard.rxj 2023-06-20 12:42:07 UTC (rev 1071) @@ -39,6 +39,11 @@ ----------------------------------------------------------------------------- */ dtStart=.DateTime~new + + -- make sure we change to program's directory to refer to images with unqualified filenames +parse source . . s -- get full path to this program +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir + parse arg noAlpha . bNoAlpha=(noAlpha=1 | noAlpha~caselessEquals("true")) @@ -57,16 +62,13 @@ dtAfterRedirect=.DateTime~new -newImage 250 250 -- create new bitmap +newImage 250 250 -- create new bitmap dtAfterNI=.dateTime~new imageSize parse var RC imgWidth imgHeight -if bDebug=.true then -- show window in debug mode -do - winShow -- show frame - winTitle imgWidth"x"imgHeight -end +winShow -- show frame +winTitle imgWidth"x"imgHeight -- draw two lines forming a big X shape l2d line2d 10 10 100 100 @@ -101,7 +103,7 @@ end dtBeforeF=.dateTime~new -font f18 "Serif 18" -- this takes quite some time! +font f18 "Dialog bold" -- this may take quite some time on Windows! dtAfterF=.dateTime~new str=.dateTime~new~string dtBeforeSB=.dateTime~new @@ -134,4 +136,6 @@ parse pull . end +call directory oldDir -- change current directory back to original directory + ::requires BSF.CLS -- get bidirectional ooRexx-Java bridge, includes JDOR Modified: sandbox/rgf/jdor/samples/2-130_JDOR_animate_two_frames.rxj =================================================================== --- sandbox/rgf/jdor/samples/2-130_JDOR_animate_two_frames.rxj 2023-06-17 17:02:18 UTC (rev 1070) +++ sandbox/rgf/jdor/samples/2-130_JDOR_animate_two_frames.rxj 2023-06-20 12:42:07 UTC (rev 1071) @@ -49,7 +49,7 @@ */ -- make sure we change current directory to program's directory parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir -- create two JDOR handlers, one for each window/image jdor=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") call BsfCommandHandler "add", "JDOR", jdor @@ -127,4 +127,6 @@ if \bShowCommands then say "'sleep 5' ..." sleep 5 +call directory oldDir -- change current directory back to original directory + ::requires "BSF.CLS" -- get ooRexx-Java bridge, contains JDOR Rexx command handler Modified: sandbox/rgf/jdor/samples/3-100_create_bitmap_JDOR_commands.rxj =================================================================== --- sandbox/rgf/jdor/samples/3-100_create_bitmap_JDOR_commands.rxj 2023-06-17 17:02:18 UTC (rev 1070) +++ sandbox/rgf/jdor/samples/3-100_create_bitmap_JDOR_commands.rxj 2023-06-20 12:42:07 UTC (rev 1071) @@ -54,7 +54,7 @@ */ -- make sure we change current directory to program's directory parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir jdor=.bsf~new("org.oorexx.handlers.jdor.JavaDrawingHandler") -- create a JDOR handler call BsfCommandHandler "add", "JDOR", jdor -- add the JDOR handler to ooRexx @@ -245,6 +245,8 @@ say "--> command for operating system:" pp(cmd) -- show generated bitmap address system cmd -- submit command to operating system +call directory oldDir -- change current directory back to original directory + ::requires "BSF.CLS" -- get ooRexx-Java bridge, contains JDOR Rexx command handler ::routine quote -- enquote path in double-quotes (to cater for paths that may have blanks) Modified: sandbox/rgf/jdor/samples/3-110_JDOR_animate_composite.rxj =================================================================== --- sandbox/rgf/jdor/samples/3-110_JDOR_animate_composite.rxj 2023-06-17 17:02:18 UTC (rev 1070) +++ sandbox/rgf/jdor/samples/3-110_JDOR_animate_composite.rxj 2023-06-20 12:42:07 UTC (rev 1071) @@ -55,7 +55,7 @@ */ -- make sure we change current directory to program's directory parse source . . s -- get full path to this program -call directory filespec('loc',s) -- change current dir to this program's source dir +oldDir=directory(filespec('location',s)) -- change current dir to this program's source dir /* Cf. e.g. <https://docs.oracle.com/javase/tutorial/2d/advanced/compositing.html> */ @@ -197,4 +197,6 @@ sleep 0.3 say "--> we are done." +call directory oldDir -- change current directory back to original directory + ::requires "BSF.CLS" -- get ooRexx-Java bridge, contains JDOR Rexx command handler This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-06-17 17:02:24
|
Revision: 1070 http://sourceforge.net/p/bsf4oorexx/code/1070 Author: orexx Date: 2023-06-17 17:02:18 +0000 (Sat, 17 Jun 2023) Log Message: ----------- 20230617 Add new samples for clipboard and JDOR. Modified Paths: -------------- branches/850/samples/1-220_JDOR_area_cag.rxj branches/850/samples/3-110_JDOR_animate_composite.rxj branches/850/samples/index.html Added Paths: ----------- branches/850/samples/1-230_show_clipBoard.rxj branches/850/samples/1-240_Clipboard.rxj branches/850/samples/1-250_swriter_bsf_clipboard.rxj branches/850/samples/1-250_windows_swriter_ole_clipboard.rxj branches/850/samples/1-250_windows_word_ole_clipboard.rxj Removed Paths: ------------- branches/850/samples/1-230_ClipBoard.rxj Modified: branches/850/samples/1-220_JDOR_area_cag.rxj =================================================================== --- branches/850/samples/1-220_JDOR_area_cag.rxj 2023-06-17 17:01:18 UTC (rev 1069) +++ branches/850/samples/1-220_JDOR_area_cag.rxj 2023-06-17 17:02:18 UTC (rev 1070) @@ -1,10 +1,10 @@ #!/usr/bin/env rexx /* - Name: "1-220_JDOR_area_cag.rxj" + Name: "1-210_JDOR_area_cag.rxj" - Invoke: "rexx 1-220_JDOR_area_cag.rxj [?]" - "rexxj 1-220_JDOR_area_cag.rxj [?]" (Windows) - "rexxj.sh 1-220_JDOR_area_cag.rxj [?]" (Unix) + Invoke: "rexx 1-210_JDOR_area_cag.rxj [?]" + "rexxj 1-210_JDOR_area_cag.rxj [?]" (Windows) + "rexxj.sh 1-210_JDOR_area_cag.rxj [?]" (Unix) ? ... optional argument, if supplied displays processed JDOR commands Deleted: branches/850/samples/1-230_ClipBoard.rxj =================================================================== --- branches/850/samples/1-230_ClipBoard.rxj 2023-06-17 17:01:18 UTC (rev 1069) +++ branches/850/samples/1-230_ClipBoard.rxj 2023-06-17 17:02:18 UTC (rev 1070) @@ -1,137 +0,0 @@ -#!/usr/bin/env rexx -/* - Name: "1-230_ClipBoard.rxj" - - Invoke: "rexx 1-230_ClipBoard.rxj" - "rexxj 1-230_ClipBoard.rxj" (Windows) - "rexxj.sh 1-230_ClipBoard.rxj" (Unix) - - - Purpose: demonstrate usage of ooRexx class Bsf.Clipboard - - Date: 2023-06-13 - - Author: Rony G. Flatscher, WU Vienna - - Changes: --- - - last change: Revision: $Revision: 951 $ $Author: orexx $ $Date: 2022-08-10 18:06:25 +0200 (Mi., 10 Aug 2022) $ - (svn hint: use 'propset svn:keywords "Author Date Revision" filename') - - license: - - ------------------------ Apache Version 2.0 license ------------------------- - Copyright (C) 2023 Rony G. Flatscher - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------------------------------------------------------------------- -*/ - -say "1) starting up, checking clipboard:" -call showFormats -say - -say "2) clearing (emptying) cliboard ..." -.bsf.clipboard~clear -call showFormats -say - -str1="Hello, world, this is ooRexx speaking ..." -say "3) setting clipboard to string:" pp(str1) -.bsf.clipBoard~string=str1 -call showFormats -say " fetching string from clipboard, received:" pp(.bsf.clipBoard~string) -say - -clzImageIO=bsf.importClass("javax.imageio.ImageIO") -images="bsf4oorexx_256.png", "oorexx4ooo_256.png", "oorexx_256.png" -file =.bsf~new("java.io.File", images[random(1,3)]) -- pick a random png filename -img1 =clzImageIO~read(file) -- returns a BufferedImage -say "4) setting clipboard to image:" pp(img1~toString) -.bsf.clipboard~image=img1 -call showFormats -say " fetching image from clipboard, received:" pp(.bsf.clipBoard~image~toString) -say - ------------------------------------------------------------- -say "---" -say "now samples with Rexx strings encoded as Cp437, Cp850, ISO-8859-1, UTF-8:" - --- https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html (2023-06-14) --- https://en.wikipedia.org/wiki/Code_page (2023-06-14) - --- the following four strings represent the same sentence encoded in different codepages --- Yen: "9d"x in cp437) || -cp437 ="4765726D616E3A20756D6C617574733D278494818E999A272C20736861727020733D27E1272C2059656E3D279D272E"x -cp850 ="4765726D616E3A20756D6C617574733D278494818E999A272C20736861727020733D27E1272C2059656E3D27BE272E"x -iso8859_1="4765726D616E3A20756D6C617574733D27E4F6FCC4D6DC272C20736861727020733D27DF272C2059656E3D27A5272E"x -utf8 ="4765726D616E3A20756D6C617574733D27C3A4C3B6C3BCC384C396C39C272C20736861727020733D27C39F272C2059656E3D27C2A5272E"x --- 4765726D616E3A20756D6C617574733D27C3A4C3B6C3BCC384C396C39C272C20736861727020733D27C39F272C2059656E3D27C2A5272E - --- -> requested UTF-8, but seems to be something different! :( --- 4765726D616E3A20756D6C617574733D27C383C2A4C383C2B6C383C2BCC383E2809EC383E28093C383C593272C20736861727020733D27C383C5B8272C2059656E3D27C382C2A5272E -strings=cp437 , cp850 , iso8859_1 , utf8 -- strings encoded in different codepages -cps ="Cp437", "Cp850", "ISO-8859-1", "UTF-8" -- respective codepage names - -stdoutEncoding=.java.lang.System~getProperty("sun.stdout.encoding") -- fetch current stdout encoding -say "current stdout's encoding:" pp(stdoutEncoding) -if stdoutEncoding="cp65001" then stdoutEncoding="UTF-8" -- Java does not accept Microsfot's proprietary "cp65001" -say - -do counter c str over strings - cp=cps[c] -- get codepage used to encode str - say " #" c" Rexx string ""str"" got encoded as" pp(cps[c])":" - say " str=" pp(str) - tmpStr=bsf.iconv(str,cp,stdoutEncoding) -- translate to stdout's encoding - say " ... translated according to this stdout's codepage ["stdoutEncoding"]:" - say " tmpStr="pp(tmpStr) - say ' .bsf.clipboard~setString(str,"'cp'")' - .bsf.clipboard~setString(str,cp) -- set string with proper encoding information - say -end -call showFormats -say -call showCPs -say "---" - -say -say "the current string in the system clipboard is usually encoded as Unicode, hence" -say "supplying explicitly the codepage we want the Rexx string to be encoded in:" -say -say "Asking string from clipboard encoded as ""sun.stdout.encoding"" ["stdoutEncoding"]:" -say " " pp(.bsf.clipboard~getString(stdoutEncoding)) - - -::requires BSF.CLS -- get bidiretional ooRexx-Java bridge - -::routine showFormats - if .bsf.clipboard~isEmpty then - do - say " clipboard is empty" - return - end - say "clipboard contains the following data renderable to:" - flavors=.bsf.clipboard~getDataFlavors - w=flavors~items~length -- get width of highest number - do counter c flavor over flavors - say " #" c~right(w)":" flavor~toString - end - return - -::routine showCPs - props="file.encoding", "native.encoding", "sun.io.unicode.encoding", - - "sun.jnu.encoding", "sun.stderr.encoding", "sun.stdout.encoding" - say "---> Java encodings in effect" pp(.bsf4rexx~display.version)":" - do counter c prop over props - say " #" c":" pp(prop)~left(30)":" pp(.java.lang.System~getProperty(prop)) - end Added: branches/850/samples/1-230_show_clipBoard.rxj =================================================================== --- branches/850/samples/1-230_show_clipBoard.rxj (rev 0) +++ branches/850/samples/1-230_show_clipBoard.rxj 2023-06-17 17:02:18 UTC (rev 1070) @@ -0,0 +1,56 @@ +#!/usr/bin/env rexx +/* + Name: "1-230_show_clipBoard.rxj" + + Invoke: "rexx 1-230_show_clipBoard.rxj" + "rexxj 1-230_show_clipBoard.rxj" (Windows) + "rexxj.sh 1-230_show_clipBoard.rxj" (Unix) + + Purpose: demonstrate usage of new class .Bsf.ClipBoard to test whether + the system clipboard is currently empty, and if not, list all + offered data flavors + + Date: 2023-06-17 + + Author: Rony G. Flatscher, WU Vienna + + Changes: --- + + last change: Revision: $Revision: 951 $ $Author: orexx $ $Date: 2022-08-10 18:06:25 +0200 (Mi., 10 Aug 2022) $ + (svn hint: use 'propset svn:keywords "Author Date Revision" filename') + + license: + + ------------------------ Apache Version 2.0 license ------------------------- + Copyright (C) 2023 Rony G. Flatscher + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ----------------------------------------------------------------------------- +*/ + +isEmpty=.bsf.clipboard~isEmpty +if isEmpty then +do + say "system clipboard is currently empty" + exit -1 -- indicate currently empty system clipboard +end + +dfs=.bsf.clipboard~getDataFlavors +say "system clipboard offers currently a total of" pp(dfs~items) "data flavor(s), namely:" +len=dfs~items~length -- determine maximum number of columns needed for right adjusting +do counter c df over dfs + say " " c~right(len)":" pp(df~toString) +end +-- .bsf.clipBoard~clear -- to empty clipboard + +::requires bsf.cls Property changes on: branches/850/samples/1-230_show_clipBoard.rxj ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Copied: branches/850/samples/1-240_Clipboard.rxj (from rev 1069, branches/850/samples/1-230_ClipBoard.rxj) =================================================================== --- branches/850/samples/1-240_Clipboard.rxj (rev 0) +++ branches/850/samples/1-240_Clipboard.rxj 2023-06-17 17:02:18 UTC (rev 1070) @@ -0,0 +1,159 @@ +#!/usr/bin/env rexx +/* + Name: "1-230_ClipBoard.rxj" + + Invoke: "rexx 1-230_ClipBoard.rxj" + "rexxj 1-230_ClipBoard.rxj" (Windows) + "rexxj.sh 1-230_ClipBoard.rxj" (Unix) + + + Purpose: demonstrate usage of ooRexx class Bsf.Clipboard for images and strings, + stressing the ability to supply codepage information, cf.: + - https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html (2023-06-15) + - https://en.wikipedia.org/wiki/Code_page (2023-06-15) + + Date: 2023-06-13 + + Author: Rony G. Flatscher, WU Vienna + + Changes: --- + + last change: Revision: $Revision: 951 $ $Author: orexx $ $Date: 2022-08-10 18:06:25 +0200 (Mi., 10 Aug 2022) $ + (svn hint: use 'propset svn:keywords "Author Date Revision" filename') + + license: + + ------------------------ Apache Version 2.0 license ------------------------- + Copyright (C) 2023 Rony G. Flatscher + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ----------------------------------------------------------------------------- +*/ + +say "1) starting up, checking clipboard:" +call showFormats +say + +say "2) clearing (emptying) cliboard ..." +.bsf.clipboard~clear +call showFormats +say + +str1="Hello, world, this is ooRexx speaking ..." +say "3) setting clipboard to string:" pp(str1) +.bsf.clipBoard~string=str1 +call showFormats +say " fetching string from clipboard, received:" pp(.bsf.clipBoard~string) +say + +clzImageIO=bsf.importClass("javax.imageio.ImageIO") +images="bsf4oorexx_256.png", "oorexx4ooo_256.png", "oorexx_256.png" +file =.bsf~new("java.io.File", images[random(1,3)]) -- pick a random png filename +img1 =clzImageIO~read(file) -- returns a BufferedImage +say "4) setting clipboard to image:" pp(img1~toString) +.bsf.clipboard~image=img1 +call showFormats +say +say "5) fetching image from clipboard, received:" pp(.bsf.clipBoard~image~toString) +say +say "="~copies(79) +say "hit <enter> to continue ..." +parse pull . + +------------------------------------------------------------ +say +say "now samples with Rexx strings encoded as Cp437, Cp850, ISO-8859-1, UTF-8:" + +-- the test sentence used, encoded in HTML (codepage neutral): +-- "German: umlauts='äöüÄÖÜ', sharp s='ß', Yen='¥'." + +-- the following four strings represent the same sentence encoded in different codepages +-- the two vertical bars (||) point at the Yen symbol which in cp437 gets encoded as "9D"x +-- Yen: "9d"x in cp437) || +cp437 ="4765726D616E3A20756D6C617574733D278494818E999A272C20736861727020733D27E1272C2059656E3D279D272E"x +cp850 ="4765726D616E3A20756D6C617574733D278494818E999A272C20736861727020733D27E1272C2059656E3D27BE272E"x + -- 1252, a Windows codepage, based on iso_8859_1, but different in code point range 0x80-0x9F +cp1252 ="4765726D616E3A20756D6C617574733D27E4F6FCC4D6DC272C20736861727020733D27DF272C2059656E3D27A5272E"x + -- UTF-8: one of the Unicode encodings +utf8 ="4765726D616E3A20756D6C617574733D27C3A4C3B6C3BCC384C396C39C272C20736861727020733D27C39F272C2059656E3D27C2A5272E"x + +-- https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html (2023-06-15) +-- https://en.wikipedia.org/wiki/Code_page (2023-06-15) +strings=cp437 , cp850 , cp1252 , utf8 -- strings encoded in different codepages +cps ="Cp437", "Cp850", "Cp1252", "UTF-8" -- respective codepage names + +stdoutEncoding=.java.lang.System~getProperty("sun.stdout.encoding") -- fetch current stdout encoding +say "current stdout's encoding:" pp(stdoutEncoding) +if stdoutEncoding="cp65001" then stdoutEncoding="UTF-8" -- Java does not accept Microsfot's proprietary "cp65001" +say + +do counter c str over strings + cp=cps[c] -- get codepage used to encode str + say " #" c" Rexx string ""str"" got encoded as" pp(cps[c])":" + say " str:" pp(str) "(displayed with stdout codepage" pp(stdoutEncoding)")" + say " str~c2x:" pp(str~c2x)"x" + say + tmpStr=bsf.iconv(str,cp,stdoutEncoding) -- translate to stdout's encoding + say " ... converting ""str"" from" pp(cps[c]) "to stdout's codepage" pp(stdoutEncoding) "->" "tmpStr=bsf.iconv(str,"pp(cps[c])","pp(stdoutEncoding)"):" +-- say " tmpStr=bsf.iconv(str,"pp(cps[c])","pp(stdoutEncoding)")" + say " tmpStr:" pp(tmpStr) + say " tmpStr~c2x:" pp(tmpStr~c2x)"x" + say + say ' .bsf.clipboard~setString(str,'pp(cp)') /* set clipboard, "str" is encoded in 'pp(cps[c])' */' + .bsf.clipboard~setString(str,cp) -- set string with proper encoding information + say +end +call showFormats +say +call showCPs + +say +say "-"~copies(79) +say "--- getting string from system clipboard:" +say +say "the current string in the system clipboard is encoded as Unicode (we use the Java interface)," +say "hence supplying explicitly the codepage we want the returned Rexx string to be encoded in:" +say +say "Asking string from clipboard encoded as ""sun.stdout.encoding"", i.e.," pp(stdoutEncoding)":" +say ' .bsf.clipboard~getString('pp(stdoutEncoding)') /* get string from clipboard, we need it encoded with 'pp(stdoutEncoding)' */' +say " " pp(.bsf.clipboard~getString(stdoutEncoding)) + + +::requires BSF.CLS -- get bidiretional ooRexx-Java bridge + +::routine showFormats + if .bsf.clipboard~isEmpty then + do + say " clipboard is empty" + return + end + say "clipboard currently contains the following data renderable to:" + flavors=.bsf.clipboard~getDataFlavors + w=flavors~items~length -- get width of highest number + do counter c flavor over flavors + say " #" c~right(w)":" flavor~toString + end + return + +::routine showCPs + props="file.encoding", "native.encoding", "sun.io.unicode.encoding", - + "sun.jnu.encoding", "sun.stderr.encoding", "sun.stdout.encoding" + say "---> Java encodings in effect" pp(.bsf4rexx~display.version)":" + do counter c prop over props + say " #" c":" pp(prop)~left(30)":" pp(.java.lang.System~getProperty(prop)) + end + say "<---" + +::routine pp + parse arg a + return '"'a~changeStr('"','""')'"' Added: branches/850/samples/1-250_swriter_bsf_clipboard.rxj =================================================================== --- branches/850/samples/1-250_swriter_bsf_clipboard.rxj (rev 0) +++ branches/850/samples/1-250_swriter_bsf_clipboard.rxj 2023-06-17 17:02:18 UTC (rev 1070) @@ -0,0 +1,135 @@ +#!/usr/bin/env rexx +/* + Name: "1-250_swriter_bsf_clipbaord.rxj" + + Invoke: "rexx 1-250_swriter_bsf_clipbaord.rxj" + "rexxj 1-250_swriter_bsf_clipbaord.rxj" (Windows) + "rexxj.sh 1-250_swriter_bsf_clipbaord.rxj" (Unix) + + Needs: "1-250_JDOR_to_clipboard.rxj" from BSF4ooRexx850 + + Purpose: runs on all operating systems and creates an OpenOffice or + LibreOffice swriter document and demonstrates exploiting the + .BSF.clipboard class for copying UTF-8 encoded data to the + clipboard and pasting it into the document, then calls + "1-250_JDOR_to_clipboard.rxj" which creates and copies an + image to the systme clipboard, which then gets pasted into + the document. + + Date: 2023-06-17 + + Author: Rony G. Flatscher, WU Vienna + + Changes: --- + + last change: Revision: $Revision: 951 $ $Author: orexx $ $Date: 2022-08-10 18:06:25 +0200 (Mi., 10 Aug 2022) $ + (svn hint: use 'propset svn:keywords "Author Date Revision" filename') + + license: + + ------------------------ Apache Version 2.0 license ------------------------- + Copyright (C) 2023 Rony G. Flatscher + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ----------------------------------------------------------------------------- +*/ + +parse source . . fullName -- get source path +thisName=filespec("name",fullName) -- extract name +parse var thisName name '.' -- remove extension +docName=name".odt" -- name of swriter document we create at the end + + /* create the Desktop object, we need its XComponentLoader interface to load a new document */ +xContext = UNO.connect() /* connect to server and retrieve the XContext object */ +serviceManager = xContext~getServiceManager~XMultiServiceFactory +-- XMsf = serviceManager~XMultiServiceFactory /* retrieve XMultiComponentFactory and XMultiServiceFactory */ +xDesktop = UNO.createDesktop(xContext) /* get the UNO Desktop service object */ +xcl = xDesktop~XComponentLoader -- get XComponentLoader interface + +uri="private:factory/swriter" -- new swriter document +document=xcl~loadComponentFromURL(uri,"_blank",0,.uno~noProps) + +text=document~XTextDocument~getText -- get text object +dtStart=.dateTime~new +text~setString("Hello, this is ooRexx started at:" dtStart"!") +cursor=text~createTextCursor -- create the character based cursor +cursor~gotoEnd(.false) + +ctlChars=.uno_constants~new("com.sun.star.text.ControlCharacter") -- UNO_CONSTANT +paraBreak=ctlChars~paragraph_break -- get paragraph break constant +text~insertControlCharacter(cursor,paraBreak,.false) + +text~insertString(cursor,"This is a text sent to swriter using BSF4ooRexx850.",.false) +text~insertControlCharacter(cursor,paraBreak,.false) + + -- we want to use the dispatch interface, hence: +sDispatchHelper=serviceManager~createInstance("com.sun.star.frame.DispatchHelper") +dispatcher=sDispatchHelper~XDispatchHelper + -- note: the currentFrame needs to be queried here, otherwise it may be still .nil! +currFrameXDP=xDesktop~currentFrame~XDispatchProvider -- get XDispatchProvider functionality + + -- define some characters, encoded as UTF-8 +female ="e2 99 80"x +male ="e2 99 82"x +ballot ="e2 98 90"x +ballot_x ="e2 98 92"x +ballot_check ="e2 98 91"x +radioactive ="e2 98 a2"x +skullAndBones="e2 98 a0"x +umbrellaRain ="e2 98 94"x +smiley ="e2 98 ba"x +frowney ="e2 98 b9"x +smileyBlack ="e2 98 bb"x +peace ="e2 98 ae"x +yingYang ="e2 98 af"x + -- create a blank delimited string of the UTF-8 encoded symbols +utf8chars=female male ballot ballot_x ballot_check radioactive skullAndBones umbrellaRain - + smiley frowney smileyBlack peace yingYang + +text~insertString(cursor, "Hello from ooRexx again, setting system clipboard to our UTF-8 symbols ... " ,.false) +text~insertControlCharacter(cursor, paraBreak, .false) +.bsf.clipboard~setString(utf8Chars,"utf-8") + +text~insertString(cursor, "About to paste the current clipboard content (UTF-8 encoded string): " ,.false) +text~insertControlCharacter(cursor, paraBreak, .false) +dispatcher~executeDispatch(currFrameXDP, '.uno:Paste', '', 0, .uno~noProps) +text~insertControlCharacter(cursor, paraBreak, .false) + +----- create and copy image to system clipboard with JDOR, paste it into swriter +dtBeforeImage=.dateTime~new +text~insertString(cursor, "At:" dtBeforeImage", calling JDOR-program to create and copy an image to the system clipboard ... " ,.false) +text~insertControlCharacter(cursor, paraBreak, .false) + -- create image, copy to clipboard without alpha channel +call "1-250_JDOR_to_clipboard.rxj" .true +dtAfterImage=.dateTime~new +text~insertString(cursor, "Returned from running JDOR program at:" dtAfterImage "(duration:" dtAfterImage-dtBeforeImage"). " ,.false) +text~insertControlCharacter(cursor, paraBreak, .false) + +text~insertControlCharacter(cursor, paraBreak, .false) +text~insertString(cursor, "About to paste the current clipboard content (an image created with JDOR - Java2D for ooRexx, part of BSF4ooRexx850): " ,.false) +text~insertControlCharacter(cursor, paraBreak, .false) + +dispatcher~executeDispatch(currFrameXDP, '.uno:Paste', '', 0, .uno~noProps) +text~insertControlCharacter(cursor, paraBreak, .false) + +dtEnd=.dateTime~new +text~insertString(cursor, "Done at:" dtEnd "(total duration:" dtStart-dtEnd")", .false) +text~insertControlCharacter(cursor, paraBreak, .false) + + -- create a proper file-URL +url=uno.convertToUrl(directory()"\"docName) +say "url:" pp(url) -- show URL +document~XStorable~storeAsURL(url, .uno~noProps) -- save to file system +-- document~XCloseable~close(.false) + +::requires UNO.CLS -- get UNO support Property changes on: branches/850/samples/1-250_swriter_bsf_clipboard.rxj ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: branches/850/samples/1-250_windows_swriter_ole_clipboard.rxj =================================================================== --- branches/850/samples/1-250_windows_swriter_ole_clipboard.rxj (rev 0) +++ branches/850/samples/1-250_windows_swriter_ole_clipboard.rxj 2023-06-17 17:02:18 UTC (rev 1070) @@ -0,0 +1,167 @@ +#!/usr/bin/env rexx +/* + Name: "1-250_windows_swriter_ole_clipbaord.rxj" + + Invoke: "rexx 1-250_windows_swriter_ole_clipbaord.rxj" (Windows only) + "rexxj 1-250_windows_swriter_ole_clipbaord.rxj" (Windows only) + + Needs: BSF4ooRexx850 and "1-250_JDOR_to_clipboard.rxj" from BSF4ooRexx850 + + Purpose: runs on Windows only as this uses OLE (object linking and embedding) + creates an OpenOffice or LibreOffice swriter document and demonstrates + exploiting the .BSF.clipboard class for copying UTF-8 encoded data to + the clipboard and pasting it into the document, then calls + "1-250_JDOR_to_clipboard.rxj" which creates and copies an + image to the systme clipboard, which then gets pasted into + the document. + + Date: 2023-06-17 + + Author: Rony G. Flatscher, WU Vienna + + Changes: --- + + last change: Revision: $Revision: 951 $ $Author: orexx $ $Date: 2022-08-10 18:06:25 +0200 (Mi., 10 Aug 2022) $ + (svn hint: use 'propset svn:keywords "Author Date Revision" filename') + + license: + + ------------------------ Apache Version 2.0 license ------------------------- + Copyright (C) 2023 Rony G. Flatscher + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ----------------------------------------------------------------------------- +*/ +parse source opSys . fullName -- get source path +if opSys[1]<>"W" then -- we must run under Windows +do + say "this program needs Windows, you are running:" pp(opSys) + exit -1 +end + +thisName=filespec("name",fullName) +parse var thisName name '.' +docName=name".odt" -- name of swriter document we create at the end + +/* create a text document, demonstrate how to align paragraphs */ +serviceManager = .OLEObject~new('com.sun.star.ServiceManager') +/* create text document */ +desktop = serviceManager~createInstance('com.sun.star.frame.Desktop') +noProps = .array~new /* empty array (no properties) */ +document = desktop~loadComponentFromURL('private:factory/swriter', '_blank', 0, noProps) + +text = document~getText -- get text object +dtStart=.dateTime~new +text~setString("Hello, this is ooRexx started at:" dtStart"!") +cursor = text~createTextCursor +cursor~gotoEnd(.false) + +ctlChars = getAsDirectory(serviceManager, "com.sun.star.text.ControlCharacter") -- UNO_CONSTANT +paraBreak = ctlChars~paragraph_break -- get paragraph break constant +text~insertControlCharacter(cursor, paraBreak, .false) + +dispatcher=serviceManager~createInstance("com.sun.star.frame.DispatchHelper") + + -- define some characters, encoded as UTF-8 +female ="e2 99 80"x +male ="e2 99 82"x +ballot ="e2 98 90"x +ballot_x ="e2 98 92"x +ballot_check ="e2 98 91"x +radioactive ="e2 98 a2"x +skullAndBones="e2 98 a0"x +umbrellaRain ="e2 98 94"x +smiley ="e2 98 ba"x +frowney ="e2 98 b9"x +smileyBlack ="e2 98 bb"x +peace ="e2 98 ae"x +yingYang ="e2 98 af"x + -- create a blank delimited string of the UTF-8 symbols +utf8chars=female male ballot ballot_x ballot_check radioactive skullAndBones umbrellaRain - + smiley frowney smileyBlack peace yingYang + +text~insertString(cursor, "Hello from ooRexx again, setting system clipboard to our UTF-8 symbols ... " ,.false) +text~insertControlCharacter(cursor, paraBreak, .false) +.bsf.clipboard~setString(utf8Chars,"utf-8") + +text~insertString(cursor, "About to paste the current clipboard content (UTF-8 encoded string): " ,.false) +text~insertControlCharacter(cursor, paraBreak, .false) +dispatcher~executeDispatch(desktop~currentFrame, '.uno:Paste', '', 0, noProps) +text~insertControlCharacter(cursor, paraBreak, .false) + +-- create and copy image to system clipboard with JDOR, paste it into swriter +dtBeforeImage=.dateTime~new +text~insertString(cursor, "At:" dtBeforeImage", calling JDOR-program to create and copy an image to the system clipboard ... " ,.false) +text~insertControlCharacter(cursor, paraBreak, .false) + -- create image, copy to clipboard without alpha channel +call "1-250_JDOR_to_clipboard.rxj" .true +dtAfterImage=.dateTime~new +text~insertString(cursor, "Returned from running JDOR program at:" dtAfterImage "(duration:" dtAfterImage-dtBeforeImage"). " ,.false) +text~insertControlCharacter(cursor, paraBreak, .false) + +text~insertControlCharacter(cursor, paraBreak, .false) +text~insertString(cursor, "About to paste the current clipboard content (an image created with JDOR - Java2D for ooRexx, part of BSF4ooRexx850): " ,.false) +text~insertControlCharacter(cursor, paraBreak, .false) + +dispatcher~executeDispatch(desktop~currentFrame, '.uno:Paste', '', 0, noProps) +text~insertControlCharacter(cursor, paraBreak, .false) + +dtEnd=.dateTime~new +text~insertString(cursor, "Done at:" dtEnd "(total duration:" dtStart-dtEnd")", .false) +text~insertControlCharacter(cursor, paraBreak, .false) + + -- create a proper file-URL for Windows (has three instead of two slashes at the beginning!) +url="file:///" || qualify(directory()"\"docName)~changeStr("\","/") +say "url:" pp(url) +document~storeAsURL(url, .array~new) +-- document~close(.false) + +::requires BSF.CLS -- get bidirectional ooRexx-Java bridge + +/* Routine returns a Rexx directory containing all names and values of the supplied + UNO_CONSTANTS or UNO_ENUM class name (needs to be fully qualified). */ +::routine getAsDirectory + use strict arg serviceManager, unoClzName + + dir = .Directory~new -- directory will get + dir~objectName = unoClzName -- allows to show the uno class it represents + + ctxt = serviceManager~defaultContext + tdm = ctxt~getValueByName("/singletons/com.sun.star.reflection.theTypeDescriptionManager") + reflClz= tdm~getByHierarchicalName(unoClzName) + if reflClz~isNil then return dir -- return empty directory + + typeClass = reflClz~getTypeClass + if typeClass = 30 then -- UNO_CONSTANTS + do + dir~objectName = unoClzName "(UNO_CONSTANTS)" -- supply type info to name + do c over reflClz~getConstants -- iterate over constant fields + name = c~getName -- fully qualified + name = name~substr(name~lastPos('.')+1) -- extract last word + dir[name] = c~getConstantValue -- store constant values with their names + -- say "name:" name "->" c~getConstantValue + end + end + else if typeClass = 15 then -- UNO_ENUMERATION + do + dir~objectName = unoClzName "(UNO_ENUM)" -- supply type info to name + enumNames = reflClz~getEnumNames -- get all enumeration names + enumValues = reflClz~getEnumValues -- get all enumeration values + do i=1 to enumNames~items + name = enumNames[i] + name = name~substr(name~lastPos('.')+1) -- extract last word + dir[name] = enumValues[i] -- store enum values with their names + -- say "name:" name "->" enumValues[i] + end + end + return dir Property changes on: branches/850/samples/1-250_windows_swriter_ole_clipboard.rxj ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: branches/850/samples/1-250_windows_word_ole_clipboard.rxj =================================================================== --- branches/850/samples/1-250_windows_word_ole_clipboard.rxj (rev 0) +++ branches/850/samples/1-250_windows_word_ole_clipboard.rxj 2023-06-17 17:02:18 UTC (rev 1070) @@ -0,0 +1,114 @@ +#!/usr/bin/env rexx +/* + Name: "1-250_windows_word_ole_clipbaord.rxj" + + Invoke: "rexx 1-250_windows_word_ole_clipbaord.rxj" (Windows only) + "rexxj 1-250_windows_word_ole_clipbaord.rxj" (Windows only) + + Needs: BSF4ooRexx850 and "1-250_JDOR_to_clipboard.rxj" from BSF4ooRexx850 + + Purpose: runs on Windows only as this uses OLE (object linking and embedding) + creates a Word document and demonstrates exploiting the .BSF.clipboard class + for copying UTF-8 encoded data to the clipboard and pasting it into the + document, then calls "1-250_JDOR_to_clipboard.rxj" which creates and copies + an image to the systme clipboard, which then gets pasted into the document. + + Date: 2023-06-17 + + Author: Rony G. Flatscher, WU Vienna + + Changes: --- + + last change: Revision: $Revision: 951 $ $Author: orexx $ $Date: 2022-08-10 18:06:25 +0200 (Mi., 10 Aug 2022) $ + (svn hint: use 'propset svn:keywords "Author Date Revision" filename') + + license: + + ------------------------ Apache Version 2.0 license ------------------------- + Copyright (C) 2023 Rony G. Flatscher + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ----------------------------------------------------------------------------- +*/ +parse source opSys . fullName -- get source path +if opSys[1]<>"W" then -- we must run under Windows +do + say "this program needs Windows, you are running:" pp(opSys) + exit -1 +end + +thisName=filespec("name",fullName) +parse var thisName name '.' +docName=name".docx" -- name of Word document we create at the end + +word = .OLEObject~New("Word.Application") -- create a Word instance +word~Visible = .true -- make Word visible +document = word~documents~add -- add a new document +selection = word~selection -- get the selection object + +dtStart=.dateTime~new +selection~TypeText("Hello, this is ooRexx started at:" dtStart"!") +selection~TypeParagraph + + -- define some characters, encoded as UTF-8 +female ="e2 99 80"x +male ="e2 99 82"x +ballot ="e2 98 90"x +ballot_x ="e2 98 92"x +ballot_check ="e2 98 91"x +radioactive ="e2 98 a2"x +skullAndBones="e2 98 a0"x +umbrellaRain ="e2 98 94"x +smiley ="e2 98 ba"x +frowney ="e2 98 b9"x +smileyBlack ="e2 98 bb"x +peace ="e2 98 ae"x +yingYang ="e2 98 af"x + -- create a blank delimited string of the UTF-8 characters +utf8chars=female male ballot ballot_x ballot_check radioactive skullAndBones umbrellaRain - + smiley frowney smileyBlack peace yingYang + +selection~typeText("Hello from ooRexx again, setting system clipboard to our UTF-8 symbols ... ") +selection~typeParagraph +.bsf.clipboard~setString(utf8chars,"UTF-8") -- indicate Rexx string is UTF-8 encoded (we know!) + +selection~typeText("About to paste the current clipboard content (UTF-8 encoded string): ") +selection~typeParagraph +selection~paste -- we let Word paste string from the clipboard +selection~typeParagraph + +-- create and copy image to system clipboard with JDOR, paste it into swriter +dtBeforeImage=.dateTime~new +selection~typeText("At:" dtBeforeImage", calling JDOR-program to create and copy an image to the system clipboard ... ") +selection~typeParagraph + -- create image, copy to clipboard without alpha channel +call "1-250_JDOR_to_clipboard.rxj" .true +dtAfterImage=.dateTime~new +selection~typeText("Returned from running JDOR program at:" dtAfterImage "(duration:" dtAfterImage-dtBeforeImage"). ") +selection~typeParagraph + +selection~typeText("About to paste the current clipboard content (an image created with JDOR - Java2D for ooRexx, part of BSF4ooRexx850): ") +selection~typeParagraph +selection~paste +selection~typeParagraph + +dtEnd=.dateTime~new +selection~typeText("Done at:" dtEnd "(total duration:" dtStart-dtEnd")") +selection~typeParagraph + +fileName = directory()"\"docName -- save in current directory +say "fileName="pp(fileName) -- show file name +document~saveAs(fileName) -- save document +-- word~quit -- quit (close) word + +::requires BSF.CLS -- get bidirectional ooRexx-Java bridge Property changes on: branches/850/samples/1-250_windows_word_ole_clipboard.rxj ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Modified: branches/850/samples/3-110_JDOR_animate_composite.rxj =================================================================== --- branches/850/samples/3-110_JDOR_animate_composite.rxj 2023-06-17 17:01:18 UTC (rev 1069) +++ branches/850/samples/3-110_JDOR_animate_composite.rxj 2023-06-17 17:02:18 UTC (rev 1070) @@ -122,7 +122,7 @@ end moveTo x y -- go to next position drawImage name size size -- draw at new position - winUpdate .true -- do not update window (frame) + winUpdate .true -- update window (frame) if x>w | (x+size)<0 then leave if y>w | (y+size)<0 then leave @@ -159,7 +159,7 @@ composite src_over -- re-establish writing src over destination moveTo x y2 -- go to next position drawString str -- draw the string - winUpdate .true -- do not update window (frame) + winUpdate .true -- update window (frame) sleep 0.01 -- sleep causes animation effect end Modified: branches/850/samples/index.html =================================================================== --- branches/850/samples/index.html 2023-06-17 17:01:18 UTC (rev 1069) +++ branches/850/samples/index.html 2023-06-17 17:02:18 UTC (rev 1070) @@ -236,7 +236,10 @@ If supplying the argument <em>?</em> (question mark) on the command line the executed JDOR commands get written to <em>stdout</em> in a canonized form. - <dt><a href="1-210_jdor_area_cag.rxj">1-210_jdor_area_cag.rxj</a> + <dt><a href="1-200_listFonts.rxj">1-200_listFonts.rxj</a> + <dd>Lists all font families installed on the system. + + <dt><a href="1-210_JDOR_area_cag.rxj">1-210_JDOR_area_cag.rxj</a> <dd>Demonstrates the use of JDOR for creating <em>Area</em> shapes from circles and the JDOR commands <em>areaAdd</em> (synonym: <em>areaUnion</em>), <em>areaIntersect</em>, <em>areaSubtract</em>, and <em>areaExclusiveOr</em> @@ -244,7 +247,7 @@ If supplying the argument <em>?</em> (question mark) on the command line the executed JDOR commands get written to <em>stdout</em> in a canonized form. - <dt><a href="1-220_jdor_area_cag.rxj">1-220_jdor_area_cag.rxj</a> + <dt><a href="1-220_JDOR_area_cag.rxj">1-220_JDOR_area_cag.rxj</a> <dd>Demonstrates the use of JDOR for combining two areas and have the resulting areas filled with colors to highlight them as well as drawing a border at the concluding area. @@ -251,10 +254,53 @@ If supplying the argument <em>?</em> (question mark) on the command line the executed JDOR commands get written to <em>stdout</em> in a canonized form. - <dt><a href="1-200_listFonts.rxj">1-200_listFonts.rxj</a> - <dd>Lists all font families installed on the system. + <dt><a href="1-230_show_clipBoard.rxj">1-230_show_clipBoard.rxj</a> + <dd>Demonstrates using the <em>.bsf.clipboard</em> class. This sample will + list all currently offered data flavors of the data in the system's + clipboard if it is not empty. + <dt><a href="1-240_Clipboard.rxj">1-240_Clipboard.rxj</a> + <dd>Demonstrates using the <em>.bsf.clipboard</em> class which allows for + interacting with the system clipboard, copying strings or images to it + and getting strings or images from it. This sample will concentrate on + demonstrating various string encodings which play an important role + when copying and pasting strings to and from the system clipboard. + <dt><a href="1-250_JDOR_to_clipboard.rxj">1-250_JDOR_to_clipboard.rxj</a> + <dd>This program creates an image and copies it to the system clipboard + using JDOR. + + <dt><a href="1-250_swriter_bsf_clipboard.rxj">1-250_swriter_bsf_clipboard.rxj</a> + <dd>This program creates an OpenOffice/LibreOffice <em>swriter</em> document, + defines UTF-8 encoded symbols, copies them to the system clipboard and + pastes them into the document, then has an image created and copied to the + clipboard (by calling <em>1-250_JDOR_to_clipboard.rxj</em> above) which then + gets pasted into the document again. + <br><em>Note:</em> This program runs on all operating systems where Apache + OpenOffice or LibreOffice are installed together with BSF4ooRexx850's support + for them. If these applications were installed after BSF4ooRexx850 was installed, + then run <em>BSF4ooRexx850 -> Installation -> Reinstall BSF4ooRexx850</em> which + installs the necessary support. + + <dt><a href="1-250_windows_swriter_ole_clipboard.rxj">1-250_windows_swriter_ole_clipboard.rxj</a> + <dd>This program creates an OpenOffice/LibreOffice <em>swriter</em> document, + defines UTF-8 encoded symbols, copies them to the system clipboard and + pastes them into the document, then has an image created and copied to the + clipboard (by calling <em>1-250_JDOR_to_clipboard.rxj</em> above) which then + gets pasted into the document again. + <br><em>Note:</em> This program runs on Windows only as it exploits <em>OLE</em> + (Object Linking and Embedding), Apache OpenOffice or LibreOffice need to be installed + on the system. + + <dt><a href="1-250_windows_word_ole_clipboard.rxj">1-250_windows_word_ole_clipboard.rxj</a> + <dd>This program creates an OpenOffice/LibreOffice <em>swriter</em> document, + defines UTF-8 encoded symbols, copies them to the system clipboard and + pastes them into the document, then has an image created and copied to the + clipboard (by calling <em>1-250_JDOR_to_clipboard.rxj</em> above) which then + gets pasted into the document again. + <br><em>Note:</em> This program runs on Windows only as it exploits <em>OLE</em> + (Object Linking and Embedding), MS Word needs to be installed on the system. + <dt><a href="2-010_demoJavaArrays.rxj">2-010_demoJavaArrays.rxj</a> <dd>Demonstrate how to create and use Java array objects. @@ -623,6 +669,6 @@ <p> <hr> <p style="font-size: 80%;"> -Rony G. Flatscher, 2010-08-22, ..., 2023-06-08, Wien/Vienna, Austria, Europe +Rony G. Flatscher, 2010-08-22, ..., 2023-06-17, Wien/Vienna, Austria, Europe </body> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-06-17 17:01:20
|
Revision: 1069 http://sourceforge.net/p/bsf4oorexx/code/1069 Author: orexx Date: 2023-06-17 17:01:18 +0000 (Sat, 17 Jun 2023) Log Message: ----------- 20230617 add new JDOR example to demonstrate clipboard command, fix comment. Modified Paths: -------------- sandbox/rgf/jdor/samples/3-110_JDOR_animate_composite.rxj Added Paths: ----------- sandbox/rgf/jdor/samples/1-250_JDOR_to_clipboard.rxj Added: sandbox/rgf/jdor/samples/1-250_JDOR_to_clipboard.rxj =================================================================== --- sandbox/rgf/jdor/samples/1-250_JDOR_to_clipboard.rxj (rev 0) +++ sandbox/rgf/jdor/samples/1-250_JDOR_to_clipboard.rxj 2023-06-17 17:01:18 UTC (rev 1069) @@ -0,0 +1,137 @@ +#!/usr/bin/env rexx +/* + Name: "1-250_JDOR_to_clipboard.rxj" + + Invoke: "rexx 1-250_JDOR_to_clipboard.rxj [1|true]" + "rexxj 1-250_JDOR_to_clipboard.rxj [1|true]" (Windows) + "rexxj.sh 1-250_JDOR_to_clipboard.rxj [1|true]" (Unix) + + Purpose: creates an image and copies it to the system clipboard + + if argument supplied is either '1' or 'true' the image gets + copied without translucency to the system clipboard + + Date: 2023-06-17 + + Author: Rony G. Flatscher, WU Vienna + + Changes: --- + + last change: Revision: $Revision: 951 $ $Author: orexx $ $Date: 2022-08-10 18:06:25 +0200 (Mi., 10 Aug 2022) $ + (svn hint: use 'propset svn:keywords "Author Date Revision" filename') + + license: + + ------------------------ Apache Version 2.0 license ------------------------- + Copyright (C) 2023 Rony G. Flatscher + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ----------------------------------------------------------------------------- +*/ +dtStart=.DateTime~new +parse arg noAlpha . + +bNoAlpha=(noAlpha=1 | noAlpha~caselessEquals("true")) +bDebug=.false -- set to .true to show output + +clz=bsf.importClass("org.oorexx.handlers.jdor.JavaDrawingHandler") +if bDebug=.true then + say "JDOR version:" clz~version +jdh=clz~new +call BsfCommandHandler "add", "jdor", jdh + +if bDebug then + address jdor with error using (.error) output using (.output) -- set default environment to JDOR +else + address jdor + +dtAfterRedirect=.DateTime~new + +newImage 250 250 -- create new bitmap +dtAfterNI=.dateTime~new +imageSize +parse var RC imgWidth imgHeight + +if bDebug=.true then -- show window in debug mode +do + winShow -- show frame + winTitle imgWidth"x"imgHeight +end + + -- draw two lines forming a big X +shape l2d line2d 10 10 100 100 +drawShape l2d + +shape r2d rectangle2d 50 50 100 100 +color red +drawShape r2d + +shape rr2d roundrectangle2d 70 75 125 125 45 45 +color c1 .1 .5 .75 .60 +fillShape rr2d +color yellow +drawShape rr2d + +stroke s3 3 +color black +shape e2d ellipse2d 10 10 45 45 +color yellow +drawShape e2d + + -- place logos right-top, right-bottom, left-bottom, margin 10px +size=50 -- size of logos on image +m =10 -- margin +defs = ("oorexx_256.png" , imgWidth-size-m, m ), - + ("bsf4oorexx_256.png", imgWidth-size-m, imgHeight-size-m), - + ("oorexx4ooo_256.png", m , imgHeight-size-m) +do counter c def over defs + loadImage def[1] def[1] + moveTo def[2] def[3] + drawImage def[1] size size +end + +dtBeforeF=.dateTime~new +font f18 "Serif 18" -- this takes quite some time! +dtAfterF=.dateTime~new +str=.dateTime~new~string +dtBeforeSB=.dateTime~new +stringBounds str +dtAfterSB=.dateTime~new +parse var RC x y w h +if bDebug=.true then + say "stringBounds (x y width height):" pp(RC) +moveTo (imgWidth-w-x)/2 (imgHeight+h-y)/2 +color black +dtBeforeDS=.dateTime~new +drawString str +dtAfterDS=.dateTime~new + + -- copy image to clipboard +if bNoAlpha then clipboardSetWithoutAlpha + else clipboardSet + + -- for development & testing +if bDebug=.true then +do + say "total time :" dtAfterDS-dtStart + say + say "init & redirect:" dtAfterRedirect-dtStart + say " create image:" dtAfterNI-dtAfterRedirect + say " font:" dtAfterF-dtBeforeF "(the first time font gets used)" + say " stringBounds:" dtAfterSB-dtBeforeSB + say " drawString :" dtAfterDS-dtBeforeDS + say "hit <enter> to continue..." + parse pull . +end + +::requires BSF.CLS -- get bidirectional ooRexx-Java bridge, includes JDOR Property changes on: sandbox/rgf/jdor/samples/1-250_JDOR_to_clipboard.rxj ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Modified: sandbox/rgf/jdor/samples/3-110_JDOR_animate_composite.rxj =================================================================== --- sandbox/rgf/jdor/samples/3-110_JDOR_animate_composite.rxj 2023-06-14 18:01:18 UTC (rev 1068) +++ sandbox/rgf/jdor/samples/3-110_JDOR_animate_composite.rxj 2023-06-17 17:01:18 UTC (rev 1069) @@ -122,7 +122,7 @@ end moveTo x y -- go to next position drawImage name size size -- draw at new position - winUpdate .true -- do not update window (frame) + winUpdate .true -- update window (frame) if x>w | (x+size)<0 then leave if y>w | (y+size)<0 then leave @@ -159,7 +159,7 @@ composite src_over -- re-establish writing src over destination moveTo x y2 -- go to next position drawString str -- draw the string - winUpdate .true -- do not update window (frame) + winUpdate .true -- update window (frame) sleep 0.01 -- sleep causes animation effect end This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-06-14 18:01:20
|
Revision: 1068 http://sourceforge.net/p/bsf4oorexx/code/1068 Author: orexx Date: 2023-06-14 18:01:18 +0000 (Wed, 14 Jun 2023) Log Message: ----------- 20230614 New sample '1-230_ClipBoard.rxj'. Modified Paths: -------------- branches/850/bsf4oorexx.dev/bin/BSF.CLS branches/850/samples/1-220_JDOR_area_cag.rxj Added Paths: ----------- branches/850/samples/1-230_ClipBoard.rxj Modified: branches/850/bsf4oorexx.dev/bin/BSF.CLS =================================================================== --- branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-06-12 15:56:57 UTC (rev 1067) +++ branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-06-14 18:01:18 UTC (rev 1068) @@ -19,6 +19,9 @@ .BSF in .environment; date: + 2023-06-14, ---rgf, - allow optional codepage argument for "BSF.ClipBoard" method + setString + 2023-06-11, ---rgf, - new class "BSF.ClipBoard" to allow copying images and strings to the system clipboard, fetch images and strings, querying whether empty, the renderings ("DataFlavor"s) available, @@ -845,7 +848,7 @@ BSF_ARRAY_PROXY: MAKEARRAY and SUPPLIER now only return entries with values as does Object Rexx with native arrays) - version: 8.50 (20230612) -- "6" -> Java minimum level "1.6/6.0", 41 -> ooRexx minimum level "4.1" + version: 8.50 (20230614) -- "6" -> Java minimum level "1.6/6.0", 41 -> ooRexx minimum level "4.1" If this program is part of a distribution of an Apache foundation project (e.g. BSF, the Bean Scripting Framework), then the immediately following Apache foundation license @@ -948,7 +951,7 @@ if initialize.bsf.dir() then -- setup .bsfrexx do - .bsf4rexx~version="850.20230612" -- set version (date distribution got created) + .bsf4rexx~version="850.20230614" -- set version (date distribution got created) .bsf4rexx~opSys =opsys -- save operating system name as supplied by Rexx' PARSE SOURCE .bsf4rexx~opSys1 =opsys~left(1)~upper -- save operating system name's initial letter in uppercase .bsf4rexx~opSys2 =opsys~left(2)~upper -- save operating system name's first two letters in uppercase @@ -6413,9 +6416,21 @@ * peer. */ ::method loadPeerClass package class -- load the peer Java class now - expose thisClz + expose thisClz defaultCodePage thisClz=bsf.loadClass("org.rexxla.bsf.engines.rexx.BsfSystemClipboard") + defaultCodePage=.java.lang.System~getProperty("native.encoding") -- with Java 18 + if defaultCodePage~isNil then + defaultCodePage=.java.lang.System~getProperty("file.encoding") +/** This attribute determines which file encoding is used when converting +* strings to and from Java. It defaults to the <em>java.lang.System</em> +* property <em>"file.encoding"</em> and if <em>.nil</em> then +* <em>"file.encoding"</em>. +*/ +-- https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html (2023-06-14) +-- https://en.wikipedia.org/wiki/Code_page (2023-06-14) +::attribute defaultCodePage class + /* ------------------------------------------------------------------------ */ /** Get Java class object representing the system's clipboard. *@return the Java class object representing the system's clipboard @@ -6519,6 +6534,7 @@ ::attribute string set class forward message (setString) + /* ------------------------------------------------------------------------ */ /** Setter method to set the system clipboard to the supplied string. * <br>Note: if the Rexx string represents characters encoded in UTF-8 (like curl supplies), @@ -6526,12 +6542,16 @@ * created on the Java side correctly, fetching the "JSO" object (a Java String object) * and supply that JSO object as the string value to set the system clipboard to. * -* @param string the string that should be put into the system clipboard +* @param string the Rexx string that should be put into the system clipboard +* @param codepage optonal, a string denoting explicitly the codepage that was used to encode the Rexx string */ ::method setString class - expose thisClz - use strict arg str - thisClz~setString(str) + expose thisClz defaultCodePage + use strict arg str, ... + if arg(2,"exists") then + thisClz~setString(.java.lang.String~new(BSFRawBytes(str),arg(2))) + else + thisClz~setString(str) /* ------------------------------------------------------------------------ */ /** Getter method to fetch a string from the system clipboard. @@ -6547,16 +6567,15 @@ /** Getter method to fetch a string from the system clipboard encoded with the specified * <em>codepage</em> (e.g., "UTF-8"). * +* @param codepage a string denoting the codepage to use to encode the Rexx string to return +* * @return string fetched from system clipboard encoded according to <em>codepage</em> or * <em>.nil</em> if no string present */ ::method getString class - expose thisClz - use strict arg codepage=.nil - if codepage=.nil then - return thisClz~getString - else - return BsfRawBytes(thisClz~getString(codepage)) + expose thisClz defaultCodePage + use strict arg codepage=(defaultCodePage) + return BsfRawBytes(thisClz~getString(codepage)) /* /* ------------------------------------------------------------------------ */ Modified: branches/850/samples/1-220_JDOR_area_cag.rxj =================================================================== --- branches/850/samples/1-220_JDOR_area_cag.rxj 2023-06-12 15:56:57 UTC (rev 1067) +++ branches/850/samples/1-220_JDOR_area_cag.rxj 2023-06-14 18:01:18 UTC (rev 1068) @@ -1,10 +1,10 @@ #!/usr/bin/env rexx /* - Name: "1-210_JDOR_area_cag.rxj" + Name: "1-220_JDOR_area_cag.rxj" - Invoke: "rexx 1-210_JDOR_area_cag.rxj [?]" - "rexxj 1-210_JDOR_area_cag.rxj [?]" (Windows) - "rexxj.sh 1-210_JDOR_area_cag.rxj [?]" (Unix) + Invoke: "rexx 1-220_JDOR_area_cag.rxj [?]" + "rexxj 1-220_JDOR_area_cag.rxj [?]" (Windows) + "rexxj.sh 1-220_JDOR_area_cag.rxj [?]" (Unix) ? ... optional argument, if supplied displays processed JDOR commands Added: branches/850/samples/1-230_ClipBoard.rxj =================================================================== --- branches/850/samples/1-230_ClipBoard.rxj (rev 0) +++ branches/850/samples/1-230_ClipBoard.rxj 2023-06-14 18:01:18 UTC (rev 1068) @@ -0,0 +1,137 @@ +#!/usr/bin/env rexx +/* + Name: "1-230_ClipBoard.rxj" + + Invoke: "rexx 1-230_ClipBoard.rxj" + "rexxj 1-230_ClipBoard.rxj" (Windows) + "rexxj.sh 1-230_ClipBoard.rxj" (Unix) + + + Purpose: demonstrate usage of ooRexx class Bsf.Clipboard + + Date: 2023-06-13 + + Author: Rony G. Flatscher, WU Vienna + + Changes: --- + + last change: Revision: $Revision: 951 $ $Author: orexx $ $Date: 2022-08-10 18:06:25 +0200 (Mi., 10 Aug 2022) $ + (svn hint: use 'propset svn:keywords "Author Date Revision" filename') + + license: + + ------------------------ Apache Version 2.0 license ------------------------- + Copyright (C) 2023 Rony G. Flatscher + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ----------------------------------------------------------------------------- +*/ + +say "1) starting up, checking clipboard:" +call showFormats +say + +say "2) clearing (emptying) cliboard ..." +.bsf.clipboard~clear +call showFormats +say + +str1="Hello, world, this is ooRexx speaking ..." +say "3) setting clipboard to string:" pp(str1) +.bsf.clipBoard~string=str1 +call showFormats +say " fetching string from clipboard, received:" pp(.bsf.clipBoard~string) +say + +clzImageIO=bsf.importClass("javax.imageio.ImageIO") +images="bsf4oorexx_256.png", "oorexx4ooo_256.png", "oorexx_256.png" +file =.bsf~new("java.io.File", images[random(1,3)]) -- pick a random png filename +img1 =clzImageIO~read(file) -- returns a BufferedImage +say "4) setting clipboard to image:" pp(img1~toString) +.bsf.clipboard~image=img1 +call showFormats +say " fetching image from clipboard, received:" pp(.bsf.clipBoard~image~toString) +say + +------------------------------------------------------------ +say "---" +say "now samples with Rexx strings encoded as Cp437, Cp850, ISO-8859-1, UTF-8:" + +-- https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html (2023-06-14) +-- https://en.wikipedia.org/wiki/Code_page (2023-06-14) + +-- the following four strings represent the same sentence encoded in different codepages +-- Yen: "9d"x in cp437) || +cp437 ="4765726D616E3A20756D6C617574733D278494818E999A272C20736861727020733D27E1272C2059656E3D279D272E"x +cp850 ="4765726D616E3A20756D6C617574733D278494818E999A272C20736861727020733D27E1272C2059656E3D27BE272E"x +iso8859_1="4765726D616E3A20756D6C617574733D27E4F6FCC4D6DC272C20736861727020733D27DF272C2059656E3D27A5272E"x +utf8 ="4765726D616E3A20756D6C617574733D27C3A4C3B6C3BCC384C396C39C272C20736861727020733D27C39F272C2059656E3D27C2A5272E"x +-- 4765726D616E3A20756D6C617574733D27C3A4C3B6C3BCC384C396C39C272C20736861727020733D27C39F272C2059656E3D27C2A5272E + +-- -> requested UTF-8, but seems to be something different! :( +-- 4765726D616E3A20756D6C617574733D27C383C2A4C383C2B6C383C2BCC383E2809EC383E28093C383C593272C20736861727020733D27C383C5B8272C2059656E3D27C382C2A5272E +strings=cp437 , cp850 , iso8859_1 , utf8 -- strings encoded in different codepages +cps ="Cp437", "Cp850", "ISO-8859-1", "UTF-8" -- respective codepage names + +stdoutEncoding=.java.lang.System~getProperty("sun.stdout.encoding") -- fetch current stdout encoding +say "current stdout's encoding:" pp(stdoutEncoding) +if stdoutEncoding="cp65001" then stdoutEncoding="UTF-8" -- Java does not accept Microsfot's proprietary "cp65001" +say + +do counter c str over strings + cp=cps[c] -- get codepage used to encode str + say " #" c" Rexx string ""str"" got encoded as" pp(cps[c])":" + say " str=" pp(str) + tmpStr=bsf.iconv(str,cp,stdoutEncoding) -- translate to stdout's encoding + say " ... translated according to this stdout's codepage ["stdoutEncoding"]:" + say " tmpStr="pp(tmpStr) + say ' .bsf.clipboard~setString(str,"'cp'")' + .bsf.clipboard~setString(str,cp) -- set string with proper encoding information + say +end +call showFormats +say +call showCPs +say "---" + +say +say "the current string in the system clipboard is usually encoded as Unicode, hence" +say "supplying explicitly the codepage we want the Rexx string to be encoded in:" +say +say "Asking string from clipboard encoded as ""sun.stdout.encoding"" ["stdoutEncoding"]:" +say " " pp(.bsf.clipboard~getString(stdoutEncoding)) + + +::requires BSF.CLS -- get bidiretional ooRexx-Java bridge + +::routine showFormats + if .bsf.clipboard~isEmpty then + do + say " clipboard is empty" + return + end + say "clipboard contains the following data renderable to:" + flavors=.bsf.clipboard~getDataFlavors + w=flavors~items~length -- get width of highest number + do counter c flavor over flavors + say " #" c~right(w)":" flavor~toString + end + return + +::routine showCPs + props="file.encoding", "native.encoding", "sun.io.unicode.encoding", - + "sun.jnu.encoding", "sun.stderr.encoding", "sun.stdout.encoding" + say "---> Java encodings in effect" pp(.bsf4rexx~display.version)":" + do counter c prop over props + say " #" c":" pp(prop)~left(30)":" pp(.java.lang.System~getProperty(prop)) + end Property changes on: branches/850/samples/1-230_ClipBoard.rxj ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-06-12 15:57:00
|
Revision: 1067 http://sourceforge.net/p/bsf4oorexx/code/1067 Author: orexx Date: 2023-06-12 15:56:57 +0000 (Mon, 12 Jun 2023) Log Message: ----------- 20230612 Complete JDOR with clipboard commands. Modified Paths: -------------- branches/850/bsf4oorexx.dev/bin/BSF.CLS branches/850/bsf4oorexx.dev/information/jdor/jdor_doc.html branches/850/bsf4oorexx.dev/source_java/BsfSystemClipboard.java branches/850/bsf4oorexx.dev/source_java/JavaDrawingHandler.java branches/850/createDistributionForBSF4ooRexx8.cmd Modified: branches/850/bsf4oorexx.dev/bin/BSF.CLS =================================================================== --- branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-06-12 15:56:39 UTC (rev 1066) +++ branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-06-12 15:56:57 UTC (rev 1067) @@ -845,7 +845,7 @@ BSF_ARRAY_PROXY: MAKEARRAY and SUPPLIER now only return entries with values as does Object Rexx with native arrays) - version: 8.50 (20230608) -- "6" -> Java minimum level "1.6/6.0", 41 -> ooRexx minimum level "4.1" + version: 8.50 (20230612) -- "6" -> Java minimum level "1.6/6.0", 41 -> ooRexx minimum level "4.1" If this program is part of a distribution of an Apache foundation project (e.g. BSF, the Bean Scripting Framework), then the immediately following Apache foundation license @@ -948,7 +948,7 @@ if initialize.bsf.dir() then -- setup .bsfrexx do - .bsf4rexx~version="850.20230611" -- set version (date distribution got created) + .bsf4rexx~version="850.20230612" -- set version (date distribution got created) .bsf4rexx~opSys =opsys -- save operating system name as supplied by Rexx' PARSE SOURCE .bsf4rexx~opSys1 =opsys~left(1)~upper -- save operating system name's initial letter in uppercase .bsf4rexx~opSys2 =opsys~left(2)~upper -- save operating system name's first two letters in uppercase Modified: branches/850/bsf4oorexx.dev/information/jdor/jdor_doc.html =================================================================== --- branches/850/bsf4oorexx.dev/information/jdor/jdor_doc.html 2023-06-12 15:56:39 UTC (rev 1066) +++ branches/850/bsf4oorexx.dev/information/jdor/jdor_doc.html 2023-06-12 15:56:57 UTC (rev 1067) @@ -1272,9 +1272,28 @@ <em>Graphics[2D]</em> methods from an ooRexx program directly. <br>Cf. the Java documentation for the Java class <em>Graphics[2D]</em>. + <!-- -------------------------------------------------------- --> <tr class="CommandRowColumn"><!-- table row --> <td class="cmdNr"> + <td class="command" id="cmdGetClipboard"> "getClipboard" <br> + "clipboardGet" + <td colspan="2"> Gets the image from the system clipboard, stores it + in the internal image registry with a default <em>imageNickName</em> + of <em>"CLIPBOARD"</em> and returns the image via the Rexx variable + <em>RC</em>. + + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> imageNickName + <td> optional <em>imageNickName</em> gets uppercased and is used to store + the clipboard image in the internal image registry; if omitted <em>JDOR</em> + will use <em>"CLIPBOARD"</em> as the default <em>imageNickName</em> + + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> <td class="command" id="cmdGetState"> "getState" <td colspan="2"> Creates an ooRexx <em>StringTable</em> object, inserts state information and returns it via the Rexx variable <em>RC</em>. The @@ -1840,6 +1859,47 @@ <!-- -------------------------------------------------------- --> <tr class="CommandRowColumn"><!-- table row --> <td class="cmdNr"> + <td class="command" id="cmdSetClipboard"> "setClipboard" <br> + "clipboardSet" + <td colspan="2"> Sets the system clipboard to the current image unless + the optional <em>imageNickName</em> is supplied in which case the image + is retrieved from the internal image registry stored with an index matching + <em>imageNickName</em> in uppercase. The image used to set the system + clipboard gets returned via the Rexx variable <em>RC</em>. + + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> imageNickName + <td> optional <em>imageNickName</em> gets uppercased and is used to retrieve + the image from the internal image registry + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> + <td class="command" id="cmdSetClipboardWithoutAlpha"> "setClipboardWithoutAlpha" <br> + "clipboardSetWithoutAlpha" + <td colspan="2"> Sets the system clipboard to the current image unless + the optional <em>imageNickName</em> is supplied in which case the image + is retrieved from the internal image registry stored with an index matching + <em>imageNickName</em> in uppercase. The image used to set the system + clipboard gets returned via the Rexx variable <em>RC</em>. + + <br>Note: images of type <em>TYPE_4BYTE_ABGR</em> or <em>TYPE_4BYTE_ABGR_PRE</em> are redrawn + on white background on a new image of type <em>TYPE_3BYTE_BGR</em>, + images of type <em>TYPE_INT_ARGB</em> or <em>TYPE_INT_ARGB_PRE</em> are redrawn + on white background on a new image of type <em>TYPE_INT_RGB</em>. + + + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> imageNickName + <td> optional <em>imageNickName</em> gets uppercased and is used to retrieve + the image from the internal image registry + + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> <td class="command" id="cmdShear"> "shear" <td colspan="2"> Queries and optionally changes ("concatenates") the shear (skew) factor for the <em>x</em> and <em>y</em> axis. The command returns the shear values @@ -3145,7 +3205,7 @@ <hr width="75%"> <small> - JDOR synopsis of commands, version: 100.20230609 + JDOR synopsis of commands, version: 100.20230612 <br>Acknowledgement: the author wishes to thank DI Walter Pachl <br>for his help in testing and proof reading </small> Modified: branches/850/bsf4oorexx.dev/source_java/BsfSystemClipboard.java =================================================================== --- branches/850/bsf4oorexx.dev/source_java/BsfSystemClipboard.java 2023-06-12 15:56:39 UTC (rev 1066) +++ branches/850/bsf4oorexx.dev/source_java/BsfSystemClipboard.java 2023-06-12 15:56:57 UTC (rev 1067) @@ -9,6 +9,8 @@ - new method setImageWithoutAlpha(img) that will create a bitmap with white background when image has alpha (translucency) instead of (unlegible) black background used by ImageIOO.write() + - 20230612, rgf - setImageWithoutAlpha() now returns the image that was used to + set the clipboard to license: Apache license 2.0 @@ -123,8 +125,9 @@ * * @see {@link public static void setImage(Image img)} * @param img the image to be copied (without alpha/translucency on white background) to the clipboard) + * @return image that was used to set the clipboard */ - public static void setImageWithoutAlpha(Image img) + public static Image setImageWithoutAlpha(Image img) { BufferedImage bufferedImage=(BufferedImage) img; int imgType=bufferedImage.getType(); @@ -151,11 +154,13 @@ g2d.drawImage(img, 0, 0, null); // without an ImageObserver g2d.dispose(); setImage(jpgImg); + return jpgImg; // clipboard.setContents(new TransferableImage(jpgImg), null); // we do not supply an owner } else { setImage(img); + return img; } } Modified: branches/850/bsf4oorexx.dev/source_java/JavaDrawingHandler.java =================================================================== --- branches/850/bsf4oorexx.dev/source_java/JavaDrawingHandler.java 2023-06-12 15:56:39 UTC (rev 1066) +++ branches/850/bsf4oorexx.dev/source_java/JavaDrawingHandler.java 2023-06-12 15:56:57 UTC (rev 1067) @@ -147,10 +147,15 @@ - now handleCommand() will have the triggering command processed when executing redirected input - added synonyms "areaUnion" for "areaAdd" and "areaXor" for "areaExclusiveOr" + 2023-06-11: - added commands "clipboardGet" ("getClipboard"), "clipboardSet" ("setClipboard") + 2023-06-12: - added command "clipboardSetWithoutAlpha" ("setClipboardWithoutAlpha") + */ package org.oorexx.handlers.jdor; +import org.rexxla.bsf.engines.rexx.BsfSystemClipboard; // 2023-06-11 + import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; @@ -314,7 +319,7 @@ /* static definitions */ // default image sizes - static final public String version = "100.20230608"; + static final public String version = "100.20230612"; static final private int prefWidth = 500; static final private int prefHeight = 500; static private int prefImageType = BufferedImage.TYPE_INT_ARGB; // default with alpha (only png supported) @@ -1334,6 +1339,80 @@ return resultValue; } + case CLIPBOARD_GET: // "clipboardGet [imgName]" ... save in hmImages, if no imgName then under "CLIPBOARD" + case CLIPBOARD_SET: // "clipboardSet [imgName]" ... if imgName: get from hmImages, else from currImage + case CLIPBOARD_SET_WITHOUT_ALPHA: // "clipboardSetWithoutAlpha [imgName]" ... if imgName: get from hmImages, else from currImage + { + if (arrCommand.length>2) + { + throw new IllegalArgumentException("this command needs either no or exactly 1 argument (image's nickname for lookup), received "+(arrCommand.length-1)+" instead"); + } + BufferedImage tmpImage = null; + String imgName = "CLIPBOARD"; // default for CLIPBOARD_GET + if (arrCommand.length==2) + { + imgName=arrCommand[1]; // fetch imgName + // show effective command + if (isOR) + { + canonical = canonical+" "+imgName; + } + + if (cmd!=EnumCommand.CLIPBOARD_GET) // one argument, get image from hmImages + { + tmpImage = hmImages.get(imgName.toUpperCase()); + if (tmpImage==null) + { + try + { + tmpImage = (BufferedImage) getContextVariable(slot, imgName); // try to get from a Rexx variable + } + catch (Throwable t) {} + if (tmpImage==null) + { + throw new IllegalArgumentException("image (must be a BufferedImage) with the name \""+imgName+"\" not found, you must first use \"loadImage "+imgName+" filename\" or \"pushImage "+imgName+"\" or assign a BufferedImage to a Rexx variable named \""+imgName+"\""); + } + } + } + } + else // no argument + { + if (cmd!=EnumCommand.CLIPBOARD_GET) // no argument, use current image (bufImage) + { + tmpImage = bufImage; + } + } + + if (cmd!=EnumCommand.CLIPBOARD_GET) // no argument, use current image (bufImage) + { + if (cmd==EnumCommand.CLIPBOARD_SET) + { + BsfSystemClipboard.setImage(tmpImage); // set clipboard to image + } + else + { + tmpImage=(BufferedImage) BsfSystemClipboard.setImageWithoutAlpha(tmpImage); // set clipboard to image + } + } + else + { + tmpImage=(BufferedImage) BsfSystemClipboard.getImage(); + if (tmpImage==null) + { + throw new IllegalArgumentException("could not fetch image from system clipboard"); + } + hmImages.put(imgName,tmpImage); // save in image Map + } + + if (isOR) + { + writeOutput(slot, canonical); + } + + return tmpImage; // return image used to set clipboard + } + + case PRINT_IMAGE: // "printImage [nickName]" { if (arrCommand.length>2) @@ -5391,8 +5470,9 @@ // 2022-12-08 PATH_CLONE ( "pathClone" ) , // "pathClone shapeName [newShapeName]" PATH_TRANSFORM ( "pathTransform" ) , // "pathTransform shapeName atName" - CLIPBOARD_GET ( "clipboardGet" ) , // "clipboardGet [imgName]" ... if imgName: save in hmImages - CLIPBOARD_SET ( "clipboardSet" ) , // "clipboardSet [imgName]" ... if imgName: get from hmImages + CLIPBOARD_GET ( "clipboardGet" ) , // "clipboardGet [imgName]" ... save in hmImages, if no imgName then under "CLIPBOARD" + CLIPBOARD_SET ( "clipboardSet" ) , // "clipboardSet [imgName]" ... if imgName: get from hmImages, else from currImage + CLIPBOARD_SET_WITHOUT_ALPHA ( "clipboardSetWithoutAlpha" ) , // "clipboardSetWithoutAlpha [imgName]" ... if imgName: get from hmImages, else from currImage // 2023-01-08 ASSIGN_RC ( "assignRC" ) , // "assignRC RexxVariable" @@ -5423,19 +5503,23 @@ upperCase2Command.put(it.upperCase, it); } - // add synonyms new name enum type - upperCase2Command.put( "AREAUNION" , AREA_ADD ) ; // 2023-06-08 - upperCase2Command.put( "AREAXOR" , AREA_EXCLUSIVE_OR ) ; // 2023-06-08 - upperCase2Command.put( "NEW" , NEW_IMAGE ) ; // 2023-01-18 - upperCase2Command.put( "CLEAR" , RESET ) ; - upperCase2Command.put( "GOTO" , MOVE_TO ) ; - upperCase2Command.put( "LOCATION" , MOVE_TO ) ; // 2022-10-23: new alias - upperCase2Command.put( "POS" , MOVE_TO ) ; // 2022-10-29: new alias - upperCase2Command.put( "POSITION" , MOVE_TO ) ; // 2022-10-26: new alias - upperCase2Command.put( "WINMOVETO" , WIN_LOCATION ) ; - upperCase2Command.put( "SHAPECLIP" , CLIP_SHAPE ) ; // 2023-06-06 - upperCase2Command.put( "SHAPEDRAW" , DRAW_SHAPE ) ; // 2023-06-06 - upperCase2Command.put( "SHAPEFILL" , FILL_SHAPE ) ; // 2023-06-06 + // add synonyms new name enum type + upperCase2Command.put( "AREAUNION" , AREA_ADD ) ; // 2023-06-08 + upperCase2Command.put( "AREAXOR" , AREA_EXCLUSIVE_OR ) ; // 2023-06-08 + upperCase2Command.put( "CLEAR" , RESET ) ; + upperCase2Command.put( "GETCLIPBOARD" , CLIPBOARD_GET) ; // 2023-06-11 + upperCase2Command.put( "GOTO" , MOVE_TO ) ; + upperCase2Command.put( "LOCATION" , MOVE_TO ) ; // 2022-10-23: new alias + upperCase2Command.put( "NEW" , NEW_IMAGE ) ; // 2023-01-18 + upperCase2Command.put( "POS" , MOVE_TO ) ; // 2022-10-29: new alias + upperCase2Command.put( "POSITION" , MOVE_TO ) ; // 2022-10-26: new alias + upperCase2Command.put( "SETCLIPBOARD" , CLIPBOARD_SET) ; // 2023-06-11 + upperCase2Command.put( "SETCLIPBOARDWITHOUTALPHA" , CLIPBOARD_SET_WITHOUT_ALPHA) ; // 2023-06-13 + + upperCase2Command.put( "SHAPECLIP" , CLIP_SHAPE ) ; // 2023-06-06 + upperCase2Command.put( "SHAPEDRAW" , DRAW_SHAPE ) ; // 2023-06-06 + upperCase2Command.put( "SHAPEFILL" , FILL_SHAPE ) ; // 2023-06-06 + upperCase2Command.put( "WINMOVETO" , WIN_LOCATION ) ; } Modified: branches/850/createDistributionForBSF4ooRexx8.cmd =================================================================== --- branches/850/createDistributionForBSF4ooRexx8.cmd 2023-06-12 15:56:39 UTC (rev 1066) +++ branches/850/createDistributionForBSF4ooRexx8.cmd 2023-06-12 15:56:57 UTC (rev 1067) @@ -36,9 +36,9 @@ @echo adding javax.servlet.jsp and javax.servlet.http to CLASSPATH set CLASSPATH=%CLASSPATH%;F:\download\java\java2s.com-javax.servlet.jsp\javax.servlet.jsp.jar;F:\download\java\java2s.com-javax.servlet.jsp\javax.servlet-3.0.0.v201112011016.jar -set releaseDate=20230608 -set runDate=20230608 -set doc_date=20230608 +set releaseDate=20230612 +set runDate=20230612 +set doc_date=20230612 @rem values to use for creating the BSF jarfile @rem set bsfDate=20090910 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-06-12 15:56:41
|
Revision: 1066 http://sourceforge.net/p/bsf4oorexx/code/1066 Author: orexx Date: 2023-06-12 15:56:39 +0000 (Mon, 12 Jun 2023) Log Message: ----------- 20230612 Complete JDOR with clipboard commands. Modified Paths: -------------- sandbox/rgf/jdor/JavaDrawingHandler.java sandbox/rgf/jdor/doc/jdor_doc.html Modified: sandbox/rgf/jdor/JavaDrawingHandler.java =================================================================== --- sandbox/rgf/jdor/JavaDrawingHandler.java 2023-06-11 13:32:49 UTC (rev 1065) +++ sandbox/rgf/jdor/JavaDrawingHandler.java 2023-06-12 15:56:39 UTC (rev 1066) @@ -147,10 +147,15 @@ - now handleCommand() will have the triggering command processed when executing redirected input - added synonyms "areaUnion" for "areaAdd" and "areaXor" for "areaExclusiveOr" + 2023-06-11: - added commands "clipboardGet" ("getClipboard"), "clipboardSet" ("setClipboard") + 2023-06-12: - added command "clipboardSetWithoutAlpha" ("setClipboardWithoutAlpha") + */ package org.oorexx.handlers.jdor; +import org.rexxla.bsf.engines.rexx.BsfSystemClipboard; // 2023-06-11 + import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; @@ -314,7 +319,7 @@ /* static definitions */ // default image sizes - static final public String version = "100.20230608"; + static final public String version = "100.20230612"; static final private int prefWidth = 500; static final private int prefHeight = 500; static private int prefImageType = BufferedImage.TYPE_INT_ARGB; // default with alpha (only png supported) @@ -1334,6 +1339,80 @@ return resultValue; } + case CLIPBOARD_GET: // "clipboardGet [imgName]" ... save in hmImages, if no imgName then under "CLIPBOARD" + case CLIPBOARD_SET: // "clipboardSet [imgName]" ... if imgName: get from hmImages, else from currImage + case CLIPBOARD_SET_WITHOUT_ALPHA: // "clipboardSetWithoutAlpha [imgName]" ... if imgName: get from hmImages, else from currImage + { + if (arrCommand.length>2) + { + throw new IllegalArgumentException("this command needs either no or exactly 1 argument (image's nickname for lookup), received "+(arrCommand.length-1)+" instead"); + } + BufferedImage tmpImage = null; + String imgName = "CLIPBOARD"; // default for CLIPBOARD_GET + if (arrCommand.length==2) + { + imgName=arrCommand[1]; // fetch imgName + // show effective command + if (isOR) + { + canonical = canonical+" "+imgName; + } + + if (cmd!=EnumCommand.CLIPBOARD_GET) // one argument, get image from hmImages + { + tmpImage = hmImages.get(imgName.toUpperCase()); + if (tmpImage==null) + { + try + { + tmpImage = (BufferedImage) getContextVariable(slot, imgName); // try to get from a Rexx variable + } + catch (Throwable t) {} + if (tmpImage==null) + { + throw new IllegalArgumentException("image (must be a BufferedImage) with the name \""+imgName+"\" not found, you must first use \"loadImage "+imgName+" filename\" or \"pushImage "+imgName+"\" or assign a BufferedImage to a Rexx variable named \""+imgName+"\""); + } + } + } + } + else // no argument + { + if (cmd!=EnumCommand.CLIPBOARD_GET) // no argument, use current image (bufImage) + { + tmpImage = bufImage; + } + } + + if (cmd!=EnumCommand.CLIPBOARD_GET) // no argument, use current image (bufImage) + { + if (cmd==EnumCommand.CLIPBOARD_SET) + { + BsfSystemClipboard.setImage(tmpImage); // set clipboard to image + } + else + { + tmpImage=(BufferedImage) BsfSystemClipboard.setImageWithoutAlpha(tmpImage); // set clipboard to image + } + } + else + { + tmpImage=(BufferedImage) BsfSystemClipboard.getImage(); + if (tmpImage==null) + { + throw new IllegalArgumentException("could not fetch image from system clipboard"); + } + hmImages.put(imgName,tmpImage); // save in image Map + } + + if (isOR) + { + writeOutput(slot, canonical); + } + + return tmpImage; // return image used to set clipboard + } + + case PRINT_IMAGE: // "printImage [nickName]" { if (arrCommand.length>2) @@ -5391,8 +5470,9 @@ // 2022-12-08 PATH_CLONE ( "pathClone" ) , // "pathClone shapeName [newShapeName]" PATH_TRANSFORM ( "pathTransform" ) , // "pathTransform shapeName atName" - CLIPBOARD_GET ( "clipboardGet" ) , // "clipboardGet [imgName]" ... if imgName: save in hmImages - CLIPBOARD_SET ( "clipboardSet" ) , // "clipboardSet [imgName]" ... if imgName: get from hmImages + CLIPBOARD_GET ( "clipboardGet" ) , // "clipboardGet [imgName]" ... save in hmImages, if no imgName then under "CLIPBOARD" + CLIPBOARD_SET ( "clipboardSet" ) , // "clipboardSet [imgName]" ... if imgName: get from hmImages, else from currImage + CLIPBOARD_SET_WITHOUT_ALPHA ( "clipboardSetWithoutAlpha" ) , // "clipboardSetWithoutAlpha [imgName]" ... if imgName: get from hmImages, else from currImage // 2023-01-08 ASSIGN_RC ( "assignRC" ) , // "assignRC RexxVariable" @@ -5423,19 +5503,23 @@ upperCase2Command.put(it.upperCase, it); } - // add synonyms new name enum type - upperCase2Command.put( "AREAUNION" , AREA_ADD ) ; // 2023-06-08 - upperCase2Command.put( "AREAXOR" , AREA_EXCLUSIVE_OR ) ; // 2023-06-08 - upperCase2Command.put( "NEW" , NEW_IMAGE ) ; // 2023-01-18 - upperCase2Command.put( "CLEAR" , RESET ) ; - upperCase2Command.put( "GOTO" , MOVE_TO ) ; - upperCase2Command.put( "LOCATION" , MOVE_TO ) ; // 2022-10-23: new alias - upperCase2Command.put( "POS" , MOVE_TO ) ; // 2022-10-29: new alias - upperCase2Command.put( "POSITION" , MOVE_TO ) ; // 2022-10-26: new alias - upperCase2Command.put( "WINMOVETO" , WIN_LOCATION ) ; - upperCase2Command.put( "SHAPECLIP" , CLIP_SHAPE ) ; // 2023-06-06 - upperCase2Command.put( "SHAPEDRAW" , DRAW_SHAPE ) ; // 2023-06-06 - upperCase2Command.put( "SHAPEFILL" , FILL_SHAPE ) ; // 2023-06-06 + // add synonyms new name enum type + upperCase2Command.put( "AREAUNION" , AREA_ADD ) ; // 2023-06-08 + upperCase2Command.put( "AREAXOR" , AREA_EXCLUSIVE_OR ) ; // 2023-06-08 + upperCase2Command.put( "CLEAR" , RESET ) ; + upperCase2Command.put( "GETCLIPBOARD" , CLIPBOARD_GET) ; // 2023-06-11 + upperCase2Command.put( "GOTO" , MOVE_TO ) ; + upperCase2Command.put( "LOCATION" , MOVE_TO ) ; // 2022-10-23: new alias + upperCase2Command.put( "NEW" , NEW_IMAGE ) ; // 2023-01-18 + upperCase2Command.put( "POS" , MOVE_TO ) ; // 2022-10-29: new alias + upperCase2Command.put( "POSITION" , MOVE_TO ) ; // 2022-10-26: new alias + upperCase2Command.put( "SETCLIPBOARD" , CLIPBOARD_SET) ; // 2023-06-11 + upperCase2Command.put( "SETCLIPBOARDWITHOUTALPHA" , CLIPBOARD_SET_WITHOUT_ALPHA) ; // 2023-06-13 + + upperCase2Command.put( "SHAPECLIP" , CLIP_SHAPE ) ; // 2023-06-06 + upperCase2Command.put( "SHAPEDRAW" , DRAW_SHAPE ) ; // 2023-06-06 + upperCase2Command.put( "SHAPEFILL" , FILL_SHAPE ) ; // 2023-06-06 + upperCase2Command.put( "WINMOVETO" , WIN_LOCATION ) ; } Modified: sandbox/rgf/jdor/doc/jdor_doc.html =================================================================== --- sandbox/rgf/jdor/doc/jdor_doc.html 2023-06-11 13:32:49 UTC (rev 1065) +++ sandbox/rgf/jdor/doc/jdor_doc.html 2023-06-12 15:56:39 UTC (rev 1066) @@ -1272,9 +1272,28 @@ <em>Graphics[2D]</em> methods from an ooRexx program directly. <br>Cf. the Java documentation for the Java class <em>Graphics[2D]</em>. + <!-- -------------------------------------------------------- --> <tr class="CommandRowColumn"><!-- table row --> <td class="cmdNr"> + <td class="command" id="cmdGetClipboard"> "getClipboard" <br> + "clipboardGet" + <td colspan="2"> Gets the image from the system clipboard, stores it + in the internal image registry with a default <em>imageNickName</em> + of <em>"CLIPBOARD"</em> and returns the image via the Rexx variable + <em>RC</em>. + + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> imageNickName + <td> optional <em>imageNickName</em> gets uppercased and is used to store + the clipboard image in the internal image registry; if omitted <em>JDOR</em> + will use <em>"CLIPBOARD"</em> as the default <em>imageNickName</em> + + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> <td class="command" id="cmdGetState"> "getState" <td colspan="2"> Creates an ooRexx <em>StringTable</em> object, inserts state information and returns it via the Rexx variable <em>RC</em>. The @@ -1840,6 +1859,47 @@ <!-- -------------------------------------------------------- --> <tr class="CommandRowColumn"><!-- table row --> <td class="cmdNr"> + <td class="command" id="cmdSetClipboard"> "setClipboard" <br> + "clipboardSet" + <td colspan="2"> Sets the system clipboard to the current image unless + the optional <em>imageNickName</em> is supplied in which case the image + is retrieved from the internal image registry stored with an index matching + <em>imageNickName</em> in uppercase. The image used to set the system + clipboard gets returned via the Rexx variable <em>RC</em>. + + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> imageNickName + <td> optional <em>imageNickName</em> gets uppercased and is used to retrieve + the image from the internal image registry + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> + <td class="command" id="cmdSetClipboardWithoutAlpha"> "setClipboardWithoutAlpha" <br> + "clipboardSetWithoutAlpha" + <td colspan="2"> Sets the system clipboard to the current image unless + the optional <em>imageNickName</em> is supplied in which case the image + is retrieved from the internal image registry stored with an index matching + <em>imageNickName</em> in uppercase. The image used to set the system + clipboard gets returned via the Rexx variable <em>RC</em>. + + <br>Note: images of type <em>TYPE_4BYTE_ABGR</em> or <em>TYPE_4BYTE_ABGR_PRE</em> are redrawn + on white background on a new image of type <em>TYPE_3BYTE_BGR</em>, + images of type <em>TYPE_INT_ARGB</em> or <em>TYPE_INT_ARGB_PRE</em> are redrawn + on white background on a new image of type <em>TYPE_INT_RGB</em>. + + + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> imageNickName + <td> optional <em>imageNickName</em> gets uppercased and is used to retrieve + the image from the internal image registry + + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> <td class="command" id="cmdShear"> "shear" <td colspan="2"> Queries and optionally changes ("concatenates") the shear (skew) factor for the <em>x</em> and <em>y</em> axis. The command returns the shear values @@ -3145,7 +3205,7 @@ <hr width="75%"> <small> - JDOR synopsis of commands, version: 100.20230609 + JDOR synopsis of commands, version: 100.20230612 <br>Acknowledgement: the author wishes to thank DI Walter Pachl <br>for his help in testing and proof reading </small> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-06-11 13:32:53
|
Revision: 1065 http://sourceforge.net/p/bsf4oorexx/code/1065 Author: orexx Date: 2023-06-11 13:32:49 +0000 (Sun, 11 Jun 2023) Log Message: ----------- 20230611 Make system clipboard accessible. Modified Paths: -------------- branches/850/bsf4oorexx.dev/bin/BSF.CLS branches/850/bsf4oorexx.dev/source_java/BsfSystemClipboard.java Modified: branches/850/bsf4oorexx.dev/bin/BSF.CLS =================================================================== --- branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-06-10 18:47:34 UTC (rev 1064) +++ branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-06-11 13:32:49 UTC (rev 1065) @@ -19,7 +19,10 @@ .BSF in .environment; date: - + 2023-06-11, ---rgf, - new class "BSF.ClipBoard" to allow copying images and strings + to the system clipboard, fetch images and strings, querying + whether empty, the renderings ("DataFlavor"s) available, + clearing (emptying) it 2023-06-10, ---rgf, - rename routine i2x() to id2x() such that one can remember the purpose easily (id=IDentityHash values)and does not confuse "i" with "integer" @@ -945,7 +948,7 @@ if initialize.bsf.dir() then -- setup .bsfrexx do - .bsf4rexx~version="850.20230610" -- set version (date distribution got created) + .bsf4rexx~version="850.20230611" -- set version (date distribution got created) .bsf4rexx~opSys =opsys -- save operating system name as supplied by Rexx' PARSE SOURCE .bsf4rexx~opSys1 =opsys~left(1)~upper -- save operating system name's initial letter in uppercase .bsf4rexx~opSys2 =opsys~left(2)~upper -- save operating system name's first two letters in uppercase @@ -969,6 +972,8 @@ call BSfShowErrorMessage .false -- turn off displaying the Java exception message (leftover from the very early BSF4Rexx days) + .bsf.clipboard~loadPeerClass -- makes sure to load the Java class object BsfSystemClipboard + -- numeric digits 20 -- otherwise d2x may cause an error which is swallowed in destructors (uninit methods), but ends them -- .stderr~say("BSF.CLS - about to leave the PROLOG code, tid="pp(bsfGetTID()) ".bsf.rii_ID="pp(.bsf.rii_ID) ".bsf.primodalTID="pp(.bsf.primodalTID) ".local~identityHash~d2x="pp(.local~identityHash~d2x(16)) ".bsf~identityhash~d2x="pp(.bsf~identityhash~d2x(16)) "<=== "~copies(5)) return @@ -6390,3 +6395,175 @@ ::method charOut unguarded -- implement abstract method + +/* ================================================================================================= */ +/* ================================================================================================= */ + +/* ------------------------------------------------------------------------ */ +/** A class that makes it easy for ooRexx programmers to set the +* system clipboard to a supplied image or string and to fetch +* an image or a string from the clipboard. +* +* @since 20230611 +*/ +::class BSF.ClipBoard public + +-- must be called from prolog code for proper initialisation +/** Package private initialisation class method, loads the Java class +* peer. +*/ +::method loadPeerClass package class -- load the peer Java class now + expose thisClz + thisClz=bsf.loadClass("org.rexxla.bsf.engines.rexx.BsfSystemClipboard") + +/* ------------------------------------------------------------------------ */ +/** Get Java class object representing the system's clipboard. +*@return the Java class object representing the system's clipboard +*/ +::method clipboard class -- allow direct access to the Java class object + expose thisClz + return thisClz + +/* ------------------------------------------------------------------------ */ +/** Inspects the system clipboard. +* @return <em>.true</em>, if empty, <em>.false</em> else +*/ +::method isEmpty class + expose thisClz + return thisClz~isEmpty + +/* ------------------------------------------------------------------------ */ +/* ------------------------------------------------------------------------ */ +/** Getter method for current types available from the system clipboard. +* @return an array of type <em>java.awt.datatransfer.DataFlavor</em>, use the <em>toString</em> +* method on its members +*/ +::attribute dataFlavors get class -- allow access with attribute semantics + forward message (getDataFlavors) + +/* ------------------------------------------------------------------------ */ +/** Getter method for current types available from the system clipboard. +* @return an array of type <em>java.awt.datatransfer.DataFlavor</em>, use the <em>toString</em> +* method on its members +*/ +::method getDataFlavors class + expose thisClz + return thisClz~getDataFlavors + +/* ------------------------------------------------------------------------ */ +/** Clears (empties) the system clipboard. +*/ +::method clear class + expose thisClz + thisClz~clear + +/* ------------------------------------------------------------------------ */ +/* ------------------------------------------------------------------------ */ +/** Setter method to set the system clipboard to the supplied image. +* @param img the image (<em>java.awt.Image</em>) that should be put into the system clipboard +*/ +::attribute image set class + forward message (setImage) + +/* ------------------------------------------------------------------------ */ +/** Setter method to set the system clipboard to the supplied image. +* @param img the image (<em>java.awt.Image</em>) that should be put into the system clipboard +* @param bNoAlpha an optional boolean value, if <em>.true</em> makes sure that the image has no +* trasnlucency (and if so that it is drawn with a white background), defaults +* to <em>.false</em> which may yield image versions on the system clipboard that +* are drawn on a black background +*/ +::method setImage class + expose thisClz + use strict arg img, bNoAlpha=.false + if bNoAlpha=.true then + thisClz~setImageWithoutAlpha(img) + else + thisClz~setImage(img) + +/* ------------------------------------------------------------------------ */ +/** Setter method to set the system clipboard to the supplied image. +* @param img the image (<em>java.awt.Image</em>) that should be put into the system clipboard +* with no alpha (translucency) in the image +*/ +::method setImageWithoutAlpha class + expose thisClz + use strict arg img + self~setImage(img,.true) + +/* ------------------------------------------------------------------------ */ +/** Getter method to fetch an image from the system clipboard. +* @return image fetched from system clipboard or <em>.nil</em> if no image present +*/ +::attribute image get class + forward message (getImage) + +/* ------------------------------------------------------------------------ */ +/** Getter method to fetch an image from the system clipboard. +* @return image fetched from system clipboard or <em>.nil</em> if no image present +*/ +::method getImage class + expose thisClz + return thisClz~getImage + +/* ------------------------------------------------------------------------ */ +/* ------------------------------------------------------------------------ */ +/** Setter method to set the system clipboard to the supplied string. +* <br>Note: if the Rexx string represents characters encoded in UTF-8 (like curl supplies), +* then use the routine "bsf.utf8stringAsJSO(string)" first to have that string +* created on the Java side correctly, fetching the "JSO" object (a Java String object) +* and supply that JSO object as the string value to set the system clipboard to. +* +* @param string the string that should be put into the system clipboard +*/ +::attribute string set class + forward message (setString) + +/* ------------------------------------------------------------------------ */ +/** Setter method to set the system clipboard to the supplied string. +* <br>Note: if the Rexx string represents characters encoded in UTF-8 (like curl supplies), +* then use the routine "bsf.utf8stringAsJSO(string)" first to have that string +* created on the Java side correctly, fetching the "JSO" object (a Java String object) +* and supply that JSO object as the string value to set the system clipboard to. +* +* @param string the string that should be put into the system clipboard +*/ +::method setString class + expose thisClz + use strict arg str + thisClz~setString(str) + +/* ------------------------------------------------------------------------ */ +/** Getter method to fetch a string from the system clipboard. +* <br>Note: this version does not force a specific codepage to be used sucht +* that Java's standard codepage translation takes place. +* +* @return string fetched from system clipboard or <em>.nil</em> if no string present +*/ +::attribute string get class + forward message (getString) + +/* ------------------------------------------------------------------------ */ +/** Getter method to fetch a string from the system clipboard encoded with the specified +* <em>codepage</em> (e.g., "UTF-8"). +* +* @return string fetched from system clipboard encoded according to <em>codepage</em> or +* <em>.nil</em> if no string present +*/ +::method getString class + expose thisClz + use strict arg codepage=.nil + if codepage=.nil then + return thisClz~getString + else + return BsfRawBytes(thisClz~getString(codepage)) + +/* +/* ------------------------------------------------------------------------ */ +::method unknown class -- forward unknown messages to Java class object + expose thisClz + use arg msgName, msgArgs + forward message (msgName) to (thisClz) arguments (msgArgs) +*/ + + Modified: branches/850/bsf4oorexx.dev/source_java/BsfSystemClipboard.java =================================================================== --- branches/850/bsf4oorexx.dev/source_java/BsfSystemClipboard.java 2023-06-10 18:47:34 UTC (rev 1064) +++ branches/850/bsf4oorexx.dev/source_java/BsfSystemClipboard.java 2023-06-11 13:32:49 UTC (rev 1065) @@ -3,11 +3,16 @@ to fetch (get) images and strings author: Rony G. Flatscher date: 2023-06-10 - version: 100.20230610 + version: 100.20230611 + changes: - 20230611, rgf - inhibit ImageIOO.write() stacktrace when setting clipboard + with an image that has alpha (JPG/JPEG filter seems to do that) + - new method setImageWithoutAlpha(img) that will create a bitmap + with white background when image has alpha (translucency) + instead of (unlegible) black background used by ImageIOO.write() + + license: Apache license 2.0 - license: - ------------------------ Apache Version 2.0 license ------------------------- Copyright (C) 2023 Rony G. Flatscher @@ -46,6 +51,10 @@ import java.awt.image.BufferedImage; import java.io.IOException; + +import java.io.ByteArrayOutputStream; // to intercept stack trace by ImageIIO when trying to write JPEG +import java.io.PrintStream; + /** This class employs the <em>java.awt.datatransfer.Clipboard</em> class and allows for * setting (and getting from) the system clipboard Java images (<em>java.awt.Image</em>) * and strings. @@ -55,10 +64,11 @@ */ public class BsfSystemClipboard { + public static final String version = "100.20230611"; private static final Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); - // ------------ - /** Tests whether the system clipboard is empty. + + /** Tests whether the system clipboard is empty (if no data flavors are present). * @return <em>true</em> if empty, <em>false</em> else */ public static boolean isEmpty() @@ -75,9 +85,28 @@ return (tdf==null ? true : tdf.length==0); } - // ------------ - /** Clear (empty) the system clipboard. + /** Returns an array of <em>java.awt.datatransfer.DataFlavor</em>s (formats) + * currently available on the system clipboard. If no data is availalbe the array + * will have a length of <em>0</em> and the method {@link public static boolean isEmpty()} + * will return <em>.true</em>. + * + * @return an array of type <em>java.awt.datatransfer.DataFlavor</em> */ + public static DataFlavor [] getDataFlavors() + { + try + { // array of DataFlavors, if empty, then length==0 + return clipboard.getContents(null).getTransferDataFlavors(); + } + catch (IllegalStateException ise) {} // if clipboard currently unavailable + + return null; + + } + + + /** Clears (empties) the system clipboard. + */ public static void clear() { clipboard.setContents(new ClearClipboardTransferable(), null); @@ -85,7 +114,7 @@ // ------------ // we need to support from Java 8 on, images to clipboard will create a JPG which must - // not have transparency, so making sure to create a JPG compliant bitmap and have the + // not have translucency, so making sure to create a JPG compliant bitmap and have the // background painted white and then set the image on to it. /** This allows a <em>java.awt.Image</em> image to be copied as a JPG/JPEG (!) image to the @@ -92,23 +121,92 @@ * system clipboard. The supplied image will therefore be transformed into a JPG/JPEG (with * a white background). * - * @param img the image to be copied as JPG/JPEG (with white background) to the clipboard + * @see {@link public static void setImage(Image img)} + * @param img the image to be copied (without alpha/translucency on white background) to the clipboard) */ + public static void setImageWithoutAlpha(Image img) + { + BufferedImage bufferedImage=(BufferedImage) img; + int imgType=bufferedImage.getType(); + int tgtType=imgType; + switch (bufferedImage.getType()) // if alpha (translucenct), create non-alpha version + { + case BufferedImage.TYPE_4BYTE_ABGR : + case BufferedImage.TYPE_4BYTE_ABGR_PRE : + tgtType=BufferedImage.TYPE_3BYTE_BGR; + break; + + case BufferedImage.TYPE_INT_ARGB : + case BufferedImage.TYPE_INT_ARGB_PRE : + tgtType=BufferedImage.TYPE_INT_RGB; + break; + } + if (imgType!=tgtType) // o.k., remove alpha, draw on white background + { + // make sure the image data can be written as JPG: write image to a RGB image with white background + BufferedImage jpgImg = new BufferedImage(img.getWidth(null), img.getHeight(null), tgtType); + Graphics2D g2d = jpgImg.createGraphics(); + g2d.setColor(Color.WHITE); // otherwise the background could be black! + g2d.fillRect(0, 0, jpgImg.getWidth(), jpgImg.getHeight()); + g2d.drawImage(img, 0, 0, null); // without an ImageObserver + g2d.dispose(); + setImage(jpgImg); + // clipboard.setContents(new TransferableImage(jpgImg), null); // we do not supply an owner + } + else + { + setImage(img); + } + } + + + // used to intercept the possible stack trace from ImageIOO.write() + // in the case that an image with alpha is rendered to a JPG/JPEG + static ByteArrayOutputStream baos = new ByteArrayOutputStream(2048); + static PrintStream ps = new PrintStream(baos); + /** This copies the received image to the clipboard. + * + * <br>Note 1: if the image has an + * alpha channel there will be a non catchable stack trace created by the default + * ImageIIO writer when creating a JPG/JPEG rendering. In order to intercept + * that stack trace, this method will temporarily reassign System.err to a PrintStream + * that is to receive that output in order to hide it. + * + * <br>Note 2: even if the JPG/JPEG is not created usually a "BITMAP" and a "GDI metafile" + * get created in the Windows clipboard. + * + * <br>Note 3: Use {@link public static void setImageNoAlpha(Image img)} to make + * sure that the image does not have alpha (translucency) such that creating a JPG/JPEG + * is possible in any case. + * + * @see {@link public static void setImageWithoutAlpha(Image img)} + * @param img the image to copy to the clipboard + * + */ public static void setImage(Image img) { - // make sure the image data can be written as JPG: write image to a RGB image with white background - BufferedImage jpgImg = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB); - Graphics2D g2d = jpgImg.createGraphics(); - g2d.setColor(Color.WHITE); // otherwise the background would be black! - g2d.fillRect(0, 0, jpgImg.getWidth(), jpgImg.getHeight()); - g2d.drawImage(img, 0, 0, null); // without an ImageObserver - g2d.dispose(); - clipboard.setContents(new TransferableImage(jpgImg), null); // we do not supply an owner + // when copying an image to the clipboard that has alpha (translucency) the + // JPG/JPEG filter will cause an exception with a stacktrace that gets displayed + // and cannot be intercepted, hence trying to get that stack trace swallowed + PrintStream oldStream = System.err; // save current stream + baos.reset(); // reset byte array output stream + System.setErr(ps); // replace System.err + + try + { + clipboard.setContents(new TransferableImage(img), null); // we do not supply an owner + } + catch (Throwable t) // intercept in case clipboard is not available + {} + System.setErr(oldStream); // reset System.err + baos.reset(); // reset byte array output stream } + + /** Gets an image from the system clipboard and returns it. * - * @return image from the system clipboard or <em>null</em> if none available + * @return image from the system clipboard or <em>null</em> if no image available */ public static Image getImage() { @@ -123,17 +221,24 @@ return null; } - // ------------ + + /** Sets the supplied string to the system clipboard. + * @str the string to put into the system clipboard + */ public static void setString(String str) { clipboard.setContents(new StringSelection(str), null); // we do not supply an owner } + + /** Returns the string currently in the system clipboard. + * + * @return the string currently in the system clipboard, <em>null</em> if no string available + */ public static String getString() { if (clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor)) { -System.err.println("getString(): stringFlavor is available!"); try { return (String) clipboard.getData(DataFlavor.stringFlavor); @@ -143,7 +248,32 @@ return null; } + /** Returns the string currently in the system clipboard as a byte array encoded according to the + * supplied <em>codepage</em>. + * + * *@param codepage the codepage to be used for creating the byte array, if <em>null</em> then defaults to "UTF-8" + * + * @return the string currently in the system clipboard, <em>null</em> if no string available + */ + public static byte[] getString(String codepage) + { + if (clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor)) + { + if (codepage == null) + { + codepage="UTF-8"; // default to UTF-8 encoding + } + try + { + String str = (String) clipboard.getData(DataFlavor.stringFlavor); + return str.getBytes(codepage); // return byte[] encoded according to codepage + } + catch (Exception exc) {} // just return null; + } + return null; + } + /** Allows to transfer an <em>imageFlavor</em> */ static class TransferableImage implements Transferable @@ -180,7 +310,7 @@ // 2023-10-10: https://stackoverflow.com/questions/18254808/how-to-clear-the-system-clipboard-in-java - /** Allows to transfer no content to the clipboard, causing the clipboard to be emptable. + /** Allows to transfer no content to the clipboard, causing the clipboard to be emptied. */ static class ClearClipboardTransferable implements Transferable { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-06-10 18:47:37
|
Revision: 1064 http://sourceforge.net/p/bsf4oorexx/code/1064 Author: orexx Date: 2023-06-10 18:47:34 +0000 (Sat, 10 Jun 2023) Log Message: ----------- 20230610 rename i2c() to id2c() to convey more meaning, add support for system clipboard for images and strings. Modified Paths: -------------- branches/850/bsf4oorexx.dev/bin/BSF.CLS branches/850/bsf4oorexx.dev/cmpj.cmd branches/850/bsf4oorexx.dev/information/jdor/jdor_doc.html Added Paths: ----------- branches/850/bsf4oorexx.dev/source_java/BsfSystemClipboard.java Modified: branches/850/bsf4oorexx.dev/bin/BSF.CLS =================================================================== --- branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-06-09 14:57:18 UTC (rev 1063) +++ branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-06-10 18:47:34 UTC (rev 1064) @@ -20,6 +20,9 @@ date: + 2023-06-10, ---rgf, - rename routine i2x() to id2x() such that one can remember the + purpose easily (id=IDentityHash values)and does not confuse + "i" with "integer" 2023-05-11, ---rgf, - corrected RexxDoc to only use "runLater" and "runLaterLatest" 2023-03-12, ---rgf, - added new public routine "bsf.initRAJinstance" to initialize RexxAndJava peer; allows to be called directly by RexxScriptEngine @@ -942,7 +945,7 @@ if initialize.bsf.dir() then -- setup .bsfrexx do - .bsf4rexx~version="850.20230608" -- set version (date distribution got created) + .bsf4rexx~version="850.20230610" -- set version (date distribution got created) .bsf4rexx~opSys =opsys -- save operating system name as supplied by Rexx' PARSE SOURCE .bsf4rexx~opSys1 =opsys~left(1)~upper -- save operating system name's initial letter in uppercase .bsf4rexx~opSys2 =opsys~left(2)~upper -- save operating system name's first two letters in uppercase @@ -4282,10 +4285,10 @@ DBUS4ooRexx package which mandates UTF-8 strings (and checks them) */ /* ---------------------------------------------------------------------------------------- */ /* as of 2011-07-05 ooRexx from trunk does not support UTF-8, hence depending on BSF4ooRexx */ -/** The received Rexx string is rendered to a Java String object using the 'file.encoding' codepage +/** The received Rexx string is rendered to a Java String object using the <em>file.encoding</em> codepage * and then translated to an UTF-8 encoded Rexx string. * -* @param str the Rexx string encoded according to the 'file.encoding's codepage +* @param str the Rexx string encoded according to the <em>file.encoding</em>'s codepage * @return the equivalent UTF-8-encoded Rexx string * @since 2012-02-11 */ @@ -4296,12 +4299,12 @@ /* ================================================================================================= */ /* ---------------------------------------------------------------------------------------- */ -/** The received Java object's string value is rendered to a Rexx string according to 'file.encoding's +/** The received Java object's string value is rendered to a Rexx string according to <em>file.encoding</em>'s * codepage. * * @param obj the Java String object (JSO) or a Java object which string value is retrieved and worked upon, * or an UTF-8 encoded Rexx string -* @return a Rexx string encoded according to 'file.encoding's codepage +* @return a Rexx string encoded according to <em>file.encoding</em>s codepage * @since 2012-02-11 */ ::routine bsf.utf8ToString public -- needs BSF4ooRexx @@ -4308,7 +4311,7 @@ use arg str if str~isA(.bsf) then -- any Java object, use its String value - return str~toString -- this will do the translation from UTF-8 to file.encoding codepage + return str~toString -- this will do the translation from Java string according to 'file.encoding' codepage else -- a Rexx string? -- turn UTF-8 encoded Rexx string into Java string, recode the Java string using 'file.encoding's codepage and return it as a Rexx string return BsfRawBytes(.java.lang.String~new(bsfRawBytes(str),"UTF-8")~getBytes) @@ -4315,8 +4318,8 @@ /* ================================================================================================= */ /* ---------------------------------------------------------------------------------------- */ -/** The received Rexx string consists of UTF-8 characters for which a Java string object gets -* created and returned, independent of the file.encoding codepage setting. +/** The received Rexx string consists of UTF-8 characters for which a Java string object (JSO) gets +* created and returned, independent of the <em>file.encoding</em> codepage setting. * * @param str the Rexx string consisting of UTF-8 characters * @return a reference to the Java String object constructed from the Rexx string @@ -4330,7 +4333,7 @@ /* ================================================================================================= */ /* ---------------------------------------------------------------------------------------- */ /** The received Java String object (JSO) is rendered as an UTF-8 Rexx string, independent -* of the file.encoding codepage setting. +* of the <em>file.encoding</em> codepage setting. * @param obj the Java String object reference or a Java object which String value is retrieved and worked upon * @return a Rexx UTF-8 encoded string constructed from the Java String object * @since 2014-10-07 @@ -6340,7 +6343,7 @@ @since 2022-09-29 @author Rony G. Flatscher */ -::routine i2x public -- "pointer" to hexadecimal string: vonvert identityHash value to hexadecimal string +::routine id2x public -- "pointer" to hexadecimal string: convert identityHash value to hexadecimal string use strict arg argVal, deliString=("_") iDigits=.rexxinfo~internalDigits -- get number of internal digits @@ -6385,3 +6388,5 @@ ::method say unguarded ::method lineOut unguarded -- implement abstract method ::method charOut unguarded -- implement abstract method + + Modified: branches/850/bsf4oorexx.dev/cmpj.cmd =================================================================== --- branches/850/bsf4oorexx.dev/cmpj.cmd 2023-06-09 14:57:18 UTC (rev 1063) +++ branches/850/bsf4oorexx.dev/cmpj.cmd 2023-06-10 18:47:34 UTC (rev 1064) @@ -107,7 +107,10 @@ @rem 2021-08-04 copy %javaSrc%\RexxCleanupRef.java %path2engine% +@rem 2023-06-10 +copy %javaSrc%\BsfSystemClipboard.java %path2engine% + @rem do the compilations javac %javacDefines% %javaBaseLine% %javaSrc%\InvocationType.java && copy %javaSrc%\InvocationT* %path2engine% @@ -167,7 +170,10 @@ @rem 2022-04-21: needs Java 1.8 due to using Arrays.stream() javac %javacDefines% %javaBaseLine% %javaSrc%\RexxAnalyzeRegistry.java && copy %javaSrc%\RexxAnalyzeRegistry* %path2engine% +@rem 2023-06-10 +javac %javacDefines% %javaBaseLine% %javaSrc%\BsfSystemClipboard.java && copy %javaSrc%\BsfSystemClipboard* %path2engine% + @rem 2022-10-03: adding JDOR command handler @rem directory where "org" resides: %path2root% @rem directory where the class files get placed to: %path2jdor% Modified: branches/850/bsf4oorexx.dev/information/jdor/jdor_doc.html =================================================================== --- branches/850/bsf4oorexx.dev/information/jdor/jdor_doc.html 2023-06-09 14:57:18 UTC (rev 1063) +++ branches/850/bsf4oorexx.dev/information/jdor/jdor_doc.html 2023-06-10 18:47:34 UTC (rev 1064) @@ -31,6 +31,7 @@ 2023-06-05, rgf: - add redirecting subkeywords in overview to address, document Area related commands + 2023-06-09, rgf: - add first line back to sample code (erroneously deleted) --> @@ -177,6 +178,7 @@ <!-- used IntelliJ to copy highlighted text to AOO swriter and saved as html; changed background and font-size (not sure why needed) --> <pre style="background: LemonChiffon; font-size: 75%"> + <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace">jdor<FONT COLOR="#cc3300">=</FONT><FONT COLOR="#000080"><I>.bsf</I></FONT><FONT COLOR="#cc3300">~</FONT>new(<FONT COLOR="#067d17">"org.oorexx.handlers.jdor.JavaDrawingHandler"</FONT>) <FONT COLOR="#8c8c8c"><I>-- create a JDOR handler</I></FONT></FONT></FONT> <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace"><FONT COLOR="#0033b3">call </FONT>BsfCommandHandler <FONT COLOR="#067d17">"add"</FONT>, <FONT COLOR="#067d17">"JDOR"</FONT>, jdor <FONT COLOR="#8c8c8c"><I>-- add the JDOR handler to ooRexx</I></FONT></FONT></FONT> <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace"><FONT COLOR="#0033b3">address </FONT>JDOR <FONT COLOR="#8c8c8c"><I>-- set default environment to the JDOR command handler</I></FONT></FONT></FONT> <FONT COLOR="#8c8c8c"> <FONT FACE="IBM Plex Mono, monospace"><I>-- now we may use JDOR commands, executed by default by the JDOR command handler</I></FONT></FONT> @@ -3143,7 +3145,7 @@ <hr width="75%"> <small> - JDOC synopsis of commands, version: 100.20230608 + JDOR synopsis of commands, version: 100.20230609 <br>Acknowledgement: the author wishes to thank DI Walter Pachl <br>for his help in testing and proof reading </small> Added: branches/850/bsf4oorexx.dev/source_java/BsfSystemClipboard.java =================================================================== --- branches/850/bsf4oorexx.dev/source_java/BsfSystemClipboard.java (rev 0) +++ branches/850/bsf4oorexx.dev/source_java/BsfSystemClipboard.java 2023-06-10 18:47:34 UTC (rev 1064) @@ -0,0 +1,207 @@ +/* + purpose: allow for using the system clipboard to set images and strings and + to fetch (get) images and strings + author: Rony G. Flatscher + date: 2023-06-10 + version: 100.20230610 + license: Apache license 2.0 + + license: + + ------------------------ Apache Version 2.0 license ------------------------- + Copyright (C) 2023 Rony G. Flatscher + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ----------------------------------------------------------------------------- +*/ +// we just support Image and String + +// cf. <https://stackoverflow.com/questions/4552045/copy-bufferedimage-to-clipboard>, 2023-06-10 +// <https://stackoverflow.com/questions/18254808/how-to-clear-the-system-clipboard-in-java>, 2023-10-10 + +// (further reading, e.g.: +// awt vs. FX clipboard, cf. <https://gist.github.com/TurekBot/f639f327747e7f76639a806333756d30> (2023-06-10) ) + +package org.rexxla.bsf.engines.rexx; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.StringSelection; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.awt.image.BufferedImage; +import java.io.IOException; + +/** This class employs the <em>java.awt.datatransfer.Clipboard</em> class and allows for + * setting (and getting from) the system clipboard Java images (<em>java.awt.Image</em>) + * and strings. + * + * @since 2023-06-10 + * @author Rony G. Flatscher + */ +public class BsfSystemClipboard +{ + private static final Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + + // ------------ + /** Tests whether the system clipboard is empty. + * @return <em>true</em> if empty, <em>false</em> else + */ + public static boolean isEmpty() + { + Transferable t=null; + DataFlavor tdf[]=null; + try + { + t =clipboard.getContents(null); + tdf=t.getTransferDataFlavors(); // array of DataFlavors, if empty, then length==0 + } + catch (IllegalStateException ise) {} // if clipboard currently unavailable + + return (tdf==null ? true : tdf.length==0); + } + + // ------------ + /** Clear (empty) the system clipboard. + */ + public static void clear() + { + clipboard.setContents(new ClearClipboardTransferable(), null); + } + + // ------------ + // we need to support from Java 8 on, images to clipboard will create a JPG which must + // not have transparency, so making sure to create a JPG compliant bitmap and have the + // background painted white and then set the image on to it. + + /** This allows a <em>java.awt.Image</em> image to be copied as a JPG/JPEG (!) image to the + * system clipboard. The supplied image will therefore be transformed into a JPG/JPEG (with + * a white background). + * + * @param img the image to be copied as JPG/JPEG (with white background) to the clipboard + */ + public static void setImage(Image img) + { + // make sure the image data can be written as JPG: write image to a RGB image with white background + BufferedImage jpgImg = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB); + Graphics2D g2d = jpgImg.createGraphics(); + g2d.setColor(Color.WHITE); // otherwise the background would be black! + g2d.fillRect(0, 0, jpgImg.getWidth(), jpgImg.getHeight()); + g2d.drawImage(img, 0, 0, null); // without an ImageObserver + g2d.dispose(); + clipboard.setContents(new TransferableImage(jpgImg), null); // we do not supply an owner + } + + /** Gets an image from the system clipboard and returns it. + * + * @return image from the system clipboard or <em>null</em> if none available + */ + public static Image getImage() + { + if (clipboard.isDataFlavorAvailable(DataFlavor.imageFlavor)) + { + try + { + return (Image) clipboard.getData(DataFlavor.imageFlavor); + } + catch (Exception exc) {} // just return null; + } + return null; + } + + // ------------ + public static void setString(String str) + { + clipboard.setContents(new StringSelection(str), null); // we do not supply an owner + } + + public static String getString() + { + if (clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor)) + { +System.err.println("getString(): stringFlavor is available!"); + try + { + return (String) clipboard.getData(DataFlavor.stringFlavor); + } + catch (Exception exc) {} // just return null; + } + return null; + } + + + /** Allows to transfer an <em>imageFlavor</em> + */ + static class TransferableImage implements Transferable + { + Image img; + public TransferableImage( Image img ) + { + this.img = img; + } + + public Object getTransferData( DataFlavor flavor ) throws UnsupportedFlavorException, IOException + { + if ( img != null && flavor.equals( DataFlavor.imageFlavor ) ) + { + return img; + } + throw new UnsupportedFlavorException( flavor ); + } + + /** Supports <em>imageFlavor</em> only. + * + * @return a <em>DataFlavor</em> array with the single entry <em>DataFlavor.imageFlavor</em> + */ + public DataFlavor[] getTransferDataFlavors() + { + return new DataFlavor[] { DataFlavor.imageFlavor }; + } + + public boolean isDataFlavorSupported( DataFlavor flavor ) + { + return flavor.equals(DataFlavor.imageFlavor); + } + } + + + // 2023-10-10: https://stackoverflow.com/questions/18254808/how-to-clear-the-system-clipboard-in-java + /** Allows to transfer no content to the clipboard, causing the clipboard to be emptable. + */ + static class ClearClipboardTransferable implements Transferable + { + public DataFlavor[] getTransferDataFlavors() + { + return new DataFlavor[0]; + } + + public boolean isDataFlavorSupported(DataFlavor flavor) + { + return false; + } + + public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException + { + throw new UnsupportedFlavorException(flavor); + } + } + +} + + +// further reading, e.g.: +// awt vs. FX clipboard, cf. <https://gist.github.com/TurekBot/f639f327747e7f76639a806333756d30> (2023-06-10) Property changes on: branches/850/bsf4oorexx.dev/source_java/BsfSystemClipboard.java ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-06-09 14:57:26
|
Revision: 1063 http://sourceforge.net/p/bsf4oorexx/code/1063 Author: orexx Date: 2023-06-09 14:57:18 +0000 (Fri, 09 Jun 2023) Log Message: ----------- 20230609 Add mistakingly deleted first line in demo program. Modified Paths: -------------- sandbox/rgf/jdor/doc/jdor_doc.html Modified: sandbox/rgf/jdor/doc/jdor_doc.html =================================================================== --- sandbox/rgf/jdor/doc/jdor_doc.html 2023-06-08 17:57:06 UTC (rev 1062) +++ sandbox/rgf/jdor/doc/jdor_doc.html 2023-06-09 14:57:18 UTC (rev 1063) @@ -31,6 +31,7 @@ 2023-06-05, rgf: - add redirecting subkeywords in overview to address, document Area related commands + 2023-06-09, rgf: - add first line back to sample code (erroneously deleted) --> @@ -177,6 +178,7 @@ <!-- used IntelliJ to copy highlighted text to AOO swriter and saved as html; changed background and font-size (not sure why needed) --> <pre style="background: LemonChiffon; font-size: 75%"> + <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace">jdor<FONT COLOR="#cc3300">=</FONT><FONT COLOR="#000080"><I>.bsf</I></FONT><FONT COLOR="#cc3300">~</FONT>new(<FONT COLOR="#067d17">"org.oorexx.handlers.jdor.JavaDrawingHandler"</FONT>) <FONT COLOR="#8c8c8c"><I>-- create a JDOR handler</I></FONT></FONT></FONT> <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace"><FONT COLOR="#0033b3">call </FONT>BsfCommandHandler <FONT COLOR="#067d17">"add"</FONT>, <FONT COLOR="#067d17">"JDOR"</FONT>, jdor <FONT COLOR="#8c8c8c"><I>-- add the JDOR handler to ooRexx</I></FONT></FONT></FONT> <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace"><FONT COLOR="#0033b3">address </FONT>JDOR <FONT COLOR="#8c8c8c"><I>-- set default environment to the JDOR command handler</I></FONT></FONT></FONT> <FONT COLOR="#8c8c8c"> <FONT FACE="IBM Plex Mono, monospace"><I>-- now we may use JDOR commands, executed by default by the JDOR command handler</I></FONT></FONT> @@ -3143,7 +3145,7 @@ <hr width="75%"> <small> - JDOC synopsis of commands, version: 100.20230608 + JDOR synopsis of commands, version: 100.20230609 <br>Acknowledgement: the author wishes to thank DI Walter Pachl <br>for his help in testing and proof reading </small> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <or...@us...> - 2023-06-08 17:57:11
|
Revision: 1062 http://sourceforge.net/p/bsf4oorexx/code/1062 Author: orexx Date: 2023-06-08 17:57:06 +0000 (Thu, 08 Jun 2023) Log Message: ----------- 20230608 Version as distributed via BSF4ooRexx_install_v850-20230608-beta.zip Modified Paths: -------------- branches/850/bsf4oorexx.dev/bin/BSF.CLS branches/850/bsf4oorexx.dev/information/jdor/jdor_doc.html branches/850/bsf4oorexx.dev/information/jdor/jdor_doc_sample.png branches/850/bsf4oorexx.dev/source_cc/BSF4ooRexx.cc branches/850/bsf4oorexx.dev/source_cc/lib/BSF4ooRexx850.dll-64-amd64 branches/850/bsf4oorexx.dev/source_java/JavaDrawingHandler.java branches/850/bsf4oorexx.dev/source_java/RexxAndJava$1.class branches/850/bsf4oorexx.dev/source_java/RexxAndJava$2.class branches/850/bsf4oorexx.dev/source_java/RexxAndJava$ExitDelayed.class branches/850/bsf4oorexx.dev/source_java/RexxAndJava$RAJBean.class branches/850/bsf4oorexx.dev/source_java/RexxAndJava$SyncPutGet.class branches/850/bsf4oorexx.dev/source_java/RexxAndJava.class branches/850/bsf4oorexx.dev/source_java/RexxEngine.class branches/850/bsf4oorexx.dev/source_java/RexxScriptEngine$RexxAnnotation$RexxAnnotationEnum.class branches/850/bsf4oorexx.dev/source_java/RexxScriptEngine$RexxAnnotation.class branches/850/bsf4oorexx.dev/source_java/RexxScriptEngine.class branches/850/createDistributionForBSF4ooRexx8.cmd branches/850/org/rexxla/bsf/engines/rexx/RexxAndJava$1.class branches/850/org/rexxla/bsf/engines/rexx/RexxAndJava$2.class branches/850/org/rexxla/bsf/engines/rexx/RexxAndJava$ExitDelayed.class branches/850/org/rexxla/bsf/engines/rexx/RexxAndJava$RAJBean.class branches/850/org/rexxla/bsf/engines/rexx/RexxAndJava$SyncPutGet.class branches/850/org/rexxla/bsf/engines/rexx/RexxAndJava.class branches/850/org/rexxla/bsf/engines/rexx/RexxAndJava.java branches/850/org/rexxla/bsf/engines/rexx/RexxEngine.class branches/850/org/rexxla/bsf/engines/rexx/RexxEngine.java branches/850/samples/1-120_JDOR_bw.rxj branches/850/samples/1-120_JDOR_color_text.rxj branches/850/samples/1-130_JDOR_rotate.rxj branches/850/samples/1-140_JDOR_images.rxj branches/850/samples/1-140_JDOR_images_reversed.rxj branches/850/samples/1-150_JDOR_string_circle.rxj branches/850/samples/1-160_JDOR_getState.rxj branches/850/samples/1-170_JDOR_lineHeight.rxj branches/850/samples/1-180_JDOR_sandGlass.rxj branches/850/samples/1-180_JDOR_sandGlass_float_colors.rxj branches/850/samples/1-180_JDOR_sandGlass_log.rxj branches/850/samples/1-180_JDOR_sandGlass_replay_log.rxj branches/850/samples/2-110_JDOR_listShowPrintFonts.rxj branches/850/samples/2-130_JDOR_animate_two_frames.rxj branches/850/samples/3-100_create_bitmap_JDOR_commands.rxj branches/850/samples/3-110_JDOR_animate_composite.rxj branches/850/samples/index.html branches/850/samples/jdor.cls Added Paths: ----------- branches/850/samples/1-190_JDOR_shapes.rxj branches/850/samples/1-210_JDOR_area_cag.rxj branches/850/samples/1-220_JDOR_area_cag.rxj branches/850/samples/jdor.rxj Removed Paths: ------------- branches/850/samples/runJDORcommands.rxj Modified: branches/850/bsf4oorexx.dev/bin/BSF.CLS =================================================================== --- branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-06-08 17:56:35 UTC (rev 1061) +++ branches/850/bsf4oorexx.dev/bin/BSF.CLS 2023-06-08 17:57:06 UTC (rev 1062) @@ -19,6 +19,8 @@ .BSF in .environment; date: + + 2023-05-11, ---rgf, - corrected RexxDoc to only use "runLater" and "runLaterLatest" 2023-03-12, ---rgf, - added new public routine "bsf.initRAJinstance" to initialize RexxAndJava peer; allows to be called directly by RexxScriptEngine (ooRexx will not run prolog of re-required BSF.CLS, hence need to @@ -837,7 +839,7 @@ BSF_ARRAY_PROXY: MAKEARRAY and SUPPLIER now only return entries with values as does Object Rexx with native arrays) - version: 8.50 (20230412) -- "6" -> Java minimum level "1.6/6.0", 41 -> ooRexx minimum level "4.1" + version: 8.50 (20230608) -- "6" -> Java minimum level "1.6/6.0", 41 -> ooRexx minimum level "4.1" If this program is part of a distribution of an Apache foundation project (e.g. BSF, the Bean Scripting Framework), then the immediately following Apache foundation license @@ -940,7 +942,7 @@ if initialize.bsf.dir() then -- setup .bsfrexx do - .bsf4rexx~version="850.20230412" -- set version (date distribution got created) + .bsf4rexx~version="850.20230608" -- set version (date distribution got created) .bsf4rexx~opSys =opsys -- save operating system name as supplied by Rexx' PARSE SOURCE .bsf4rexx~opSys1 =opsys~left(1)~upper -- save operating system name's initial letter in uppercase .bsf4rexx~opSys2 =opsys~left(2)~upper -- save operating system name's first two letters in uppercase @@ -5488,7 +5490,7 @@ interact with the GUI and the elements. However, if Rexx code on a non-GUI-thread wishes to interact with the GUI, this would hang the GUI (single threaded implementations are typical for GUIs). Rather, such an interaction must occur on the GUI thread. - <p>The class methods <code>fxRunLater</code> and <code>fxRunLaterLatest</code> allow + <p>The class methods <code>runLater</code> and <code>runLaterLatest</code> allow Rexx programmers to send Rexx messages later, when running in the GUI thread. @since 2017-08-14 @@ -5827,7 +5829,7 @@ interact with the GUI and the elements. However, if Rexx code on a non-GUI-thread wishes to interact with the GUI, this would hang the GUI (single threaded implementations are typical for GUIs). Rather, such an interaction must occur on the GUI thread. - <p>The class methods <code>fxRunLater</code> and <code>fxRunLaterLatest</code> allow + <p>The class methods <code>runLater</code> and <code>runLaterLatest</code> allow Rexx programmers to send Rexx messages later, when running in the GUI thread. @since 2017-08-05 @@ -5887,7 +5889,7 @@ interact with the GUI and the elements. However, if Rexx code on a non-GUI-thread wishes to interact with the GUI, this would hang the GUI (single threaded implementations are typical for GUIs). Rather, such an interaction must occur on the GUI thread. - <p>The class methods <code>awtRunLater</code> and <code>awtRunLaterLatest</code> allow + <p>The class methods <code>runLater</code> and <code>runLaterLatest</code> allow Rexx programmers to send Rexx messages later, when running in the GUI thread. @since 2018-07-14 Modified: branches/850/bsf4oorexx.dev/information/jdor/jdor_doc.html =================================================================== --- branches/850/bsf4oorexx.dev/information/jdor/jdor_doc.html 2023-06-08 17:56:35 UTC (rev 1061) +++ branches/850/bsf4oorexx.dev/information/jdor/jdor_doc.html 2023-06-08 17:57:06 UTC (rev 1062) @@ -28,6 +28,9 @@ - start to add the documentation for shapes and affinity transform commands 2023-01-09, rgf: - completing documentation (new sections for Shapes, Path2D) + + 2023-06-05, rgf: - add redirecting subkeywords in overview to address, + document Area related commands --> @@ -174,8 +177,9 @@ <!-- used IntelliJ to copy highlighted text to AOO swriter and saved as html; changed background and font-size (not sure why needed) --> <pre style="background: LemonChiffon; font-size: 75%"> - <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace"><FONT COLOR="#0033b3">call </FONT>addJdorHandler <FONT COLOR="#8c8c8c"><I>-- load and add the Java Rexx command handler, default name: JDOR</I></FONT></FONT></FONT> - <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace"><FONT COLOR="#0033b3">address </FONT>jdor <FONT COLOR="#8c8c8c"><I>-- set default environment to the JDOR command handler</I></FONT></FONT></FONT> + <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace"><FONT COLOR="#0033b3">call </FONT>BsfCommandHandler <FONT COLOR="#067d17">"add"</FONT>, <FONT COLOR="#067d17">"JDOR"</FONT>, jdor <FONT COLOR="#8c8c8c"><I>-- add the JDOR handler to ooRexx</I></FONT></FONT></FONT> + <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace"><FONT COLOR="#0033b3">address </FONT>JDOR <FONT COLOR="#8c8c8c"><I>-- set default environment to the JDOR command handler</I></FONT></FONT></FONT> + <FONT COLOR="#8c8c8c"> <FONT FACE="IBM Plex Mono, monospace"><I>-- now we may use JDOR commands, executed by default by the JDOR command handler</I></FONT></FONT> <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace">width <FONT COLOR="#cc3300">=</FONT><FONT COLOR="#1750eb">220 </FONT><FONT COLOR="#8c8c8c"><I>-- define width of image in pixels (there are 72 px to an inch)</I></FONT></FONT></FONT> <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace">height<FONT COLOR="#cc3300">=</FONT><FONT COLOR="#1750eb">250 </FONT><FONT COLOR="#8c8c8c"><I>-- define height of image in pixels (there are 72 px to an inch)</I></FONT></FONT></FONT> <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace">newImage width height <FONT COLOR="#8c8c8c"><I>-- create new bitmap with currX=0, currY=0, width=220, height=250</I></FONT></FONT></FONT> @@ -208,7 +212,7 @@ <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace"><FONT COLOR="#0033b3">do counter </FONT>c i<FONT COLOR="#cc3300">=</FONT><FONT COLOR="#1750eb">0 </FONT><FONT COLOR="#0033b3">to </FONT><FONT COLOR="#1750eb">30 </FONT><FONT COLOR="#0033b3">by </FONT>lineHeight <FONT COLOR="#8c8c8c"><I>-- iterate over array of strings</I></FONT></FONT></FONT> <FONT COLOR="#080808"><FONT COLOR="#8c8c8c"> </FONT><FONT FACE="IBM Plex Mono, monospace">s</FONT><FONT COLOR="#cc3300"><FONT FACE="IBM Plex Mono, monospace">=</FONT></FONT><FONT FACE="IBM Plex Mono, monospace">text[c] </FONT><FONT COLOR="#8c8c8c"><FONT FACE="IBM Plex Mono, monospace"><I>-- fetch the string to draw from array</I></FONT></FONT></FONT> <FONT COLOR="#080808"><FONT COLOR="#8c8c8c"> </FONT><FONT FACE="IBM Plex Mono, monospace">stringBounds s </FONT><FONT COLOR="#8c8c8c"><FONT FACE="IBM Plex Mono, monospace"><I>-- get the bounding box dimensions for this string</I></FONT></FONT></FONT> - <FONT COLOR="#080808"><FONT COLOR="#8c8c8c"> </FONT><FONT COLOR="#0033b3"><FONT FACE="IBM Plex Mono, monospace">parse var </FONT></FONT><FONT FACE="IBM Plex Mono, monospace">rc . . w . </FONT><FONT COLOR="#8c8c8c"><FONT FACE="IBM Plex Mono, monospace"><I>-- parse the width of the string's bounding box</I></FONT></FONT></FONT> + <FONT COLOR="#080808"><FONT COLOR="#8c8c8c"> </FONT><FONT COLOR="#0033b3"><FONT FACE="IBM Plex Mono, monospace">parse var </FONT></FONT><FONT FACE="IBM Plex Mono, monospace">rc </FONT><FONT COLOR="#0033b3"><FONT FACE="IBM Plex Mono, monospace">. . </FONT></FONT><FONT FACE="IBM Plex Mono, monospace">w </FONT><FONT COLOR="#0033b3"><FONT FACE="IBM Plex Mono, monospace">. </FONT></FONT><FONT COLOR="#8c8c8c"><FONT FACE="IBM Plex Mono, monospace"><I>-- parse the width of the string's bounding box</I></FONT></FONT></FONT> <FONT COLOR="#080808"><FONT COLOR="#8c8c8c"> </FONT><FONT FACE="IBM Plex Mono, monospace">moveTo (width</FONT><FONT COLOR="#cc3300"><FONT FACE="IBM Plex Mono, monospace">-</FONT></FONT><FONT FACE="IBM Plex Mono, monospace">w)</FONT><FONT COLOR="#cc3300"><FONT FACE="IBM Plex Mono, monospace">/</FONT></FONT><FONT COLOR="#1750eb"><FONT FACE="IBM Plex Mono, monospace">2 </FONT></FONT><FONT FACE="IBM Plex Mono, monospace">(newY</FONT><FONT COLOR="#cc3300"><FONT FACE="IBM Plex Mono, monospace">+</FONT></FONT><FONT FACE="IBM Plex Mono, monospace">i) </FONT><FONT COLOR="#8c8c8c"><FONT FACE="IBM Plex Mono, monospace"><I>-- calc x position to center this string, set y position</I></FONT></FONT></FONT> <FONT COLOR="#080808"><FONT COLOR="#8c8c8c"> </FONT><FONT FACE="IBM Plex Mono, monospace">color clrs[c] </FONT><FONT COLOR="#8c8c8c"><FONT FACE="IBM Plex Mono, monospace"><I>-- fetch and use the color from the array</I></FONT></FONT></FONT> <FONT COLOR="#080808"><FONT COLOR="#8c8c8c"> </FONT><FONT FACE="IBM Plex Mono, monospace">drawString s </FONT><FONT COLOR="#8c8c8c"><FONT FACE="IBM Plex Mono, monospace"><I>-- draw the string</I></FONT></FONT></FONT> @@ -216,7 +220,8 @@ <FONT COLOR="#080808"><FONT COLOR="#0033b3"> </FONT><FONT COLOR="#8c8c8c"><FONT FACE="IBM Plex Mono, monospace"><I>-- save the current image</I></FONT></FONT></FONT> <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace">saveImage <FONT COLOR="#067d17">"jdor_doc_sample.png" </FONT><FONT COLOR="#8c8c8c"><I>-- save image to file "jdor_doc_sample.png"</I></FONT></FONT></FONT> <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace">sleep <FONT COLOR="#1750eb">3.123 </FONT><FONT COLOR="#8c8c8c"><I>-- sleep for 3.123 seconds</I></FONT></FONT></FONT> - <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace"><FONT COLOR="#0033b3">::requires </FONT><FONT COLOR="#067d17">"jdor.cls" </FONT><FONT COLOR="#8c8c8c"><I>-- Rexx package that defines the public routine addJdorHandler()</I></FONT></FONT></FONT> + + <FONT COLOR="#080808"><FONT FACE="IBM Plex Mono, monospace"><FONT COLOR="#0033b3">::requires </FONT><FONT COLOR="#067d17">"BSF.CLS" </FONT><FONT COLOR="#8c8c8c"><I>-- get ooRexx-Java bridge, contains JDOR Rexx command handler</I></FONT></FONT></FONT> </PRE> @@ -260,11 +265,17 @@ (i.e., its <em>WITH</em> subkeyword with the redirection definitions) has the following effects: <ul> <li>redirecting <em>INPUT</em>: all commands are taken and processed from the redirected - input. - <br><em>Note:</em> you need to supply at least one command (e.g. a comment command like + input, e.g., from the <em>.input</em> monitor (defaults to the <em>.stdin</em> stream): + + <br><em>Hint</em>: to activate output of executed JDOR commands in canonized form one + can redirect like this: + + <pre>ADDRESS JDOR WITH using input (.input) /* activate input redirection */ </pre> + + <em>Note:</em> you need to supply at least one command (e.g. a comment command like <code><em>"-- some comment"</code></em>) to the command handler such that it gets invoked and becomes able to note that input is redirected, such - that it takes the commands from the redirected input. + that it takes the commands from the redirected input.<p> <li>redirecting <em>OUTPUT</em>: all processed commands will be put into the output target in canonical form, thereby standardizing the names and arguments of the commands. The @@ -275,11 +286,18 @@ a comment with information about the error or failure (in this case supplying more detailed information, like the exact location). + <br><em>Hint</em>: to activate output of executed JDOR commands in canonized form + one can redirect like this (the <em>.output</em> monitor defaults to the <em>.stdout</em> + stream): + + <pre>ADDRESS JDOR WITH using output (.output) /* activate error redirection */ </pre> + <li>redirecting <em>ERROR</em>: all commands causing an error or failure condition will supplied together with the kind of error or failure. In the case of a failure more detailed information gets supplied, like the exact location. <br><em>Hint</em>: while developing or changing <em>JDOR</em> programs one can get - the detailed error and failure information by redirecting like this: + the detailed error and failure information by redirecting like this (the <em>.error</em> + monitor defaults to the <em>.stderr</em> stream): <pre>ADDRESS JDOR WITH using error (.error) /* activate error redirection */ </pre> @@ -289,9 +307,11 @@ indicates a failure and <em>1</em> indicates an error). <br>Once all errors and failures got fixed, the production code may then remove error redirection by changing the above redirection statetement to: - <pre>ADDRESS JDOR /* all unqualified commands should go to this handler */ </pre> + <pre>ADDRESS JDOR /* all unqualified commands should go to this handler */<pre/> </ul> +<p>The <em>ADDRESS</em> keyword instruction is documented in the ooRexx reference book +(<em>rexxref.pdf</em>) in <em>"Chapter 2. Keyword Instructions"</em>, section <em>"2.1 ADDRESS"</em>). <p>To Rexx programmers the following <em>JDOR</em> related materials may be helpful: @@ -396,6 +416,8 @@ and then submitting the quoted name of the Rexx variable, e.g., <em>"dashArray"</em>, as array argument; the command handler will then fetch the array from the Rexx variable (after fetching the Rexx variable by name from the command context). + <br><em>Note</em>: if output is redirected the executed JDOR command will use + the string representation in the canonized form. </ul> </dd> @@ -487,6 +509,8 @@ and then submitting the quoted name of the Rexx variable, e.g. <em>"xPoints"</em>, as array argument; the command handler will then fetch the array from the Rexx variable (after fetching the Rexx variable by name from the command context) + <br><em>Note</em>: if output is redirected the executed JDOR command will use + the string representation in the canonized form. </ul> </dd> @@ -536,10 +560,112 @@ <th> Argument(s) <th> Description + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> + <td class="command" id="cmdAreaAdd"> "areaAdd" + <br> "areaUnion" + <td colspan="3"> The <em>constructive area geometry (CAG)</em> "<em>add</em>" + operation, cf. <a href="https://docs.oracle.com/javase/tutorial/2d/advanced/complexshapes.html" target="_blank">Constructing + Complex Shapes from Geometry Primitives</a>. + The <em>shapeNickName</em> argument gets uppercased and used to look it up + in the shape registry or if not found from a Rexx variable of the same name + and uses that shape instead. + + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> areaNickName shapeNickName + <td><em>areaNickName</em> the registered area shape that will be changed by adding the area of the + <em>shapeNickName</em> as the argument. If <em>shapeNickName</em> is not yet of type + <a href="https://google.com/search?q=javadoc+8+Area" target="_blank"><em>java.awt.geom.Area</em></a> + then an <em>Area</em> gets created from it and used as the argument. + <!-- -------------------------------------------------------- --> <tr class="CommandRowColumn"><!-- table row --> <td class="cmdNr"> + <td class="command" id="cmdAreaExclusiveOr"> "areaExclusiveOr" + <br> "areaXor" + <td colspan="3"> The <em>constructive area geometry (CAG)</em> "<em>exclusiveOr</em>" + operation, cf. <a href="https://docs.oracle.com/javase/tutorial/2d/advanced/complexshapes.html" target="_blank">Constructing + Complex Shapes from Geometry Primitives</a>. + + The <em>shapeNickName</em> argument gets uppercased and used to look it up + in the shape registry or if not found from a Rexx variable of the same name + and uses that shape instead. + + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> areaNickName shapeNickName + <td><em>areaNickName</em> the registered area shape that will be changed by applying the <em>exclusiveOr</em> + operation using the area of the <em>shapeNickName</em> as the argument. If <em>shapeNickName</em> + is not yet of type + <a href="https://google.com/search?q=javadoc+8+Area" target="_blank"><em>java.awt.geom.Area</em></a> + then an <em>Area</em> gets created from it and used as the argument. + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> + <td class="command" id="cmdAreaIntersect"> "areaIntersect" + <td colspan="3"> The <em>constructive area geometry (CAG)</em> "<em>intersect</em>" + operation, cf. <a href="https://docs.oracle.com/javase/tutorial/2d/advanced/complexshapes.html" target="_blank">Constructing + Complex Shapes from Geometry Primitives</a>. + + The <em>shapeNickName</em> argument gets uppercased and used to look it up + in the shape registry or if not found from a Rexx variable of the same name + and uses that shape instead. + + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> areaNickName shapeNickName + <td><em>areaNickName</em> the registered area shape that will be changed by applying the <em>intersect</em> + operation using the area of the <em>shapeNickName</em> as argument. If <em>shapeNickName</em> + is not yet of type + <a href="https://google.com/search?q=javadoc+8+Area" target="_blank"><em>java.awt.geom.Area</em></a> + then an <em>Area</em> gets created from it and used as the argument. + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> + <td class="command" id="cmdAreaSubtract"> "areaSubtract" + <td colspan="3"> The <em>constructive area geometry (CAG)</em> "<em>subtract</em>" + operation, cf. <a href="https://docs.oracle.com/javase/tutorial/2d/advanced/complexshapes.html" target="_blank">Constructing + Complex Shapes from Geometry Primitives</a>. + + The <em>shapeNickName</em> argument gets uppercased and used to look it up + in the shape registry or if not found from a Rexx variable of the same name + and uses that shape instead. + + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> areaNickName shapeNickName + <td><em>areaNickName</em> the registered area shape that will be changed by applying the <em>subtract</em> + operation using the area of the <em>shapeNickName</em> as argument. If <em>shapeNickName</em> + is not yet of type + <a href="https://google.com/search?q=javadoc+8+Area" target="_blank"><em>java.awt.geom.Area</em></a> + then an <em>Area</em> gets created from it and used as the argument. + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> + <td class="command" id="cmdAreaTransform"> "areaTransform" + <td colspan="3"> Transforms the area shape. + + The <em>transformNickName</em> argument gets uppercased and used to look it up + in the transform registry or if not found from a Rexx variable of the same name + and uses that transform (an AffinityTransform) instead. + + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> areaNickName transformNickName + <td> + Transforms the area shape stored under the <em>areaNickName</em> and applies the + transform stored under the <a href="#cmdTransform"><em>transformNickName</em></a> to it. + + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> <td class="command" id="cmdAssignRC"> "assignRC" <td colspan="3"> Allows to assign the current value of the Rexx variable <em>RC</em> (set when a command returns a value) to a Rexx variable with the supplied name. @@ -2027,6 +2153,32 @@ <!-- -------------------------------------------------------- --> <tr class="CommandRowColumn"><!-- table row --> <td class="cmdNr"> + <td class="command"> "winResizable" + <td colspan="2"> Queries and optionally sets the value. If set to <em>.true</em>, the frame (window) + that displays the current image can be resized, by default this property is set to <em>.false</em>. + + <br>Querying the current value (no argument supplied) will return it, setting + (changing) the value to a new value will return the old (previously set) value + via the Rexx variable <em>RC</em>. + + <br>Cf. the Java documentation for the Java class <em>java.awt.Frame</em> and the + method <em>setResizable(...)</em></em>. + + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> booleanValue + <td> optional <em>booleanValue</em> can be one of + <em>1</em>, + <em>".true"</em>, + <em>"true"</em>, + <em>0</em>, + <em>".false"</em> or + <em>"false"</em>. + + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> <td class="command"> "winScreenSize" <td colspan="2"> Returns the blank delimited values of the current screen's <em>width</em> and <em>height</em> in pixels via the Rexx variable <em>RC</em> @@ -2188,6 +2340,7 @@ filling shapes and drawing shapes: <ul> + <li><a href="https://google.com/search?q=javadoc+8+Area" target="_blank"><em>java.awt.geom.Area</em></a> <li><a href="https://google.com/search?q=javadoc+8+Arc2D" target="_blank"><em>java.awt.geom.Arc2D</em></a> <li><a href="https://google.com/search?q=javadoc+8+CubicCurve2D" target="_blank"><em>java.awt.geom.CubicCurve2D</em></a> <li><a href="https://google.com/search?q=javadoc+8+Ellipse2D" target="_blank"><em>java.awt.geom.Ellipse2D</em></a> @@ -2212,22 +2365,33 @@ <ul> <li><a href="#cmdShape"><em>shape</em></a> (can be used to create one of the following shapes: - <em>Arc2D</em>, <em>CubicCurve2D</em>, + <em>Area</em>, <em>Arc2D</em>, <em>CubicCurve2D</em>, <em>Ellipse2D</em>, <em>Line2D</em>, <em>Path2D</em>, <em>QuadCurve2D</em>, <em>Rectangle2D</em>, <em>RoundRectangle2D</em>) - <li><a href="#cmdClipShape"><em>clipShape</em></a> - <li><a href="#cmdDrawShape"><em>drawShape</em></a> - <li><a href="#cmdFillShape"><em>fillShape</em></a> + <li><a href="#cmdClipShape"><em>clipShape (shapeClip)</em></a> + <li><a href="#cmdDrawShape"><em>drawShape (shapeDraw)</em></a> + <li><a href="#cmdFillShape"><em>fillShape (shapeFill)</em></a> <li><a href="#cmdPathIterator"><em>pathIterator</em></a> <li><a href="#cmdShapeBounds"><em>shapeBounds</em></a> </ul> -The <em>Path2D</em> specific <em>JDOR</em> Rexx commands are: +The <em>Area</em> shape specific <em>JDOR</em> Rexx commands are: <ul> + <li><a href="#cmdAreaAdd"><em>areaAdd</em></a> + <li><a href="#cmdAreaExclusiveOr"><em>areaExclusiveOr</em></a> + <li><a href="#cmdAreaIntersect"><em>areaIntersect</em></a> + <li><a href="#cmdAreaSubtract"><em>areaSubtract</em></a> + <li><a href="#cmdAreaTransform"><em>areaTransform</em></a> + +</ul> + +The <em>Path2D</em> shape specific <em>JDOR</em> Rexx commands are: + +<ul> <li><a href="#cmdPathAppend"><em>pathAppend</em></a> <li><a href="#cmdPathClone"><em>pathClone</em></a> <li><a href="#cmdPathClose"><em>pathClose</em></a> @@ -2248,7 +2412,7 @@ resulting value will be supplied to the Rexx command handler. <p>If you wish to supply the name of a Rexx variable to a command (e.g. for the command -<a href="#cmdAssingRC"><em>assignRC</em></a>), then make sure to <em>enquote</em> that +<a href="#cmdAssignRC"><em>assignRC</em></a>), then make sure to <em>enquote</em> that variable name as otherwise its value gets supplied instead. <p>Commands need not be enquoted, unless their names collide with Rexx keyword names (which @@ -2306,11 +2470,25 @@ <td> Creates a new <em>Shape</em> of type <em>typeName</em> using <em>args</em> arguments, registers and returns it. <table> - <th>typeName <th>args <th width="60%">Brief Description + <th>typeName <th>arg(s) <th width="60%">Brief Description <!-- ----------------------------------- --> <tr> - <td class="command">Ar | Arc | <a href="https://google.com/search?q=javadoc+8+Arc2D" target="_blank">Arc2D</a> + <td class="command" id="cmdShapeArea"><a href="https://google.com/search?q=javadoc+8+Area" target="_blank">Area</a> + <td class="argument">shapeNickName + <td> + Defines a new area shape for the supplied shape. + Using an area shape as argument will create a new area shape + (effectively a copy). + + <br>All area related commands start with the word <em>area</em>. + + <tr><td colspan="3" style="border: 1px solid black;border-collapse: collapse;"> + + + <!-- ----------------------------------- --> + <tr> + <td class="command">Arc | <a href="https://google.com/search?q=javadoc+8+Arc2D" target="_blank">Arc2D</a> <td class="argument">x y width height start extent type <td> Defines an arc shape at position <em>x</em> and <em>y</em> @@ -2325,7 +2503,7 @@ or a line should get drawn between the starting point, the center point and the ending point of the arc (<em>PIE</em> or <em>2</em>). - <tr><td><td colspan="2" style="border: 1px solid black;border-collapse: collapse;"> + <tr><td colspan="3" style="border: 1px solid black;border-collapse: collapse;"> <!-- ----------------------------------- --> <tr> @@ -2349,7 +2527,7 @@ <!-- ----------------------------------- --> <tr> - <td class="command">Cu | CubicCurve | <a href="https://google.com/search?q=javadoc+8+CubicCurve2D" target="_blank">CubicCurve2D</a> + <td class="command">Cubic | CubicCurve | <a href="https://google.com/search?q=javadoc+8+CubicCurve2D" target="_blank">CubicCurve2D</a> <td class="argument">x1 y1 ctrlx1 ctrly1 ctrlx2 ctrly2 x2 y2 <td> Defines a cubic parametric curve shape between the points <em>x1/y1</em> and <em>x2/y2</em> controlled by the two control points located @@ -2359,7 +2537,7 @@ <!-- ----------------------------------- --> <tr> - <td class="command">El | Ellipse | <a href="https://google.com/search?q=javadoc+8+Ellipse2D" target="_blank">Ellipse2D</a> + <td class="command">Elli | Ellipse | <a href="https://google.com/search?q=javadoc+8+Ellipse2D" target="_blank">Ellipse2D</a> <td class="argument">x y width height <td> Defines an ellipse (oval) shape at position <em>x</em> and <em>y</em> @@ -2371,7 +2549,7 @@ <!-- ----------------------------------- --> <tr> - <td class="command">li | line | <a href="https://google.com/search?q=javadoc+8+Line2D" target="_blank">Line2D</a> + <td class="command">line | <a href="https://google.com/search?q=javadoc+8+Line2D" target="_blank">Line2D</a> <td class="argument">x1 y1 x2 y2 <td> Defines a line shape that will be drawn from position <em>x1/y1</em> to @@ -2381,7 +2559,7 @@ <!-- ----------------------------------- --> <tr> - <td class="command">pa | path | <a href="https://google.com/search?q=javadoc+8+Path2D" target="_blank">Path2D</a> + <td class="command">path | <a href="https://google.com/search?q=javadoc+8+Path2D" target="_blank">Path2D</a> <td class="argument">[rule] <td>Creates a <em>Path2D</em> shape. The optional <em>rule</em> can be either <em>0</em> (<em>WIND_EVEN_ODD</em>) or @@ -2391,7 +2569,7 @@ <!-- ----------------------------------- --> <tr> - <td class="command">po | polygon | <a href="https://google.com/search?q=javadoc+8+Polygon" target="_blank">Polygon</a> + <td class="command"><a href="https://google.com/search?q=javadoc+8+Polygon" target="_blank">Polygon</a> <td class="argument">xPoints-array yPoints-array nPoints <td>Creates a <em>Polygon</em> shape consisting of <em>nPoints</em> taken from the @@ -2406,7 +2584,7 @@ <!-- ----------------------------------- --> <tr> - <td class="command">Qu | QuadCurve | <a href="https://google.com/search?q=javadoc+8+QuadCurve2D" target="_blank">QuadCurve2D</a> + <td class="command">Quad | QuadCurve | <a href="https://google.com/search?q=javadoc+8+QuadCurve2D" target="_blank">QuadCurve2D</a> <td class="argument">x1 y1 ctrlx ctrly x2 y2 <td> Defines a quadratic parametric curve shape between the points <em>x1/y1</em> and <em>x2/y2</em> controlled by the control point located @@ -2416,7 +2594,7 @@ <!-- ----------------------------------- --> <tr> - <td class="command">Re | Rectangle | <a href="https://google.com/search?q=javadoc+8+Rectangle2D" target="_blank">Rectangle2D</a> + <td class="command">Rect | Rectangle | <a href="https://google.com/search?q=javadoc+8+Rectangle2D" target="_blank">Rectangle2D</a> <td class="argument">x y width height <td> Defines a rectangular shape at position <em>x</em> and <em>y</em> @@ -2429,7 +2607,7 @@ <!-- ----------------------------------- --> <tr> - <td class="command">Ro | RoundRectangle | <a href="https://google.com/search?q=javadoc+8+RoundRectangle2D" target="_blank">RoundRectangle2D</a> + <td class="command">RoundRect | RoundRectangle | <a href="https://google.com/search?q=javadoc+8+RoundRectangle2D" target="_blank">RoundRectangle2D</a> <td class="argument">x y width height arcWidth arcHeight <td> Defines a round rectangular shape at position <em>x</em> and <em>y</em> @@ -2742,13 +2920,230 @@ </table> +<p> <!-- rgf 20230603 --> +<p> +<hr width="75%"> +<p> + +<h2 id="h2AreaCommands"><em>Area</em> Related Related commands </h2> +<nav> +<a href="#purposeOfJDOR">Purpose</a> | +<a href="#briefOverview">Brief Overview</a> | +<a href="#synopsisOfJDOR">Synopsis JDOR</a> | +<a href="#jdorShapes">JDOR Shapes</a> (<a href="#h2ShapeCommands">Shapes</a>, <a href="#h2PathCommands">Path2D</a>) +</nav> + +<p>The <em>Area</em> (<a href="https://google.com/search?q=javadoc+8+Area" target="_blank"><em>java.awt.geom.Area</em></a>) + shape allows for creating (closed) areas from any kind of <em>Shape</em> and + allows for applying "Constructive Area Geometry (CAG)" operations. + +<p>Here the <em>JDOR</em> commands that are related to any <em>Area</em> <em>Shape</em>: + <p> + <table> + <tr> + <tr class="TableHeader"> + <th> + <th> Command + <th> Argument(s) + <th> Description + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> + <td class="command" id="cmdPathAppend"> "pathAppend" TODO + <td colspan="3"> The named <em>Path2D</em> shape gets appended by the + named <em>Shape</em> or <em>PathIterator</em>. + + <!-- -------------------------------------- --> + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> pNickName spNickName [connect=.true] + <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> + shape, <em>spNickName</em> either a + <em>Shape</em> or <em>PathIterator</em> that should be appended. + The optional <em>connect</em> argument controls whether + the appended shape should get connected with a line segment (default). + + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> + <td class="command" id="cmdPathClone"> "pathClone" + <td colspan="3"> The named <em>Path2D</em> shape gets cloned and returned. + + <!-- -------------------------------------- --> + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> pNickName [clonedNickName] + <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> + shape, that gets cloned and returned. If the optional <em>cloneNickName</em> + is specified then the clone gets registered with the uppercased + <em>cloneNickName</em> as index. + + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> + <td class="command" id="cmdPathClose"> "pathClose" + <td colspan="3"> The named <em>Path2D</em> shape will have its current segment + closed by drawing a straight line back to the last <em>pathMoveTo</em> position. + + <!-- -------------------------------------- --> + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> pNickName + <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> + shape, of which the last segment gets closed by drawing a line + to the last <em>pathMoveTo</em> position. + + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> + <td class="command" id="cmdPathCurrentPoint"> "pathCurrentPoint" + <td colspan="3"> Returns the current point (the position of the last <em>pathMoveTo</em>) + of the named <em>Path2D</em> shape. + + <!-- -------------------------------------- --> + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> pNickName + <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> + shape, which current point gets returned. + <br> + <em>Note:</em> if no <em>pathMoveTo</em> was issued yet, then <em>.nil</em> + gets returned, otherwise a blank delimited Rexx string in + the form of: "<em>x y</em>". + + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> + <td class="command" id="cmdPathCurveTo"> "pathCurveTo" + <td colspan="3"> Creates a cubic parametric curve segment. + + <!-- -------------------------------------- --> + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> pNickName ctrlx1 ctrly1 ctrlx2 ctrly2 x y + <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> + shape for which a cubic parametric curve segment gets + created between the points <em>currentPoint</em> + (cf. <em>pathCurrentPoint</em> command above) + and the point with the co-ordinate <em>x/y</em> controlled by the two control points located + at <em>ctrlx1/ctrly1</em> and <em>ctrlx2/ctrly2</em>. + + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> + <td class="command" id="cmdPathLineTo"> "pathLineTo" + <td colspan="3"> Creates a line segment. + + <!-- -------------------------------------- --> + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> pNickName x y + <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> + shape for which a line segment gets + created between the points <em>currentPoint</em> + (cf. <em>pathCurrentPoint</em> command above) + and the point with the co-ordinate <em>x/y</em>. + + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> + <td class="command" id="cmdPathMoveTo"> "pathMoveTo" + <td colspan="3"> Adds a point to the path at the supplied position. + + <!-- -------------------------------------- --> + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> pNickName x y + <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> + shape for which a point should get added at <em>x/y</em> + (making it the <em>currentPoint</em>, cf. + <em>pathCurrentPoint</em> command above). + + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> + <td class="command" id="cmdPathQuadTo"> "pathQuadTo" + <td colspan="3"> Creates a quadradic parametric curve segment. + + <!-- -------------------------------------- --> + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> pNickName ctrlx ctrly x y + <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> + shape for which a quadradic parametric curve segment gets + created between the points <em>currentPoint</em> + (cf. <em>pathCurrentPoint</em> command above) + and the point with the co-ordinate <em>x/y</em> controlled by + the control point located at <em>ctrlx/ctrly</em>. + + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> + <td class="command" id="cmdPathReset"> "pathReset" + <td colspan="3"> The named <em>Path2D</em> shape will be reset to + become empty. + + <!-- -------------------------------------- --> + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> pNickName + <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> + shape, which gets reset to become empty. + + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> + <td class="command" id="cmdPathTransform"> "pathTransform" + <td colspan="3"> The named <em>Path2D</em> shape gets transformed. + + <!-- -------------------------------------- --> + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> pNickName tNickName + <td> <em>pNickName</em> denotes the name of a <em>Path2D</em> + shape, that gets transformed as defined by <a href="#cmdTransform"><em>tNickName</em> + (an <em>AffineTransform</em>)</a> retrieved from the registry, and + if does not exist from a Rexx variable by that name. + + + <!-- -------------------------------------------------------- --> + <tr class="CommandRowColumn"><!-- table row --> + <td class="cmdNr"> + <td class="command" id="cmdPathWindingRule"> "pathWindingRule" + <td colspan="3"> Queries or sets the <em>winding rule</em> of the named + <em>Path2D</em> shape. + + <!-- -------------------------------------- --> + <tr class="ArgumentRowColor"><td><!-- table row --> + <td> + <td class="argument"> pNickName [newValue] + <td> Returns or sets the <em>winding rule</em> of the <em>Path2D</em> shape + denoted by <em>pNickName</em>. If <em>newValue</em> is supplied, it + needs to be <em>WIND_EVEN_ODD</em> or <em>0</em>, alternatively + <em>WIND_NON_ZERO</em> or <em>1</em>. + + + </table> + + +<p> <center> <hr width="75%"> <small> - JDOC synopsis of commands, version: 100.20230122 + JDOC synopsis of commands, version: 100.20230608 <br>Acknowledgement: the author wishes to thank DI Walter Pachl <br>for his help in testing and proof reading </small> Modified: branches/850/bsf4oorexx.dev/information/jdor/jdor_doc_sample.png =================================================================== (Binary files differ) Modified: branches/850/bsf4oorexx.dev/source_cc/BSF4ooRexx.cc =================================================================== --- branches/850/bsf4oorexx.dev/source_cc/BSF4ooRexx.cc 2023-06-08 17:56:35 UTC (rev 1061) +++ branches/850/bsf4oorexx.dev/source_cc/BSF4ooRexx.cc 2023-06-08 17:57:06 UTC (rev 1062) @@ -985,9 +985,11 @@ // // #define DEBUG_REXX_PROXY // 2022-08-11, debugging sendMessageScoped(...) // #define DEBUG_REXX_PROXY_BSF -// #define INFO_SEND_MESSAGE_TO_REXX_OBJECT +// #define INFO_SEND_MESSAGE_TO_REXX_OBJECT +// #define DEBUG_SEND_MESSAGE_TO_REXX_OBJECT +// #define DEBUG_JNI +// #define DEBUG_JNI_ENTRY // #define DEBUG_BSF_FUNCTION -// #define DEBUG_SEND_MESSAGE_TO_REXX_OBJECT // #define DEBUG_CREATE_REXX_EXCEPTION // #define DEBUG_COMMAND_HANDLER // 2022-08-20: allow for debugging command handler interactions @@ -9970,6 +9972,10 @@ snprintf( msg, 1024, "%.16s/routine/jniRexxSendMessageToRexxObject(), error 1b: argument messageName is NULL (not supplied from Java)", DLLNAME); } +#if defined(DEBUG_SEND_MESSAGE_TO_REXX_OBJECT) + fprintf(stderr, "//-->// %s %d %s: [%s] \\\\<--\\\\ \n", DLLNAME, __LINE__, __FUNCTION__, msg); fflush(stderr); +#endif + jthrowable j_rexxException=RgfCreateRexxException4Java(env, jobj, NULL, // rtc, NULL, // conditionObject @@ -10023,13 +10029,13 @@ if (instance!=tmpInstance) { - fprintf(stderr, "\n-------------->\n---> arrived in _jniRexxSendMessageToRexxObject(), count=[%8d], tid=[%6lu], rii_ID=[%p] <> rii_ID=[%p] (NOT OK!) | rii_id=[%s]~%s\n", - ++count, (unsigned long) RgfGetTID(), instance, tmpInstance, c_rgf_obj_ID, c_rgf_msg); + fprintf(stderr, "\n-------------->\n---> arrived in _jniRexxSendMessageToRexxObject(), line #=[%d]: count=[%8d], tid=[%6lu], rii_ID=[%p] <> rii_ID=[%p] (NOT OK!) | c_rgf_ojb_ID=[%s]~%s\n", + __LINE__, ++count, (unsigned long) RgfGetTID(), instance, tmpInstance, c_rgf_obj_ID, c_rgf_msg); } else { - fprintf(stderr, "\n-------------->\n---> arrived in _jniRexxSendMessageToRexxObject(), count=[%8d], tid=[%6lu], rii_ID=[%p] | rii_id=[%s]~%s\n", - ++count, (unsigned long) RgfGetTID(), instance, c_rgf_obj_ID, c_rgf_msg ); + fprintf(stderr, "\n-------------->\n---> arrived in _jniRexxSendMessageToRexxObject(), line #=[%d]: count=[%8d], tid=[%6lu], rii_ID=[%p] | c_rgf_ojb_ID=[%s]~%s\n", + __LINE__, ++count, (unsigned long) RgfGetTID(), instance, c_rgf_obj_ID, c_rgf_msg ); } fflush(stderr); @@ -10054,6 +10060,10 @@ char *msg=new char[1024]; snprintf( msg, 1024, "%.16s/routine/jniRexxSendMessageToRexxObject(), error 2: Rexx interpreter instance with the ID '%.256s' could not be found", DLLNAME, c_rii_ID); +#if defined(DEBUG_SEND_MESSAGE_TO_REXX_OBJECT) + fprintf(stderr, "//-->// %s %d %s: [%s] \\\\<--\\\\ \n", DLLNAME, __LINE__, __FUNCTION__, msg); fflush(stderr); +#endif + jthrowable j_rexxException=RgfCreateRexxException4Java(env, jobj, NULL, // rtc, NULL, // conditionObject @@ -10088,6 +10098,10 @@ char *msg=new char[1024]; snprintf(msg, 1024, "%.16s/routine/jniRexxSendMessageToRexxObject(), error 3: could not AttachThread() to Rexx interpreter instance with the ID '%.256s'", DLLNAME, c_rii_ID); +#if defined(DEBUG_SEND_MESSAGE_TO_REXX_OBJECT) + fprintf(stderr, "//-->// %s %d %s: [%s] \\\\<--\\\\ \n", DLLNAME, __LINE__, __FUNCTION__, msg); fflush(stderr); +#endif + jthrowable j_rexxException=RgfCreateRexxException4Java(env, jobj, NULL, // rtc, NULL, // conditionObject @@ -10101,9 +10115,9 @@ return NULL; } -#if defined (INFO_ATTACH_THREAD) // rgf, 2017-08-19 - fprintf(stderr, " ... _jniRexxSendMessageToRexxObject(), count=[%8d], tid=[%6lu], rii_ID=[%p]->AttachThread(): done, rtc=[%p].\n", - count, (unsigned long) RgfGetTID(), instance, rtc ); +#if defined (INFO_ATTACH_THREAD) || defined (DEBUG_SEND_MESSAGE_TO_REXX_OBJECT) + fprintf(stderr, " ... _jniRexxSendMessageToRexxObject(), line #=[%d] count=[%8d], tid=[%6lu], rii_ID=[%p]->AttachThread(): done, rtc=[%p].\n", + __LINE__, count, (unsigned long) RgfGetTID(), instance, rtc ); fflush(stderr); #endif @@ -10234,6 +10248,10 @@ char *msg=new char[1024]; snprintf( msg, 1024, "%.16s/routine/jniRexxSendMessageToRexxObject(), error 4b: argument SCOPE=[%s] does not resolve to an ooRexx class object", DLLNAME, c_scope); +#if defined(DEBUG_SEND_MESSAGE_TO_REXX_OBJECT) + fprintf(stderr, "//-->// %s %d %s: [%s] \\\\<--\\\\ \n", DLLNAME, __LINE__, __FUNCTION__, msg); fflush(stderr); +#endif + jthrowable j_rexxException=RgfCreateRexxException4Java(env, jobj, NULL, // rtc, NULL, // conditionObject @@ -10365,6 +10383,11 @@ { RexxDirectoryObject condObj=rtc->GetConditionInfo(); char * msg=RgfCreateRexxlikeErrorInfo (rtc, condObj, "/routine/jniRexxSendMessageToRexxObject(), error 5"); + +#if defined(DEBUG_SEND_MESSAGE_TO_REXX_OBJECT) + fprintf(stderr, "//-->// %s %d %s: [%s] \\\\<--\\\\ \n", DLLNAME, __LINE__, __FUNCTION__, msg); fflush(stderr); +#endif + jthrowable j_rexxException=RgfCreateRexxException4Java(env, jobj, rtc, // rtc, condObj, // conditionObject @@ -10402,6 +10425,7 @@ #if defined(DEBUG_JNI) || defined (DEBUG_40) || defined (DEBUG_REXX_PROXY) || defined (DEBUG_SEND_MESSAGE_TO_REXX_OBJECT) + fprintf(stderr, "--- returning from: .._jniRexxSendMessageToRexxObject(...): result_obj=[%p]=[%s]\n",result_obj, result_obj!=NULL ? rtc->ObjectToStringValue(result_obj):"NULLOBJECT");fflush(stderr); fprintf(stderr, "<-- returning from: .._jniRexxSendMessageToRexxObject(...): thisTid=[%lu], everything o.k.\n",(unsigned long) thisTid);fflush(stderr); #endif Modified: branches/850/bsf4oorexx.dev/source_cc/lib/BSF4ooRexx850.dll-64-amd64 =================================================================== (Binary files differ) Modified: branches/850/bsf4oorexx.dev/source_java/JavaDrawingHandler.java =================================================================== --- branches/850/bsf4oorexx.dev/source_java/JavaDrawingHandler.java 2023-06-08 17:56:35 UTC (rev 1061) +++ branches/850/bsf4oorexx.dev/source_java/JavaDrawingHandler.java 2023-06-08 17:57:06 UTC (rev 1062) @@ -2,12 +2,6 @@ // TODO: B4R -> resolving constructors, if class is not public -// TODO: 20230529, rgf -// - add Area-support (it is a Shape): add(Area), exclusiveOr(Area), intersect(Area), -// subtract(Area), transform(AffineTransform) ?Area createTransformedArea(AffineTransform) -// constructor Area(Shape): areaNew nickname nicknameShape -// - Path2D: constructor Path2D.Double(Shape): pathNew nickname nicknameShape -// - add winResizable [.true|.false] /* Java classes that constitute the JDOR ("JavaDrawing ooRexx") command handler. @@ -17,7 +11,7 @@ author: Rony G. Flatscher date: 2022-09-05/2022-10-05 - version: 100.20230118 + version: 100.20230606 license: Apache license 2.0 license: @@ -136,79 +130,25 @@ to allow existing programs to continue to work 2023-05-30: - GET_STATE: add Rexx variable name to canonical command, if supplied 2023-05-31: - fixed canonical name for STROKE (cap, join values) + 2023-06-03: - adding floatArrayToRexxArrayExpression(float [] floatArray) + - Rexx int and float arrays will be turned into RexxArrayExpression strings for + the canonical command form + 2023-06-05: - remove unused variables + - always use [int|float]ArrayToRexxExpression() in canonical command (polygon, strokes etc.) + - changed resizable to false by default, adding new command "winResizable [.true|.false]" + - add Area support (including Area's CAG methods) + 2023-06-06: - allow Rexx variables as second argument to the areaXYZ commands + - removed shape abbreviations that were too short to convey any meaning or + (LI, PA, PO), changed shape abbreviations to allow inferring better (CU->CUBIC, + EL->ELLI, QU->QUAD, RE->RECT, RO->ROUNDRECT) + 2023-06-08: - fixed bugs in Shape area (tested with new sample "1-190_JDOR_shapes.rxj") + - fixed (introduced) bug in processCommand() that inhibited processing the + redirected commands via redirected input + - now handleCommand() will have the triggering command processed when + executing redirected input + - added synonyms "areaUnion" for "areaAdd" and "areaXor" for "areaExclusiveOr" */ -/* add support for Shape (done 2022-12-03) - shape name [type args] - fillShape name - drawShape name - clipShape name ... uses current clip rectangle (getClipBounds()); if no clip set, then sets clip to shape! - - type: (to decide: supply just significant letters or full word?) - A[rc2D] Double(double\xA0x, double\xA0y, double\xA0w, double\xA0h, double\xA0start, double\xA0extent, int\xA0type) - Double(Rectangle2D\xA0ellipseBounds, double\xA0start, double\xA0extent, int\xA0type) - C[ubicCurve2D] Double(double\xA0x1, double\xA0y1, double\xA0ctrlx1, double\xA0ctrly1, double\xA0ctrlx2, double\xA0ctrly2, double\xA0x2, double\xA0y2) - E[llipse2D] Double(double\xA0x, double\xA0y, double\xA0w, double\xA0h) - L[ine2D] Double(double\xA0x1, double\xA0y1, double\xA0x2, double\xA0y2) - Path2D ... - Pol[ygon2D] Polygon(int[]\xA0xpoints, int[]\xA0ypoints, int\xA0npoints) - Q[uadCurve2D] Double(double\xA0x1, double\xA0y1, double\xA0ctrlx, double\xA0ctrly, double\xA0x2, double\xA0y2) - Re[ctangle2D] Double(double\xA0x, double\xA0y, double\xA0w, double\xA0h) - Ro[undRectangle2D Double(double\xA0x, double\xA0y, double\xA0w, double\xA0h, double\xA0arcw, double\xA0arch) - - TRANSFORM [translateX translateY scaleX scaleY shearX shearY | reset | name [[translateX translateY scaleX scaleY shearX shearY] ] - - command environment intentionally does not support directly (no real use seen): - - Area, Point2D -*/ - -/* Sample program in ooRexx (temporarily): - - -- load and add the Java Rexx command handler, using default name: JDOR - call addJdorHandler - address jdor -- change default address environment - - signal on failure name any - signal on error name any - - new 500 500 -- create a new bitmap - winShow -- show it in a frame - - goto 10 10 - color orange - drawString "Hello at:" .dateTime~new - translate 10 490 - color green - drawString "Hello at:" .dateTime~new - translate 490 10 - color red - drawString "Hello at:" .dateTime~new - "translate -250 -250" -- must be quoted (minus causes Rexx to try arithmetics) - color blue - drawString "Hello at:" .dateTime~new - color red - angle=30 - do i=1 to 360/angle - 1 - rotate angle - drawString "ooRexx at:" .dateTime~new - end - - save "testTranslate.png" -- save as png file - sleep 2500 -- halts execution for 2 1/2 seconds - exit - - any: -- if command raise failure or error conditions, show them - co=condition('o') -- get a directory with the condition infos - say ppCondition2(co) -- format and show the condition information - say "---" - raise propagate -- now let ooRexx handle this condition - - ::requires "jdor.cls" -- makes routine addJdorHandler([environmentName]) available - ::requires "rgf_util2.rex" -- get access to ppCondition2() - -*/ - package org.oorexx.handlers.jdor; import java.awt.EventQueue; @@ -215,6 +155,7 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; +import java.awt.geom.Area; import java.awt.geom.Arc2D; import java.awt.geom.CubicCurve2D; import java.awt.geom.Ellipse2D; @@ -287,6 +228,7 @@ /* static definitions */ static final private int prefWidth = 500; static final private int prefHeight = 500; + static final private boolean prefResizable=false; /* instance definitions */ boolean bDebug= false; // true @@ -295,6 +237,7 @@ int currWidth = prefWidth; int currHeight = prefHeight; boolean currFrameVisible = true; // cf. command "winFrame [.true|.false]" + boolean currFrameResizable = prefResizable; BufferedImage bufImage = null; @@ -318,6 +261,7 @@ currWidth=bufImage.getWidth(); currHeight=bufImage.getHeight(); getContentPane().setPreferredSize(new Dimension(currWidth,currHeight)); + setResizable(currFrameResizable); pack(); setLocationRelativeTo(null); @@ -370,7 +314,7 @@ /* static definitions */ // default image sizes - static final public String version = "100.20230531"; + static final public String version = "100.20230608"; static final private int prefWidth = 500; static final private int prefHeight = 500; static private int prefImageType = BufferedImage.TYPE_INT_ARGB; // default with alpha (only png supported) @@ -544,6 +488,7 @@ boolean currVisible = false; boolean currWinUpdate = true; // update Frame whenever we draw: allows turning updating on/off + boolean currResizable = false; // cf. command "winResizable [.true|.false]" // 2022-11-02: makes a difference when rendered to screen as well, so by default antialising is turned on Object currAntiAliasing = RenderingHints.VALUE_ANTIALIAS_ON; @@ -632,6 +577,8 @@ Object res=null; if (isInputRedirected(slot)) // take commands via redirected input { + ... [truncated message content] |
From: <or...@us...> - 2023-06-08 17:56:38
|
Revision: 1061 http://sourceforge.net/p/bsf4oorexx/code/1061 Author: orexx Date: 2023-06-08 17:56:35 +0000 (Thu, 08 Jun 2023) Log Message: ----------- 20230608 Version as distributed via BSF4ooRexx_install_v850-20230608-beta.zip Modified Paths: -------------- sandbox/rgf/jdor/JavaDrawingHandler.java sandbox/rgf/jdor/doc/jdor_doc.html sandbox/rgf/jdor/samples/3-110_JDOR_animate_composite.rxj Added Paths: ----------- sandbox/rgf/jdor/samples/1-210_JDOR_area_cag.rxj sandbox/rgf/jdor/samples/1-220_JDOR_area_cag.rxj Removed Paths: ------------- sandbox/rgf/jdor/samples/1-200_listFonts.rxj sandbox/rgf/jdor/samples/1-210_jdor_area_cag.rxj sandbox/rgf/jdor/samples/1-220_jdor_area_cag.rxj Modified: sandbox/rgf/jdor/JavaDrawingHandler.java =================================================================== --- sandbox/rgf/jdor/JavaDrawingHandler.java 2023-06-08 15:33:04 UTC (rev 1060) +++ sandbox/rgf/jdor/JavaDrawingHandler.java 2023-06-08 17:56:35 UTC (rev 1061) @@ -146,7 +146,7 @@ redirected commands via redirected input - now handleCommand() will have the triggering command processed when executing redirected input - + - added synonyms "areaUnion" for "areaAdd" and "areaXor" for "areaExclusiveOr" */ package org.oorexx.handlers.jdor; @@ -5424,6 +5424,8 @@ } // add synonyms new name enum type + upperCase2Command.put( "AREAUNION" , AREA_ADD ) ; // 2023-06-08 + upperCase2Command.put( "AREAXOR" , AREA_EXCLUSIVE_OR ) ; // 2023-06-08 upperCase2Command.put( "NEW" , NEW_IMAGE ) ; // 2023-01-18 upperCase2Command.put( "CLEAR" , RESET ) ; upperCase2Command.put( "GOTO" , MOVE_TO ) ; Modified: sandbox/rgf/jdor/doc/jdor_doc.html =================================================================== --- sandbox/rgf/jdor/doc/jdor_doc.html 2023-06-08 15:33:04 UTC (rev 1060) +++ sandbox/rgf/jdor/doc/jdor_doc.html 2023-06-08 17:56:35 UTC (rev 1061) @@ -564,6 +564,7 @@ <tr class="CommandRowColumn"><!-- table row --> <td class="cmdNr"> <td class="command" id="cmdAreaAdd"> "areaAdd" + <br> "areaUnion" <td colspan="3"> The <em>constructive area geometry (CAG)</em> "<em>add</em>" operation, cf. <a href="https://docs.oracle.com/javase/tutorial/2d/advanced/complexshapes.html" target="_blank">Constructing Complex Shapes from Geometry Primitives</a>. @@ -584,6 +585,7 @@ <tr class="CommandRowColumn"><!-- table row --> <td class="cmdNr"> <td class="command" id="cmdAreaExclusiveOr"> "areaExclusiveOr" + <br> "areaXor" <td colspan="3"> The <em>constructive area geometry (CAG)</em> "<em>exclusiveOr</em>" operation, cf. <a href="https://docs.oracle.com/javase/tutorial/2d/advanced/complexshapes.html" target="_blank">Constructing Complex Shapes from Geometry Primitives</a>. Deleted: sandbox/rgf/jdor/samples/1-200_listFonts.rxj =================================================================== --- sandbox/rgf/jdor/samples/1-200_listFonts.rxj 2023-06-08 15:33:04 UTC (rev 1060) +++ sandbox/rgf/jdor/samples/1-200_listFonts.rxj 2023-06-08 17:56:35 UTC (rev 1061) @@ -1,47 +0,0 @@ -#!/usr/bin/env rexx -/* - Name: "1-200_listFonts.rxj" - Invoke: "rexx 1-200_listFonts.rxj" - "rexxj 1-200_listFonts.rxj" (Windows) - "rexxj.sh 1-200_listFonts.rxj" (Unix) - - Purpose: Lists all font families installed on the system. - - Date: 2022-10-03 - - Author: Rony G. Flatscher, WU Vienna - - Changes: -- - - last change: Revision: $Revision: 951 $ $Author: orexx $ $Date: 2022-08-10 18:06:25 +0200 (Mi., 10 Aug 2022) $ - (svn hint: use 'propset svn:keywords "Author Date Revision" filename') - - license: - - ------------------------ Apache Version 2.0 license ------------------------- - Copyright (C) 2022 Rony G. Flatscher - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------------------------------------------------------------------- -*/ - -clzGE=bsf.loadClass("java.awt.GraphicsEnvironment") /* load the Java class */ -localGE=clzGE~getLocalGraphicsEnvironment /* invoke the static method "getLocalGraphicsEnvironment" */ -allFontFamilies=localGE~getAvailableFontFamilyNames /* invoke the method "getAvailableFontFamilyNames" */ -do counter c ff over allFontFamilies /* iterate over all elements of the received "allFontFamilies" Java array */ - say c~right(3)":" ff /* display the font family name */ -end -say -say "you have a total of" pp(c) "fonts installed on your system!" - -::requires BSF.CLS -- get ooRexx-Java bridge \ No newline at end of file Copied: sandbox/rgf/jdor/samples/1-210_JDOR_area_cag.rxj (from rev 1060, sandbox/rgf/jdor/samples/1-210_jdor_area_cag.rxj) =================================================================== --- sandbox/rgf/jdor/samples/1-210_JDOR_area_cag.rxj (rev 0) +++ sandbox/rgf/jdor/samples/1-210_JDOR_area_cag.rxj 2023-06-08 17:56:35 UTC (rev 1061) @@ -0,0 +1,132 @@ +#!/usr/bin/env rexx +/* + Name: "1-200_JDOR_area_cag.rxj" + + Invoke: "rexx 1-200_JDOR_area_cag.rxj [?]" + "rexxj 1-200_JDOR_area_cag.rxj [?]" (Windows) + "rexxj.sh 1-200_JDOR_area_cag.rxj [?]" (Unix) + + ? ... optional argument, if supplied displays processed JDOR commands + + Purpose: demonstrate Java2D "constructive area geometry (CAG)", cf. + <https://docs.oracle.com/javase/tutorial/2d/advanced/complexshapes.html> + + Date: 2023-06-07 + + Author: Rony G. Flatscher, WU Vienna + + Changes: --- + + last change: Revision: $Revision: 951 $ $Author: orexx $ $Date: 2022-08-10 18:06:25 +0200 (Mi., 10 Aug 2022) $ + (svn hint: use 'propset svn:keywords "Author Date Revision" filename') + + license: + + ------------------------ Apache Version 2.0 license ------------------------- + Copyright (C) 2023 Rony G. Flatscher + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ----------------------------------------------------------------------------- +*/ + +clz=bsf.importClass("org.oorexx.handlers.jdor.JavaDrawingHandler") +say "-- JDOR version:" clz~version +jdh=clz~new +call BsfCommandHandler "add", "jdor", jdh + +pkgLocal=.context~package~local -- get this package's local environment (looked up first) + -- create array save in pkgLocal with index "errorArray", can from then on referred + -- to in this package via the environment symbol ".errorArray" (note the dot!) +pkgLocal~errorArray=.array~new -- create array, save in pkgLocal + +bShowCommands=(arg(1)="?") -- ? supplied as argument, then show "jdor" JDOR commands in canonical form + + -- set default environment to JDOR +if bShowCommands then -- set default environment to JDOR +do + -- redirect output, show extended error messages if any + address jdor with error append using (.errorArray) output using (.output) + say "--> JDOR commands directed at the 'jdor' handler will get displayed ..." +end +else + address jdor with error append using (.errorArray) + + -- JDOR commands can be processed from no on +newImage 265 260 -- create new bitmap +winShow -- show frame +winTitle "Area Demo #1" -- set title +winAlwaysOnTop .true -- allows us to click into the command line window without losing sight + + -- each circle is 50 pixels wide, their halves overlap +shape c1 ellipse 10 25 50 50 -- leftCircle, x=10 +shape ac1 area c1 -- create area +shape c2 ellipse 35 25 50 50 -- rightCircle, x=10+(width=50/2) +shape ac2 area c2 -- create area + +stroke strNormal 2 -- normal stroke 2px wide +color colDashed 0 0 0 128 -- black, 50% transparent (128/256) +stroke strDashed 2 0 0 1 "(2,2)" 0 -- dashed stroke +color colFill 255 255 0 100 -- define yellow color fill, 39% transparency (100/256) + -- loop over Area CAG operations +sleepTime=1 +do counter c op over 'add', 'intersect', 'subtract', 'exclusiveOr' + call cagOperation op, c, ac1, ac2 + sleep sleepTime +end + +if .errorArray~items>0 then -- did any errors occur? +do + say + say "-- (stderr) errArr~items (errors):" pp(.errorArray~items) + say .errorArray -- shows string representation +end + +say +say "press enter to end.";parse pull +exit + + -- draw the areas, carry out operation, show result +cagOperation: procedure -- expose outArr errArr -- expose arrays for JDOR + use arg operation, quadrant, ar1, ar2 + -- operate on the area + shape copyAr1 area ar1 -- create a copy of the target area + command="area"operation -- define command + say "-- command:" command "(shown in quadrant" "Q"quadrant")" + command copyAr1 ar2 -- carry out operation, changes area + select -- display results + when operation="add" then operation=operation "(union)" + when operation="exclusiveOr" then operation=operation "(XOR)" + otherwise nop + end + -- left upper origin of the quadrants + quadrants = (20,20), (130,20), (20,150), (130,150) + q=quadrants[quadrant] -- get quadrant + parse value q[1] q[2] with x y -- get position for text + transform reset -- reset transforms + translate x y -- move origin + color black + drawString "Q"quadrant operation":" -- display quadrant and name of operation + color colFill -- fill the new area + fillShape copyAr1 + + color colDashed -- superimpose the outline of the original circles + stroke strDashed + drawShape ar1 + drawShape ar2 + + color black -- superimpose the outline of the new area + stroke strNormal + drawShape copyAr1 + return + +::requires bsf.cls Deleted: sandbox/rgf/jdor/samples/1-210_jdor_area_cag.rxj =================================================================== --- sandbox/rgf/jdor/samples/1-210_jdor_area_cag.rxj 2023-06-08 15:33:04 UTC (rev 1060) +++ sandbox/rgf/jdor/samples/1-210_jdor_area_cag.rxj 2023-06-08 17:56:35 UTC (rev 1061) @@ -1,132 +0,0 @@ -#!/usr/bin/env rexx -/* - Name: "1-200_JDOR_area_cag.rxj" - - Invoke: "rexx 1-200_JDOR_area_cag.rxj [?]" - "rexxj 1-200_JDOR_area_cag.rxj [?]" (Windows) - "rexxj.sh 1-200_JDOR_area_cag.rxj [?]" (Unix) - - ? ... optional argument, if supplied displays processed JDOR commands - - Purpose: demonstrate Java2D "constructive area geometry (CAG)", cf. - <https://docs.oracle.com/javase/tutorial/2d/advanced/complexshapes.html> - - Date: 2023-06-07 - - Author: Rony G. Flatscher, WU Vienna - - Changes: --- - - last change: Revision: $Revision: 951 $ $Author: orexx $ $Date: 2022-08-10 18:06:25 +0200 (Mi., 10 Aug 2022) $ - (svn hint: use 'propset svn:keywords "Author Date Revision" filename') - - license: - - ------------------------ Apache Version 2.0 license ------------------------- - Copyright (C) 2023 Rony G. Flatscher - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------------------------------------------------------------------- -*/ - -clz=bsf.importClass("org.oorexx.handlers.jdor.JavaDrawingHandler") -say "-- JDOR version:" clz~version -jdh=clz~new -call BsfCommandHandler "add", "jdor", jdh - -pkgLocal=.context~package~local -- get this package's local environment (looked up first) - -- create array save in pkgLocal with index "errorArray", can from then on referred - -- to in this package via the environment symbol ".errorArray" (note the dot!) -pkgLocal~errorArray=.array~new -- create array, save in pkgLocal - -bShowCommands=(arg(1)="?") -- ? supplied as argument, then show "jdor" JDOR commands in canonical form - - -- set default environment to JDOR -if bShowCommands then -- set default environment to JDOR -do - -- redirect output, show extended error messages if any - address jdor with error append using (.errorArray) output using (.output) - say "--> JDOR commands directed at the 'jdor' handler will get displayed ..." -end -else - address jdor with error append using (.errorArray) - - -- JDOR commands can be processed from no on -newImage 265 260 -- create new bitmap -winShow -- show frame -winTitle "Area Demo #1" -- set title -winAlwaysOnTop .true -- allows us to click into the command line window without losing sight - - -- each circle is 50 pixels wide, their halves overlap -shape c1 ellipse 10 25 50 50 -- leftCircle, x=10 -shape ac1 area c1 -- create area -shape c2 ellipse 35 25 50 50 -- rightCircle, x=10+(width=50/2) -shape ac2 area c2 -- create area - -stroke strNormal 2 -- normal stroke 2px wide -color colDashed 0 0 0 128 -- black, 50% transparent (128/256) -stroke strDashed 2 0 0 1 "(2,2)" 0 -- dashed stroke -color colFill 255 255 0 100 -- define yellow color fill, 39% transparency (100/256) - -- loop over Area CAG operations -sleepTime=1 -do counter c op over 'add', 'intersect', 'subtract', 'exclusiveOr' - call cagOperation op, c, ac1, ac2 - sleep sleepTime -end - -if .errorArray~items>0 then -- did any errors occur? -do - say - say "-- (stderr) errArr~items (errors):" pp(.errorArray~items) - say .errorArray -- shows string representation -end - -say -say "press enter to end.";parse pull -exit - - -- draw the areas, carry out operation, show result -cagOperation: procedure -- expose outArr errArr -- expose arrays for JDOR - use arg operation, quadrant, ar1, ar2 - -- operate on the area - shape copyAr1 area ar1 -- create a copy of the target area - command="area"operation -- define command - say "-- command:" command "(shown in quadrant" "Q"quadrant")" - command copyAr1 ar2 -- carry out operation, changes area - select -- display results - when operation="add" then operation=operation "(union)" - when operation="exclusiveOr" then operation=operation "(XOR)" - otherwise nop - end - -- left upper origin of the quadrants - quadrants = (20,20), (130,20), (20,150), (130,150) - q=quadrants[quadrant] -- get quadrant - parse value q[1] q[2] with x y -- get position for text - transform reset -- reset transforms - translate x y -- move origin - color black - drawString "Q"quadrant operation":" -- display quadrant and name of operation - color colFill -- fill the new area - fillShape copyAr1 - - color colDashed -- superimpose the outline of the original circles - stroke strDashed - drawShape ar1 - drawShape ar2 - - color black -- superimpose the outline of the new area - stroke strNormal - drawShape copyAr1 - return - -::requires bsf.cls Copied: sandbox/rgf/jdor/samples/1-220_JDOR_area_cag.rxj (from rev 1060, sandbox/rgf/jdor/samples/1-220_jdor_area_cag.rxj) =================================================================== --- sandbox/rgf/jdor/samples/1-220_JDOR_area_cag.rxj (rev 0) +++ sandbox/rgf/jdor/samples/1-220_JDOR_area_cag.rxj 2023-06-08 17:56:35 UTC (rev 1061) @@ -0,0 +1,121 @@ +#!/usr/bin/env rexx +/* + Name: "1-210_JDOR_area_cag.rxj" + + Invoke: "rexx 1-210_JDOR_area_cag.rxj [?]" + "rexxj 1-210_JDOR_area_cag.rxj [?]" (Windows) + "rexxj.sh 1-210_JDOR_area_cag.rxj [?]" (Unix) + + ? ... optional argument, if supplied displays processed JDOR commands + + Purpose: demonstrate Java2D "constructive area geometry (CAG)", cf. + <https://docs.oracle.com/javase/tutorial/2d/advanced/complexshapes.html> + + Date: 2023-06-07 + + Author: Rony G. Flatscher, WU Vienna + + Changes: --- + + last change: Revision: $Revision: 951 $ $Author: orexx $ $Date: 2022-08-10 18:06:25 +0200 (Mi., 10 Aug 2022) $ + (svn hint: use 'propset svn:keywords "Author Date Revision" filename') + + license: + + ------------------------ Apache Version 2.0 license ------------------------- + Copyright (C) 2023 Rony G. Flatscher + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ----------------------------------------------------------------------------- +*/ +clz=bsf.importClass("org.oorexx.handlers.jdor.JavaDrawingHandler") +say "-- JDOR version:" clz~version +jdh=clz~new +call BsfCommandHandler "add", "jdor", jdh + +pkgLocal=.context~package~local -- get this package's local environment (looked up first) + -- create array save in pkgLocal with index "errorArray", can from then on referred + -- to in this package via the environment symbol ".errorArray" (note the dot!) +pkgLocal~errorArray=.array~new -- create array, save in pkgLocal + +bShowCommands=(arg(1)="?") -- ? supplied as argument, then show "jdor" JDOR commands in canonical form + + -- set default environment to JDOR +if bShowCommands then -- set default environment to JDOR +do + -- redirect output, show extended error messages if any + address jdor with error append using (.errorArray) output using (.output) + say "--> JDOR commands directed at the 'jdor' handler will get displayed ..." +end +else + address jdor with error append using (.errorArray) + + -- JDOR commands can be processed from no on +newImage 250 125 -- create new bitmap +winShow -- show frame +winTitle "Area Demo #2" -- set title +winAlwaysOnTop .true -- allows us to click into the command line window without losing sight + +shape s1 ellipse2d 15 10 200 100 -- create an Ellipse2D + -- draw a triangle using Path2D +shape s2 path -- create a Path2D (free form Shape) for triangle +pathMoveTo s2 65 60 +pathLineTo s2 200 10 +pathLineTo s2 240 60 +pathClose s2 + +sleepTime=2 +color red -- color to use from now on +stroke strDashed 1 0 0 1 "(2,2)" 0 -- dashed stroke +say "-- draw area1 of shape1 ('circle1', dotted red line)" +shape a1 area s1 -- create area from shape +drawShape a1 -- draw area +sleep sleepTime +say "-- draw area2 of shape2 ('triangle', dotted red line)" +shape a2 area s2 -- create area from shape +drawShape a2 -- draw area +sleep sleepTime +say "-- draw area3 of shape3 ('circle2', identical copy of circle1 area above)" +shape a3 area a1 -- create area (a copy of area a1 (from 'circle1' above) +drawShape a3 -- draw area + +sleepTime=3 -- from now on give user a little bit more time +areaIntersect a3 a2 -- intersect area a3 with triangle +color blue +fillShape a3 +say "-- new area3 (after 'intersect' with area2 'blue')" +sleep sleepTime + +areaExclusiveOr a1 a3 -- xor area a1 with current area of a3 +color yellow +fillShape a1 +say "-- new area1 (after 'exclusiveOr' with area3 'yellow')" +sleep sleepTime + +stroke s10 10 -- use 10pt stroke for outline +color black33 0 0 0 85 -- black with 33% transparency (85/256) +drawShape a1 +say "-- draw new area1 ('thick transparent dark gray line')" + +if .errorArray~items>0 then -- did any errors occur? +do + say + say "-- (stderr) errArr~items (errors):" pp(.errorArray~items) + say .errorArray -- shows string representation +end + +say +say "press enter to end.";parse pull +exit + +::requires bsf.cls Deleted: sandbox/rgf/jdor/samples/1-220_jdor_area_cag.rxj =================================================================== --- sandbox/rgf/jdor/samples/1-220_jdor_area_cag.rxj 2023-06-08 15:33:04 UTC (rev 1060) +++ sandbox/rgf/jdor/samples/1-220_jdor_area_cag.rxj 2023-06-08 17:56:35 UTC (rev 1061) @@ -1,121 +0,0 @@ -#!/usr/bin/env rexx -/* - Name: "1-210_JDOR_area_cag.rxj" - - Invoke: "rexx 1-210_JDOR_area_cag.rxj [?]" - "rexxj 1-210_JDOR_area_cag.rxj [?]" (Windows) - "rexxj.sh 1-210_JDOR_area_cag.rxj [?]" (Unix) - - ? ... optional argument, if supplied displays processed JDOR commands - - Purpose: demonstrate Java2D "constructive area geometry (CAG)", cf. - <https://docs.oracle.com/javase/tutorial/2d/advanced/complexshapes.html> - - Date: 2023-06-07 - - Author: Rony G. Flatscher, WU Vienna - - Changes: --- - - last change: Revision: $Revision: 951 $ $Author: orexx $ $Date: 2022-08-10 18:06:25 +0200 (Mi., 10 Aug 2022) $ - (svn hint: use 'propset svn:keywords "Author Date Revision" filename') - - license: - - ------------------------ Apache Version 2.0 license ------------------------- - Copyright (C) 2023 Rony G. Flatscher - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------------------------------------------------------------------- -*/ -clz=bsf.importClass("org.oorexx.handlers.jdor.JavaDrawingHandler") -say "-- JDOR version:" clz~version -jdh=clz~new -call BsfCommandHandler "add", "jdor", jdh - -pkgLocal=.context~package~local -- get this package's local environment (looked up first) - -- create array save in pkgLocal with index "errorArray", can from then on referred - -- to in this package via the environment symbol ".errorArray" (note the dot!) -pkgLocal~errorArray=.array~new -- create array, save in pkgLocal - -bShowCommands=(arg(1)="?") -- ? supplied as argument, then show "jdor" JDOR commands in canonical form - - -- set default environment to JDOR -if bShowCommands then -- set default environment to JDOR -do - -- redirect output, show extended error messages if any - address jdor with error append using (.errorArray) output using (.output) - say "--> JDOR commands directed at the 'jdor' handler will get displayed ..." -end -else - address jdor with error append using (.errorArray) - - -- JDOR commands can be processed from no on -newImage 250 125 -- create new bitmap -winShow -- show frame -winTitle "Area Demo #2" -- set title -winAlwaysOnTop .true -- allows us to click into the command line window without losing sight - -shape s1 ellipse2d 15 10 200 100 -- create an Ellipse2D - -- draw a triangle using Path2D -shape s2 path -- create a Path2D (free form Shape) for triangle -pathMoveTo s2 65 60 -pathLineTo s2 200 10 -pathLineTo s2 240 60 -pathClose s2 - -sleepTime=2 -color red -- color to use from now on -stroke strDashed 1 0 0 1 "(2,2)" 0 -- dashed stroke -say "-- draw area1 of shape1 ('circle1', dotted red line)" -shape a1 area s1 -- create area from shape -drawShape a1 -- draw area -sleep sleepTime -say "-- draw area2 of shape2 ('triangle', dotted red line)" -shape a2 area s2 -- create area from shape -drawShape a2 -- draw area -sleep sleepTime -say "-- draw area3 of shape3 ('circle2', identical copy of circle1 area above)" -shape a3 area a1 -- create area (a copy of area a1 (from 'circle1' above) -drawShape a3 -- draw area - -sleepTime=3 -- from now on give user a little bit more time -areaIntersect a3 a2 -- intersect area a3 with triangle -color blue -fillShape a3 -say "-- new area3 (after 'intersect' with area2 'blue')" -sleep sleepTime - -areaExclusiveOr a1 a3 -- xor area a1 with current area of a3 -color yellow -fillShape a1 -say "-- new area1 (after 'exclusiveOr' with area3 'yellow')" -sleep sleepTime - -stroke s10 10 -- use 10pt stroke for outline -color black33 0 0 0 85 -- black with 33% transparency (85/256) -drawShape a1 -say "-- draw new area1 ('thick transparent dark gray line')" - -if .errorArray~items>0 then -- did any errors occur? -do - say - say "-- (stderr) errArr~items (errors):" pp(.errorArray~items) - say .errorArray -- shows string representation -end - -say -say "press enter to end.";parse pull -exit - -::requires bsf.cls Modified: sandbox/rgf/jdor/samples/3-110_JDOR_animate_composite.rxj =================================================================== --- sandbox/rgf/jdor/samples/3-110_JDOR_animate_composite.rxj 2023-06-08 15:33:04 UTC (rev 1060) +++ sandbox/rgf/jdor/samples/3-110_JDOR_animate_composite.rxj 2023-06-08 17:56:35 UTC (rev 1061) @@ -33,7 +33,7 @@ in canonical form for commands directed to "jdor" handler (not "sdor") - creates and defines JDOR handler explicitly - changed "new" to "newImage" - 2023-06-08 - flashing text shows left flashing time + 2023-06-08 - flashing text shows flashing time left license: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |