Compare commits

...

245 Commits

Author SHA1 Message Date
Mauricio Baeza 58a8970978 Writer. Add shapes. Change zoom 2021-09-25 20:17:11 -05:00
Mauricio Baeza 5144785dda Update version 2021-09-25 20:16:41 -05:00
Mauricio Baeza 9b7fe665cc Writer add shapes. Change zoom 2021-09-25 20:15:40 -05:00
Mauricio Baeza f597411d3e Add writer cursor move 2021-08-29 15:43:37 -05:00
Mauricio Baeza 33c86dcd56 Add new example Calc 2021-07-11 22:31:59 -05:00
Mauricio Baeza 23135d9ad7 Add insert math in writer 2021-07-10 17:30:36 -05:00
Mauricio Baeza cdbb00fad4 Start support for insert math in writer 2021-07-10 17:29:29 -05:00
Mauricio Baeza 37fc2568da Start support for insert math in writer 2021-07-10 15:08:57 -05:00
Mauricio Baeza 5e2236db54 Update readme 2021-07-10 11:37:24 -05:00
Mauricio Baeza d983fac3d1 Get user profile in paths 2021-07-09 22:40:24 -05:00
Mauricio Baeza 19e211ce0a Add property url from command buttons forms 2021-07-09 14:57:43 -05:00
Mauricio Baeza 87c8ead015 Get visible now return ranges object 2021-07-07 22:45:43 -05:00
Mauricio Baeza 37acf3cc06 Set and get dates 2021-07-06 22:29:05 -05:00
Mauricio Baeza 62d2cd25c1 Documentation for Calc 2021-07-04 19:33:44 -05:00
Mauricio Baeza b1355d5d88 Document for reference to ranges 2021-07-04 15:28:56 -05:00
Mauricio Baeza 6efa879c85 Add support for calc ranges 2021-07-04 13:19:03 -05:00
Mauricio Baeza 45e3f97e6c Fix in driver url 2021-07-04 12:47:06 -05:00
Mauricio Baeza 55dfe77aa9 Add support for calc ranges 2021-07-03 23:51:42 -05:00
Mauricio Baeza 043e5f5f29 End document for sheets 2021-07-03 21:59:22 -05:00
Mauricio Baeza 686f1f6aea Update easymacro.py 2021-07-03 19:23:47 -05:00
Mauricio Baeza 0e656fbecb Doc for sheets 2021-07-03 19:23:23 -05:00
Mauricio Baeza f9b2b7679a End document for docs 2021-07-03 17:32:51 -05:00
Mauricio Baeza fd2f5631be Update readme 2021-07-02 22:10:43 -05:00
Mauricio Baeza 298fceb1e2 Add properties 2021-07-02 22:10:16 -05:00
Mauricio Baeza 9f2c0999aa Update doc 2021-07-01 22:41:20 -05:00
Mauricio Baeza 370bdae3bb Add apendix 2021-07-01 22:40:55 -05:00
Mauricio Baeza 42141fa06d Add apendix 2021-06-30 22:26:08 -05:00
Mauricio Baeza 90dae8a9b4 Fix in name in attacht files whend send emails 2021-06-30 14:29:02 -05:00
Mauricio Baeza 108659da4a End methods for path 2021-06-30 11:52:00 -05:00
Mauricio Baeza 94d8c43b1b Add save PDF in memory 2021-06-29 22:01:10 -05:00
Mauricio Baeza 467280fca3 Add insert image from stream 2021-06-29 15:09:25 -05:00
Mauricio Baeza 80691ad797 Fix in copy method 2021-06-28 22:59:16 -05:00
Mauricio Baeza 33c2b18c33 Add propery properties to shapes 2021-06-26 21:39:47 -05:00
Mauricio Baeza 3674b9f542 Update doc 2021-06-25 22:56:38 -05:00
Mauricio Baeza fa781d3da1 Add build folder 2021-06-25 22:55:52 -05:00
Mauricio Baeza 327dd76291 Add examples for paths 2021-06-24 21:50:25 -05:00
Mauricio Baeza 210a79aa41 Delete locales 2021-06-24 19:56:14 -05:00
Mauricio Baeza b58b1ad093 Add examples for paths 2021-06-23 21:38:02 -05:00
Mauricio Baeza 20fbd98157 Add timeout in url open 2021-06-22 23:03:06 -05:00
Mauricio Baeza 35a0eecd79 Add examples for url open 2021-06-22 22:54:25 -05:00
Mauricio Baeza 21fcf5f274 Add examples for encrypt decrypt data 2021-06-22 22:32:49 -05:00
Mauricio Baeza 081a4fe05f Add examples for measure time 2021-06-22 22:07:36 -05:00
Mauricio Baeza 2527c60ed0 Add examples for save and get configurations 2021-06-22 21:56:27 -05:00
Mauricio Baeza 4b9a5e45a5 Add examples for get digests 2021-06-21 23:02:38 -05:00
Mauricio Baeza 7a58bb695b Add examples for timer 2021-06-21 22:47:39 -05:00
Mauricio Baeza abfab3d254 Add examples for call external programs 2021-06-21 22:36:48 -05:00
Mauricio Baeza 205e08fc6e Add connection for postgres and mariadb 2021-06-20 23:28:38 -05:00
Mauricio Baeza 27ae3fe66b Update changelog 2021-06-20 23:28:07 -05:00
Mauricio Baeza 89966c4b04 Add documentation for application 2021-06-19 22:47:36 -05:00
Mauricio Baeza 79d44763f6 Add documentation for application 2021-06-18 23:04:07 -05:00
Mauricio Baeza bac62657f9 Add some examples 2021-06-17 21:44:26 -05:00
Mauricio Baeza 69e2ce2b53 Add support for connections for postgres and mariadb 2021-06-15 21:57:29 -05:00
Mauricio Baeza 0c4cce2533 Start documentation in spanish 2021-06-11 12:29:31 -05:00
Mauricio Baeza 6e745a4183 Add documentation for application 2021-06-10 22:25:03 -05:00
Mauricio Baeza 70d6e93b90 Add method get_data for set types in data ranges 2021-06-09 23:11:40 -05:00
Mauricio Baeza 254447bc4d Add autostyles for tables Writer 2021-06-05 21:46:05 -05:00
Mauricio Baeza 25b1170cb4 Update changelog 2021-06-05 21:45:26 -05:00
Mauricio Baeza 72e175cdeb Add examples for calc, writer, base 2021-06-03 22:09:34 -05:00
Mauricio Baeza ed7ad9e7d7 Add make file 2021-06-03 18:39:03 -05:00
Mauricio Baeza 18c9caeb13 Add examples for application 2021-06-03 18:28:37 -05:00
Mauricio Baeza f15cebd20e Add example for Draw 2021-06-03 17:47:12 -05:00
Mauricio Baeza afa0b53a1a Add style to tables for Writer 2021-05-13 12:44:26 -05:00
Mauricio Baeza 81bea3bb24 Update version and changelog 2021-04-13 21:53:28 -05:00
Mauricio Baeza 7d2071f342 Update version and changelog 2021-04-13 21:52:59 -05:00
Mauricio Baeza 5b713538f4 Create data pilots 2021-04-13 21:50:58 -05:00
Mauricio Baeza 97ff8c8221 Create data pilots 2021-04-13 21:47:45 -05:00
Mauricio Baeza b416c38921 Doc for tools 2021-02-08 23:03:11 -06:00
Mauricio Baeza 0b450c2436 Paths 2021-02-08 23:02:10 -06:00
Mauricio Baeza 64af685417 Create instances 2021-02-08 22:50:04 -06:00
Mauricio Baeza 27d870d3aa Tools messages 2021-02-08 22:39:56 -06:00
Mauricio Baeza 3c6d21bcbe Tools information 2021-02-08 22:30:10 -06:00
Mauricio Baeza 3f42d770fa Add tools for debug 2021-02-08 22:16:06 -06:00
Mauricio Baeza aae4aaa385 Add call MRI 2021-02-07 22:51:44 -06:00
Mauricio Baeza 7d22cf9688 Add log tools 2021-02-07 22:43:49 -06:00
Mauricio Baeza 2cb36cc537 Add tools for debug 2021-02-07 22:36:13 -06:00
Mauricio Baeza 8b80a4e5df Update readme 2021-02-07 22:18:16 -06:00
Mauricio Baeza fba4a5a6c1 End parameters 2021-02-07 21:30:54 -06:00
Mauricio Baeza 9502a9393d Add doc 2021-02-06 22:07:32 -06:00
Mauricio Baeza ea1c7f2a01 Add parameter 2021-02-06 22:05:20 -06:00
Mauricio Baeza 79f316edaa Add parameter 2021-02-06 21:50:07 -06:00
Mauricio Baeza f0f1ccf19f Add parameter 2021-02-06 21:41:51 -06:00
Mauricio Baeza 2231df7427 Add parameter 2021-02-06 21:35:07 -06:00
Mauricio Baeza 303bd62de9 Add parameter 2021-02-06 21:20:00 -06:00
Mauricio Baeza e549ff9f62 Add parameter 2021-02-05 22:59:39 -06:00
Mauricio Baeza 64e381c6aa Add parameter 2021-02-05 22:56:36 -06:00
Mauricio Baeza fde7dd4d95 Add parameter 2021-02-05 22:52:33 -06:00
Mauricio Baeza 34dae84c58 Add parameter 2021-02-05 22:46:31 -06:00
Mauricio Baeza ca4553fb62 Start config 2021-02-05 22:38:46 -06:00
Mauricio Baeza dd50b6ba4a Start locales 2021-02-05 22:24:30 -06:00
Mauricio Baeza f56142d4bf Add generate first extension 2021-02-04 23:19:23 -06:00
Mauricio Baeza cf96f4f1b8 Add install 2021-02-04 23:08:24 -06:00
Mauricio Baeza 4d9cea5dab Add requirements 2021-02-04 22:53:14 -06:00
Mauricio Baeza 49fa869170 Add intro 2021-02-04 22:49:23 -06:00
Mauricio Baeza 1ce51d2905 Add intro 2021-02-04 22:42:11 -06:00
Mauricio Baeza 2f57a69cbd Start doc 2021-02-04 22:32:38 -06:00
Mauricio Baeza 752d405a6c Refactory easymacro 2021-02-02 18:19:56 -06:00
Mauricio Baeza 024d581d1c Update changelog 2021-02-02 18:19:29 -06:00
Mauricio Baeza a4275aadb4 Update changelog 2021-02-01 23:03:11 -06:00
Mauricio Baeza 6b54787c8e Fix in render cell 2021-02-01 23:00:51 -06:00
Mauricio Baeza 5ec3986d92 Update some data types 2021-01-03 20:59:46 -06:00
Mauricio Baeza 433be8f75d Update some data types 2021-01-03 20:57:19 -06:00
Mauricio Baeza ee2c32bef0 Replace images png for svg 2020-12-26 21:59:52 -06:00
Mauricio Baeza 81e9a87838 Remove easymacro2 in zaz 2020-12-23 22:24:00 -06:00
Mauricio Baeza 024341caa1 Start and stop server LibreOffice 2020-12-16 22:31:48 -06:00
Mauricio Baeza aef368e8f1 Add all vars for unit test 2020-12-16 22:13:40 -06:00
Mauricio Baeza 4218ac05b1 Rename easymacro.py 2020-12-16 21:50:11 -06:00
Mauricio Baeza 8df0641cf5 Clean class LOBase 2020-12-16 21:38:31 -06:00
Mauricio Baeza 01b6c0315e Remove create chart 2020-12-16 21:29:58 -06:00
Mauricio Baeza a3d25e093b Get controls in dialog box 2020-12-16 18:14:03 -06:00
Mauricio Baeza 689aee0a1d Add merge zips 2020-12-15 22:09:47 -06:00
Mauricio Baeza 9eb5147eab Add controls in windows 2020-12-15 22:04:44 -06:00
Mauricio Baeza e4a0b0b2cf Remove modify listener 2020-12-10 19:34:49 -06:00
Mauricio Baeza ec92f02297 Add properties Width, Height 2020-12-10 19:27:36 -06:00
Mauricio Baeza d7e35b8077 Add events menus 2020-12-10 19:21:00 -06:00
Mauricio Baeza c02410e0de Add menus 2020-12-09 22:21:19 -06:00
Mauricio Baeza e4060e83ae Create new windows 2020-12-09 22:02:35 -06:00
Mauricio Baeza cb17e2b9b7 Add replace in Writer 2020-12-09 21:13:46 -06:00
Mauricio Baeza 7bdbfeb6da Add search in Writer 2020-12-08 22:18:12 -06:00
Mauricio Baeza 8dc87dafd4 Insert table 2020-12-08 21:51:35 -06:00
Mauricio Baeza 5dbe7d4a20 Add data tables in Writer 2020-12-07 22:30:46 -06:00
Mauricio Baeza acc3ce28dd Add count tables in Writer 2020-12-07 22:04:00 -06:00
Mauricio Baeza d3a520ed07 Add insert new lines in Writer 2020-12-07 21:47:48 -06:00
Mauricio Baeza 53a940a505 Add insert table in Writer 2020-12-07 21:38:57 -06:00
Mauricio Baeza 6fc13b8a7c Add select range Writer 2020-12-07 21:25:31 -06:00
Mauricio Baeza 08709c1956 Goto view cursor 2020-12-04 22:35:28 -06:00
Mauricio Baeza 58d7318fd8 Remove insert image 2020-12-04 22:23:54 -06:00
Mauricio Baeza 67fec86289 Remove text range class 2020-12-04 22:20:52 -06:00
Mauricio Baeza d81ccd943a Add remove validations 2020-12-03 22:21:54 -06:00
Mauricio Baeza ff43f85594 Add cell validations 2020-12-03 22:11:05 -06:00
Mauricio Baeza 88ee0dab31 Add auto format in ranges 2020-12-02 23:14:27 -06:00
Mauricio Baeza 59e471c5f7 Add replace by range 2020-12-02 18:31:33 -06:00
Mauricio Baeza fea2a3ae43 Add search by range 2020-12-02 18:24:16 -06:00
Mauricio Baeza bd350aa01f Add merge range by row 2020-12-01 21:48:52 -06:00
Mauricio Baeza 7e194b930e Add merge cells property 2020-12-01 21:40:56 -06:00
Mauricio Baeza f0293eb703 Remove import/export csv from ranges 2020-12-01 21:27:13 -06:00
Mauricio Baeza 01a798ad0c Add get empty ranges 2020-12-01 20:35:45 -06:00
Mauricio Baeza b81ff6edce Add get merged area 2020-12-01 20:29:41 -06:00
Mauricio Baeza 72c307a7e5 Add transpose only data 2020-12-01 20:20:47 -06:00
Mauricio Baeza cd4550edf8 Add insert contents in docs 2020-12-01 20:16:21 -06:00
Mauricio Baeza bf9730336a Transpose range 2020-12-01 20:13:14 -06:00
Mauricio Baeza 93da631e38 Add find first in sheet 2020-11-30 22:00:29 -06:00
Mauricio Baeza a9c73f62b0 Set events sheet 2020-11-30 21:44:50 -06:00
Mauricio Baeza f6fb3e7f8c Get events sheet 2020-11-30 20:11:47 -06:00
Mauricio Baeza 272ec634b0 Add fill range 2020-11-29 22:11:06 -06:00
Mauricio Baeza ed2be5e239 Copy with format in range 2020-11-29 22:03:44 -06:00
Mauricio Baeza 2db8e78603 Add switch design mode 2020-11-29 21:53:42 -06:00
Mauricio Baeza 7727e8fe93 Add events controls 2020-11-29 21:32:06 -06:00
Mauricio Baeza 4a1285088b Init controls form 2020-11-28 22:50:28 -06:00
Mauricio Baeza 0efa92b6a9 Add button form control 2020-11-28 11:26:50 -06:00
Mauricio Baeza f052c634ab Add text form control 2020-11-28 11:10:34 -06:00
Mauricio Baeza fce0a21551 Add type and commmand for forms 2020-11-27 20:09:07 -06:00
Mauricio Baeza d4ade2b94c Add data source for forms 2020-11-27 20:03:33 -06:00
Mauricio Baeza c3d3d67278 Remove forms 2020-11-27 19:22:04 -06:00
Mauricio Baeza 301af065c7 Insert new form 2020-11-27 19:17:30 -06:00
Mauricio Baeza 361e4d3597 Add contains for ranges 2020-11-26 23:14:57 -06:00
Mauricio Baeza 811279bf7e Add range in range 2020-11-26 23:11:40 -06:00
Mauricio Baeza 400d59a3b9 Add controls in UnoPage 2020-11-26 22:59:33 -06:00
Mauricio Baeza f5f53e8ec0 Remove class UnoPage 2020-11-25 17:25:36 -06:00
Mauricio Baeza e8e3bc80a2 Add class UnoPage 2020-11-24 18:20:14 -06:00
Mauricio Baeza 9d11a866ca Add class for columns in sheet 2020-11-24 12:13:13 -06:00
Mauricio Baeza dcb5cc3a6b Some properties for rows 2020-11-24 11:47:02 -06:00
Mauricio Baeza 9447a66acd Get rows from range 2020-11-23 23:06:12 -06:00
Mauricio Baeza 6c1a94e468 Get rows from sheet 2020-11-23 22:59:20 -06:00
Mauricio Baeza 3592fdf13c Insert shape in cell 2020-11-23 22:18:30 -06:00
Mauricio Baeza 2d1088eaa5 Add value setter in class Grid 2020-11-23 21:46:42 -06:00
Mauricio Baeza bd4f55ca70 Add getitem in class Grid 2020-11-23 21:43:22 -06:00
Mauricio Baeza 3c4c378e94 Start IMAP server 2020-11-23 21:25:38 -06:00
Mauricio Baeza 67b8e842b3 Add context for uno controls 2020-11-21 22:53:24 -06:00
Mauricio Baeza 41342b8a59 Refactory class UnoGrid 2020-11-21 22:20:00 -06:00
Mauricio Baeza 830d08d01d Move class UnoGrid 2020-11-21 17:39:52 -06:00
Mauricio Baeza 5cee113cb7 Clean class Dialog 2020-11-21 17:29:08 -06:00
Mauricio Baeza 20e8230415 Get selection and parent in Tree control 2020-11-21 16:01:21 -06:00
Mauricio Baeza fc6e6ee93e Get dirs and files for paths 2020-11-20 23:44:16 -06:00
Mauricio Baeza d40371752b Add data from path in tree control 2020-11-20 23:21:57 -06:00
Mauricio Baeza 98e09e9e1d Add tree control 2020-11-20 21:36:05 -06:00
Mauricio Baeza ccdb875bbb Fix iteration in docs 2020-11-20 17:59:01 -06:00
Mauricio Baeza 19b0cd2835 Images refactory 2020-11-20 17:09:28 -06:00
Mauricio Baeza e0ead063ed Clean class Dialog 2020-11-19 22:48:24 -06:00
Mauricio Baeza 89fed4931d Remove line debug 2020-11-19 22:41:07 -06:00
Mauricio Baeza 8b4b44e06a Roadmap refactory 2020-11-19 22:37:11 -06:00
Mauricio Baeza da7f1ee392 Remove migrate clasess 2020-11-18 22:51:19 -06:00
Mauricio Baeza b022500d37 Update images 2020-11-18 22:37:59 -06:00
Mauricio Baeza ed2443f74f Writer paragraph is table 2020-11-14 00:01:36 -06:00
Mauricio Baeza 2e7d3d3ce2 Writer iter in paragraphs 2020-11-13 23:51:10 -06:00
Mauricio Baeza a64f119da0 Writer text and string 2020-11-13 23:31:13 -06:00
Mauricio Baeza ceb97135b6 Add cell styles 2020-11-13 23:22:03 -06:00
Mauricio Baeza 2ac1415975 Add popen function 2020-11-12 23:10:08 -06:00
Mauricio Baeza d22873f53b Add listbox control 2020-11-12 19:37:30 -06:00
Mauricio Baeza dbf793c6db Add copy from 2020-11-12 15:00:16 -06:00
Mauricio Baeza 145bf36eaa Remove some methods 2020-11-11 22:57:39 -06:00
Mauricio Baeza b94fdcef7a Add filter by color 2020-11-11 22:39:27 -06:00
Mauricio Baeza a820ed1a52 Add visibility for images 2020-11-11 21:16:01 -06:00
Mauricio Baeza 79d6a39984 Refactory some methods for sheets 2020-11-10 22:48:36 -06:00
Mauricio Baeza 278c631cdd Add clear undo 2020-11-10 22:35:46 -06:00
Mauricio Baeza 00e4d0a376 Calc, sort sheets by name 2020-11-10 22:33:04 -06:00
Mauricio Baeza debfc765c1 Add export for documents by extension 2020-11-10 22:24:53 -06:00
Mauricio Baeza 72433a609d Add export for documents 2020-11-10 21:52:19 -06:00
Mauricio Baeza 5f19e8492e Zip, unzip refactory 2020-11-10 18:40:36 -06:00
Mauricio Baeza 9d39405810 Add dict to range 2020-11-10 14:46:20 -06:00
Mauricio Baeza ce93d84c08 Refactory url_open 2020-11-10 13:08:55 -06:00
Mauricio Baeza 1702529ca8 Refactory get file 2020-11-09 22:05:14 -06:00
Mauricio Baeza eb2f159586 Refactory get path 2020-11-09 21:50:49 -06:00
Mauricio Baeza fa07c3c99e Get size for paths 2020-11-09 21:34:28 -06:00
Mauricio Baeza d61daff685 Refactory run 2020-11-09 20:47:08 -06:00
Mauricio Baeza cfb99b335c Refactory render 2020-11-09 20:33:34 -06:00
Mauricio Baeza 7d33ae28b3 Refactory get_epoch 2020-11-09 20:28:56 -06:00
Mauricio Baeza bca321404f Start, end refactory 2020-11-09 20:23:14 -06:00
Mauricio Baeza fede099f4b Copy to in sheet 2020-11-08 22:27:04 -06:00
Mauricio Baeza 56360bb10d Copy from doc refactory 2020-11-08 22:12:24 -06:00
Mauricio Baeza 772dacb828 Move, copy and remove from class sheet 2020-11-08 21:54:42 -06:00
Mauricio Baeza 62d0258476 Mover and remove sheet refactory 2020-11-08 21:35:51 -06:00
Mauricio Baeza a9ba202edd Insert sheet refactory 2020-11-08 21:25:08 -06:00
Mauricio Baeza bbe411e20c Class LODocument refactory 2020-11-07 22:37:58 -06:00
Mauricio Baeza 08592083e7 Make new extension 2020-11-07 20:40:17 -06:00
Mauricio Baeza d1dfdbf1a0 Copy files for new extension 2020-11-07 17:36:54 -06:00
Mauricio Baeza 582a327c7c Add new option for create new extension 2020-11-07 17:14:04 -06:00
Mauricio Baeza 0d19d634d1 Add logo pymacros 2020-11-07 16:42:34 -06:00
Mauricio Baeza 79023859e5 Clipboard to class 2020-11-06 22:57:48 -06:00
Mauricio Baeza 29856dc5e2 Copy and paste from clipboard 2020-11-06 22:16:31 -06:00
Mauricio Baeza 1f712dfc8a Send mails 2020-11-06 21:53:33 -06:00
Mauricio Baeza 3c9f0cc0f9 Functions for encrypt and decrypt 2020-11-06 20:43:07 -06:00
Mauricio Baeza bb3a3c8bf7 Clean some functions 2020-11-05 22:25:09 -06:00
Mauricio Baeza fed6a01a51 Read and write csv 2020-11-05 22:17:10 -06:00
Mauricio Baeza c0e246bb35 Set and get for config 2020-11-05 21:57:35 -06:00
Mauricio Baeza 70094e733e Update readme 2020-11-05 21:20:12 -06:00
Mauricio Baeza 74299c39dd Same selection in Calc and Writer 2020-11-04 16:13:21 -06:00
Mauricio Baeza d0d355b9f0 Add image control 2020-11-03 22:00:06 -06:00
Mauricio Baeza 47b65a5528 Add run in thread 2020-11-01 15:48:59 -06:00
Mauricio Baeza 8b04605bf1 Add save log 2020-11-01 15:01:38 -06:00
Mauricio Baeza 18ad5a2b0c Add array formula for cells 2020-11-01 14:33:37 -06:00
Mauricio Baeza 00cc16b895 Add insert image in Writer 2020-10-28 23:25:46 -06:00
Mauricio Baeza c4cae4b12c Add insert image 2020-10-27 09:35:27 -06:00
Mauricio Baeza 3b9e13b246 Add render cells 2020-10-20 21:32:07 -05:00
Mauricio Baeza 925adfa982 New class for shapes 2020-10-08 21:51:21 -05:00
Mauricio Baeza 01dab4e416 Change algorit for get time from cell 2020-10-02 13:48:59 -05:00
Mauricio Baeza 524eb06749 Add properties for time and date to cell 2020-10-01 16:03:13 -05:00
Mauricio Baeza 6e101413b9 Embed py in documents 2020-09-11 21:54:38 -05:00
Mauricio Baeza 14630c1bd7 Add timer 2020-08-25 22:41:45 -05:00
Mauricio Baeza 4527ca3da6 Start unit test 2020-08-25 12:32:58 -05:00
Mauricio Baeza b7dbbc1ebb Add support for querys 2020-08-23 23:53:37 -05:00
Mauricio Baeza 93bfb3cb78 Add support for peewee 2020-08-23 12:43:04 -05:00
Mauricio Baeza bcce720783 Add render data 2020-08-16 22:04:40 -05:00
Mauricio Baeza a072c9bdc3 Fix in AddOns menus 2020-03-12 22:51:38 -06:00
Mauricio Baeza 009952c824 Xml addons refactory 2019-11-29 21:41:36 -06:00
Mauricio Baeza d4ce8a2f35 Xml addons refactory 2019-11-29 21:40:56 -06:00
291 changed files with 43898 additions and 53946 deletions

1
.gitignore vendored
View File

@ -5,7 +5,6 @@ __pycache__/
conf.py
files/
docs/
source/source/
# Virtualenv

View File

@ -1,3 +1,49 @@
v 0.19.0 [25-sep-2021]
- Writer. Insert shapes. Set zoom.
v 0.18.0 [29-aug-2021]
- Writer. Move cursor: start, end, left, right
v 0.17.0 [10-jul-2021]
- Add insert math in writer
v 0.16.1 [01-jul-2021]
- Change property is_connected in db
- Update doc
v 0.16.0 [20-jun-2021]
- Add connection for postgres and mariadb
- Fix in call macro Basic
v 0.15.0 [05-jun-2021]
- Add autostyle for Writer tables
v 0.14.0 [13-apr-2021]
- Fix: Get paragraphs in Writer
- Add support for data pilots
v 0.13.0 [02-feb-2021]
- Fix: menus in AddOns
- Refactory many functions
v 0.12.0 [29-oct-2019]
- Xml addons refactory
- Xml shortcuts refactory
- Xml accelerator refactory
v 0.11.0 [27-oct-2019]
- Xml description refactory
v 0.10.0 [29-oct-2019]
- Add support for tree control
- Add support for Windows
@ -24,26 +70,21 @@ v 0.6.0 [18-sep-2019]
v 0.5.0 [15-sep-2019]
---------------------
- Add support for shortcuts
v 0.4.0 [14-sep-2019]
---------------------
- Add support for locales
v 0.3.0 [10-sep-2019]
---------------------
- Add support for dialogs
v 0.2.0 [09-sep-2019]
---------------------
- Add support for context in menus
v 0.1.0 [06-sep-2019]
---------------------
- Initial version

View File

@ -6,13 +6,13 @@
* Pay for support
**BCH**: `pzkuydh70v4r52hl3nqs66gy9wqdtrgej5ewv48xyq`
### Free software, not gratis.
**BCH** (Preferred): `qztd3l00xle5tffdqvh2snvadkuau2ml0uqm4n875d`
**BTC**: `3FhiXcXmAesmQzrNEngjHFnvaJRhU1AGWV`
**LTC**: `MBcgQ3LQJA4W2wsXknTdm2fxRSysLaBJHS`
**ETH**: `0x61a4f614a30ff686445751ed8328b82b77ecfc69`
PayPal :( donate ATT elmau DOT net
**LTC**: `MBcgQ3LQJA4W2wsXknTdm2fxRSysLaBJHS`

674
LICENSE Normal file
View File

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
empresa-libre
Copyright (C) 2016 Mauricio Baeza
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
empresa-libre Copyright (C) 2016 Mauricio Baeza
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

View File

@ -1,31 +1,45 @@
# ZAZ
Scripts and library for develop macros in LibreOffice with Python.
Scripts and library for develop macros and extensions for LibreOffice with Python.
Develop in pure Python, not need any dependence.
For Python 3.6+
* Look [documentation](https://gitlab.com/mauriciobaeza/zaz/wikis/home)
* Ver [documentación](https://gitlab.com/mauriciobaeza/zaz/wikis/inicio)
* Python 3.7+
* LibreOffice 7.0+
* LibreOffice SDK 7.0+
### Software libre, not gratis
#### Look [documentation](https://doc.cuates.net/zaz/)
This extension have a cost of maintenance of 1 euro every year.
## Free Software, not gratis software
BCH: `qztd3l00xle5tffdqvh2snvadkuau2ml0uqm4n875d`
### If you don't have money, no problem, send me a postcard from your city :)
BTC: `3FhiXcXmAesmQzrNEngjHFnvaJRhU1AGWV`
#### but, don't make the mistake of many of *thinking only in gratis software* that so much damage has done to **Free Software**.
PayPal :( donate ATT elmau DOT net
This extension have a cost of maintenance of 1 euros every year.
In order of preferred.
Mauricio Baeza
```
Euros
IBAN: BE60 9671 0556 5870
SWIFT / BIC: TRWIBEB1XXX
```
* BCH: `qztd3l00xle5tffdqvh2snvadkuau2ml0uqm4n875d`
* ETH: `0x61a4f614a30ff686445751ed8328b82b77ecfc69`
* XRP: `rLSn6Z3T8uCxbcd1oxwfGQN1Fdn5CyGujK` Tag: `6643162`
* LTC: `MBcgQ3LQJA4W2wsXknTdm2fxRSysLaBJHS`
* BTC: `3FhiXcXmAesmQzrNEngjHFnvaJRhU1AGWV`
## Extensions develop with ZAZ
* https://gitlab.com/mauriciobaeza/zaz-barcode
* https://gitlab.com/mauriciobaeza/zaz-favorite
* https://gitlab.com/mauriciobaeza/zaz-easymacro
* https://gitlab.com/mauriciobaeza/zaz-pip
* https://gitlab.com/mauriciobaeza/zaz-inspect
* https://git.cuates.net/elmau/zaz-pip
* https://git.cuates.net/elmau/zaz-favorites
* https://git.cuates.net/elmau/zaz-functions

View File

@ -1,4 +1,3 @@
* Help
* Option panel
* Sub-menus
* Lateral panel

View File

@ -1 +1 @@
0.11.0
0.19.0

20
doc/Makefile Normal file
View File

@ -0,0 +1,20 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = source
BUILDDIR = build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

4
doc/build/.buildinfo vendored Normal file
View File

@ -0,0 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 9dc485243b09862a9e5c34c02e1c395f
tags: 645f666f9bcd5a90fca523b33c5a78b7

BIN
doc/build/.doctrees/environment.pickle vendored Normal file

Binary file not shown.

BIN
doc/build/.doctrees/es/index.doctree vendored Normal file

Binary file not shown.

BIN
doc/build/.doctrees/index.doctree vendored Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
doc/build/.doctrees/main/base.doctree vendored Normal file

Binary file not shown.

BIN
doc/build/.doctrees/main/calc.doctree vendored Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
doc/build/.doctrees/main/config.doctree vendored Normal file

Binary file not shown.

Binary file not shown.

BIN
doc/build/.doctrees/main/email.doctree vendored Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
doc/build/.doctrees/main/intro.doctree vendored Normal file

Binary file not shown.

BIN
doc/build/.doctrees/main/path.doctree vendored Normal file

Binary file not shown.

BIN
doc/build/.doctrees/main/paths.doctree vendored Normal file

Binary file not shown.

BIN
doc/build/.doctrees/main/tools.doctree vendored Normal file

Binary file not shown.

Binary file not shown.

BIN
doc/build/.doctrees/main/writer.doctree vendored Normal file

Binary file not shown.

25
doc/build/_sources/index.rst.txt vendored Normal file
View File

@ -0,0 +1,25 @@
.. ZAZ documentation master file, created by
sphinx-quickstart on Thu Feb 4 22:28:30 2021.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Welcome to ZAZ's documentation!
===============================
.. toctree::
:maxdepth: 2
:caption: Contents:
main/intro
main/config
main/easymacro
main/examples
main/apendixes
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

View File

@ -0,0 +1,46 @@
Apendixes
---------
Remember, always import library.
.. code-block:: python
import easymacro as app
Get all filters in Calc sheet
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* Fields in filter
.. code-block:: python
'Finalized': False,
'UIName': 'EPS - Encapsulated PostScript',
'UserData': <ByteSequence instance 'b'''>,
'TemplateName': '',
'Enabled': True,
'Mandatory': False,
'Name': 'impress_eps_Export',
'FilterService': '',
'Type': 'eps_Encapsulated_PostScript',
'UIComponent': 'com.sun.star.svtools.SvFilterOptionsDialog',
'Flags': 1090,
'FileFormatVersion': 0,
'DocumentService': 'com.sun.star.presentation.PresentationDocument',
'UINames': {
'en-US': 'EPS - Encapsulated PostScript',
'es': 'EPS - PostScript encapsulado'}
.. code-block:: python
filters = app.get_filters()
headers = (('DocumentService', 'UIName', 'Name', 'Type'),)
data = [(f['DocumentService'], f['UIName'], f['Name'], f['Type'])
for f in filters]
doc = app.docs.new()
doc[0]['A1'].data = headers
doc[0]['A2'].data = data

View File

@ -0,0 +1,510 @@
Application
-----------
Remember, always import library.
.. code-block:: python
import easymacro as app
Create instances
^^^^^^^^^^^^^^^^
* Instances without context
.. code-block:: python
toolkit = app.create_instance("com.sun.star.awt.Toolkit")
* Instances with context
.. code-block:: python
service = 'com.sun.star.awt.DialogProvider2'
dialog = app.create_instance(service, True)
* Get desktop
.. code-block:: python
desktop1 = app.create_instance('com.sun.star.frame.Desktop', True)
# ~ or
desktop2 = app.get_desktop()
app.msgbox(desktop1 == desktop2)
Current doc
^^^^^^^^^^^
.. code-block:: python
doc = app.active
app.msgbox(doc.title)
Iter docs
^^^^^^^^^
.. code-block:: python
for doc in app.docs:
app.msgbox(doc.title)
Count
^^^^^
.. code-block:: python
count = len(app.docs)
app.msgbox(count)
Get by name
^^^^^^^^^^^
.. code-block:: python
name = 'MyDoc.ods'
if name in app.docs:
doc = app.docs[name]
app.msgbox(doc.title)
If contain
^^^^^^^^^^
.. code-block:: python
result = 'myfile.ods' in app.docs
app.msgbox(result)
New
^^^
For default create new Calc document.
.. code-block:: python
doc = app.docs.new()
app.msgbox(doc.type)
For new Writer document.
.. code-block:: python
doc = app.docs.new('writer')
app.msgbox(doc.type)
With arguments.
.. code-block:: python
args= {'Hidden': True}
doc = app.docs.new('writer', args)
msg = f'{doc.type} - {doc.title}'
app.msgbox(msg)
doc.visible = True
Other documents.
.. code-block:: python
doc = app.docs.new('draw')
app.msgbox(doc.type)
doc = app.docs.new('impress')
app.msgbox(doc.type)
Open
^^^^
.. code-block:: python
path = '/home/mau/MyDoc.ods'
doc = app.docs.open(path)
While LibreOffice support format, you can open arbitrary file.
.. code-block:: python
path = '/home/mau/example.xlsx'
doc = app.docs.open(path)
With arguments.
.. code-block:: python
path = '/home/mau/example.odt'
args = {'Password': 'letmein'}
doc = app.docs.open(path, args)
Save
^^^^
.. code-block:: python
path = '/home/mau/myfile.ods'
doc = app.docs.new()
doc.save(path)
* If previously open and modify any file.
.. code-block:: python
doc.save()
* Open exists file and save with other name.
.. code-block:: python
path = '/home/mau/myfile.ods'
doc = app.docs.open(path)
new_path = '/srv/mau/other_name.ods'
doc.save(new_path)
Close
^^^^^
.. code-block:: python
doc = app.docs.new()
app.msgbox(doc.title)
doc.close()
To PDF
^^^^^^
* Save in path
.. code-block:: python
doc = app.active
path = '/home/mau/test.pdf'
doc.to_pdf(path)
* Save in memory
.. code-block:: python
doc = app.active
pdf = doc.to_pdf()
Export
^^^^^^
* Export common formats
.. code-block:: python
doc = app.docs.new()
path = '/home/mau/myfile.xlsx'
filter_name = 'xlsx'
doc.export(path, filter_name)
path = '/home/mau/myfile.xls'
filter_name = 'xls'
doc.export(path, filter_name)
doc = app.docs.new('writer')
path = '/home/mau/myfile.docx'
filter_name = 'docx'
doc.export(path, filter_name)
path = '/home/mau/myfile.doc'
filter_name = 'doc'
doc.export(path, filter_name)
path = '/home/mau/myfile.rtf'
filter_name = 'rtf'
doc.export(path, filter_name)
* For all support formats look `Apendix`_
* Export in memory.
.. code-block:: python
doc = app.docs.new()
filter_name = 'xlsx'
excel_doc = doc.export(filter_name=filter_name)
Fonst
^^^^^
* Get all fonts
.. code-block:: python
fonts = app.get_fonts()
for f in fonts:
print(f'Name: {f.Name} - StyleName: {f.StyleName}')
Filters
^^^^^^^
* Get all `support filters`_
.. code-block:: python
filters = app.get_filters()
ds = []
for f in filters:
data = f"UI Name: {f['UIName']} - Name: {f['Name']} - Type: {f['Type']}"
app.debug(data)
Call dispatch
^^^^^^^^^^^^^
You can call any `dispatch command`_ used only if property or method no exists in original object or in `easymacro.py`
.. code-block:: python
doc = app.active
command = '.uno:Gallery'
app.call_dispatch(doc, command)
Properties
^^^^^^^^^^
obj
~~~
* Get original object pyUNO (read only)
.. code-block:: python
doc = app.active
app.msgbox(type(doc))
app.msgbox(type(doc.obj))
title
~~~~~
.. code-block:: python
doc = app.active
app.msgbox(doc.title)
doc.title = 'New title'
app.msgbox(doc.title)
type
~~~~
* Get type document: calc, writer, etc. (read only)
.. code-block:: python
doc = app.active
app.msgbox(doc.type)
uid
~~~
* Get internal RuntimeUID form document. (read only)
.. code-block:: python
doc = app.active
app.msgbox(doc.uid)
is_saved
~~~~~~~~
* If document is saved in this or not (read only)
.. code-block:: python
doc = app.active
app.msgbox(doc.is_saved)
is_modified
~~~~~~~~~~~
* If document has been modified (read only)
.. code-block:: python
doc = app.active
app.msgbox(doc.is_modified)
is_read_only
~~~~~~~~~~~~
.. code-block:: python
doc = app.active
app.msgbox(doc.is_read_only)
path
~~~~
* Get path of document. (read only)
.. code-block:: python
doc = app.active
app.msgbox(doc.path)
dir
~~~
* Get only directory from path saved (read only)
.. code-block:: python
doc = app.active
app.msgbox(doc.dir)
file_name
~~~~~~~~~
* Get only file name from path saved (read only)
.. code-block:: python
doc = app.active
app.msgbox(doc.file_name)
name
~~~~
* Get only name without extension (read only)
.. code-block:: python
doc = app.active
app.msgbox(doc.file_name)
visible
~~~~~~~
* Hide or show document.
.. code-block:: python
doc = app.active
doc.visible = False
app.msgbox(doc.visible)
doc.visible = True
zoom
~~~~
* Get or set zoom value.
.. code-block:: python
doc = app.active
zoom = doc.zoom
app.msgbox(zoom)
doc.zoom = zoom * 2
app.msgbox(doc.zoom)
doc.zoom = zoom
selection
~~~~~~~~~
* **CAUTION**: Selection can be many things.
.. code-block:: python
doc = app.active
selection = doc.selection
app.msgbox(selection)
status_bar
~~~~~~~~~~
* Get status bar, always control in other thread.
.. code-block:: python
@app.run_in_thread
def update_status_bar(sb, text, limit):
sb.start(text, limit)
for i in range(limit):
sb.setValue(i)
app.sleep(1)
# ~ Is important free status bar
sb.end()
return
def main():
doc = app.active
update_status_bar(doc.status_bar, 'Line', 10)
return
Methods
^^^^^^^
set_focus
~~~~~~~~~
.. code-block:: python
name = 'MyDoc.ods'
if name in app.docs:
doc = app.docs[name]
doc.set_focus()
copy
~~~~
* Copy current selection
.. code-block:: python
doc = app.active
doc.copy()
paste
~~~~~
* Paste any content in clipboard
.. code-block:: python
doc = app.active
doc.paste()
.. _dispatch command: https://wiki.documentfoundation.org/Development/DispatchCommands
.. _support filters: https://help.libreoffice.org/latest/en-US/text/shared/guide/convertfilters.html
.. _Apendix: apendixes.html

20
doc/build/_sources/main/base.rst.txt vendored Normal file
View File

@ -0,0 +1,20 @@
Base
----
Remember, always import library.
.. code-block:: python
import easymacro as app
New database
^^^^^^^^^^^^
.. code-block:: python
path = '/home/mau/db.odb'
db = app.doc.connect(path)
app.msgbox(db.type)

18
doc/build/_sources/main/calc.rst.txt vendored Normal file
View File

@ -0,0 +1,18 @@
Calc
----
Remember, always import library.
.. code-block:: python
import easymacro as app
.. toctree::
:maxdepth: 2
calc_doc.rst
calc_sheets.rst
calc_ranges.rst
calc_ranges2.rst
calc_data.rst

View File

@ -0,0 +1,92 @@
Data
~~~~
Read
^^^^
* Get value from cell, automatic detect type and get value.
.. code-block:: python
sheet = app.active_sheet
cell = sheet['A1']
value = cell.value
info = f'Cell Type = {cell.type}\n\nCell Value = {cell.value}'
app.msgbox(info)
* Get date, time and datetime like data Python.
.. code-block:: python
sheet = app.active_sheet
cell = sheet['A1']
app.msgbox(cell.date)
app.msgbox(cell.time)
app.msgbox(cell.datetime)
* Get values from cell range.
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:B5']
app.msgbox(rango.data)
* Get formulas
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:B5']
app.msgbox(rango.formula)
* Get array formula
.. code-block:: python
sheet = app.active_sheet
rango = sheet['C10:E15']
app.msgbox(rango.array_formula)
* Get like dictionary
The first row in range are the keys.
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:B5']
app.msgbox(rango.dict)
Write
^^^^^
* Automatic detect data type.
.. code-block:: python
sheet = app.active_sheet
# ~ Set int
sheet['A1'].value = 1
# ~ Set float
sheet['A2'].value = 10.5
# ~ Set string
sheet['A3'].value = 'Damn World'
# ~ Set formula
sheet['A4'].value = '=RAND()'
# ~ Set date
sheet['A5'].value = app.today()
# ~ Set time
sheet['A6'].value = app.now(True)
# ~ Set datetime
sheet['A7'].value = app.now()

View File

@ -0,0 +1,50 @@
Document
~~~~~~~~
Current doc
^^^^^^^^^^^
.. code-block:: python
doc = app.active
app.msgbox(doc.type)
Selection
^^^^^^^^^
* If selection is range get LOCalcRange, if selection is shape get LOShape, other selection get original pyuno object.
.. code-block:: python
doc = app.active
selection = doc.selection
app.msgbox(type(selection))
Headers
^^^^^^^
* Hide or show columns and rows headers.
.. code-block:: python
doc = app.active
app.msgbox(doc.headers)
doc.headers = not doc.headers
app.msgbox(doc.headers)
doc.headers = not doc.headers
Tabs
^^^^
* Hide or show tab sheets.
.. code-block:: python
doc = app.active
app.msgbox(doc.tabs)
doc.tabs = not doc.tabs
app.msgbox(doc.tabs)
doc.tabs = not doc.tabs

View File

@ -0,0 +1,190 @@
Cell and ranges
~~~~~~~~~~~~~~~
Cells
^^^^^
* By name
.. code-block:: python
sheet = app.active_sheet
cell = sheet['A1']
app.msgbox(cell.name)
* By position [row, column]
.. code-block:: python
cell = sheet[1, 4]
app.msgbox(cell.name)
Ranges
^^^^^^
* By name
.. code-block:: python
sheet = app.active_sheet
rango = sheet['B2:D5']
app.msgbox(rango.name)
* By position [start_row:end_row, start_column:end_column]
.. code-block:: python
rango = sheet[1:5,1:4]
app.msgbox(rango.name)
* Group ranges
.. code-block:: python
doc = app.active
sheet = doc.active
last = doc[-1]
with doc.ranges as r:
# Add one range
r.add(sheet['A1:B2'])
r2 = sheet['C4:D5']
r3 = last['E7:D8']
r4 = last['E10:F12']
# Add multiple ranges
r.add((r2, r3, r4))
app.debug(r.names)
* Get the same range in all sheets
.. code-block:: python
ranges = doc.get_ranges('A1:B1')
app.debug(ranges.names)
* Get columns by name.
.. code-block:: python
sheet = app.active_sheet
rango = sheet['B:B']
app.debug(rango.name)
rango = sheet['D:F']
app.debug(rango.name)
* Get columns by position.
.. code-block:: python
sheet = app.active_sheet
# Column B
rango = sheet[0:,1]
app.debug(rango.name)
# Columnas D:F
rango = sheet[0:,3:6]
app.debug(rango.name)
* Get rows
.. code-block:: python
sheet = app.active_sheet
# One row
row = sheet[1]
app.debug(row.name)
# Range rows
row = sheet[3:10,0:]
app.debug(row.name)
Info ranges
^^^^^^^^^^^
* Get absolute name
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:E10']
app.msgbox(rango.name)
* Get address
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1']
a = rango.address
data = f"""Cell Address
Row: {a.Row}
Column: {a.Column}
"""
app.msgbox(data)
rango = sheet['A1:E10']
ra = rango.range_address
data = (
f'Range Address:\n\n'
f'Star Row: {ra.StartRow}\n'
f'End Row: {ra.EndRow}\n'
f'Star Column: {ra.StartColumn}\n'
f'End Column: {ra.EndColumn}\n'
)
app.msgbox(data)
Special ranges
^^^^^^^^^^^^^^
* Get used area
.. code-block:: python
sheet = app.active_sheet
rango = sheet.used_area
app.msgbox(rango.name)
* Get current region
.. code-block:: python
rango = sheet['A1'].current_region
app.msgbox(rango.name)
* Get next free cell
.. code-block:: python
cell = sheet['A1'].next_cell
app.msgbox(cell.name)
* Get merged area
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1'].merged_area
app.msgbox(rango.name)
* Get visible cells
.. code-block:: python
sheet = app.active_sheet
rangos = sheet['A1:E10'].visible
for r in rangos:
app.debug(r.name)
* Get empty cells
.. code-block:: python
sheet = app.active_sheet
rangos = sheet['A1:E10'].empty
for r in rangos:
app.debug(r.name)

View File

@ -0,0 +1,124 @@
Manipulate ranges
~~~~~~~~~~~~~~~~~
**Not, not is necesary select range for manipulate**
Select
^^^^^^
* Select from doc
.. code-block:: python
doc = app.active
sheet = app.active_sheet
cell = sheet['A1']
doc.select(cell)
* Select in self range
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:C5']
rango.select()
Move
^^^^
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:C5']
rango.move(sheet['E6'])
* Move to other sheet
.. code-block:: python
rango.move(doc[-1]['E6'])
Insert
^^^^^^
* Default insert down
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:C1']
rango.insert()
* Insert and move right
.. code-block:: python
rango.insert(app.CellInsertMode.RIGHT)
* Insert entire rows
.. code-block:: python
rango.insert(app.CellInsertMode.ROWS)
* Insert entire columns
.. code-block:: python
rango.insert(app.CellInsertMode.COLUMNS)
Delete
^^^^^^
* Default move up
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:C1']
rango.delete()
* Delete and move left
.. code-block:: python
rango.delete(app.CellDeleteMode.LEFT)
* Delete entire rows
.. code-block:: python
rango.delete(app.CellDeleteMode.ROWS)
* Delete entire columns
.. code-block:: python
rango.delete(app.CellDeleteMode.COLUMNS)
Copy
^^^^
* Using native method `copyRange`, current range always should be a cell and source should be a range.
.. code-block:: python
sheet = app.active_sheet
cell = sheet['A5']
source = sheet['D1:E4']
cell.copy_from(source)
* From range to cell
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:C5']
target = sheet['E1']
rango.copy_to(target)

View File

@ -0,0 +1,332 @@
Sheets
~~~~~~
Active sheet
^^^^^^^^^^^^
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.name)
# or
doc = app.active
sheet = doc.active
Get by index
^^^^^^^^^^^^
.. code-block:: python
doc = app.active
sheet = doc[0]
app.msgbox(sheet.name)
Get by name
^^^^^^^^^^^
.. code-block:: python
doc = app.active
sheet = doc['Sheet1']
app.msgbox(sheet.name)
Contains
^^^^^^^^
.. code-block:: python
doc = app.active
app.msgbox('Sheet1' in doc)
Get tuple with all names
^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
doc = app.active
app.msgbox(doc.names)
Count
^^^^^
.. code-block:: python
doc = app.active
app.msgbox(len(doc))
New
^^^
* Always validate if new name not exists.
.. code-block:: python
doc = app.active
sheet = doc.new_sheet()
# CAUTION: If 'NewSheet' exists, reset it to clean sheet.
doc['NewSheet'] = sheet
# ~ or
sheet = doc.insert('NewSheet2')
* Insert multiple, get last insert.
.. code-block:: python
names = ('One', 'Two', 'Three')
sheet = doc.insert(names)
Move
^^^^
* Move by object to last position.
.. code-block:: python
sheet = doc[0]
doc.move(sheet)
* Move by name to last position.
.. code-block:: python
doc.move('Sheet1')
* Move to position.
.. code-block:: python
sheet = doc[0]
doc.move(sheet, 2)
* Move from sheet
.. code-block:: python
sheet = app.active_sheet
sheet.move()
* Move to position.
.. code-block:: python
sheet = app.active_sheet
sheet.move(2)
Remove
^^^^^^
* Remove by object.
.. code-block:: python
sheet = doc[0]
doc.remove(sheet)
* Remove by name.
.. code-block:: python
doc.remove('One')
* Remove from sheet.
.. code-block:: python
sheet = app.active_sheet
sheet.remove()
Copy
^^^^
* Copy inside the same spreadsheet.
* By object
.. code-block:: python
sheet = doc[0]
doc.copy_sheet(sheet, 'OtherSheet')
* By name
.. code-block:: python
doc.copy_sheet('Sheet1', 'Sheet2')
* From sheet
.. code-block:: python
sheet = app.active_sheet
sheet.copy(sheet.name + '_2')
Copy from
^^^^^^^^^
* Copy sheet from one spreadsheet to other.
.. code-block:: python
doc = app.active
doc_source = app.docs['Contacts.ods']
name_source = 'Names'
name_target = 'Names'
position = 0
doc.copy_from(doc_source, name_source, name_target, position)
Copy to
^^^^^^^
* Copy from sheet with the same name
.. code-block:: python
doc = app.docs.new()
sheet = app.active_sheet
sheet.copy_to(doc)
* Used new name
.. code-block:: python
doc = app.docs.new()
sheet = app.active_sheet
sheet.copy_to(doc, 'NewName')
Sort
^^^^
* Sort sheets by names.
.. code-block:: python
doc = app.active
doc.sort()
Name
^^^^
* Name visible by the user.
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.name)
sheet.name = 'NewName'
app.msgbox(sheet.name)
Code name
^^^^^^^^^
* Name only accessible by code.
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.code_name)
sheet.code_name = 'my_name'
app.msgbox(sheet.code_name)
Visible
^^^^^^^
* Apply only with spreadsheet with two or more sheets.
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.visible)
sheet.visible = not sheet.visible
app.msgbox(sheet.visible)
sheet.visible = not sheet.visible
Is protected
^^^^^^^^^^^^
* If sheet is protected with password.
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.is_protected)
Set password
^^^^^^^^^^^^
.. code-block:: python
sheet = app.active_sheet
sheet.password = 'letmein'
app.msgbox(sheet.is_protected)
Remove password
^^^^^^^^^^^^^^^
.. code-block:: python
sheet = app.active_sheet
sheet.password = 'letmein'
app.msgbox(sheet.is_protected)
sheet.unprotect('letmein')
app.msgbox(sheet.is_protected)
Tab color
^^^^^^^^^
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.color)
sheet.color = 'red'
app.msgbox(sheet.color)
# RGB
sheet.color = (125, 200, 10)
app.msgbox(sheet.color)
Document parent
^^^^^^^^^^^^^^^
.. code-block:: python
doc = sheet.doc
Activate
^^^^^^^^
.. code-block:: python
doc = app.active
# Get last sheet
sheet = doc[-1]
# Activate from doc
doc.activate(sheet)
# Activate from sheet
sheet.activate()

399
doc/build/_sources/main/config.rst.txt vendored Normal file
View File

@ -0,0 +1,399 @@
Configuration
=============
* Create new extension:
``./zaz.py -new -t ~/projects -n MyGreatExtension``
* Move to new folder:
``cd ~/projects/MyGreatExtension``
* Edit file ``conf.py``
``vim conf.py``
Parameters
----------
**Configure correctly this options, before you start code your extension.**
Only modify this options.
Type extension
^^^^^^^^^^^^^^
**TYPE_EXTENSION**
The type extension that you want develop.
* Integer
* 1 = Normal extension
* 2 = New components
* 3 = Calc addin
Example:
.. code-block:: python
TYPE_EXTENSION = 1
Version
^^^^^^^
**VERSION**
* String
* The current version of extension, look: `Semantic Versioning`_
Example:
.. code-block:: python
VERSION = '0.1.0'
Name
^^^^
**NAME**
* String
* Your extension name, not used spaces.
Example:
.. code-block:: python
NAME = 'MyGreatExtension'
ID extension
^^^^^^^^^^^^
The internal name for extension.
**ID**
* String
* Should be unique, used URL inverse
Example:
.. code-block:: python
ID = 'org.yourname.extensionname'
Locales
^^^^^^^
If your extension will be multi-language (recommended)
**USE_LOCALES**
* Bool
Example:
.. code-block:: python
USE_LOCALES = True
Domain for locales
^^^^^^^^^^^^^^^^^^
The base name for generate files POT
**DOMAIN**
* String
Example:
.. code-block:: python
DOMAIN = 'base'
Path pyGetText
^^^^^^^^^^^^^^
Absolute path for tool `pygettext.py` for generate POT.
**PATH_PYGETTEXT**
* String
Example:
.. code-block:: python
PATH_PYGETTEXT = '/usr/lib/python3.9/Tools/i18n/pygettext.py'
Author
^^^^^^
Your information like author, one or more languages. This information is displayed in the extension manager.
**PUBLISHER**
* Dictionary
Example:
.. code-block:: python
PUBLISHER = {
'en': {'text': 'Your name', 'link': 'https://your.page'},
'es': {'text': 'Tu nombre', 'link': 'https://elmau.net'},
}
Extension icon
^^^^^^^^^^^^^^
Path relative or absolute to extension logo. Show in extension manager.
**ICON**
* String
Example:
.. code-block:: python
ICON='images/logo.png'
License
^^^^^^^
The license for your extension, please, used free license.
**LICENSE**
* String
Example:
.. code-block:: python
LICENSE_EN = f"""This file is part of {NAME}.
{NAME} is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
{NAME} is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with {NAME}. If not, see <https://www.gnu.org/licenses/>.
"""
LICENSE_ES = LICENSE_EN
Information
^^^^^^^^^^^
Information of extension: Display name, description and license to displayed when install.
**INFO**
* Dictionary
Example:
.. code-block:: python
INFO = {
'en': {
'display_name': 'Test Macro',
'description': 'My great extension',
'license': LICENSE_EN,
},
'es': {
'display_name': 'Macro de Prueba',
'description': 'Mi gran extensión',
'license': LICENSE_ES,
},
}
Parent menu
^^^^^^^^^^^
Only for normal extension (`TYPE_EXTENSION = 1`), where add extension menu, only two possible values: **AddonMenu** or **OfficeMenuBar**
**PARENT**
* String
* **AddonMenu**: Show in menu Tools->Add-Ons
* **OfficeMenuBar**: Show in LibreOffice menu
Example:
.. code-block:: python
PARENT = 'OfficeMenuBar'
Main menu
^^^^^^^^^
Only for normal extension (`TYPE_EXTENSION = 1`) and only if parent menu is `OfficeMenuBar`. Can be multi language.
**MENU_MAIN**
* Dictionary
Example:
.. code-block:: python
MENU_MAIN = {
'en': 'My Extension',
'es': 'Mi Extensión',
}
Menus
^^^^^
Each menu for show in parent menu.
**MENUS**
* Tuple of dictionaries
* **title** = Label showed, can be multi language.
* **argument** = Argument to pass to extension, not use spaces.
* **context** = In what applications show, if is blank, show in all.
* **icon** = Icon to add, the icon should be in format BMP. The name should be NAME_16.bmp or NAME_26.bmp. Set only NAME in this property.
* **toolbar** = It is True, add to new toolbar too, used same icon.
* **shortcut** = Shortcut keyboard for this menu. For `Shift+Ctrl+Alt+T` used: `T_SHIFT_MOD1_MOD2`
Example:
.. code-block:: python
MENUS = (
{
'title': {'en': 'Option 1', 'es': 'Opción 1'},
'argument': 'option1',
'context': 'calc,writer',
'icon': 'icon',
'toolbar': True,
'shortcut': 'T_SHIFT_MOD1_MOD2',
},
)
Functions
^^^^^^^^^
Only for Add-in extension (`TYPE_EXTENSION = 2`). Can be multi language.
The key of dictionary, is the same name of your function. Used exactly you used in your code.
**FUNCTIONS**
* Dictionary of dictionaries
* **displayname** = Show in function wizard, multi language.
* **description** = Show in function wizard, multi language.
* **parameters** = Each parameters in your function.
* **key** = Is the exactly name for parameter in your code function.
* **displayname** = Show in function wizard, multi language.
* **description** = Show in function wizard, multi language.
Example:
.. code-block:: python
FUNCTIONS = {
'test': {
'displayname': {'en': 'test', 'es': 'prueba'},
'description': {'en': 'My test', 'es': 'Mi prueba'},
'parameters': {
'value': {
'displayname': {'en': 'value', 'es': 'valor'},
'description': {'en': 'The value', 'es': 'El valor'},
},
},
},
}
Default program
^^^^^^^^^^^^^^^
Optional. Open automatically when install and test.
**PROGRAM**
* String
* --calc
* --writer
* --draw
* --impress
Example:
.. code-block:: python
PROGRAM = '--calc'
File test
^^^^^^^^^
Optional. Open automatically when install and test.
* String
Example:
.. code-block:: python
FILE_TEST = '/home/mau/example.ods'
Paths
^^^^^
Paths for install and test. `idlc`, `include` and `remerge` only used en `TYPE_EXTENSION` 2 or 3. `idlc` and path `include` is installed with LibreOffice SDK.
**PATHS**
* Dictionary
* **idlc** for generate files urd.
* **include** path with files idl.
* **remerge** for generate files rdb.
* **soffice** for open LibreOffice.
* **install** for install extension.
Example:
.. code-block:: python
PATHS = {
'idlc': '/usr/lib/libreoffice/sdk/bin/idlc',
'include': '/usr/share/idl/libreoffice',
'regmerge': '/usr/lib/libreoffice/program/regmerge',
'soffice': ('soffice', PROGRAM, FILE_TEST),
'install': ('unopkg', 'add', '-v', '-f', '-s'),
}
.. _Semantic Versioning: https://semver.org/

View File

@ -0,0 +1,34 @@
Library easymacro.py
====================
**easymacro.py** it's a library for easily develop macros en LibreOffice con Python. It is an abstraction layer between the extensive and complex LibreOffice API UNO and your code.
Probably, your will be more happy if used it. :)
You can used **easymacro.py** with any extension or directly in your macros.
**IMPORTANT**: Majority objects are custom objects, you can always get original UNO object with property `obj`
.. code-block:: python
doc = app.active
app.msgbox(doc)
app.msgbox(doc.obj)
.. toctree::
:maxdepth: 2
:caption: Contents:
tools_for_debug.rst
tools.rst
paths.rst
email.rst
application.rst
calc.rst
writer.rst
base.rst

111
doc/build/_sources/main/email.rst.txt vendored Normal file
View File

@ -0,0 +1,111 @@
Email
-----
Remember, always import library.
.. code-block:: python
import easymacro as app
**IMPORTANT:** Always save your config the more security way possible.
Send email
^^^^^^^^^^
.. code-block:: python
from conf import PASSWORD
SERVER = dict(
server = 'mail.server.net' ,
port = 495,
ssl = True,
user = 'no-responder@noexiste.mx',
password = PASSWORD,
)
body = "Hello Ingrid\n\nWho are you?\n\nBest regards"
message = dict(
to = 'ingrid.bergman@love.you',
subject = 'I love you',
body = body,
)
app.send_email(SERVER, message)
* We can use fields `cc`, `bcc` too and send to more than one address emails.
.. code-block:: python
to = 'mail1@correo.com,mail2@correo.com,mail3@correo.com'
cc = 'other@correo.com'
bcc = 'hidden@correo.com'
* We can send too more than one message.
.. code-block:: python
message1 = dict(
to = 'ingrid.bergman@email.net',
subject = 'I love you',
body = "Hello Ingrid\n\nWho are you?\n\nBest regards",
)
message2 = dict(
to = 'sophia.loren@email.net',
subject = 'I love you',
body = "Hello Sophia\n\nWho are you?\n\nBest regards",
)
messages = (message1, message2)
app.send_email(SERVER, messages)
.. code-block:: bash
30/06/2021 13:43:23 - DEBUG - Connect to: mail.gandi.net
30/06/2021 13:43:24 - DEBUG - Email sent...
30/06/2021 13:43:26 - DEBUG - Email sent...
30/06/2021 13:43:26 - DEBUG - Close connection...
* Send with attachment
.. code-block:: python
files = '/home/mau/file.epub'
message = dict(
to = 'ingrid.bergman@email.net',
subject = 'I love you',
body = "Hello Ingrid\n\nWho are you?\n\nBest regards",
files = files,
)
* Send more than one file.
.. code-block:: python
files = (
'/home/mau/file1.epub',
'/home/mau/file2.epub',
)
* If your client email used `mbox` format, we can save in any path into your email client configuration.
.. code-block:: python
path_save = '/home/mau/.thunderbird/7iznrbyw.default/Mail/Local Folders/LibreOffice'
message = dict(
to = 'ingrid.bergman@email.net',
subject = 'I love you',
body = "Hello Ingrid\n\nWho are you?\n\nBest regards",
path = path_save
)
app.send_email(SERVER, message)
* All emails always send in other thread.
.. _cryptography: https://github.com/pyca/cryptography

View File

@ -0,0 +1,15 @@
Examples
========
Examples of macros used in production.
.. toctree::
:maxdepth: 2
:caption: Contents:
examples_app.rst
examples_calc.rst
examples_writer.rst
examples_draw.rst
examples_base.rst

View File

@ -0,0 +1,47 @@
For Application
---------------
Make custom menu
^^^^^^^^^^^^^^^^
Macro example in library ``mymacros``
.. code-block:: python
def show_info_debug():
app.msgbox(app.INFO_DEBUG)
return
Insert custom menu in menu Tools in Calc.
.. code-block:: python
def insert_menu_in_calc():
menus = app.menus['calc']
data = {
'Label': 'My Macros',
'CommandURL': 'zaz.my.macros',
'Index': 0,
'Submenu': [
{
'Label': 'Show info debug',
'CommandURL': {'library': 'mymacros', 'name': 'show_info_debug'},
'ShortCut': 'Ctrl+Shift+Alt+M'
},
],
}
menus.insert('Tools', data)
return
Delete menu
^^^^^^^^^^^
.. code-block:: python
def delete_menu():
menus = app.menus['calc']
menus.remove('Tools', 'zaz.my.macros')
return

View File

@ -0,0 +1,100 @@
For Base
--------
You need install ``peewee``
``pip install -U peewee``
Create table
^^^^^^^^^^^^
.. code-block:: python
import easymacro as app
from peewee import *
database_proxy = DatabaseProxy()
class BaseModel(Model):
class Meta:
database = database_proxy
legacy_table_names = False
class Contacts(BaseModel):
id = IdentityField()
name = CharField()
born = app.BaseDateField(null=True)
def create_table():
path = '/home/mau/test.odb'
if app.paths.exists(path):
db = app.docs.connect(path)
else:
db = app.docs.new('base', {'path': path})
tables = [Contacts]
db.initialize(database_proxy, tables)
return
Insert data
^^^^^^^^^^^
.. code-block:: python
def base_insert_data():
path = '/home/mau/test.odb'
db = app.docs.connect(path)
db.initialize(database_proxy)
rows = (
dict(name = 'Ingrid Bergman', born=app.dates.date(2001, 1, 1)),
dict(name = 'Sofia Loren', born=app.dates.date(2002, 2, 2)),
dict(name = 'Kim Novak', born=app.dates.date(2003, 3, 3)),
dict(name = 'Jane Fonda', born=app.dates.date(2004, 4, 4)),
dict(name = 'Marion Cotillar', born=app.dates.date(2005, 5, 5)),
)
for row in rows:
Contactos.insert(**row).execute()
return
Select data
^^^^^^^^^^^
.. code-block:: python
def base_select_data():
path = '/home/mau/test.odb'
db = app.docs.connect(path)
db.initialize(database_proxy)
query = Contactos.select()
rows = db.get_query(query).tuples
for row in rows:
print(row)
rows = db.get_query(query).dicts
for row in rows:
print(row)
return
You can get tuples or dict::
(1, 'Ingrid Bergman', datetime.date(2001, 1, 1))
(2, 'Sofia Loren', datetime.date(2002, 2, 2))
(3, 'Kim Novak', datetime.date(2003, 3, 3))
(4, 'Jane Fonda', datetime.date(2004, 4, 4))
(5, 'Marion Cotillar', datetime.date(2005, 5, 5))
{'id': 1, 'name': 'Ingrid Bergman', 'born': datetime.date(2001, 1, 1)}
{'id': 2, 'name': 'Sofia Loren', 'born': datetime.date(2002, 2, 2)}
{'id': 3, 'name': 'Kim Novak', 'born': datetime.date(2003, 3, 3)}
{'id': 4, 'name': 'Jane Fonda', 'born': datetime.date(2004, 4, 4)}
{'id': 5, 'name': 'Marion Cotillar', 'born': datetime.date(2005, 5, 5)}

View File

@ -0,0 +1,47 @@
For Calc
--------
Data to cell
^^^^^^^^^^^^
Automatic calculate size range.
.. code-block:: python
def calc_data_to_cell():
sheet = app.active_sheet
data = (
('Month', 'Total'),
('January', 100),
('February', 200),
('March', 300),
('April', 400),
('May', 500),
)
sheet['A1'].data = data
return
Copy visible cells
^^^^^^^^^^^^^^^^^^
.. code-block:: python
doc = app.active
rangos = doc.active['A1'].current_region.visible
doc.select(rangos)
doc.copy()
doc.active['A15'].select()
doc.paste()
Merge by row
^^^^^^^^^^^^
.. code-block:: python
rango = app.selection
rango.merge_by_row()

View File

@ -0,0 +1,27 @@
For Draw
-----------------
Save image from clipboard
^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
def save_image_from_clipboard():
# Target path
path = '/home/mau/Pictures'
# Open new hidden Draw doc
doc = app.docs.new('draw', {'Hidden': True})
# Paste image from clipboard and return
image = doc.paste()
# Save image
image.save(path)
# Close document
doc.close()
app.msgbox('Image saved')
return

View File

@ -0,0 +1,24 @@
For Writer
----------
Set autostyle in table
~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
def writer_table_set_style():
doc = app.active
table = doc.tables[0]
table.style = 'Academic'
return
Insert math formula
~~~~~~~~~~~~~~~~~~~
.. code-block:: python
formula = '%LAMBDA_{deg","t}=1 + %alpha_deg SQRT {M_t over M_{(t=0)}-1}~"."'
text = app.selection
text.insert_math(formula)

86
doc/build/_sources/main/intro.rst.txt vendored Normal file
View File

@ -0,0 +1,86 @@
Introduction
============
Overview
--------
ZAZ is a script for rapid develop extensions and macros for `LibreOffice`_, in
`Python`_ of course.
With ZAZ, you can create:
* Extensions for final user
* New components for used from Basic
* AddIn, new functions for Calc
Requirements
------------
* Python 3.7+
* LibreOffice 7.0+ with support for macros Python
* LibreOffice SDK, for new components and Add-In
In:
* ArchLinux
* ``sudo pacman -S libreoffice-fresh-sdk``
* Ubuntu 20.04+
* ``sudo apt install libreoffice-script-provider-python libreoffice-dev``
Installation
------------
* Clone this repository (recommended) or download it.
``git clone https://git.cuates.net/elmau/zaz.git``
* Move to.
``cd zaz/source``
* Start new extension.
``./zaz.py -new -t ~/projects -n MyFirstExtension``
My first extension
------------------
* Move to:
``cd ~/projects/MyFirstExtension``
* Create:
``python zaz.py -c``::
↪ python zaz.py -c
04/02/2021 23:07:50 - INFO - Created directories...
04/02/2021 23:07:50 - INFO - Created files...
04/02/2021 23:07:50 - INFO - Don't forget generate DOMAIN.pot for locales
04/02/2021 23:07:50 - INFO - New extension: MyFirstExtension make successfully...
Now, you can install and test: zaz.py -i
* Install and test:
``python zaz.py -i``::
↪ python zaz.py -i
04/02/2021 23:11:40 - INFO - Don't forget generate DOMAIN.pot for locales
04/02/2021 23:11:40 - INFO - Compress OXT extension...
04/02/2021 23:11:40 - INFO - Extension OXT created successfully...
Copying: MyFirstExtension_v0.1.0.oxt
unopkg done.
04/02/2021 23:11:41 - INFO - Install extension successfully...
04/02/2021 23:11:41 - INFO - Start LibreOffice...
04/02/2021 23:11:53 - INFO - Extension make successfully...
.. _LibreOffice: https://libreoffice.org
.. _Python: https://python.org

614
doc/build/_sources/main/paths.rst.txt vendored Normal file
View File

@ -0,0 +1,614 @@
Paths and files
---------------
Remember, always import library.
.. code-block:: python
import easymacro as app
Get info path
^^^^^^^^^^^^^
.. code-block:: python
path = '/home/mau/myfile.ods'
p = app.paths(path)
app.debug(p.path)
app.debug(p.file_name)
app.debug(p.name)
app.debug(p.ext)
app.debug(p.size)
app.debug(p.url)
Or get information in a tuple
.. code-block:: python
path = '/home/mau/myfile.ods'
p = app.paths(path)
app.msgbox(p.info)
Exists path
^^^^^^^^^^^
.. code-block:: python
path = '/home/mau/test'
app.msgbox(app.paths.exists(path))
Path is file
^^^^^^^^^^^^
.. code-block:: python
path = '/home/mau/myfile.ott'
app.msgbox(app.paths.is_file(path))
Path is dir
^^^^^^^^^^^
.. code-block:: python
path = '/home/mau'
app.msgbox(app.paths.is_dir(path))
Get path home
^^^^^^^^^^^^^
.. code-block:: python
path = app.paths.home
app.msgbox(path)
Get path documents
^^^^^^^^^^^^^^^^^^
* Configurate in LibreOffice Paths
.. code-block:: python
path = app.paths.documents
app.msgbox(path)
Get path temp
^^^^^^^^^^^^^
.. code-block:: python
path = app.paths.temp_dir
app.msgbox(path)
Get path from LibreOffice configuration
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* Default get path documents.
.. code-block:: python
path = app.paths.config()
app.msgbox(path)
* All options in `API XPathSettings`_
.. code-block:: python
path = app.paths.config('Config')
app.msgbox(path)
Get path executable python
^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
path_python = app.paths.python
app.msgbox(path_python)
Save and read text data
^^^^^^^^^^^^^^^^^^^^^^^
* Default encoding is UTF8
.. code-block:: python
data = """Do you want to know who you are? Don't ask. Act!
Action will delineate and define you.
Thomas Jefferson
"""
path = '/home/mau/temp.txt'
app.paths.save(path, data)
data = app.paths.read(path)
app.msgbox(data)
* Change encoding
.. code-block:: python
app.paths.save(path, data, 'iso-8859-1')
Save and read binary data
^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
data = b'Binary data'
path = '/home/mau/temp.bin'
app.paths.save_bin(path, data)
data = app.paths.read_bin(path)
app.msgbox(data)
Join paths
^^^^^^^^^^
.. code-block:: python
path_home = app.paths.home
file_name = 'test.ods'
path = app.paths.join(path_home, file_name)
app.msgbox(path)
Get a temporal path
^^^^^^^^^^^^^^^^^^^
.. code-block:: python
path_temp = app.paths.tmp()
app.msgbox(path_temp)
* Get with extension.
.. code-block:: python
path_temp = app.paths.tmp('.txt')
app.msgbox(path_temp)
* Save data in a temporal path
.. code-block:: python
data = """He who receives an idea from me,
receives instruction himself without lessening mine;
as he who lights his taper at mine,
receives light without darkening me.
Thomas Jefferson
"""
path_tmp = app.paths.save_tmp(data)
app.msgbox(path_tmp)
Get a temporal dir
^^^^^^^^^^^^^^^^^^
* All content and directory is deleted when exit context.
.. code-block:: python
data = """Do you want to know who you are? Don't ask. Act!
Action will delineate and define you.
Thomas Jefferson
"""
with app.paths.dir_tmp() as dt:
app.debug(app.paths.exists(dt))
path = app.paths.join(dt, 'test.txt')
app.paths.save(path, data)
app.debug(app.paths.exists(dt))
Get path for save
^^^^^^^^^^^^^^^^^
* Default open in user documents.
.. code-block:: python
path = app.paths.get()
app.msgbox(path)
* Open in other path.
.. code-block:: python
path_tmp = app.paths.temp_dir
path = app.paths.get(path_tmp)
app.msgbox(path)
* Add one filter
.. code-block:: python
path = app.paths.get(filters='xml')
app.msgbox(path)
* Add multiple filters
.. code-block:: python
path = app.paths.get(filters='xml,txt')
Select directory
^^^^^^^^^^^^^^^^
* Default open in user documents.
.. code-block:: python
path_dir = app.paths.get_dir()
app.msgbox(path_dir)
* Open in other path.
.. code-block:: python
path_tmp = app.paths.temp_dir
path_dir = app.paths.get_dir(path_tmp)
app.msgbox(path_dir)
Get path exists file
^^^^^^^^^^^^^^^^^^^^
* Default open in user documents.
.. code-block:: python
path_file = app.paths.get_file()
app.msgbox(path_file)
* Change init dir.
.. code-block:: python
path = '/home/mau'
path_file = app.paths.get_file(path)
app.msgbox(path_file)
* Add filter or filters.
.. code-block:: python
path_file = app.paths.get_file(filters='ods')
# or
path_file = app.paths.get_file(filters='ods,odt')
* Can select multiple files.
.. code-block:: python
path_file = app.paths.get_file(multiple=True)
Replace extension
^^^^^^^^^^^^^^^^^
.. code-block:: python
path = '/home/mau/myFile.ods'
path_new = app.paths.replace_ext(path, 'pdf')
app.msgbox(path_new)
Path in format URL <-> System
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
path = '/home/mau/myFile.ods'
path_url = app.paths.to_url(path)
app.msgbox(path_url)
path = app.paths.to_system(path_url)
app.msgbox(path)
Delete files and directories
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**CAUTION**: Delete files and directories immediately, always confirm this action.
.. code-block:: python
path = '/home/mau/temp.bin'
result = app.paths.kill(path)
app.msgbox(result)
* Delete directory and all content.
.. code-block:: python
path = '/home/mau/safe_for_delete'
result = app.paths.kill(path)
app.msgbox(result)
Get files
^^^^^^^^^
This method use library `pathlib`
* Get files not recursively
.. code-block:: python
path = '/home/mau/Documents'
files = app.paths.files(path)
for f in files:
app.debug(f)
* Add filter
.. code-block:: python
files = app.paths.files(path, '*.pdf')
* Get from this directory and all subdirectories, recursively
.. code-block:: python
files = app.paths.files(path, '**/*.pdf')
This method use `os.walk`
* Get content files recursively
.. code-block:: python
path = '/home/mau/Documents'
files = app.paths.walk(path)
for f in files:
app.debug(f)
* Add filters
.. code-block:: python
files = app.paths.walk(path, 'ods')
# or filters
files = app.paths.walk(path, 'ods|odt')
Get directories
^^^^^^^^^^^^^^^
This method use library `pathlib`
* Get directories in path not recursively
.. code-block:: python
path = '/home/mau/Documents'
folders = app.paths.dirs(path)
for f in folders:
app.debug(f)
This method use `os.walk`
* Get directories in path recursively
.. code-block:: python
path = '/home/mau/Documents'
folders = app.paths.walk_dirs(path)
for f in folders:
app.debug(f)
* Get info in a tuple (ID_FOLDER, ID_PARENT, NAME)
.. code-block:: python
path = '/home/mau/Documents'
folders = app.paths.walk_dirs(path, True)
for f in folders:
app.debug(f)
Get install path extension from id
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
id_ext = 'net.elmau.zaz.EasyMacro'
path = app.paths.from_id(id_ext)
app.debug(path)
.. code-block:: bash
24/06/2021 21:47:29 - DEBUG - /home/mau/.config/libreoffice/4/user/uno_packages/cache/uno_packages/lu20665x29msz.tmp_/ZAZEasyMacro_v0.1.0.oxt
Verify if application exists
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
app_name = 'nosoffice'
app.msgbox(app.paths.exists_app(app_name))
app_name = 'soffice'
app.msgbox(app.paths.exists_app(app_name))
Open any type file
^^^^^^^^^^^^^^^^^^
Open with default application in OS.
.. code-block:: python
path = '/home/mau/Downloads/file.pdf'
app.paths.open(path)
path = '/home/mau/Projects/libre_office/zaz/doc/build/index.html'
app.paths.open(path)
Save and read json
^^^^^^^^^^^^^^^^^^
.. code-block:: python
path = '/home/mau/data.json'
data = {
'type': 'calc',
'name': 'myfile.ods',
}
app.paths.to_json(path, data)
data = app.paths.from_json(path)
app.msgbox(data)
Save and read csv
^^^^^^^^^^^^^^^^^
You can used the same way that `python csv`_
.. code-block:: python
path = '/home/mau/data.csv'
data = (
(1, 'one', app.now()),
(2, 'two', app.now()),
(3, 'three', app.now()),
)
app.paths.to_csv(path, data)
data = app.paths.from_csv(path)
app.msgbox(data)
Zip, unzip
^^^^^^^^^^
For default, save in the same directory with the same name + `.zip`
* Zip file
.. code-block:: python
source = '/home/mau/logo.svg'
path_zip = app.paths.zip(source)
app.debug(path_zip)
* Zip directory
.. code-block:: python
source = '/home/mau/test'
path_zip = app.paths.zip(source)
app.debug(path_zip)
* Set target
.. code-block:: python
source = '/home/mau/logo.svg'
target = '/home/mau/myfile.zip'
path_zip = app.paths.zip(source, target)
app.debug(path_zip)
* Read content of zip
.. code-block:: python
path_zip = '/home/mau/test.zip'
names = app.paths.zip_content(path_zip)
for n in names:
app.debug(n)
* Unzip in the same directory
.. code-block:: python
path_zip = '/home/mau/test.zip'
app.paths.unzip(path_zip)
* Unzip in other directory
.. code-block:: python
path_zip = '/home/mau/test.zip'
target = '/srv/mau'
app.paths.unzip(path_zip, target)
* Extract one or more files
.. code-block:: python
path_zip = '/home/mau/test.zip'
members = 'calc.ods'
app.paths.unzip(path_zip, members=members)
# or
members = ('calc.ods', 'subdir/file.md')
* Merge zips
.. code-block:: python
zips = (
'/home/mau/test.zip',
'/home/mau/pictures.zip',
)
target = '/srv/mau/file.zip'
result = app.paths.merge_zip(target, zips)
app.msgbox(result)
Copy files
^^^^^^^^^^
Copy with the same name
.. code-block:: python
path = '/home/mau/image.png'
target = '/home/mau/Pictures'
path_new = app.paths.copy(path, target)
app.msgbox(path_new)
Copy with other name
.. code-block:: python
path = '/home/mau/image.png'
target = '/home/mau/Pictures'
new_name = 'other_name.png'
path_new = app.paths.copy(path, target, name)
app.msgbox(path_new)
.. _API XPathSettings: http://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1util_1_1XPathSettings.html
.. _python csv: https://docs.python.org/3.7/library/csv.html

532
doc/build/_sources/main/tools.rst.txt vendored Normal file
View File

@ -0,0 +1,532 @@
Tools
-----
Remember, always import library.
.. code-block:: python
import easymacro as app
Info from PC
^^^^^^^^^^^^
* Operate system
.. code-block:: python
app.msgbox(app.OS)
* Current user
.. code-block:: python
app.msgbox(app.USER)
* Name PC
.. code-block:: python
app.msgbox(app.PC)
* Name desktop, only GNU/Linux
.. code-block:: python
app.msgbox(app.DESKTOP)
* Language
.. code-block:: python
app.msgbox(app.LANG)
* Language with variant
.. code-block:: python
app.msgbox(app.LANGUAGE)
* Application name
.. code-block:: python
app.msgbox(app.NAME)
* Application version
.. code-block:: python
app.msgbox(app.VERSION)
* In Windows
.. code-block:: python
app.msgbox(app.IS_WIN)
* In Mac
.. code-block:: python
app.msgbox(app.IS_MAC)
Message Box
^^^^^^^^^^^
.. code-block:: python
app.msgbox(app.IS_WIN, 'My Macro')
Show warning
^^^^^^^^^^^^
.. code-block:: python
message = 'Caution, this action is dangerous'
title = 'My App'
app.warning(message, title)
Show error box
^^^^^^^^^^^^^^
.. code-block:: python
message = 'ERROR: Contact technical support'
title = 'My App'
app.errorbox(message, title)
Make question
^^^^^^^^^^^^^
.. code-block:: python
message = 'Is easy Python?'
title = 'My App'
result = app.question(message, title)
app.msgbox(result)
InputBox
^^^^^^^^
* Normal data
.. code-block:: python
message = 'Type your name'
default = ''
title = 'My App'
result = app.inputbox(message, default, title)
app.msgbox(result)
* Private data
.. code-block:: python
message = 'Type your password'
default = ''
title = 'My App'
echochar = "*"
result = app.inputbox(message, default, title, echochar)
app.msgbox(result)
Date and times
^^^^^^^^^^^^^^
* Get today
.. code-block:: python
app.msgbox(app.today())
* Get now
.. code-block:: python
app.msgbox(app.now())
* Get now only time
.. code-block:: python
app.msgbox(app.now(True))
* Get `epoch time`_
.. code-block:: python
app.msgbox(app.get_epoch())
* Simple measure time
.. code-block:: python
app.start()
app.sleep(5)
seconds = app.end(True)
app.msgbox(seconds)
Thread
^^^^^^
You can execute any macro in thread
* Normal execution
.. code-block:: python
def show_time(seconds):
app.sleep(seconds)
app.msgbox(app.NAME)
return
def main(args=None):
show_time(5)
app.msgbox('Finish...')
return
* Run in thread
.. code-block:: python
@app.run_in_thread
def show_time(seconds):
app.sleep(seconds)
app.msgbox(app.NAME)
return
def main(args=None):
show_time(5)
app.msgbox('Finish...')
return
Dictionary <-> properties
^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
args = {
'Hidden': True,
'Password': 'letmein',
}
properties = app.dict_to_property(args)
app.msgbox(properties)
data = app.data_to_dict(properties)
app.msgbox(data)
Tuples or lists to dictionary
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
tuple_of_tuples = (
('Hidden', True),
('Password', 'letmein'),
)
data = app.data_to_dict(tuple_of_tuples)
app.msgbox(data)
list_of_lists = [
['Hidden', True],
['Password', 'letmein'],
]
data = app.data_to_dict(list_of_lists)
app.msgbox(data)
Json
^^^^
.. code-block:: python
data = {
'Hidden': True,
'Password': 'letmein',
}
json = app.json_dumps(data)
app.msgbox(json)
data = app.json_loads(json)
app.msgbox(data)
Call Macros
^^^^^^^^^^^
You can any macro, for default call macros Python.
.. code-block:: python
def show_message():
app.msgbox(app.INFO_DEBUG)
return
def main(args=None):
args = {
'library': 'test',
'name': 'show_message',
}
app.call_macro(args)
return
Of course is better call directly if both macros are the same languaje, but, you can call macro in Basic too.
.. code-block:: vbnet
Sub show_message()
MsgBox "Basic from Python"
End Sub
Call from Python with.
.. code-block:: python
args = {
'language': 'Basic',
'library': 'Standard',
'module': 'Module1',
'name': 'show_message',
}
app.call_macro(args)
Execute macro in other thread
.. code-block:: python
app.call_macro(args, True)
Call external program
^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
app_name = 'gnome-calculator'
app.run(app_name)
app.msgbox('ok')
Call command line and capture output
.. code-block:: python
args = 'ls -lh ~'
result = app.run(args, True)
app.debug(result)
.. code-block:: bash
21/06/2021 22:27:22 - DEBUG - total 1.3M
drwxr-xr-x 5 mau mau 4.0K Jun 17 13:09 Desktop
drwxr-xr-x 6 mau mau 4.0K Jun 15 12:35 Documents
drwxr-xr-x 2 mau mau 4.0K Jun 21 20:26 Downloads
drwxr-xr-x 2 mau mau 4.0K Jun 21 16:18 Pictures
drwxr-xr-x 13 mau mau 4.0K Jun 21 15:34 Projects
drwxr-xr-x 2 mau mau 4.0K May 11 18:48 Templates
drwxr-xr-x 2 mau mau 4.0K Jun 20 23:27 Videos
Call command line and capture output line by line.
.. code-block:: python
args = 'ls -lh /home/mau'
for line in app.popen(args):
app.debug(line)
.. code-block:: bash
21/06/2021 22:34:42 - DEBUG - total 1.3M
21/06/2021 22:34:42 - DEBUG - drwxr-xr-x 5 mau mau 4.0K Jun 17 13:09 Desktop
21/06/2021 22:34:42 - DEBUG - drwxr-xr-x 6 mau mau 4.0K Jun 15 12:35 Documents
21/06/2021 22:34:42 - DEBUG - drwxr-xr-x 2 mau mau 4.0K Jun 21 20:26 Downloads
21/06/2021 22:34:42 - DEBUG - -rw-r----- 1 mau mau 1.3M Jun 14 11:53 out.png
21/06/2021 22:34:42 - DEBUG - drwxr-xr-x 2 mau mau 4.0K Jun 21 16:18 Pictures
21/06/2021 22:34:42 - DEBUG - drwxr-xr-x 13 mau mau 4.0K Jun 21 15:34 Projects
21/06/2021 22:34:42 - DEBUG - drwxr-xr-x 2 mau mau 4.0K May 11 18:48 Templates
21/06/2021 22:34:42 - DEBUG - drwxr-xr-x 2 mau mau 4.0K Jun 20 23:27 Videos
Timer
^^^^^
Execute any macro every seconds.
.. code-block:: python
TIMER_NAME = 'clock'
def show_time():
app.debug(app.now(True))
return
def start_clock():
seconds = 1
macro = {
'library': 'test',
'name': 'show_time',
}
app.start_timer(TIMER_NAME, seconds, macro)
return
def stop_clock():
app.stop_timer(TIMER_NAME)
return
def main(args=None):
start_clock()
return
Execute `stop_clock` for stop timer.
.. code-block:: bash
21/06/2021 22:43:17 - INFO - Timer started... show_time
21/06/2021 22:43:18 - DEBUG - 22:43:18.080315
21/06/2021 22:43:19 - DEBUG - 22:43:19.082211
...
21/06/2021 22:43:46 - DEBUG - 22:43:46.126446
21/06/2021 22:43:47 - DEBUG - 22:43:47.128487
21/06/2021 22:43:47 - INFO - Timer stopped... show_time
Get digest
^^^^^^^^^^
.. code-block:: python
data = 'LibreOffice with Python'
digest = app.sha256(data)
app.msgbox(digest)
digest = app.sha512(data)
app.msgbox(digest)
Save and get configurations
^^^^^^^^^^^^^^^^^^^^^^^^^^^
You can save any data.
.. code-block:: python
my_app = 'my_extension'
data = {
'path': '/home/mau/work',
'save_data': True,
}
app.set_config('config', data, my_app)
app.msgbox('Save config')
data = app.get_config('config', my_app)
app.msgbox(data)
Render string
^^^^^^^^^^^^^
.. code-block:: python
template = """Hello $name
I send you this $file_name
Best regards
"""
data = {'name': 'Ingrid Bergman', 'file_name': 'letter_love.odt'}
render = app.render(template, data)
app.msgbox(render)
Encrypt decrypt
^^^^^^^^^^^^^^^
You need install library `cryptography`_
.. code-block:: python
import easymacro as app
from conf import PASSWORD
def encrypt_decrypt():
data = 'My super secret data'
token = app.encrypt(data, PASSWORD)
app.msgbox(token)
data = app.decrypt(token, PASSWORD)
app.msgbox(data)
return
Simple url open
^^^^^^^^^^^^^^^
* Get text data
.. code-block:: python
url = 'https://api.ipify.org'
data = app.url_open(url)
app.msgbox(data)
* Get json data
.. code-block:: python
url = 'https://api.ipify.org?format=json'
data = app.url_open(url, get_json=True)
app.msgbox(data)
For more complex case, you can used `requests`_ or `httpx`_
Color
^^^^^
Look colors that you can used in `web colors`_
.. code-block:: python
color_name = 'darkblue'
color = app.get_color(color_name)
app.msgbox(color)
color_rgb = (125, 200, 10)
color = app.get_color(color_rgb)
app.msgbox(color)
color_html = '#008080'
color = app.get_color(color_html)
app.msgbox(color)
.. _epoch time: https://en.wikipedia.org/wiki/Unix_time
.. _cryptography: https://github.com/pyca/cryptography
.. _requests: https://docs.python-requests.org
.. _httpx: https://www.python-httpx.org/
.. _web colors: https://en.wikipedia.org/wiki/Web_colors

View File

@ -0,0 +1,153 @@
Tools for debug
---------------
INFO_DEBUG
^^^^^^^^^^
Show info debug, show in message box.
If you have any problem in your code, you can `open issue`_ in this project,
always copy the information of INFO_DEBUG in your ticket.
.. code-block:: python
import easymacro as app
def info():
app.msgbox(INFO_DEBUG)
return
Show in shell.
.. code-block:: python
import easymacro as app
def info():
app.debug(INFO_DEBUG)
return
Log error
^^^^^^^^^
Show error message in shell.
.. code-block:: python
import easymacro as app
def error():
msg = 'My error 500'
app.error(msg)
return
Log debug
^^^^^^^^^
Show debug message in shell.
.. code-block:: python
import easymacro as app
def error():
msg = 'Verify this data...'
app.debug(msg)
return
Log info
^^^^^^^^
Show info message in shell.
.. code-block:: python
import easymacro as app
def error():
msg = 'Start process...'
app.info(msg)
return
Log to file
^^^^^^^^^^^
Save log to file, automatic add date and time.
.. code-block:: python
import easymacro as app
def log():
app.save_log('/home/mau/log.txt', 'PyUNO')
app.save_log('/home/mau/log.txt', app.INFO_DEBUG)
return
Message box
^^^^^^^^^^^
Show any data in message box
.. code-block:: python
import easymacro as app
def message():
msg = 'Please, save the planet'
app.msgbox(msg)
msg = ('one', 2, 'three')
app.msgbox(msg)
msg = {'name': 'Teresa'}
app.msgbox(msg)
app.msgbox(app)
return
Catch exceptions
^^^^^^^^^^^^^^^^
Sometimes, for difficult errors, you can catch exceptions.
.. code-block:: python
import easymacro as app
@app.catch_exception
def test():
r = 1 / 0
return
And not, not used you this function in production.
Call MRI
^^^^^^^^
`MRI`_ is the better extension for debug any object in LibreOffice, you need
install before call it.
.. code-block:: python
import easymacro as app
def error():
obj = app.active
app.mri(obj)
return
.. _MRI: https://github.com/hanya/MRI
.. _open issue: https://git.cuates.net/elmau/zaz/issues

19
doc/build/_sources/main/writer.rst.txt vendored Normal file
View File

@ -0,0 +1,19 @@
Writer
------
Remember, always import library.
.. code-block:: python
import easymacro as app
Current doc
^^^^^^^^^^^
.. code-block:: python
doc = app.active
app.msgbox(doc.type)

701
doc/build/_static/alabaster.css vendored Normal file
View File

@ -0,0 +1,701 @@
@import url("basic.css");
/* -- page layout ----------------------------------------------------------- */
body {
font-family: Georgia, serif;
font-size: 17px;
background-color: #fff;
color: #000;
margin: 0;
padding: 0;
}
div.document {
width: 940px;
margin: 30px auto 0 auto;
}
div.documentwrapper {
float: left;
width: 100%;
}
div.bodywrapper {
margin: 0 0 0 220px;
}
div.sphinxsidebar {
width: 220px;
font-size: 14px;
line-height: 1.5;
}
hr {
border: 1px solid #B1B4B6;
}
div.body {
background-color: #fff;
color: #3E4349;
padding: 0 30px 0 30px;
}
div.body > .section {
text-align: left;
}
div.footer {
width: 940px;
margin: 20px auto 30px auto;
font-size: 14px;
color: #888;
text-align: right;
}
div.footer a {
color: #888;
}
p.caption {
font-family: inherit;
font-size: inherit;
}
div.relations {
display: none;
}
div.sphinxsidebar a {
color: #444;
text-decoration: none;
border-bottom: 1px dotted #999;
}
div.sphinxsidebar a:hover {
border-bottom: 1px solid #999;
}
div.sphinxsidebarwrapper {
padding: 18px 10px;
}
div.sphinxsidebarwrapper p.logo {
padding: 0;
margin: -10px 0 0 0px;
text-align: center;
}
div.sphinxsidebarwrapper h1.logo {
margin-top: -10px;
text-align: center;
margin-bottom: 5px;
text-align: left;
}
div.sphinxsidebarwrapper h1.logo-name {
margin-top: 0px;
}
div.sphinxsidebarwrapper p.blurb {
margin-top: 0;
font-style: normal;
}
div.sphinxsidebar h3,
div.sphinxsidebar h4 {
font-family: Georgia, serif;
color: #444;
font-size: 24px;
font-weight: normal;
margin: 0 0 5px 0;
padding: 0;
}
div.sphinxsidebar h4 {
font-size: 20px;
}
div.sphinxsidebar h3 a {
color: #444;
}
div.sphinxsidebar p.logo a,
div.sphinxsidebar h3 a,
div.sphinxsidebar p.logo a:hover,
div.sphinxsidebar h3 a:hover {
border: none;
}
div.sphinxsidebar p {
color: #555;
margin: 10px 0;
}
div.sphinxsidebar ul {
margin: 10px 0;
padding: 0;
color: #000;
}
div.sphinxsidebar ul li.toctree-l1 > a {
font-size: 120%;
}
div.sphinxsidebar ul li.toctree-l2 > a {
font-size: 110%;
}
div.sphinxsidebar input {
border: 1px solid #CCC;
font-family: Georgia, serif;
font-size: 1em;
}
div.sphinxsidebar hr {
border: none;
height: 1px;
color: #AAA;
background: #AAA;
text-align: left;
margin-left: 0;
width: 50%;
}
div.sphinxsidebar .badge {
border-bottom: none;
}
div.sphinxsidebar .badge:hover {
border-bottom: none;
}
/* To address an issue with donation coming after search */
div.sphinxsidebar h3.donation {
margin-top: 10px;
}
/* -- body styles ----------------------------------------------------------- */
a {
color: #004B6B;
text-decoration: underline;
}
a:hover {
color: #6D4100;
text-decoration: underline;
}
div.body h1,
div.body h2,
div.body h3,
div.body h4,
div.body h5,
div.body h6 {
font-family: Georgia, serif;
font-weight: normal;
margin: 30px 0px 10px 0px;
padding: 0;
}
div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
div.body h2 { font-size: 180%; }
div.body h3 { font-size: 150%; }
div.body h4 { font-size: 130%; }
div.body h5 { font-size: 100%; }
div.body h6 { font-size: 100%; }
a.headerlink {
color: #DDD;
padding: 0 4px;
text-decoration: none;
}
a.headerlink:hover {
color: #444;
background: #EAEAEA;
}
div.body p, div.body dd, div.body li {
line-height: 1.4em;
}
div.admonition {
margin: 20px 0px;
padding: 10px 30px;
background-color: #EEE;
border: 1px solid #CCC;
}
div.admonition tt.xref, div.admonition code.xref, div.admonition a tt {
background-color: #FBFBFB;
border-bottom: 1px solid #fafafa;
}
div.admonition p.admonition-title {
font-family: Georgia, serif;
font-weight: normal;
font-size: 24px;
margin: 0 0 10px 0;
padding: 0;
line-height: 1;
}
div.admonition p.last {
margin-bottom: 0;
}
div.highlight {
background-color: #fff;
}
dt:target, .highlight {
background: #FAF3E8;
}
div.warning {
background-color: #FCC;
border: 1px solid #FAA;
}
div.danger {
background-color: #FCC;
border: 1px solid #FAA;
-moz-box-shadow: 2px 2px 4px #D52C2C;
-webkit-box-shadow: 2px 2px 4px #D52C2C;
box-shadow: 2px 2px 4px #D52C2C;
}
div.error {
background-color: #FCC;
border: 1px solid #FAA;
-moz-box-shadow: 2px 2px 4px #D52C2C;
-webkit-box-shadow: 2px 2px 4px #D52C2C;
box-shadow: 2px 2px 4px #D52C2C;
}
div.caution {
background-color: #FCC;
border: 1px solid #FAA;
}
div.attention {
background-color: #FCC;
border: 1px solid #FAA;
}
div.important {
background-color: #EEE;
border: 1px solid #CCC;
}
div.note {
background-color: #EEE;
border: 1px solid #CCC;
}
div.tip {
background-color: #EEE;
border: 1px solid #CCC;
}
div.hint {
background-color: #EEE;
border: 1px solid #CCC;
}
div.seealso {
background-color: #EEE;
border: 1px solid #CCC;
}
div.topic {
background-color: #EEE;
}
p.admonition-title {
display: inline;
}
p.admonition-title:after {
content: ":";
}
pre, tt, code {
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
font-size: 0.9em;
}
.hll {
background-color: #FFC;
margin: 0 -12px;
padding: 0 12px;
display: block;
}
img.screenshot {
}
tt.descname, tt.descclassname, code.descname, code.descclassname {
font-size: 0.95em;
}
tt.descname, code.descname {
padding-right: 0.08em;
}
img.screenshot {
-moz-box-shadow: 2px 2px 4px #EEE;
-webkit-box-shadow: 2px 2px 4px #EEE;
box-shadow: 2px 2px 4px #EEE;
}
table.docutils {
border: 1px solid #888;
-moz-box-shadow: 2px 2px 4px #EEE;
-webkit-box-shadow: 2px 2px 4px #EEE;
box-shadow: 2px 2px 4px #EEE;
}
table.docutils td, table.docutils th {
border: 1px solid #888;
padding: 0.25em 0.7em;
}
table.field-list, table.footnote {
border: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
table.footnote {
margin: 15px 0;
width: 100%;
border: 1px solid #EEE;
background: #FDFDFD;
font-size: 0.9em;
}
table.footnote + table.footnote {
margin-top: -15px;
border-top: none;
}
table.field-list th {
padding: 0 0.8em 0 0;
}
table.field-list td {
padding: 0;
}
table.field-list p {
margin-bottom: 0.8em;
}
/* Cloned from
* https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68
*/
.field-name {
-moz-hyphens: manual;
-ms-hyphens: manual;
-webkit-hyphens: manual;
hyphens: manual;
}
table.footnote td.label {
width: .1px;
padding: 0.3em 0 0.3em 0.5em;
}
table.footnote td {
padding: 0.3em 0.5em;
}
dl {
margin: 0;
padding: 0;
}
dl dd {
margin-left: 30px;
}
blockquote {
margin: 0 0 0 30px;
padding: 0;
}
ul, ol {
/* Matches the 30px from the narrow-screen "li > ul" selector below */
margin: 10px 0 10px 30px;
padding: 0;
}
pre {
background: #EEE;
padding: 7px 30px;
margin: 15px 0px;
line-height: 1.3em;
}
div.viewcode-block:target {
background: #ffd;
}
dl pre, blockquote pre, li pre {
margin-left: 0;
padding-left: 30px;
}
tt, code {
background-color: #ecf0f3;
color: #222;
/* padding: 1px 2px; */
}
tt.xref, code.xref, a tt {
background-color: #FBFBFB;
border-bottom: 1px solid #fff;
}
a.reference {
text-decoration: none;
border-bottom: 1px dotted #004B6B;
}
/* Don't put an underline on images */
a.image-reference, a.image-reference:hover {
border-bottom: none;
}
a.reference:hover {
border-bottom: 1px solid #6D4100;
}
a.footnote-reference {
text-decoration: none;
font-size: 0.7em;
vertical-align: top;
border-bottom: 1px dotted #004B6B;
}
a.footnote-reference:hover {
border-bottom: 1px solid #6D4100;
}
a:hover tt, a:hover code {
background: #EEE;
}
@media screen and (max-width: 870px) {
div.sphinxsidebar {
display: none;
}
div.document {
width: 100%;
}
div.documentwrapper {
margin-left: 0;
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
}
div.bodywrapper {
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
margin-left: 0;
}
ul {
margin-left: 0;
}
li > ul {
/* Matches the 30px from the "ul, ol" selector above */
margin-left: 30px;
}
.document {
width: auto;
}
.footer {
width: auto;
}
.bodywrapper {
margin: 0;
}
.footer {
width: auto;
}
.github {
display: none;
}
}
@media screen and (max-width: 875px) {
body {
margin: 0;
padding: 20px 30px;
}
div.documentwrapper {
float: none;
background: #fff;
}
div.sphinxsidebar {
display: block;
float: none;
width: 102.5%;
margin: 50px -30px -20px -30px;
padding: 10px 20px;
background: #333;
color: #FFF;
}
div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
div.sphinxsidebar h3 a {
color: #fff;
}
div.sphinxsidebar a {
color: #AAA;
}
div.sphinxsidebar p.logo {
display: none;
}
div.document {
width: 100%;
margin: 0;
}
div.footer {
display: none;
}
div.bodywrapper {
margin: 0;
}
div.body {
min-height: 0;
padding: 0;
}
.rtd_doc_footer {
display: none;
}
.document {
width: auto;
}
.footer {
width: auto;
}
.footer {
width: auto;
}
.github {
display: none;
}
}
/* misc. */
.revsys-inline {
display: none!important;
}
/* Make nested-list/multi-paragraph items look better in Releases changelog
* pages. Without this, docutils' magical list fuckery causes inconsistent
* formatting between different release sub-lists.
*/
div#changelog > div.section > ul > li > p:only-child {
margin-bottom: 0;
}
/* Hide fugly table cell borders in ..bibliography:: directive output */
table.docutils.citation, table.docutils.citation td, table.docutils.citation th {
border: none;
/* Below needed in some edge cases; if not applied, bottom shadows appear */
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
/* relbar */
.related {
line-height: 30px;
width: 100%;
font-size: 0.9rem;
}
.related.top {
border-bottom: 1px solid #EEE;
margin-bottom: 20px;
}
.related.bottom {
border-top: 1px solid #EEE;
}
.related ul {
padding: 0;
margin: 0;
list-style: none;
}
.related li {
display: inline;
}
nav#rellinks {
float: right;
}
nav#rellinks li+li:before {
content: "|";
}
nav#breadcrumbs li+li:before {
content: "\00BB";
}
/* Hide certain items when printing */
@media print {
div.related {
display: none;
}
}

904
doc/build/_static/basic.css vendored Normal file
View File

@ -0,0 +1,904 @@
/*
* basic.css
* ~~~~~~~~~
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/* -- main layout ----------------------------------------------------------- */
div.clearer {
clear: both;
}
div.section::after {
display: block;
content: '';
clear: left;
}
/* -- relbar ---------------------------------------------------------------- */
div.related {
width: 100%;
font-size: 90%;
}
div.related h3 {
display: none;
}
div.related ul {
margin: 0;
padding: 0 0 0 10px;
list-style: none;
}
div.related li {
display: inline;
}
div.related li.right {
float: right;
margin-right: 5px;
}
/* -- sidebar --------------------------------------------------------------- */
div.sphinxsidebarwrapper {
padding: 10px 5px 0 10px;
}
div.sphinxsidebar {
float: left;
width: 230px;
margin-left: -100%;
font-size: 90%;
word-wrap: break-word;
overflow-wrap : break-word;
}
div.sphinxsidebar ul {
list-style: none;
}
div.sphinxsidebar ul ul,
div.sphinxsidebar ul.want-points {
margin-left: 20px;
list-style: square;
}
div.sphinxsidebar ul ul {
margin-top: 0;
margin-bottom: 0;
}
div.sphinxsidebar form {
margin-top: 10px;
}
div.sphinxsidebar input {
border: 1px solid #98dbcc;
font-family: sans-serif;
font-size: 1em;
}
div.sphinxsidebar #searchbox form.search {
overflow: hidden;
}
div.sphinxsidebar #searchbox input[type="text"] {
float: left;
width: 80%;
padding: 0.25em;
box-sizing: border-box;
}
div.sphinxsidebar #searchbox input[type="submit"] {
float: left;
width: 20%;
border-left: none;
padding: 0.25em;
box-sizing: border-box;
}
img {
border: 0;
max-width: 100%;
}
/* -- search page ----------------------------------------------------------- */
ul.search {
margin: 10px 0 0 20px;
padding: 0;
}
ul.search li {
padding: 5px 0 5px 20px;
background-image: url(file.png);
background-repeat: no-repeat;
background-position: 0 7px;
}
ul.search li a {
font-weight: bold;
}
ul.search li p.context {
color: #888;
margin: 2px 0 0 30px;
text-align: left;
}
ul.keywordmatches li.goodmatch a {
font-weight: bold;
}
/* -- index page ------------------------------------------------------------ */
table.contentstable {
width: 90%;
margin-left: auto;
margin-right: auto;
}
table.contentstable p.biglink {
line-height: 150%;
}
a.biglink {
font-size: 1.3em;
}
span.linkdescr {
font-style: italic;
padding-top: 5px;
font-size: 90%;
}
/* -- general index --------------------------------------------------------- */
table.indextable {
width: 100%;
}
table.indextable td {
text-align: left;
vertical-align: top;
}
table.indextable ul {
margin-top: 0;
margin-bottom: 0;
list-style-type: none;
}
table.indextable > tbody > tr > td > ul {
padding-left: 0em;
}
table.indextable tr.pcap {
height: 10px;
}
table.indextable tr.cap {
margin-top: 10px;
background-color: #f2f2f2;
}
img.toggler {
margin-right: 3px;
margin-top: 3px;
cursor: pointer;
}
div.modindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
div.genindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
/* -- domain module index --------------------------------------------------- */
table.modindextable td {
padding: 2px;
border-collapse: collapse;
}
/* -- general body styles --------------------------------------------------- */
div.body {
min-width: 450px;
max-width: 800px;
}
div.body p, div.body dd, div.body li, div.body blockquote {
-moz-hyphens: auto;
-ms-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}
a.headerlink {
visibility: hidden;
}
a.brackets:before,
span.brackets > a:before{
content: "[";
}
a.brackets:after,
span.brackets > a:after {
content: "]";
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
h4:hover > a.headerlink,
h5:hover > a.headerlink,
h6:hover > a.headerlink,
dt:hover > a.headerlink,
caption:hover > a.headerlink,
p.caption:hover > a.headerlink,
div.code-block-caption:hover > a.headerlink {
visibility: visible;
}
div.body p.caption {
text-align: inherit;
}
div.body td {
text-align: left;
}
.first {
margin-top: 0 !important;
}
p.rubric {
margin-top: 30px;
font-weight: bold;
}
img.align-left, figure.align-left, .figure.align-left, object.align-left {
clear: left;
float: left;
margin-right: 1em;
}
img.align-right, figure.align-right, .figure.align-right, object.align-right {
clear: right;
float: right;
margin-left: 1em;
}
img.align-center, figure.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
img.align-default, figure.align-default, .figure.align-default {
display: block;
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left;
}
.align-center {
text-align: center;
}
.align-default {
text-align: center;
}
.align-right {
text-align: right;
}
/* -- sidebars -------------------------------------------------------------- */
div.sidebar,
aside.sidebar {
margin: 0 0 0.5em 1em;
border: 1px solid #ddb;
padding: 7px;
background-color: #ffe;
width: 40%;
float: right;
clear: right;
overflow-x: auto;
}
p.sidebar-title {
font-weight: bold;
}
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
div.topic {
border: 1px solid #ccc;
padding: 7px;
margin: 10px 0 10px 0;
}
p.topic-title {
font-size: 1.1em;
font-weight: bold;
margin-top: 10px;
}
/* -- admonitions ----------------------------------------------------------- */
div.admonition {
margin-top: 10px;
margin-bottom: 10px;
padding: 7px;
}
div.admonition dt {
font-weight: bold;
}
p.admonition-title {
margin: 0px 10px 5px 0px;
font-weight: bold;
}
div.body p.centered {
text-align: center;
margin-top: 25px;
}
/* -- content of sidebars/topics/admonitions -------------------------------- */
div.sidebar > :last-child,
aside.sidebar > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
}
div.sidebar::after,
aside.sidebar::after,
div.topic::after,
div.admonition::after,
blockquote::after {
display: block;
content: '';
clear: both;
}
/* -- tables ---------------------------------------------------------------- */
table.docutils {
margin-top: 10px;
margin-bottom: 10px;
border: 0;
border-collapse: collapse;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
table.align-default {
margin-left: auto;
margin-right: auto;
}
table caption span.caption-number {
font-style: italic;
}
table caption span.caption-text {
}
table.docutils td, table.docutils th {
padding: 1px 8px 1px 5px;
border-top: 0;
border-left: 0;
border-right: 0;
border-bottom: 1px solid #aaa;
}
table.footnote td, table.footnote th {
border: 0 !important;
}
th {
text-align: left;
padding-right: 5px;
}
table.citation {
border-left: solid 1px gray;
margin-left: 1px;
}
table.citation td {
border-bottom: none;
}
th > :first-child,
td > :first-child {
margin-top: 0px;
}
th > :last-child,
td > :last-child {
margin-bottom: 0px;
}
/* -- figures --------------------------------------------------------------- */
div.figure, figure {
margin: 0.5em;
padding: 0.5em;
}
div.figure p.caption, figcaption {
padding: 0.3em;
}
div.figure p.caption span.caption-number,
figcaption span.caption-number {
font-style: italic;
}
div.figure p.caption span.caption-text,
figcaption span.caption-text {
}
/* -- field list styles ----------------------------------------------------- */
table.field-list td, table.field-list th {
border: 0 !important;
}
.field-list ul {
margin: 0;
padding-left: 1em;
}
.field-list p {
margin: 0;
}
.field-name {
-moz-hyphens: manual;
-ms-hyphens: manual;
-webkit-hyphens: manual;
hyphens: manual;
}
/* -- hlist styles ---------------------------------------------------------- */
table.hlist {
margin: 1em 0;
}
table.hlist td {
vertical-align: top;
}
/* -- object description styles --------------------------------------------- */
.sig {
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
}
.sig-name, code.descname {
background-color: transparent;
font-weight: bold;
}
.sig-name {
font-size: 1.1em;
}
code.descname {
font-size: 1.2em;
}
.sig-prename, code.descclassname {
background-color: transparent;
}
.optional {
font-size: 1.3em;
}
.sig-paren {
font-size: larger;
}
.sig-param.n {
font-style: italic;
}
/* C++ specific styling */
.sig-inline.c-texpr,
.sig-inline.cpp-texpr {
font-family: unset;
}
.sig.c .k, .sig.c .kt,
.sig.cpp .k, .sig.cpp .kt {
color: #0033B3;
}
.sig.c .m,
.sig.cpp .m {
color: #1750EB;
}
.sig.c .s, .sig.c .sc,
.sig.cpp .s, .sig.cpp .sc {
color: #067D17;
}
/* -- other body styles ----------------------------------------------------- */
ol.arabic {
list-style: decimal;
}
ol.loweralpha {
list-style: lower-alpha;
}
ol.upperalpha {
list-style: upper-alpha;
}
ol.lowerroman {
list-style: lower-roman;
}
ol.upperroman {
list-style: upper-roman;
}
:not(li) > ol > li:first-child > :first-child,
:not(li) > ul > li:first-child > :first-child {
margin-top: 0px;
}
:not(li) > ol > li:last-child > :last-child,
:not(li) > ul > li:last-child > :last-child {
margin-bottom: 0px;
}
ol.simple ol p,
ol.simple ul p,
ul.simple ol p,
ul.simple ul p {
margin-top: 0;
}
ol.simple > li:not(:first-child) > p,
ul.simple > li:not(:first-child) > p {
margin-top: 0;
}
ol.simple p,
ul.simple p {
margin-bottom: 0;
}
dl.footnote > dt,
dl.citation > dt {
float: left;
margin-right: 0.5em;
}
dl.footnote > dd,
dl.citation > dd {
margin-bottom: 0em;
}
dl.footnote > dd:after,
dl.citation > dd:after {
content: "";
clear: both;
}
dl.field-list {
display: grid;
grid-template-columns: fit-content(30%) auto;
}
dl.field-list > dt {
font-weight: bold;
word-break: break-word;
padding-left: 0.5em;
padding-right: 5px;
}
dl.field-list > dt:after {
content: ":";
}
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;
margin-left: 0em;
margin-bottom: 0em;
}
dl {
margin-bottom: 15px;
}
dd > :first-child {
margin-top: 0px;
}
dd ul, dd table {
margin-bottom: 10px;
}
dd {
margin-top: 3px;
margin-bottom: 10px;
margin-left: 30px;
}
dl > dd:last-child,
dl > dd:last-child > :last-child {
margin-bottom: 0;
}
dt:target, span.highlighted {
background-color: #fbe54e;
}
rect.highlighted {
fill: #fbe54e;
}
dl.glossary dt {
font-weight: bold;
font-size: 1.1em;
}
.versionmodified {
font-style: italic;
}
.system-message {
background-color: #fda;
padding: 5px;
border: 3px solid red;
}
.footnote:target {
background-color: #ffa;
}
.line-block {
display: block;
margin-top: 1em;
margin-bottom: 1em;
}
.line-block .line-block {
margin-top: 0;
margin-bottom: 0;
margin-left: 1.5em;
}
.guilabel, .menuselection {
font-family: sans-serif;
}
.accelerator {
text-decoration: underline;
}
.classifier {
font-style: oblique;
}
.classifier:before {
font-style: normal;
margin: 0.5em;
content: ":";
}
abbr, acronym {
border-bottom: dotted 1px;
cursor: help;
}
/* -- code displays --------------------------------------------------------- */
pre {
overflow: auto;
overflow-y: hidden; /* fixes display issues on Chrome browsers */
}
pre, div[class*="highlight-"] {
clear: both;
}
span.pre {
-moz-hyphens: none;
-ms-hyphens: none;
-webkit-hyphens: none;
hyphens: none;
}
div[class*="highlight-"] {
margin: 1em 0;
}
td.linenos pre {
border: 0;
background-color: transparent;
color: #aaa;
}
table.highlighttable {
display: block;
}
table.highlighttable tbody {
display: block;
}
table.highlighttable tr {
display: flex;
}
table.highlighttable td {
margin: 0;
padding: 0;
}
table.highlighttable td.linenos {
padding-right: 0.5em;
}
table.highlighttable td.code {
flex: 1;
overflow: hidden;
}
.highlight .hll {
display: block;
}
div.highlight pre,
table.highlighttable pre {
margin: 0;
}
div.code-block-caption + div {
margin-top: 0;
}
div.code-block-caption {
margin-top: 1em;
padding: 2px 5px;
font-size: small;
}
div.code-block-caption code {
background-color: transparent;
}
table.highlighttable td.linenos,
span.linenos,
div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */
user-select: none;
-webkit-user-select: text; /* Safari fallback only */
-webkit-user-select: none; /* Chrome/Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE10+ */
}
div.code-block-caption span.caption-number {
padding: 0.1em 0.3em;
font-style: italic;
}
div.code-block-caption span.caption-text {
}
div.literal-block-wrapper {
margin: 1em 0;
}
code.xref, a code {
background-color: transparent;
font-weight: bold;
}
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
background-color: transparent;
}
.viewcode-link {
float: right;
}
.viewcode-back {
float: right;
font-family: sans-serif;
}
div.viewcode-block:target {
margin: -1px -10px;
padding: 0 10px;
}
/* -- math display ---------------------------------------------------------- */
img.math {
vertical-align: middle;
}
div.body div.math p {
text-align: center;
}
span.eqno {
float: right;
}
span.eqno a.headerlink {
position: absolute;
z-index: 1;
}
div.math:hover a.headerlink {
visibility: visible;
}
/* -- printout stylesheet --------------------------------------------------- */
@media print {
div.document,
div.documentwrapper,
div.bodywrapper {
margin: 0 !important;
width: 100%;
}
div.sphinxsidebar,
div.related,
div.footer,
#top-link {
display: none;
}
}

1
doc/build/_static/custom.css vendored Normal file
View File

@ -0,0 +1 @@
/* This file intentionally left blank. */

321
doc/build/_static/doctools.js vendored Normal file
View File

@ -0,0 +1,321 @@
/*
* doctools.js
* ~~~~~~~~~~~
*
* Sphinx JavaScript utilities for all documentation.
*
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* make the code below compatible with browsers without
* an installed firebug like debugger
if (!window.console || !console.firebug) {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
"profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {};
}
*/
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}
/**
* Small JavaScript module for the documentation.
*/
var Documentation = {
init : function() {
this.fixFirefoxAnchorBug();
this.highlightSearchWords();
this.initIndexTable();
if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) {
this.initOnKeyListeners();
}
},
/**
* i18n support
*/
TRANSLATIONS : {},
PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
LOCALE : 'unknown',
// gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext)
gettext : function(string) {
var translated = Documentation.TRANSLATIONS[string];
if (typeof translated === 'undefined')
return string;
return (typeof translated === 'string') ? translated : translated[0];
},
ngettext : function(singular, plural, n) {
var translated = Documentation.TRANSLATIONS[singular];
if (typeof translated === 'undefined')
return (n == 1) ? singular : plural;
return translated[Documentation.PLURALEXPR(n)];
},
addTranslations : function(catalog) {
for (var key in catalog.messages)
this.TRANSLATIONS[key] = catalog.messages[key];
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
this.LOCALE = catalog.locale;
},
/**
* add context elements like header anchor links
*/
addContextElements : function() {
$('div[id] > :header:first').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this headline')).
appendTo(this);
});
$('dt[id]').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this definition')).
appendTo(this);
});
},
/**
* workaround a firefox stupidity
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
*/
fixFirefoxAnchorBug : function() {
if (document.location.hash && $.browser.mozilla)
window.setTimeout(function() {
document.location.href += '';
}, 10);
},
/**
* highlight the search words provided in the url in the text
*/
highlightSearchWords : function() {
var params = $.getQueryParameters();
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
if (terms.length) {
var body = $('div.body');
if (!body.length) {
body = $('body');
}
window.setTimeout(function() {
$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlighted');
});
}, 10);
$('<p class="highlight-link"><a href="javascript:Documentation.' +
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
.appendTo($('#searchbox'));
}
},
/**
* init the domain index toggle buttons
*/
initIndexTable : function() {
var togglers = $('img.toggler').click(function() {
var src = $(this).attr('src');
var idnum = $(this).attr('id').substr(7);
$('tr.cg-' + idnum).toggle();
if (src.substr(-9) === 'minus.png')
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
else
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
}).css('display', '');
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
togglers.click();
}
},
/**
* helper function to hide the search marks again
*/
hideSearchWords : function() {
$('#searchbox .highlight-link').fadeOut(300);
$('span.highlighted').removeClass('highlighted');
},
/**
* make the url absolute
*/
makeURL : function(relativeURL) {
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
},
/**
* get the current relative url
*/
getCurrentURL : function() {
var path = document.location.pathname;
var parts = path.split(/\//);
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
if (this === '..')
parts.pop();
});
var url = parts.join('/');
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
},
initOnKeyListeners: function() {
$(document).keydown(function(event) {
var activeElementType = document.activeElement.tagName;
// don't navigate when in search box, textarea, dropdown or button
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
&& activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey
&& !event.shiftKey) {
switch (event.keyCode) {
case 37: // left
var prevHref = $('link[rel="prev"]').prop('href');
if (prevHref) {
window.location.href = prevHref;
return false;
}
case 39: // right
var nextHref = $('link[rel="next"]').prop('href');
if (nextHref) {
window.location.href = nextHref;
return false;
}
}
}
});
}
};
// quick alias for translations
_ = Documentation.gettext;
$(document).ready(function() {
Documentation.init();
});

View File

@ -0,0 +1,12 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: '',
LANGUAGE: 'en',
COLLAPSE_INDEX: false,
BUILDER: 'html',
FILE_SUFFIX: '.html',
LINK_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
NAVIGATION_WITH_KEYS: false
};

BIN
doc/build/_static/file.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

10872
doc/build/_static/jquery-3.5.1.js vendored Normal file

File diff suppressed because it is too large Load Diff

2
doc/build/_static/jquery.js vendored Normal file

File diff suppressed because one or more lines are too long

297
doc/build/_static/language_data.js vendored Normal file
View File

@ -0,0 +1,297 @@
/*
* language_data.js
* ~~~~~~~~~~~~~~~~
*
* This script contains the language-specific data used by searchtools.js,
* namely the list of stopwords, stemmer, scorer and splitter.
*
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
/* Non-minified version is copied as a separate JS file, is available */
/**
* Porter Stemmer
*/
var Stemmer = function() {
var step2list = {
ational: 'ate',
tional: 'tion',
enci: 'ence',
anci: 'ance',
izer: 'ize',
bli: 'ble',
alli: 'al',
entli: 'ent',
eli: 'e',
ousli: 'ous',
ization: 'ize',
ation: 'ate',
ator: 'ate',
alism: 'al',
iveness: 'ive',
fulness: 'ful',
ousness: 'ous',
aliti: 'al',
iviti: 'ive',
biliti: 'ble',
logi: 'log'
};
var step3list = {
icate: 'ic',
ative: '',
alize: 'al',
iciti: 'ic',
ical: 'ic',
ful: '',
ness: ''
};
var c = "[^aeiou]"; // consonant
var v = "[aeiouy]"; // vowel
var C = c + "[^aeiouy]*"; // consonant sequence
var V = v + "[aeiou]*"; // vowel sequence
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
var s_v = "^(" + C + ")?" + v; // vowel in stem
this.stemWord = function (w) {
var stem;
var suffix;
var firstch;
var origword = w;
if (w.length < 3)
return w;
var re;
var re2;
var re3;
var re4;
firstch = w.substr(0,1);
if (firstch == "y")
w = firstch.toUpperCase() + w.substr(1);
// Step 1a
re = /^(.+?)(ss|i)es$/;
re2 = /^(.+?)([^s])s$/;
if (re.test(w))
w = w.replace(re,"$1$2");
else if (re2.test(w))
w = w.replace(re2,"$1$2");
// Step 1b
re = /^(.+?)eed$/;
re2 = /^(.+?)(ed|ing)$/;
if (re.test(w)) {
var fp = re.exec(w);
re = new RegExp(mgr0);
if (re.test(fp[1])) {
re = /.$/;
w = w.replace(re,"");
}
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1];
re2 = new RegExp(s_v);
if (re2.test(stem)) {
w = stem;
re2 = /(at|bl|iz)$/;
re3 = new RegExp("([^aeiouylsz])\\1$");
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re2.test(w))
w = w + "e";
else if (re3.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
else if (re4.test(w))
w = w + "e";
}
}
// Step 1c
re = /^(.+?)y$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(s_v);
if (re.test(stem))
w = stem + "i";
}
// Step 2
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step2list[suffix];
}
// Step 3
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step3list[suffix];
}
// Step 4
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
re2 = /^(.+?)(s|t)(ion)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
if (re.test(stem))
w = stem;
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1] + fp[2];
re2 = new RegExp(mgr1);
if (re2.test(stem))
w = stem;
}
// Step 5
re = /^(.+?)e$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
re2 = new RegExp(meq1);
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
w = stem;
}
re = /ll$/;
re2 = new RegExp(mgr1);
if (re.test(w) && re2.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
// and turn initial Y back to y
if (firstch == "y")
w = firstch.toLowerCase() + w.substr(1);
return w;
}
}
var splitChars = (function() {
var result = {};
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
var i, j, start, end;
for (i = 0; i < singles.length; i++) {
result[singles[i]] = true;
}
var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
[722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
[1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
[1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
[1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
[2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
[2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
[2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
[2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
[2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
[2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
[2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
[3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
[3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
[3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
[3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
[3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
[3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
[4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
[4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
[4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
[4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
[5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
[6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
[6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
[6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
[6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
[7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
[7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
[8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
[8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
[8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
[10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
[11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
[12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
[12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
[12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
[19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
[42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
[42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
[43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
[43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
[43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
[43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
[44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
[57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
[64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
[65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
[65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
for (i = 0; i < ranges.length; i++) {
start = ranges[i][0];
end = ranges[i][1];
for (j = start; j <= end; j++) {
result[j] = true;
}
}
return result;
})();
function splitQuery(query) {
var result = [];
var start = -1;
for (var i = 0; i < query.length; i++) {
if (splitChars[query.charCodeAt(i)]) {
if (start !== -1) {
result.push(query.slice(start, i));
start = -1;
}
} else if (start === -1) {
start = i;
}
}
if (start !== -1) {
result.push(query.slice(start));
}
return result;
}

BIN
doc/build/_static/minus.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

BIN
doc/build/_static/plus.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

82
doc/build/_static/pygments.css vendored Normal file
View File

@ -0,0 +1,82 @@
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #8f5902; font-style: italic } /* Comment */
.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */
.highlight .g { color: #000000 } /* Generic */
.highlight .k { color: #004461; font-weight: bold } /* Keyword */
.highlight .l { color: #000000 } /* Literal */
.highlight .n { color: #000000 } /* Name */
.highlight .o { color: #582800 } /* Operator */
.highlight .x { color: #000000 } /* Other */
.highlight .p { color: #000000; font-weight: bold } /* Punctuation */
.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #8f5902 } /* Comment.Preproc */
.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */
.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */
.highlight .gd { color: #a40000 } /* Generic.Deleted */
.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */
.highlight .gr { color: #ef2929 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #745334 } /* Generic.Prompt */
.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */
.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */
.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */
.highlight .ld { color: #000000 } /* Literal.Date */
.highlight .m { color: #990000 } /* Literal.Number */
.highlight .s { color: #4e9a06 } /* Literal.String */
.highlight .na { color: #c4a000 } /* Name.Attribute */
.highlight .nb { color: #004461 } /* Name.Builtin */
.highlight .nc { color: #000000 } /* Name.Class */
.highlight .no { color: #000000 } /* Name.Constant */
.highlight .nd { color: #888888 } /* Name.Decorator */
.highlight .ni { color: #ce5c00 } /* Name.Entity */
.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #000000 } /* Name.Function */
.highlight .nl { color: #f57900 } /* Name.Label */
.highlight .nn { color: #000000 } /* Name.Namespace */
.highlight .nx { color: #000000 } /* Name.Other */
.highlight .py { color: #000000 } /* Name.Property */
.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #000000 } /* Name.Variable */
.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */
.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */
.highlight .mb { color: #990000 } /* Literal.Number.Bin */
.highlight .mf { color: #990000 } /* Literal.Number.Float */
.highlight .mh { color: #990000 } /* Literal.Number.Hex */
.highlight .mi { color: #990000 } /* Literal.Number.Integer */
.highlight .mo { color: #990000 } /* Literal.Number.Oct */
.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */
.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */
.highlight .sc { color: #4e9a06 } /* Literal.String.Char */
.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */
.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */
.highlight .se { color: #4e9a06 } /* Literal.String.Escape */
.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */
.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */
.highlight .sx { color: #4e9a06 } /* Literal.String.Other */
.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */
.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */
.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */
.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #000000 } /* Name.Function.Magic */
.highlight .vc { color: #000000 } /* Name.Variable.Class */
.highlight .vg { color: #000000 } /* Name.Variable.Global */
.highlight .vi { color: #000000 } /* Name.Variable.Instance */
.highlight .vm { color: #000000 } /* Name.Variable.Magic */
.highlight .il { color: #990000 } /* Literal.Number.Integer.Long */

522
doc/build/_static/searchtools.js vendored Normal file
View File

@ -0,0 +1,522 @@
/*
* searchtools.js
* ~~~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilities for the full-text search.
*
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
if (!Scorer) {
/**
* Simple result scoring code.
*/
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [filename, title, anchor, descr, score]
// and returns the new score.
/*
score: function(result) {
return result[4];
},
*/
// query matches the full name of an object
objNameMatch: 11,
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5}, // used to be unimportantResults
// Used when the priority is not in the mapping.
objPrioDefault: 0,
// query found in title
title: 15,
partialTitle: 7,
// query found in terms
term: 5,
partialTerm: 2
};
}
if (!splitQuery) {
function splitQuery(query) {
return query.split(/\s+/);
}
}
/**
* Search Module
*/
var Search = {
_index : null,
_queued_query : null,
_pulse_status : -1,
htmlToText : function(htmlString) {
var virtualDocument = document.implementation.createHTMLDocument('virtual');
var htmlElement = $(htmlString, virtualDocument);
htmlElement.find('.headerlink').remove();
docContent = htmlElement.find('[role=main]')[0];
if(docContent === undefined) {
console.warn("Content block not found. Sphinx search tries to obtain it " +
"via '[role=main]'. Could you check your theme or template.");
return "";
}
return docContent.textContent || docContent.innerText;
},
init : function() {
var params = $.getQueryParameters();
if (params.q) {
var query = params.q[0];
$('input[name="q"]')[0].value = query;
this.performSearch(query);
}
},
loadIndex : function(url) {
$.ajax({type: "GET", url: url, data: null,
dataType: "script", cache: true,
complete: function(jqxhr, textstatus) {
if (textstatus != "success") {
document.getElementById("searchindexloader").src = url;
}
}});
},
setIndex : function(index) {
var q;
this._index = index;
if ((q = this._queued_query) !== null) {
this._queued_query = null;
Search.query(q);
}
},
hasIndex : function() {
return this._index !== null;
},
deferQuery : function(query) {
this._queued_query = query;
},
stopPulse : function() {
this._pulse_status = 0;
},
startPulse : function() {
if (this._pulse_status >= 0)
return;
function pulse() {
var i;
Search._pulse_status = (Search._pulse_status + 1) % 4;
var dotString = '';
for (i = 0; i < Search._pulse_status; i++)
dotString += '.';
Search.dots.text(dotString);
if (Search._pulse_status > -1)
window.setTimeout(pulse, 500);
}
pulse();
},
/**
* perform a search for something (or wait until index is loaded)
*/
performSearch : function(query) {
// create the required interface elements
this.out = $('#search-results');
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
this.dots = $('<span></span>').appendTo(this.title);
this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out);
this.output = $('<ul class="search"/>').appendTo(this.out);
$('#search-progress').text(_('Preparing search...'));
this.startPulse();
// index already loaded, the browser was quick!
if (this.hasIndex())
this.query(query);
else
this.deferQuery(query);
},
/**
* execute search (requires search index to be loaded)
*/
query : function(query) {
var i;
// stem the searchterms and add them to the correct list
var stemmer = new Stemmer();
var searchterms = [];
var excluded = [];
var hlterms = [];
var tmp = splitQuery(query);
var objectterms = [];
for (i = 0; i < tmp.length; i++) {
if (tmp[i] !== "") {
objectterms.push(tmp[i].toLowerCase());
}
if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
// skip this "word"
continue;
}
// stem the word
var word = stemmer.stemWord(tmp[i].toLowerCase());
// prevent stemmer from cutting word smaller than two chars
if(word.length < 3 && tmp[i].length >= 3) {
word = tmp[i];
}
var toAppend;
// select the correct list
if (word[0] == '-') {
toAppend = excluded;
word = word.substr(1);
}
else {
toAppend = searchterms;
hlterms.push(tmp[i].toLowerCase());
}
// only add if not already in the list
if (!$u.contains(toAppend, word))
toAppend.push(word);
}
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
// console.debug('SEARCH: searching for:');
// console.info('required: ', searchterms);
// console.info('excluded: ', excluded);
// prepare search
var terms = this._index.terms;
var titleterms = this._index.titleterms;
// array of [filename, title, anchor, descr, score]
var results = [];
$('#search-progress').empty();
// lookup as object
for (i = 0; i < objectterms.length; i++) {
var others = [].concat(objectterms.slice(0, i),
objectterms.slice(i+1, objectterms.length));
results = results.concat(this.performObjectSearch(objectterms[i], others));
}
// lookup as search terms in fulltext
results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
// let the scorer override scores with a custom scoring function
if (Scorer.score) {
for (i = 0; i < results.length; i++)
results[i][4] = Scorer.score(results[i]);
}
// now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then
// alphabetically
results.sort(function(a, b) {
var left = a[4];
var right = b[4];
if (left > right) {
return 1;
} else if (left < right) {
return -1;
} else {
// same score: sort alphabetically
left = a[1].toLowerCase();
right = b[1].toLowerCase();
return (left > right) ? -1 : ((left < right) ? 1 : 0);
}
});
// for debugging
//Search.lastresults = results.slice(); // a copy
//console.info('search results:', Search.lastresults);
// print the results
var resultCount = results.length;
function displayNextItem() {
// results left, load the summary and display it
if (results.length) {
var item = results.pop();
var listItem = $('<li></li>');
var requestUrl = "";
var linkUrl = "";
if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
// dirhtml builder
var dirname = item[0] + '/';
if (dirname.match(/\/index\/$/)) {
dirname = dirname.substring(0, dirname.length-6);
} else if (dirname == 'index/') {
dirname = '';
}
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
}
listItem.append($('<a/>').attr('href',
linkUrl +
highlightstring + item[2]).html(item[1]));
if (item[3]) {
listItem.append($('<span> (' + item[3] + ')</span>'));
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
} else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
$.ajax({url: requestUrl,
dataType: "text",
complete: function(jqxhr, textstatus) {
var data = jqxhr.responseText;
if (data !== '' && data !== undefined) {
listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
}
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}});
} else {
// no source available, just display title
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}
}
// search finished, update title and status message
else {
Search.stopPulse();
Search.title.text(_('Search Results'));
if (!resultCount)
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
else
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
Search.status.fadeIn(500);
}
}
displayNextItem();
},
/**
* search for object names
*/
performObjectSearch : function(object, otherterms) {
var filenames = this._index.filenames;
var docnames = this._index.docnames;
var objects = this._index.objects;
var objnames = this._index.objnames;
var titles = this._index.titles;
var i;
var results = [];
for (var prefix in objects) {
for (var name in objects[prefix]) {
var fullname = (prefix ? prefix + '.' : '') + name;
var fullnameLower = fullname.toLowerCase()
if (fullnameLower.indexOf(object) > -1) {
var score = 0;
var parts = fullnameLower.split('.');
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower == object || parts[parts.length - 1] == object) {
score += Scorer.objNameMatch;
// matches in last name
} else if (parts[parts.length - 1].indexOf(object) > -1) {
score += Scorer.objPartialMatch;
}
var match = objects[prefix][name];
var objname = objnames[match[1]][2];
var title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
if (otherterms.length > 0) {
var haystack = (prefix + ' ' + name + ' ' +
objname + ' ' + title).toLowerCase();
var allfound = true;
for (i = 0; i < otherterms.length; i++) {
if (haystack.indexOf(otherterms[i]) == -1) {
allfound = false;
break;
}
}
if (!allfound) {
continue;
}
}
var descr = objname + _(', in ') + title;
var anchor = match[3];
if (anchor === '')
anchor = fullname;
else if (anchor == '-')
anchor = objnames[match[1]][1] + '-' + fullname;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2])) {
score += Scorer.objPrio[match[2]];
} else {
score += Scorer.objPrioDefault;
}
results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
}
}
}
return results;
},
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
*/
escapeRegExp : function(string) {
return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
},
/**
* search for full-text terms in the index
*/
performTermsSearch : function(searchterms, excluded, terms, titleterms) {
var docnames = this._index.docnames;
var filenames = this._index.filenames;
var titles = this._index.titles;
var i, j, file;
var fileMap = {};
var scoreMap = {};
var results = [];
// perform the search on the required terms
for (i = 0; i < searchterms.length; i++) {
var word = searchterms[i];
var files = [];
var _o = [
{files: terms[word], score: Scorer.term},
{files: titleterms[word], score: Scorer.title}
];
// add support for partial matches
if (word.length > 2) {
var word_regex = this.escapeRegExp(word);
for (var w in terms) {
if (w.match(word_regex) && !terms[word]) {
_o.push({files: terms[w], score: Scorer.partialTerm})
}
}
for (var w in titleterms) {
if (w.match(word_regex) && !titleterms[word]) {
_o.push({files: titleterms[w], score: Scorer.partialTitle})
}
}
}
// no match but word was a required one
if ($u.every(_o, function(o){return o.files === undefined;})) {
break;
}
// found search word in contents
$u.each(_o, function(o) {
var _files = o.files;
if (_files === undefined)
return
if (_files.length === undefined)
_files = [_files];
files = files.concat(_files);
// set score for the word in each file to Scorer.term
for (j = 0; j < _files.length; j++) {
file = _files[j];
if (!(file in scoreMap))
scoreMap[file] = {};
scoreMap[file][word] = o.score;
}
});
// create the mapping
for (j = 0; j < files.length; j++) {
file = files[j];
if (file in fileMap && fileMap[file].indexOf(word) === -1)
fileMap[file].push(word);
else
fileMap[file] = [word];
}
}
// now check if the files don't contain excluded terms
for (file in fileMap) {
var valid = true;
// check if all requirements are matched
var filteredTermCount = // as search terms with length < 3 are discarded: ignore
searchterms.filter(function(term){return term.length > 2}).length
if (
fileMap[file].length != searchterms.length &&
fileMap[file].length != filteredTermCount
) continue;
// ensure that none of the excluded terms is in the search result
for (i = 0; i < excluded.length; i++) {
if (terms[excluded[i]] == file ||
titleterms[excluded[i]] == file ||
$u.contains(terms[excluded[i]] || [], file) ||
$u.contains(titleterms[excluded[i]] || [], file)) {
valid = false;
break;
}
}
// if we have still a valid result we can add it to the result list
if (valid) {
// select one (max) score for the file.
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
}
}
return results;
},
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words, hlwords is the list of normal, unstemmed
* words. the first one is used to find the occurrence, the
* latter for highlighting it.
*/
makeSearchSummary : function(htmlText, keywords, hlwords) {
var text = Search.htmlToText(htmlText);
var textLower = text.toLowerCase();
var start = 0;
$.each(keywords, function() {
var i = textLower.indexOf(this.toLowerCase());
if (i > -1)
start = i;
});
start = Math.max(start - 120, 0);
var excerpt = ((start > 0) ? '...' : '') +
$.trim(text.substr(start, 240)) +
((start + 240 - text.length) ? '...' : '');
var rv = $('<p class="context"></p>').text(excerpt);
$.each(hlwords, function() {
rv = rv.highlightText(this, 'highlighted');
});
return rv;
}
};
$(document).ready(function() {
Search.init();
});

2042
doc/build/_static/underscore-1.13.1.js vendored Normal file

File diff suppressed because it is too large Load Diff

6
doc/build/_static/underscore.js vendored Normal file

File diff suppressed because one or more lines are too long

108
doc/build/genindex.html vendored Normal file
View File

@ -0,0 +1,108 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Index &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="#" />
<link rel="search" title="Search" href="search.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1 id="index">Index</h1>
<div class="genindex-jumpbox">
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="main/intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="main/config.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="main/easymacro.html">Library easymacro.py</a></li>
<li class="toctree-l1"><a class="reference internal" href="main/examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="main/apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

158
doc/build/index.html vendored Normal file
View File

@ -0,0 +1,158 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Welcome to ZAZs documentation! &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Introduction" href="main/intro.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="welcome-to-zaz-s-documentation">
<h1>Welcome to ZAZs documentation!<a class="headerlink" href="#welcome-to-zaz-s-documentation" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="main/intro.html">Introduction</a><ul>
<li class="toctree-l2"><a class="reference internal" href="main/intro.html#overview">Overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="main/intro.html#requirements">Requirements</a></li>
<li class="toctree-l2"><a class="reference internal" href="main/intro.html#installation">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="main/intro.html#my-first-extension">My first extension</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="main/config.html">Configuration</a><ul>
<li class="toctree-l2"><a class="reference internal" href="main/config.html#parameters">Parameters</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="main/easymacro.html">Library easymacro.py</a><ul>
<li class="toctree-l2"><a class="reference internal" href="main/tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="main/tools.html">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="main/paths.html">Paths and files</a></li>
<li class="toctree-l2"><a class="reference internal" href="main/email.html">Email</a></li>
<li class="toctree-l2"><a class="reference internal" href="main/application.html">Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="main/calc.html">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="main/writer.html">Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="main/base.html">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="main/examples.html">Examples</a><ul>
<li class="toctree-l2"><a class="reference internal" href="main/examples_app.html">For Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="main/examples_calc.html">For Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="main/examples_writer.html">For Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="main/examples_draw.html">For Draw</a></li>
<li class="toctree-l2"><a class="reference internal" href="main/examples_base.html">For Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="main/apendixes.html">Apendixes</a><ul>
<li class="toctree-l2"><a class="reference internal" href="main/apendixes.html#get-all-filters-in-calc-sheet">Get all filters in Calc sheet</a></li>
</ul>
</li>
</ul>
</div>
</section>
<section id="indices-and-tables">
<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline"></a></h1>
<ul class="simple">
<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li>
<li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p></li>
<li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li>
</ul>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="#">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="main/intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="main/config.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="main/easymacro.html">Library easymacro.py</a></li>
<li class="toctree-l1"><a class="reference internal" href="main/examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="main/apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="#">Documentation overview</a><ul>
<li>Next: <a href="main/intro.html" title="next chapter">Introduction</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="_sources/index.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

152
doc/build/main/apendixes.html vendored Normal file
View File

@ -0,0 +1,152 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Apendixes &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="prev" title="For Base" href="examples_base.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="apendixes">
<h1>Apendixes<a class="headerlink" href="#apendixes" title="Permalink to this headline"></a></h1>
<p>Remember, always import library.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">easymacro</span> <span class="k">as</span> <span class="nn">app</span>
</pre></div>
</div>
<section id="get-all-filters-in-calc-sheet">
<h2>Get all filters in Calc sheet<a class="headerlink" href="#get-all-filters-in-calc-sheet" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Fields in filter</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="s1">&#39;Finalized&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
<span class="s1">&#39;UIName&#39;</span><span class="p">:</span> <span class="s1">&#39;EPS - Encapsulated PostScript&#39;</span><span class="p">,</span>
<span class="s1">&#39;UserData&#39;</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">ByteSequence</span> <span class="n">instance</span> <span class="s1">&#39;b&#39;&#39;&#39;</span><span class="o">&gt;</span><span class="p">,</span>
<span class="s1">&#39;TemplateName&#39;</span><span class="p">:</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>
<span class="s1">&#39;Enabled&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s1">&#39;Mandatory&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
<span class="s1">&#39;Name&#39;</span><span class="p">:</span> <span class="s1">&#39;impress_eps_Export&#39;</span><span class="p">,</span>
<span class="s1">&#39;FilterService&#39;</span><span class="p">:</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>
<span class="s1">&#39;Type&#39;</span><span class="p">:</span> <span class="s1">&#39;eps_Encapsulated_PostScript&#39;</span><span class="p">,</span>
<span class="s1">&#39;UIComponent&#39;</span><span class="p">:</span> <span class="s1">&#39;com.sun.star.svtools.SvFilterOptionsDialog&#39;</span><span class="p">,</span>
<span class="s1">&#39;Flags&#39;</span><span class="p">:</span> <span class="mi">1090</span><span class="p">,</span>
<span class="s1">&#39;FileFormatVersion&#39;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="s1">&#39;DocumentService&#39;</span><span class="p">:</span> <span class="s1">&#39;com.sun.star.presentation.PresentationDocument&#39;</span><span class="p">,</span>
<span class="s1">&#39;UINames&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;en-US&#39;</span><span class="p">:</span> <span class="s1">&#39;EPS - Encapsulated PostScript&#39;</span><span class="p">,</span>
<span class="s1">&#39;es&#39;</span><span class="p">:</span> <span class="s1">&#39;EPS - PostScript encapsulado&#39;</span><span class="p">}</span>
</pre></div>
</div>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">filters</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">get_filters</span><span class="p">()</span>
<span class="n">headers</span> <span class="o">=</span> <span class="p">((</span><span class="s1">&#39;DocumentService&#39;</span><span class="p">,</span> <span class="s1">&#39;UIName&#39;</span><span class="p">,</span> <span class="s1">&#39;Name&#39;</span><span class="p">,</span> <span class="s1">&#39;Type&#39;</span><span class="p">),)</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">[(</span><span class="n">f</span><span class="p">[</span><span class="s1">&#39;DocumentService&#39;</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="s1">&#39;UIName&#39;</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="s1">&#39;Name&#39;</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="s1">&#39;Type&#39;</span><span class="p">])</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">filters</span><span class="p">]</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">new</span><span class="p">()</span>
<span class="n">doc</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">headers</span>
<span class="n">doc</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;A2&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">data</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="easymacro.html">Library easymacro.py</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Apendixes</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#get-all-filters-in-calc-sheet">Get all filters in Calc sheet</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="examples_base.html" title="previous chapter">For Base</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/apendixes.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

560
doc/build/main/application.html vendored Normal file
View File

@ -0,0 +1,560 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Application &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Calc" href="calc.html" />
<link rel="prev" title="Email" href="email.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="application">
<h1>Application<a class="headerlink" href="#application" title="Permalink to this headline"></a></h1>
<p>Remember, always import library.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">easymacro</span> <span class="k">as</span> <span class="nn">app</span>
</pre></div>
</div>
<section id="create-instances">
<h2>Create instances<a class="headerlink" href="#create-instances" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Instances without context</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">toolkit</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">create_instance</span><span class="p">(</span><span class="s2">&quot;com.sun.star.awt.Toolkit&quot;</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Instances with context</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">service</span> <span class="o">=</span> <span class="s1">&#39;com.sun.star.awt.DialogProvider2&#39;</span>
<span class="n">dialog</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">create_instance</span><span class="p">(</span><span class="n">service</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get desktop</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">desktop1</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">create_instance</span><span class="p">(</span><span class="s1">&#39;com.sun.star.frame.Desktop&#39;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="c1"># ~ or</span>
<span class="n">desktop2</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">get_desktop</span><span class="p">()</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">desktop1</span> <span class="o">==</span> <span class="n">desktop2</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="current-doc">
<h2>Current doc<a class="headerlink" href="#current-doc" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">title</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="iter-docs">
<h2>Iter docs<a class="headerlink" href="#iter-docs" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">for</span> <span class="n">doc</span> <span class="ow">in</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="p">:</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">title</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="count">
<h2>Count<a class="headerlink" href="#count" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="get-by-name">
<h2>Get by name<a class="headerlink" href="#get-by-name" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">name</span> <span class="o">=</span> <span class="s1">&#39;MyDoc.ods&#39;</span>
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="p">:</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">title</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="if-contain">
<h2>If contain<a class="headerlink" href="#if-contain" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">result</span> <span class="o">=</span> <span class="s1">&#39;myfile.ods&#39;</span> <span class="ow">in</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="new">
<h2>New<a class="headerlink" href="#new" title="Permalink to this headline"></a></h2>
<p>For default create new Calc document.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">new</span><span class="p">()</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
</pre></div>
</div>
<p>For new Writer document.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="s1">&#39;writer&#39;</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
</pre></div>
</div>
<p>With arguments.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">args</span><span class="o">=</span> <span class="p">{</span><span class="s1">&#39;Hidden&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="s1">&#39;writer&#39;</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
<span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">doc</span><span class="o">.</span><span class="n">type</span><span class="si">}</span><span class="s1"> - </span><span class="si">{</span><span class="n">doc</span><span class="o">.</span><span class="n">title</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">visible</span> <span class="o">=</span> <span class="kc">True</span>
</pre></div>
</div>
<p>Other documents.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="s1">&#39;draw&#39;</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="s1">&#39;impress&#39;</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="open">
<h2>Open<a class="headerlink" href="#open" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/MyDoc.ods&#39;</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
</pre></div>
</div>
<p>While LibreOffice support format, you can open arbitrary file.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/example.xlsx&#39;</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
</pre></div>
</div>
<p>With arguments.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/example.odt&#39;</span>
<span class="n">args</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;Password&#39;</span><span class="p">:</span> <span class="s1">&#39;letmein&#39;</span><span class="p">}</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="save">
<h2>Save<a class="headerlink" href="#save" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/myfile.ods&#39;</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">new</span><span class="p">()</span>
<span class="n">doc</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>If previously open and modify any file.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Open exists file and save with other name.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/myfile.ods&#39;</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">new_path</span> <span class="o">=</span> <span class="s1">&#39;/srv/mau/other_name.ods&#39;</span>
<span class="n">doc</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">new_path</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="close">
<h2>Close<a class="headerlink" href="#close" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">new</span><span class="p">()</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">title</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</pre></div>
</div>
</section>
<section id="to-pdf">
<h2>To PDF<a class="headerlink" href="#to-pdf" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Save in path</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/test.pdf&#39;</span>
<span class="n">doc</span><span class="o">.</span><span class="n">to_pdf</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Save in memory</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">pdf</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">to_pdf</span><span class="p">()</span>
</pre></div>
</div>
</section>
<section id="export">
<h2>Export<a class="headerlink" href="#export" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Export common formats</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">new</span><span class="p">()</span>
<span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/myfile.xlsx&#39;</span>
<span class="n">filter_name</span> <span class="o">=</span> <span class="s1">&#39;xlsx&#39;</span>
<span class="n">doc</span><span class="o">.</span><span class="n">export</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">filter_name</span><span class="p">)</span>
<span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/myfile.xls&#39;</span>
<span class="n">filter_name</span> <span class="o">=</span> <span class="s1">&#39;xls&#39;</span>
<span class="n">doc</span><span class="o">.</span><span class="n">export</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">filter_name</span><span class="p">)</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="s1">&#39;writer&#39;</span><span class="p">)</span>
<span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/myfile.docx&#39;</span>
<span class="n">filter_name</span> <span class="o">=</span> <span class="s1">&#39;docx&#39;</span>
<span class="n">doc</span><span class="o">.</span><span class="n">export</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">filter_name</span><span class="p">)</span>
<span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/myfile.doc&#39;</span>
<span class="n">filter_name</span> <span class="o">=</span> <span class="s1">&#39;doc&#39;</span>
<span class="n">doc</span><span class="o">.</span><span class="n">export</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">filter_name</span><span class="p">)</span>
<span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/myfile.rtf&#39;</span>
<span class="n">filter_name</span> <span class="o">=</span> <span class="s1">&#39;rtf&#39;</span>
<span class="n">doc</span><span class="o">.</span><span class="n">export</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">filter_name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>For all support formats look <a class="reference external" href="apendixes.html">Apendix</a></p></li>
<li><p>Export in memory.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">new</span><span class="p">()</span>
<span class="n">filter_name</span> <span class="o">=</span> <span class="s1">&#39;xlsx&#39;</span>
<span class="n">excel_doc</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">export</span><span class="p">(</span><span class="n">filter_name</span><span class="o">=</span><span class="n">filter_name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="fonst">
<h2>Fonst<a class="headerlink" href="#fonst" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Get all fonts</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">fonts</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">get_fonts</span><span class="p">()</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fonts</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Name: </span><span class="si">{</span><span class="n">f</span><span class="o">.</span><span class="n">Name</span><span class="si">}</span><span class="s1"> - StyleName: </span><span class="si">{</span><span class="n">f</span><span class="o">.</span><span class="n">StyleName</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="filters">
<h2>Filters<a class="headerlink" href="#filters" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Get all <a class="reference external" href="https://help.libreoffice.org/latest/en-US/text/shared/guide/convertfilters.html">support filters</a></p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">filters</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">get_filters</span><span class="p">()</span>
<span class="n">ds</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">filters</span><span class="p">:</span>
<span class="n">data</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UI Name: </span><span class="si">{</span><span class="n">f</span><span class="p">[</span><span class="s1">&#39;UIName&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"> - Name: </span><span class="si">{</span><span class="n">f</span><span class="p">[</span><span class="s1">&#39;Name&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"> - Type: </span><span class="si">{</span><span class="n">f</span><span class="p">[</span><span class="s1">&#39;Type&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="call-dispatch">
<h2>Call dispatch<a class="headerlink" href="#call-dispatch" title="Permalink to this headline"></a></h2>
<p>You can call any <a class="reference external" href="https://wiki.documentfoundation.org/Development/DispatchCommands">dispatch command</a> used only if property or method no exists in original object or in <cite>easymacro.py</cite></p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">command</span> <span class="o">=</span> <span class="s1">&#39;.uno:Gallery&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">call_dispatch</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">command</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="properties">
<h2>Properties<a class="headerlink" href="#properties" title="Permalink to this headline"></a></h2>
<section id="obj">
<h3>obj<a class="headerlink" href="#obj" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Get original object pyUNO (read only)</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">doc</span><span class="p">))</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">obj</span><span class="p">))</span>
</pre></div>
</div>
</section>
<section id="title">
<h3>title<a class="headerlink" href="#title" title="Permalink to this headline"></a></h3>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">title</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="s1">&#39;New title&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">title</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="type">
<h3>type<a class="headerlink" href="#type" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Get type document: calc, writer, etc. (read only)</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="uid">
<h3>uid<a class="headerlink" href="#uid" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Get internal RuntimeUID form document. (read only)</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">uid</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="is-saved">
<h3>is_saved<a class="headerlink" href="#is-saved" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>If document is saved in this or not (read only)</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">is_saved</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="is-modified">
<h3>is_modified<a class="headerlink" href="#is-modified" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>If document has been modified (read only)</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">is_modified</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="is-read-only">
<h3>is_read_only<a class="headerlink" href="#is-read-only" title="Permalink to this headline"></a></h3>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">is_read_only</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="path">
<h3>path<a class="headerlink" href="#path" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Get path of document. (read only)</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="dir">
<h3>dir<a class="headerlink" href="#dir" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Get only directory from path saved (read only)</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">dir</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="file-name">
<h3>file_name<a class="headerlink" href="#file-name" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Get only file name from path saved (read only)</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">file_name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="name">
<h3>name<a class="headerlink" href="#name" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Get only name without extension (read only)</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">file_name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="visible">
<h3>visible<a class="headerlink" href="#visible" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Hide or show document.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">doc</span><span class="o">.</span><span class="n">visible</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">visible</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">visible</span> <span class="o">=</span> <span class="kc">True</span>
</pre></div>
</div>
</section>
<section id="zoom">
<h3>zoom<a class="headerlink" href="#zoom" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Get or set zoom value.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">zoom</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">zoom</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">zoom</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">zoom</span> <span class="o">=</span> <span class="n">zoom</span> <span class="o">*</span> <span class="mi">2</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">zoom</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">zoom</span> <span class="o">=</span> <span class="n">zoom</span>
</pre></div>
</div>
</section>
<section id="selection">
<h3>selection<a class="headerlink" href="#selection" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p><strong>CAUTION</strong>: Selection can be many things.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">selection</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">selection</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">selection</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="status-bar">
<h3>status_bar<a class="headerlink" href="#status-bar" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Get status bar, always control in other thread.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="nd">@app</span><span class="o">.</span><span class="n">run_in_thread</span>
<span class="k">def</span> <span class="nf">update_status_bar</span><span class="p">(</span><span class="n">sb</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">limit</span><span class="p">):</span>
<span class="n">sb</span><span class="o">.</span><span class="n">start</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">limit</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">limit</span><span class="p">):</span>
<span class="n">sb</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="c1"># ~ Is important free status bar</span>
<span class="n">sb</span><span class="o">.</span><span class="n">end</span><span class="p">()</span>
<span class="k">return</span>
<span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">update_status_bar</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">status_bar</span><span class="p">,</span> <span class="s1">&#39;Line&#39;</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
<span class="k">return</span>
</pre></div>
</div>
</section>
</section>
<section id="methods">
<h2>Methods<a class="headerlink" href="#methods" title="Permalink to this headline"></a></h2>
<section id="set-focus">
<h3>set_focus<a class="headerlink" href="#set-focus" title="Permalink to this headline"></a></h3>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">name</span> <span class="o">=</span> <span class="s1">&#39;MyDoc.ods&#39;</span>
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="p">:</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
<span class="n">doc</span><span class="o">.</span><span class="n">set_focus</span><span class="p">()</span>
</pre></div>
</div>
</section>
<section id="copy">
<h3>copy<a class="headerlink" href="#copy" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Copy current selection</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">doc</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</pre></div>
</div>
</section>
<section id="paste">
<h3>paste<a class="headerlink" href="#paste" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Paste any content in clipboard</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">doc</span><span class="o">.</span><span class="n">paste</span><span class="p">()</span>
</pre></div>
</div>
</section>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="easymacro.html">Library easymacro.py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html">Paths and files</a></li>
<li class="toctree-l2"><a class="reference internal" href="email.html">Email</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc.html">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="writer.html">Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="base.html">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="easymacro.html">Library easymacro.py</a><ul>
<li>Previous: <a href="email.html" title="previous chapter">Email</a></li>
<li>Next: <a href="calc.html" title="next chapter">Calc</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/application.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

136
doc/build/main/base.html vendored Normal file
View File

@ -0,0 +1,136 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Base &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Examples" href="examples.html" />
<link rel="prev" title="Writer" href="writer.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="base">
<h1>Base<a class="headerlink" href="#base" title="Permalink to this headline"></a></h1>
<p>Remember, always import library.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">easymacro</span> <span class="k">as</span> <span class="nn">app</span>
</pre></div>
</div>
<section id="new-database">
<h2>New database<a class="headerlink" href="#new-database" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/db.odb&#39;</span>
<span class="n">db</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">doc</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="easymacro.html">Library easymacro.py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html">Paths and files</a></li>
<li class="toctree-l2"><a class="reference internal" href="email.html">Email</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html">Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc.html">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="writer.html">Writer</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="easymacro.html">Library easymacro.py</a><ul>
<li>Previous: <a href="writer.html" title="previous chapter">Writer</a></li>
<li>Next: <a href="examples.html" title="next chapter">Examples</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/base.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

185
doc/build/main/calc.html vendored Normal file
View File

@ -0,0 +1,185 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Calc &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Document" href="calc_doc.html" />
<link rel="prev" title="Application" href="application.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="calc">
<h1>Calc<a class="headerlink" href="#calc" title="Permalink to this headline"></a></h1>
<p>Remember, always import library.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">easymacro</span> <span class="k">as</span> <span class="nn">app</span>
</pre></div>
</div>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="calc_doc.html">Document</a><ul>
<li class="toctree-l2"><a class="reference internal" href="calc_doc.html#current-doc">Current doc</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_doc.html#selection">Selection</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_doc.html#headers">Headers</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_doc.html#tabs">Tabs</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="calc_sheets.html">Sheets</a><ul>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#active-sheet">Active sheet</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#get-by-index">Get by index</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#get-by-name">Get by name</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#contains">Contains</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#get-tuple-with-all-names">Get tuple with all names</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#count">Count</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#new">New</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#move">Move</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#remove">Remove</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#copy">Copy</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#copy-from">Copy from</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#copy-to">Copy to</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#sort">Sort</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#name">Name</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#code-name">Code name</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#visible">Visible</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#is-protected">Is protected</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#set-password">Set password</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#remove-password">Remove password</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#tab-color">Tab color</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#document-parent">Document parent</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#activate">Activate</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="calc_ranges.html">Cell and ranges</a><ul>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges.html#cells">Cells</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges.html#ranges">Ranges</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges.html#info-ranges">Info ranges</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges.html#special-ranges">Special ranges</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="calc_ranges2.html">Manipulate ranges</a><ul>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges2.html#select">Select</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges2.html#move">Move</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges2.html#insert">Insert</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges2.html#delete">Delete</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges2.html#copy">Copy</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="calc_data.html">Data</a><ul>
<li class="toctree-l2"><a class="reference internal" href="calc_data.html#read">Read</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_data.html#write">Write</a></li>
</ul>
</li>
</ul>
</div>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="easymacro.html">Library easymacro.py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html">Paths and files</a></li>
<li class="toctree-l2"><a class="reference internal" href="email.html">Email</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html">Application</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="writer.html">Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="base.html">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="easymacro.html">Library easymacro.py</a><ul>
<li>Previous: <a href="application.html" title="previous chapter">Application</a></li>
<li>Next: <a href="calc_doc.html" title="next chapter">Document</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/calc.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

214
doc/build/main/calc_data.html vendored Normal file
View File

@ -0,0 +1,214 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Data &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Writer" href="writer.html" />
<link rel="prev" title="Manipulate ranges" href="calc_ranges2.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="data">
<h1>Data<a class="headerlink" href="#data" title="Permalink to this headline"></a></h1>
<section id="read">
<h2>Read<a class="headerlink" href="#read" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Get value from cell, automatic detect type and get value.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">cell</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">cell</span><span class="o">.</span><span class="n">value</span>
<span class="n">info</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;Cell Type = </span><span class="si">{</span><span class="n">cell</span><span class="o">.</span><span class="n">type</span><span class="si">}</span><span class="se">\n\n</span><span class="s1">Cell Value = </span><span class="si">{</span><span class="n">cell</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">info</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get date, time and datetime like data Python.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">cell</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">cell</span><span class="o">.</span><span class="n">date</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">cell</span><span class="o">.</span><span class="n">time</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">cell</span><span class="o">.</span><span class="n">datetime</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get values from cell range.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:B5&#39;</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">rango</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get formulas</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:B5&#39;</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">rango</span><span class="o">.</span><span class="n">formula</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get array formula</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;C10:E15&#39;</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">rango</span><span class="o">.</span><span class="n">array_formula</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get like dictionary</p></li>
</ul>
<p>The first row in range are the keys.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:B5&#39;</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">rango</span><span class="o">.</span><span class="n">dict</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="write">
<h2>Write<a class="headerlink" href="#write" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Automatic detect data type.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="c1"># ~ Set int</span>
<span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="mi">1</span>
<span class="c1"># ~ Set float</span>
<span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A2&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="mf">10.5</span>
<span class="c1"># ~ Set string</span>
<span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A3&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="s1">&#39;Damn World&#39;</span>
<span class="c1"># ~ Set formula</span>
<span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A4&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="s1">&#39;=RAND()&#39;</span>
<span class="c1"># ~ Set date</span>
<span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A5&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">today</span><span class="p">()</span>
<span class="c1"># ~ Set time</span>
<span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A6&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">now</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="c1"># ~ Set datetime</span>
<span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A7&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="easymacro.html">Library easymacro.py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html">Paths and files</a></li>
<li class="toctree-l2"><a class="reference internal" href="email.html">Email</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html">Application</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="calc.html">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="writer.html">Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="base.html">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="easymacro.html">Library easymacro.py</a><ul>
<li><a href="calc.html">Calc</a><ul>
<li>Previous: <a href="calc_ranges2.html" title="previous chapter">Manipulate ranges</a></li>
<li>Next: <a href="writer.html" title="next chapter">Writer</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/calc_data.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

171
doc/build/main/calc_doc.html vendored Normal file
View File

@ -0,0 +1,171 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Document &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Sheets" href="calc_sheets.html" />
<link rel="prev" title="Calc" href="calc.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="document">
<h1>Document<a class="headerlink" href="#document" title="Permalink to this headline"></a></h1>
<section id="current-doc">
<h2>Current doc<a class="headerlink" href="#current-doc" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="selection">
<h2>Selection<a class="headerlink" href="#selection" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>If selection is range get LOCalcRange, if selection is shape get LOShape, other selection get original pyuno object.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">selection</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">selection</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">selection</span><span class="p">))</span>
</pre></div>
</div>
</section>
<section id="headers">
<h2>Headers<a class="headerlink" href="#headers" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Hide or show columns and rows headers.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">headers</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">headers</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">doc</span><span class="o">.</span><span class="n">headers</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">headers</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">headers</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">doc</span><span class="o">.</span><span class="n">headers</span>
</pre></div>
</div>
</section>
<section id="tabs">
<h2>Tabs<a class="headerlink" href="#tabs" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Hide or show tab sheets.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">tabs</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">tabs</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">doc</span><span class="o">.</span><span class="n">tabs</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">tabs</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">tabs</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">doc</span><span class="o">.</span><span class="n">tabs</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="easymacro.html">Library easymacro.py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html">Paths and files</a></li>
<li class="toctree-l2"><a class="reference internal" href="email.html">Email</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html">Application</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="calc.html">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="writer.html">Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="base.html">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="easymacro.html">Library easymacro.py</a><ul>
<li><a href="calc.html">Calc</a><ul>
<li>Previous: <a href="calc.html" title="previous chapter">Calc</a></li>
<li>Next: <a href="calc_sheets.html" title="next chapter">Sheets</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/calc_doc.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

310
doc/build/main/calc_ranges.html vendored Normal file
View File

@ -0,0 +1,310 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Cell and ranges &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Manipulate ranges" href="calc_ranges2.html" />
<link rel="prev" title="Sheets" href="calc_sheets.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="cell-and-ranges">
<h1>Cell and ranges<a class="headerlink" href="#cell-and-ranges" title="Permalink to this headline"></a></h1>
<section id="cells">
<h2>Cells<a class="headerlink" href="#cells" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>By name</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">cell</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">cell</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>By position [row, column]</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">cell</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">cell</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="ranges">
<h2>Ranges<a class="headerlink" href="#ranges" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>By name</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;B2:D5&#39;</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">rango</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>By position [start_row:end_row, start_column:end_column]</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="mi">5</span><span class="p">,</span><span class="mi">1</span><span class="p">:</span><span class="mi">4</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">rango</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Group ranges</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">active</span>
<span class="n">last</span> <span class="o">=</span> <span class="n">doc</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="k">with</span> <span class="n">doc</span><span class="o">.</span><span class="n">ranges</span> <span class="k">as</span> <span class="n">r</span><span class="p">:</span>
<span class="c1"># Add one range</span>
<span class="n">r</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:B2&#39;</span><span class="p">])</span>
<span class="n">r2</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;C4:D5&#39;</span><span class="p">]</span>
<span class="n">r3</span> <span class="o">=</span> <span class="n">last</span><span class="p">[</span><span class="s1">&#39;E7:D8&#39;</span><span class="p">]</span>
<span class="n">r4</span> <span class="o">=</span> <span class="n">last</span><span class="p">[</span><span class="s1">&#39;E10:F12&#39;</span><span class="p">]</span>
<span class="c1"># Add multiple ranges</span>
<span class="n">r</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">r2</span><span class="p">,</span> <span class="n">r3</span><span class="p">,</span> <span class="n">r4</span><span class="p">))</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">names</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get the same range in all sheets</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">ranges</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">get_ranges</span><span class="p">(</span><span class="s1">&#39;A1:B1&#39;</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">ranges</span><span class="o">.</span><span class="n">names</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get columns by name.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;B:B&#39;</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">rango</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;D:F&#39;</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">rango</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get columns by position.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="c1"># Column B</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="mi">0</span><span class="p">:,</span><span class="mi">1</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">rango</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="c1"># Columnas D:F</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="mi">0</span><span class="p">:,</span><span class="mi">3</span><span class="p">:</span><span class="mi">6</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">rango</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get rows</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="c1"># One row</span>
<span class="n">row</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">row</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="c1"># Range rows</span>
<span class="n">row</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="mi">3</span><span class="p">:</span><span class="mi">10</span><span class="p">,</span><span class="mi">0</span><span class="p">:]</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">row</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="info-ranges">
<h2>Info ranges<a class="headerlink" href="#info-ranges" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Get absolute name</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:E10&#39;</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">rango</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get address</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">rango</span><span class="o">.</span><span class="n">address</span>
<span class="n">data</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;Cell Address</span>
<span class="s2">Row: </span><span class="si">{</span><span class="n">a</span><span class="o">.</span><span class="n">Row</span><span class="si">}</span><span class="s2"></span>
<span class="s2">Column: </span><span class="si">{</span><span class="n">a</span><span class="o">.</span><span class="n">Column</span><span class="si">}</span><span class="s2"></span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:E10&#39;</span><span class="p">]</span>
<span class="n">ra</span> <span class="o">=</span> <span class="n">rango</span><span class="o">.</span><span class="n">range_address</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">(</span>
<span class="sa">f</span><span class="s1">&#39;Range Address:</span><span class="se">\n\n</span><span class="s1">&#39;</span>
<span class="sa">f</span><span class="s1">&#39;Star Row: </span><span class="si">{</span><span class="n">ra</span><span class="o">.</span><span class="n">StartRow</span><span class="si">}</span><span class="se">\n</span><span class="s1">&#39;</span>
<span class="sa">f</span><span class="s1">&#39;End Row: </span><span class="si">{</span><span class="n">ra</span><span class="o">.</span><span class="n">EndRow</span><span class="si">}</span><span class="se">\n</span><span class="s1">&#39;</span>
<span class="sa">f</span><span class="s1">&#39;Star Column: </span><span class="si">{</span><span class="n">ra</span><span class="o">.</span><span class="n">StartColumn</span><span class="si">}</span><span class="se">\n</span><span class="s1">&#39;</span>
<span class="sa">f</span><span class="s1">&#39;End Column: </span><span class="si">{</span><span class="n">ra</span><span class="o">.</span><span class="n">EndColumn</span><span class="si">}</span><span class="se">\n</span><span class="s1">&#39;</span>
<span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="special-ranges">
<h2>Special ranges<a class="headerlink" href="#special-ranges" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Get used area</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="o">.</span><span class="n">used_area</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">rango</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get current region</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">current_region</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">rango</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get next free cell</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">cell</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">next_cell</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">cell</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get merged area</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">merged_area</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">rango</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get visible cells</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rangos</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:E10&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">visible</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">rangos</span><span class="p">:</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get empty cells</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rangos</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:E10&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">empty</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">rangos</span><span class="p">:</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="easymacro.html">Library easymacro.py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html">Paths and files</a></li>
<li class="toctree-l2"><a class="reference internal" href="email.html">Email</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html">Application</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="calc.html">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="writer.html">Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="base.html">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="easymacro.html">Library easymacro.py</a><ul>
<li><a href="calc.html">Calc</a><ul>
<li>Previous: <a href="calc_sheets.html" title="previous chapter">Sheets</a></li>
<li>Next: <a href="calc_ranges2.html" title="next chapter">Manipulate ranges</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/calc_ranges.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

242
doc/build/main/calc_ranges2.html vendored Normal file
View File

@ -0,0 +1,242 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Manipulate ranges &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Data" href="calc_data.html" />
<link rel="prev" title="Cell and ranges" href="calc_ranges.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="manipulate-ranges">
<h1>Manipulate ranges<a class="headerlink" href="#manipulate-ranges" title="Permalink to this headline"></a></h1>
<p><strong>Not, not is necesary select range for manipulate</strong></p>
<section id="select">
<h2>Select<a class="headerlink" href="#select" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Select from doc</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">cell</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span>
<span class="n">doc</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">cell</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Select in self range</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:C5&#39;</span><span class="p">]</span>
<span class="n">rango</span><span class="o">.</span><span class="n">select</span><span class="p">()</span>
</pre></div>
</div>
</section>
<section id="move">
<h2>Move<a class="headerlink" href="#move" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:C5&#39;</span><span class="p">]</span>
<span class="n">rango</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;E6&#39;</span><span class="p">])</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Move to other sheet</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="n">doc</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="s1">&#39;E6&#39;</span><span class="p">])</span>
</pre></div>
</div>
</section>
<section id="insert">
<h2>Insert<a class="headerlink" href="#insert" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Default insert down</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:C1&#39;</span><span class="p">]</span>
<span class="n">rango</span><span class="o">.</span><span class="n">insert</span><span class="p">()</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Insert and move right</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">CellInsertMode</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Insert entire rows</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">CellInsertMode</span><span class="o">.</span><span class="n">ROWS</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Insert entire columns</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">CellInsertMode</span><span class="o">.</span><span class="n">COLUMNS</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="delete">
<h2>Delete<a class="headerlink" href="#delete" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Default move up</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:C1&#39;</span><span class="p">]</span>
<span class="n">rango</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Delete and move left</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">CellDeleteMode</span><span class="o">.</span><span class="n">LEFT</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Delete entire rows</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">CellDeleteMode</span><span class="o">.</span><span class="n">ROWS</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Delete entire columns</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">CellDeleteMode</span><span class="o">.</span><span class="n">COLUMNS</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="copy">
<h2>Copy<a class="headerlink" href="#copy" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Using native method <cite>copyRange</cite>, current range always should be a cell and source should be a range.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">cell</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A5&#39;</span><span class="p">]</span>
<span class="n">source</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;D1:E4&#39;</span><span class="p">]</span>
<span class="n">cell</span><span class="o">.</span><span class="n">copy_from</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>From range to cell</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:C5&#39;</span><span class="p">]</span>
<span class="n">target</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;E1&#39;</span><span class="p">]</span>
<span class="n">rango</span><span class="o">.</span><span class="n">copy_to</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="easymacro.html">Library easymacro.py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html">Paths and files</a></li>
<li class="toctree-l2"><a class="reference internal" href="email.html">Email</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html">Application</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="calc.html">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="writer.html">Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="base.html">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="easymacro.html">Library easymacro.py</a><ul>
<li><a href="calc.html">Calc</a><ul>
<li>Previous: <a href="calc_ranges.html" title="previous chapter">Cell and ranges</a></li>
<li>Next: <a href="calc_data.html" title="next chapter">Data</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/calc_ranges2.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

426
doc/build/main/calc_sheets.html vendored Normal file
View File

@ -0,0 +1,426 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Sheets &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Cell and ranges" href="calc_ranges.html" />
<link rel="prev" title="Document" href="calc_doc.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="sheets">
<h1>Sheets<a class="headerlink" href="#sheets" title="Permalink to this headline"></a></h1>
<section id="active-sheet">
<h2>Active sheet<a class="headerlink" href="#active-sheet" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="c1"># or</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">active</span>
</pre></div>
</div>
</section>
<section id="get-by-index">
<h2>Get by index<a class="headerlink" href="#get-by-index" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="get-by-name">
<h2>Get by name<a class="headerlink" href="#get-by-name" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="p">[</span><span class="s1">&#39;Sheet1&#39;</span><span class="p">]</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="contains">
<h2>Contains<a class="headerlink" href="#contains" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="s1">&#39;Sheet1&#39;</span> <span class="ow">in</span> <span class="n">doc</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="get-tuple-with-all-names">
<h2>Get tuple with all names<a class="headerlink" href="#get-tuple-with-all-names" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">names</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="count">
<h2>Count<a class="headerlink" href="#count" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">doc</span><span class="p">))</span>
</pre></div>
</div>
</section>
<section id="new">
<h2>New<a class="headerlink" href="#new" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Always validate if new name not exists.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">new_sheet</span><span class="p">()</span>
<span class="c1"># CAUTION: If &#39;NewSheet&#39; exists, reset it to clean sheet.</span>
<span class="n">doc</span><span class="p">[</span><span class="s1">&#39;NewSheet&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">sheet</span>
<span class="c1"># ~ or</span>
<span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="s1">&#39;NewSheet2&#39;</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Insert multiple, get last insert.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">names</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;One&#39;</span><span class="p">,</span> <span class="s1">&#39;Two&#39;</span><span class="p">,</span> <span class="s1">&#39;Three&#39;</span><span class="p">)</span>
<span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">names</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="move">
<h2>Move<a class="headerlink" href="#move" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Move by object to last position.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">doc</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="n">sheet</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Move by name to last position.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="s1">&#39;Sheet1&#39;</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Move to position.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">doc</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="n">sheet</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Move from sheet</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">move</span><span class="p">()</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Move to position.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="remove">
<h2>Remove<a class="headerlink" href="#remove" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Remove by object.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">doc</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">sheet</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Remove by name.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s1">&#39;One&#39;</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Remove from sheet.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">remove</span><span class="p">()</span>
</pre></div>
</div>
</section>
<section id="copy">
<h2>Copy<a class="headerlink" href="#copy" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Copy inside the same spreadsheet.</p></li>
<li><p>By object</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">doc</span><span class="o">.</span><span class="n">copy_sheet</span><span class="p">(</span><span class="n">sheet</span><span class="p">,</span> <span class="s1">&#39;OtherSheet&#39;</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>By name</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span><span class="o">.</span><span class="n">copy_sheet</span><span class="p">(</span><span class="s1">&#39;Sheet1&#39;</span><span class="p">,</span> <span class="s1">&#39;Sheet2&#39;</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>From sheet</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s1">&#39;_2&#39;</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="copy-from">
<h2>Copy from<a class="headerlink" href="#copy-from" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Copy sheet from one spreadsheet to other.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">doc_source</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="p">[</span><span class="s1">&#39;Contacts.ods&#39;</span><span class="p">]</span>
<span class="n">name_source</span> <span class="o">=</span> <span class="s1">&#39;Names&#39;</span>
<span class="n">name_target</span> <span class="o">=</span> <span class="s1">&#39;Names&#39;</span>
<span class="n">position</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">doc</span><span class="o">.</span><span class="n">copy_from</span><span class="p">(</span><span class="n">doc_source</span><span class="p">,</span> <span class="n">name_source</span><span class="p">,</span> <span class="n">name_target</span><span class="p">,</span> <span class="n">position</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="copy-to">
<h2>Copy to<a class="headerlink" href="#copy-to" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Copy from sheet with the same name</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">new</span><span class="p">()</span>
<span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">copy_to</span><span class="p">(</span><span class="n">doc</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Used new name</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">new</span><span class="p">()</span>
<span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">copy_to</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="s1">&#39;NewName&#39;</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="sort">
<h2>Sort<a class="headerlink" href="#sort" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Sort sheets by names.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">doc</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
</pre></div>
</div>
</section>
<section id="name">
<h2>Name<a class="headerlink" href="#name" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Name visible by the user.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s1">&#39;NewName&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="code-name">
<h2>Code name<a class="headerlink" href="#code-name" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Name only accessible by code.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">code_name</span><span class="p">)</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">code_name</span> <span class="o">=</span> <span class="s1">&#39;my_name&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">code_name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="visible">
<h2>Visible<a class="headerlink" href="#visible" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Apply only with spreadsheet with two or more sheets.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">visible</span><span class="p">)</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">visible</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">sheet</span><span class="o">.</span><span class="n">visible</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">visible</span><span class="p">)</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">visible</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">sheet</span><span class="o">.</span><span class="n">visible</span>
</pre></div>
</div>
</section>
<section id="is-protected">
<h2>Is protected<a class="headerlink" href="#is-protected" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>If sheet is protected with password.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">is_protected</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="set-password">
<h2>Set password<a class="headerlink" href="#set-password" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="s1">&#39;letmein&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">is_protected</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="remove-password">
<h2>Remove password<a class="headerlink" href="#remove-password" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="s1">&#39;letmein&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">is_protected</span><span class="p">)</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">unprotect</span><span class="p">(</span><span class="s1">&#39;letmein&#39;</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">is_protected</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="tab-color">
<h2>Tab color<a class="headerlink" href="#tab-color" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">color</span><span class="p">)</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">color</span> <span class="o">=</span> <span class="s1">&#39;red&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">color</span><span class="p">)</span>
<span class="c1"># RGB</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">color</span> <span class="o">=</span> <span class="p">(</span><span class="mi">125</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">color</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="document-parent">
<h2>Document parent<a class="headerlink" href="#document-parent" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">sheet</span><span class="o">.</span><span class="n">doc</span>
</pre></div>
</div>
</section>
<section id="activate">
<h2>Activate<a class="headerlink" href="#activate" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="c1"># Get last sheet</span>
<span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="c1"># Activate from doc</span>
<span class="n">doc</span><span class="o">.</span><span class="n">activate</span><span class="p">(</span><span class="n">sheet</span><span class="p">)</span>
<span class="c1"># Activate from sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">activate</span><span class="p">()</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="easymacro.html">Library easymacro.py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html">Paths and files</a></li>
<li class="toctree-l2"><a class="reference internal" href="email.html">Email</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html">Application</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="calc.html">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="writer.html">Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="base.html">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="easymacro.html">Library easymacro.py</a><ul>
<li><a href="calc.html">Calc</a><ul>
<li>Previous: <a href="calc_doc.html" title="previous chapter">Document</a></li>
<li>Next: <a href="calc_ranges.html" title="next chapter">Cell and ranges</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/calc_sheets.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

518
doc/build/main/config.html vendored Normal file
View File

@ -0,0 +1,518 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Configuration &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Library easymacro.py" href="easymacro.html" />
<link rel="prev" title="Introduction" href="intro.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="configuration">
<h1>Configuration<a class="headerlink" href="#configuration" title="Permalink to this headline"></a></h1>
<ul class="simple">
<li><p>Create new extension:</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">./zaz.py</span> <span class="pre">-new</span> <span class="pre">-t</span> <span class="pre">~/projects</span> <span class="pre">-n</span> <span class="pre">MyGreatExtension</span></code></p>
<ul class="simple">
<li><p>Move to new folder:</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">cd</span> <span class="pre">~/projects/MyGreatExtension</span></code></p>
<ul class="simple">
<li><p>Edit file <code class="docutils literal notranslate"><span class="pre">conf.py</span></code></p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">vim</span> <span class="pre">conf.py</span></code></p>
<section id="parameters">
<h2>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline"></a></h2>
<p><strong>Configure correctly this options, before you start code your extension.</strong></p>
<p>Only modify this options.</p>
<section id="type-extension">
<h3>Type extension<a class="headerlink" href="#type-extension" title="Permalink to this headline"></a></h3>
<p><strong>TYPE_EXTENSION</strong></p>
<p>The type extension that you want develop.</p>
<ul class="simple">
<li><dl class="simple">
<dt>Integer</dt><dd><ul>
<li><p>1 = Normal extension</p></li>
<li><p>2 = New components</p></li>
<li><p>3 = Calc addin</p></li>
</ul>
</dd>
</dl>
</li>
</ul>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">TYPE_EXTENSION</span> <span class="o">=</span> <span class="mi">1</span>
</pre></div>
</div>
</section>
<section id="version">
<h3>Version<a class="headerlink" href="#version" title="Permalink to this headline"></a></h3>
<p><strong>VERSION</strong></p>
<ul class="simple">
<li><dl class="simple">
<dt>String</dt><dd><ul>
<li><p>The current version of extension, look: <a class="reference external" href="https://semver.org/">Semantic Versioning</a></p></li>
</ul>
</dd>
</dl>
</li>
</ul>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">VERSION</span> <span class="o">=</span> <span class="s1">&#39;0.1.0&#39;</span>
</pre></div>
</div>
</section>
<section id="name">
<h3>Name<a class="headerlink" href="#name" title="Permalink to this headline"></a></h3>
<p><strong>NAME</strong></p>
<ul class="simple">
<li><dl class="simple">
<dt>String</dt><dd><ul>
<li><p>Your extension name, not used spaces.</p></li>
</ul>
</dd>
</dl>
</li>
</ul>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">NAME</span> <span class="o">=</span> <span class="s1">&#39;MyGreatExtension&#39;</span>
</pre></div>
</div>
</section>
<section id="id-extension">
<h3>ID extension<a class="headerlink" href="#id-extension" title="Permalink to this headline"></a></h3>
<p>The internal name for extension.</p>
<p><strong>ID</strong></p>
<blockquote>
<div><ul class="simple">
<li><dl class="simple">
<dt>String</dt><dd><ul>
<li><p>Should be unique, used URL inverse</p></li>
</ul>
</dd>
</dl>
</li>
</ul>
</div></blockquote>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">ID</span> <span class="o">=</span> <span class="s1">&#39;org.yourname.extensionname&#39;</span>
</pre></div>
</div>
</section>
<section id="locales">
<h3>Locales<a class="headerlink" href="#locales" title="Permalink to this headline"></a></h3>
<p>If your extension will be multi-language (recommended)</p>
<p><strong>USE_LOCALES</strong></p>
<blockquote>
<div><ul class="simple">
<li><p>Bool</p></li>
</ul>
</div></blockquote>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">USE_LOCALES</span> <span class="o">=</span> <span class="kc">True</span>
</pre></div>
</div>
</section>
<section id="domain-for-locales">
<h3>Domain for locales<a class="headerlink" href="#domain-for-locales" title="Permalink to this headline"></a></h3>
<p>The base name for generate files POT</p>
<p><strong>DOMAIN</strong></p>
<blockquote>
<div><ul class="simple">
<li><p>String</p></li>
</ul>
</div></blockquote>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">DOMAIN</span> <span class="o">=</span> <span class="s1">&#39;base&#39;</span>
</pre></div>
</div>
</section>
<section id="path-pygettext">
<h3>Path pyGetText<a class="headerlink" href="#path-pygettext" title="Permalink to this headline"></a></h3>
<p>Absolute path for tool <cite>pygettext.py</cite> for generate POT.</p>
<p><strong>PATH_PYGETTEXT</strong></p>
<blockquote>
<div><ul class="simple">
<li><p>String</p></li>
</ul>
</div></blockquote>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">PATH_PYGETTEXT</span> <span class="o">=</span> <span class="s1">&#39;/usr/lib/python3.9/Tools/i18n/pygettext.py&#39;</span>
</pre></div>
</div>
</section>
<section id="author">
<h3>Author<a class="headerlink" href="#author" title="Permalink to this headline"></a></h3>
<p>Your information like author, one or more languages. This information is displayed in the extension manager.</p>
<p><strong>PUBLISHER</strong></p>
<blockquote>
<div><ul class="simple">
<li><p>Dictionary</p></li>
</ul>
</div></blockquote>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">PUBLISHER</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;en&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;text&#39;</span><span class="p">:</span> <span class="s1">&#39;Your name&#39;</span><span class="p">,</span> <span class="s1">&#39;link&#39;</span><span class="p">:</span> <span class="s1">&#39;https://your.page&#39;</span><span class="p">},</span>
<span class="s1">&#39;es&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;text&#39;</span><span class="p">:</span> <span class="s1">&#39;Tu nombre&#39;</span><span class="p">,</span> <span class="s1">&#39;link&#39;</span><span class="p">:</span> <span class="s1">&#39;https://elmau.net&#39;</span><span class="p">},</span>
<span class="p">}</span>
</pre></div>
</div>
</section>
<section id="extension-icon">
<h3>Extension icon<a class="headerlink" href="#extension-icon" title="Permalink to this headline"></a></h3>
<p>Path relative or absolute to extension logo. Show in extension manager.</p>
<p><strong>ICON</strong></p>
<blockquote>
<div><ul class="simple">
<li><p>String</p></li>
</ul>
</div></blockquote>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">ICON</span><span class="o">=</span><span class="s1">&#39;images/logo.png&#39;</span>
</pre></div>
</div>
</section>
<section id="license">
<h3>License<a class="headerlink" href="#license" title="Permalink to this headline"></a></h3>
<p>The license for your extension, please, used free license.</p>
<p><strong>LICENSE</strong></p>
<blockquote>
<div><ul class="simple">
<li><p>String</p></li>
</ul>
</div></blockquote>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">LICENSE_EN</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;This file is part of </span><span class="si">{</span><span class="n">NAME</span><span class="si">}</span><span class="s2">.</span>
<span class="s2"> </span><span class="si">{</span><span class="n">NAME</span><span class="si">}</span><span class="s2"> is free software: you can redistribute it and/or modify</span>
<span class="s2"> it under the terms of the GNU General Public License as published by</span>
<span class="s2"> the Free Software Foundation, either version 3 of the License, or</span>
<span class="s2"> (at your option) any later version.</span>
<span class="s2"> </span><span class="si">{</span><span class="n">NAME</span><span class="si">}</span><span class="s2"> is distributed in the hope that it will be useful,</span>
<span class="s2"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="s2"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<span class="s2"> GNU General Public License for more details.</span>
<span class="s2"> You should have received a copy of the GNU General Public License</span>
<span class="s2"> along with </span><span class="si">{</span><span class="n">NAME</span><span class="si">}</span><span class="s2">. If not, see &lt;https://www.gnu.org/licenses/&gt;.</span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="n">LICENSE_ES</span> <span class="o">=</span> <span class="n">LICENSE_EN</span>
</pre></div>
</div>
</section>
<section id="information">
<h3>Information<a class="headerlink" href="#information" title="Permalink to this headline"></a></h3>
<p>Information of extension: Display name, description and license to displayed when install.</p>
<p><strong>INFO</strong></p>
<blockquote>
<div><ul class="simple">
<li><p>Dictionary</p></li>
</ul>
</div></blockquote>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">INFO</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;en&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;display_name&#39;</span><span class="p">:</span> <span class="s1">&#39;Test Macro&#39;</span><span class="p">,</span>
<span class="s1">&#39;description&#39;</span><span class="p">:</span> <span class="s1">&#39;My great extension&#39;</span><span class="p">,</span>
<span class="s1">&#39;license&#39;</span><span class="p">:</span> <span class="n">LICENSE_EN</span><span class="p">,</span>
<span class="p">},</span>
<span class="s1">&#39;es&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;display_name&#39;</span><span class="p">:</span> <span class="s1">&#39;Macro de Prueba&#39;</span><span class="p">,</span>
<span class="s1">&#39;description&#39;</span><span class="p">:</span> <span class="s1">&#39;Mi gran extensión&#39;</span><span class="p">,</span>
<span class="s1">&#39;license&#39;</span><span class="p">:</span> <span class="n">LICENSE_ES</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">}</span>
</pre></div>
</div>
</section>
<section id="parent-menu">
<h3>Parent menu<a class="headerlink" href="#parent-menu" title="Permalink to this headline"></a></h3>
<p>Only for normal extension (<cite>TYPE_EXTENSION = 1</cite>), where add extension menu, only two possible values: <strong>AddonMenu</strong> or <strong>OfficeMenuBar</strong></p>
<p><strong>PARENT</strong></p>
<blockquote>
<div><ul class="simple">
<li><dl class="simple">
<dt>String</dt><dd><ul>
<li><p><strong>AddonMenu</strong>: Show in menu Tools-&gt;Add-Ons</p></li>
<li><p><strong>OfficeMenuBar</strong>: Show in LibreOffice menu</p></li>
</ul>
</dd>
</dl>
</li>
</ul>
</div></blockquote>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">PARENT</span> <span class="o">=</span> <span class="s1">&#39;OfficeMenuBar&#39;</span>
</pre></div>
</div>
</section>
<section id="main-menu">
<h3>Main menu<a class="headerlink" href="#main-menu" title="Permalink to this headline"></a></h3>
<p>Only for normal extension (<cite>TYPE_EXTENSION = 1</cite>) and only if parent menu is <cite>OfficeMenuBar</cite>. Can be multi language.</p>
<p><strong>MENU_MAIN</strong></p>
<blockquote>
<div><ul class="simple">
<li><p>Dictionary</p></li>
</ul>
</div></blockquote>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">MENU_MAIN</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;en&#39;</span><span class="p">:</span> <span class="s1">&#39;My Extension&#39;</span><span class="p">,</span>
<span class="s1">&#39;es&#39;</span><span class="p">:</span> <span class="s1">&#39;Mi Extensión&#39;</span><span class="p">,</span>
<span class="p">}</span>
</pre></div>
</div>
</section>
<section id="menus">
<h3>Menus<a class="headerlink" href="#menus" title="Permalink to this headline"></a></h3>
<p>Each menu for show in parent menu.</p>
<p><strong>MENUS</strong></p>
<blockquote>
<div><ul class="simple">
<li><dl class="simple">
<dt>Tuple of dictionaries</dt><dd><ul>
<li><p><strong>title</strong> = Label showed, can be multi language.</p></li>
<li><p><strong>argument</strong> = Argument to pass to extension, not use spaces.</p></li>
<li><p><strong>context</strong> = In what applications show, if is blank, show in all.</p></li>
<li><p><strong>icon</strong> = Icon to add, the icon should be in format BMP. The name should be NAME_16.bmp or NAME_26.bmp. Set only NAME in this property.</p></li>
<li><p><strong>toolbar</strong> = It is True, add to new toolbar too, used same icon.</p></li>
<li><p><strong>shortcut</strong> = Shortcut keyboard for this menu. For <cite>Shift+Ctrl+Alt+T</cite> used: <cite>T_SHIFT_MOD1_MOD2</cite></p></li>
</ul>
</dd>
</dl>
</li>
</ul>
</div></blockquote>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">MENUS</span> <span class="o">=</span> <span class="p">(</span>
<span class="p">{</span>
<span class="s1">&#39;title&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;en&#39;</span><span class="p">:</span> <span class="s1">&#39;Option 1&#39;</span><span class="p">,</span> <span class="s1">&#39;es&#39;</span><span class="p">:</span> <span class="s1">&#39;Opción 1&#39;</span><span class="p">},</span>
<span class="s1">&#39;argument&#39;</span><span class="p">:</span> <span class="s1">&#39;option1&#39;</span><span class="p">,</span>
<span class="s1">&#39;context&#39;</span><span class="p">:</span> <span class="s1">&#39;calc,writer&#39;</span><span class="p">,</span>
<span class="s1">&#39;icon&#39;</span><span class="p">:</span> <span class="s1">&#39;icon&#39;</span><span class="p">,</span>
<span class="s1">&#39;toolbar&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s1">&#39;shortcut&#39;</span><span class="p">:</span> <span class="s1">&#39;T_SHIFT_MOD1_MOD2&#39;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">)</span>
</pre></div>
</div>
</section>
<section id="functions">
<h3>Functions<a class="headerlink" href="#functions" title="Permalink to this headline"></a></h3>
<p>Only for Add-in extension (<cite>TYPE_EXTENSION = 2</cite>). Can be multi language.</p>
<p>The key of dictionary, is the same name of your function. Used exactly you used in your code.</p>
<p><strong>FUNCTIONS</strong></p>
<blockquote>
<div><ul class="simple">
<li><dl class="simple">
<dt>Dictionary of dictionaries</dt><dd><ul>
<li><p><strong>displayname</strong> = Show in function wizard, multi language.</p></li>
<li><p><strong>description</strong> = Show in function wizard, multi language.</p></li>
<li><dl class="simple">
<dt><strong>parameters</strong> = Each parameters in your function.</dt><dd><ul>
<li><dl class="simple">
<dt><strong>key</strong> = Is the exactly name for parameter in your code function.</dt><dd><ul>
<li><p><strong>displayname</strong> = Show in function wizard, multi language.</p></li>
<li><p><strong>description</strong> = Show in function wizard, multi language.</p></li>
</ul>
</dd>
</dl>
</li>
</ul>
</dd>
</dl>
</li>
</ul>
</dd>
</dl>
</li>
</ul>
</div></blockquote>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;test&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;displayname&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;en&#39;</span><span class="p">:</span> <span class="s1">&#39;test&#39;</span><span class="p">,</span> <span class="s1">&#39;es&#39;</span><span class="p">:</span> <span class="s1">&#39;prueba&#39;</span><span class="p">},</span>
<span class="s1">&#39;description&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;en&#39;</span><span class="p">:</span> <span class="s1">&#39;My test&#39;</span><span class="p">,</span> <span class="s1">&#39;es&#39;</span><span class="p">:</span> <span class="s1">&#39;Mi prueba&#39;</span><span class="p">},</span>
<span class="s1">&#39;parameters&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;value&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;displayname&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;en&#39;</span><span class="p">:</span> <span class="s1">&#39;value&#39;</span><span class="p">,</span> <span class="s1">&#39;es&#39;</span><span class="p">:</span> <span class="s1">&#39;valor&#39;</span><span class="p">},</span>
<span class="s1">&#39;description&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;en&#39;</span><span class="p">:</span> <span class="s1">&#39;The value&#39;</span><span class="p">,</span> <span class="s1">&#39;es&#39;</span><span class="p">:</span> <span class="s1">&#39;El valor&#39;</span><span class="p">},</span>
<span class="p">},</span>
<span class="p">},</span>
<span class="p">},</span>
<span class="p">}</span>
</pre></div>
</div>
</section>
<section id="default-program">
<h3>Default program<a class="headerlink" href="#default-program" title="Permalink to this headline"></a></h3>
<p>Optional. Open automatically when install and test.</p>
<p><strong>PROGRAM</strong></p>
<blockquote>
<div><ul class="simple">
<li><dl class="simple">
<dt>String</dt><dd><ul>
<li><p>calc</p></li>
<li><p>writer</p></li>
<li><p>draw</p></li>
<li><p>impress</p></li>
</ul>
</dd>
</dl>
</li>
</ul>
</div></blockquote>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">PROGRAM</span> <span class="o">=</span> <span class="s1">&#39;--calc&#39;</span>
</pre></div>
</div>
</section>
<section id="file-test">
<h3>File test<a class="headerlink" href="#file-test" title="Permalink to this headline"></a></h3>
<p>Optional. Open automatically when install and test.</p>
<blockquote>
<div><ul class="simple">
<li><p>String</p></li>
</ul>
</div></blockquote>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">FILE_TEST</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/example.ods&#39;</span>
</pre></div>
</div>
</section>
<section id="paths">
<h3>Paths<a class="headerlink" href="#paths" title="Permalink to this headline"></a></h3>
<p>Paths for install and test. <cite>idlc</cite>, <cite>include</cite> and <cite>remerge</cite> only used en <cite>TYPE_EXTENSION</cite> 2 or 3. <cite>idlc</cite> and path <cite>include</cite> is installed with LibreOffice SDK.</p>
<p><strong>PATHS</strong></p>
<blockquote>
<div><ul class="simple">
<li><dl class="simple">
<dt>Dictionary</dt><dd><ul>
<li><p><strong>idlc</strong> for generate files urd.</p></li>
<li><p><strong>include</strong> path with files idl.</p></li>
<li><p><strong>remerge</strong> for generate files rdb.</p></li>
<li><p><strong>soffice</strong> for open LibreOffice.</p></li>
<li><p><strong>install</strong> for install extension.</p></li>
</ul>
</dd>
</dl>
</li>
</ul>
</div></blockquote>
<p>Example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">PATHS</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;idlc&#39;</span><span class="p">:</span> <span class="s1">&#39;/usr/lib/libreoffice/sdk/bin/idlc&#39;</span><span class="p">,</span>
<span class="s1">&#39;include&#39;</span><span class="p">:</span> <span class="s1">&#39;/usr/share/idl/libreoffice&#39;</span><span class="p">,</span>
<span class="s1">&#39;regmerge&#39;</span><span class="p">:</span> <span class="s1">&#39;/usr/lib/libreoffice/program/regmerge&#39;</span><span class="p">,</span>
<span class="s1">&#39;soffice&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;soffice&#39;</span><span class="p">,</span> <span class="n">PROGRAM</span><span class="p">,</span> <span class="n">FILE_TEST</span><span class="p">),</span>
<span class="s1">&#39;install&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;unopkg&#39;</span><span class="p">,</span> <span class="s1">&#39;add&#39;</span><span class="p">,</span> <span class="s1">&#39;-v&#39;</span><span class="p">,</span> <span class="s1">&#39;-f&#39;</span><span class="p">,</span> <span class="s1">&#39;-s&#39;</span><span class="p">),</span>
<span class="p">}</span>
</pre></div>
</div>
</section>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Configuration</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#parameters">Parameters</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="easymacro.html">Library easymacro.py</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="intro.html" title="previous chapter">Introduction</a></li>
<li>Next: <a href="easymacro.html" title="next chapter">Library easymacro.py</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/config.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

245
doc/build/main/easymacro.html vendored Normal file
View File

@ -0,0 +1,245 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Library easymacro.py &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Tools for debug" href="tools_for_debug.html" />
<link rel="prev" title="Configuration" href="config.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="library-easymacro-py">
<h1>Library easymacro.py<a class="headerlink" href="#library-easymacro-py" title="Permalink to this headline"></a></h1>
<p><strong>easymacro.py</strong> its a library for easily develop macros en LibreOffice con Python. It is an abstraction layer between the extensive and complex LibreOffice API UNO and your code.</p>
<p>Probably, your will be more happy if used it. :)</p>
<p>You can used <strong>easymacro.py</strong> with any extension or directly in your macros.</p>
<p><strong>IMPORTANT</strong>: Majority objects are custom objects, you can always get original UNO object with property <cite>obj</cite></p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">obj</span><span class="p">)</span>
</pre></div>
</div>
<div class="toctree-wrapper compound">
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a><ul>
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html#info-debug">INFO_DEBUG</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html#log-error">Log error</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html#log-debug">Log debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html#log-info">Log info</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html#log-to-file">Log to file</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html#message-box">Message box</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html#catch-exceptions">Catch exceptions</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html#call-mri">Call MRI</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="tools.html">Tools</a><ul>
<li class="toctree-l2"><a class="reference internal" href="tools.html#info-from-pc">Info from PC</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#message-box">Message Box</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#show-warning">Show warning</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#show-error-box">Show error box</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#make-question">Make question</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#inputbox">InputBox</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#date-and-times">Date and times</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#thread">Thread</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#dictionary-properties">Dictionary &lt;-&gt; properties</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#tuples-or-lists-to-dictionary">Tuples or lists to dictionary</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#json">Json</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#call-macros">Call Macros</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#call-external-program">Call external program</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#timer">Timer</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#get-digest">Get digest</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#save-and-get-configurations">Save and get configurations</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#render-string">Render string</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#encrypt-decrypt">Encrypt decrypt</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#simple-url-open">Simple url open</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html#color">Color</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="paths.html">Paths and files</a><ul>
<li class="toctree-l2"><a class="reference internal" href="paths.html#get-info-path">Get info path</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#exists-path">Exists path</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#path-is-file">Path is file</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#path-is-dir">Path is dir</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#get-path-home">Get path home</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#get-path-documents">Get path documents</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#get-path-temp">Get path temp</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#get-path-from-libreoffice-configuration">Get path from LibreOffice configuration</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#get-path-executable-python">Get path executable python</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#save-and-read-text-data">Save and read text data</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#save-and-read-binary-data">Save and read binary data</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#join-paths">Join paths</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#get-a-temporal-path">Get a temporal path</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#get-a-temporal-dir">Get a temporal dir</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#get-path-for-save">Get path for save</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#select-directory">Select directory</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#get-path-exists-file">Get path exists file</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#replace-extension">Replace extension</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#path-in-format-url-system">Path in format URL &lt;-&gt; System</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#delete-files-and-directories">Delete files and directories</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#get-files">Get files</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#get-directories">Get directories</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#get-install-path-extension-from-id">Get install path extension from id</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#verify-if-application-exists">Verify if application exists</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#open-any-type-file">Open any type file</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#save-and-read-json">Save and read json</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#save-and-read-csv">Save and read csv</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#zip-unzip">Zip, unzip</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html#copy-files">Copy files</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="email.html">Email</a><ul>
<li class="toctree-l2"><a class="reference internal" href="email.html#send-email">Send email</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="application.html">Application</a><ul>
<li class="toctree-l2"><a class="reference internal" href="application.html#create-instances">Create instances</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#current-doc">Current doc</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#iter-docs">Iter docs</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#count">Count</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#get-by-name">Get by name</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#if-contain">If contain</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#new">New</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#open">Open</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#save">Save</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#close">Close</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#to-pdf">To PDF</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#export">Export</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#fonst">Fonst</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#filters">Filters</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#call-dispatch">Call dispatch</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#properties">Properties</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#methods">Methods</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="calc.html">Calc</a><ul>
<li class="toctree-l2"><a class="reference internal" href="calc_doc.html">Document</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html">Sheets</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges.html">Cell and ranges</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges2.html">Manipulate ranges</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_data.html">Data</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="writer.html">Writer</a><ul>
<li class="toctree-l2"><a class="reference internal" href="writer.html#current-doc">Current doc</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="base.html">Base</a><ul>
<li class="toctree-l2"><a class="reference internal" href="base.html#new-database">New database</a></li>
</ul>
</li>
</ul>
</div>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Library easymacro.py</a><ul>
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html">Paths and files</a></li>
<li class="toctree-l2"><a class="reference internal" href="email.html">Email</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html">Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc.html">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="writer.html">Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="base.html">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="config.html" title="previous chapter">Configuration</a></li>
<li>Next: <a href="tools_for_debug.html" title="next chapter">Tools for debug</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/easymacro.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

223
doc/build/main/email.html vendored Normal file
View File

@ -0,0 +1,223 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Email &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Application" href="application.html" />
<link rel="prev" title="Paths and files" href="paths.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="email">
<h1>Email<a class="headerlink" href="#email" title="Permalink to this headline"></a></h1>
<p>Remember, always import library.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">easymacro</span> <span class="k">as</span> <span class="nn">app</span>
</pre></div>
</div>
<p><strong>IMPORTANT:</strong> Always save your config the more security way possible.</p>
<section id="send-email">
<h2>Send email<a class="headerlink" href="#send-email" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">conf</span> <span class="kn">import</span> <span class="n">PASSWORD</span>
<span class="n">SERVER</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">server</span> <span class="o">=</span> <span class="s1">&#39;mail.server.net&#39;</span> <span class="p">,</span>
<span class="n">port</span> <span class="o">=</span> <span class="mi">495</span><span class="p">,</span>
<span class="n">ssl</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
<span class="n">user</span> <span class="o">=</span> <span class="s1">&#39;no-responder@noexiste.mx&#39;</span><span class="p">,</span>
<span class="n">password</span> <span class="o">=</span> <span class="n">PASSWORD</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">body</span> <span class="o">=</span> <span class="s2">&quot;Hello Ingrid</span><span class="se">\n\n</span><span class="s2">Who are you?</span><span class="se">\n\n</span><span class="s2">Best regards&quot;</span>
<span class="n">message</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">to</span> <span class="o">=</span> <span class="s1">&#39;ingrid.bergman@love.you&#39;</span><span class="p">,</span>
<span class="n">subject</span> <span class="o">=</span> <span class="s1">&#39;I love you&#39;</span><span class="p">,</span>
<span class="n">body</span> <span class="o">=</span> <span class="n">body</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">send_email</span><span class="p">(</span><span class="n">SERVER</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>We can use fields <cite>cc</cite>, <cite>bcc</cite> too and send to more than one address emails.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">to</span> <span class="o">=</span> <span class="s1">&#39;mail1@correo.com,mail2@correo.com,mail3@correo.com&#39;</span>
<span class="n">cc</span> <span class="o">=</span> <span class="s1">&#39;other@correo.com&#39;</span>
<span class="n">bcc</span> <span class="o">=</span> <span class="s1">&#39;hidden@correo.com&#39;</span>
</pre></div>
</div>
<ul class="simple">
<li><p>We can send too more than one message.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">message1</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">to</span> <span class="o">=</span> <span class="s1">&#39;ingrid.bergman@email.net&#39;</span><span class="p">,</span>
<span class="n">subject</span> <span class="o">=</span> <span class="s1">&#39;I love you&#39;</span><span class="p">,</span>
<span class="n">body</span> <span class="o">=</span> <span class="s2">&quot;Hello Ingrid</span><span class="se">\n\n</span><span class="s2">Who are you?</span><span class="se">\n\n</span><span class="s2">Best regards&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">message2</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">to</span> <span class="o">=</span> <span class="s1">&#39;sophia.loren@email.net&#39;</span><span class="p">,</span>
<span class="n">subject</span> <span class="o">=</span> <span class="s1">&#39;I love you&#39;</span><span class="p">,</span>
<span class="n">body</span> <span class="o">=</span> <span class="s2">&quot;Hello Sophia</span><span class="se">\n\n</span><span class="s2">Who are you?</span><span class="se">\n\n</span><span class="s2">Best regards&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">messages</span> <span class="o">=</span> <span class="p">(</span><span class="n">message1</span><span class="p">,</span> <span class="n">message2</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">send_email</span><span class="p">(</span><span class="n">SERVER</span><span class="p">,</span> <span class="n">messages</span><span class="p">)</span>
</pre></div>
</div>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="m">30</span>/06/2021 <span class="m">13</span>:43:23 - DEBUG - Connect to: mail.gandi.net
<span class="m">30</span>/06/2021 <span class="m">13</span>:43:24 - DEBUG - Email sent...
<span class="m">30</span>/06/2021 <span class="m">13</span>:43:26 - DEBUG - Email sent...
<span class="m">30</span>/06/2021 <span class="m">13</span>:43:26 - DEBUG - Close connection...
</pre></div>
</div>
<ul class="simple">
<li><p>Send with attachment</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">files</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/file.epub&#39;</span>
<span class="n">message</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">to</span> <span class="o">=</span> <span class="s1">&#39;ingrid.bergman@email.net&#39;</span><span class="p">,</span>
<span class="n">subject</span> <span class="o">=</span> <span class="s1">&#39;I love you&#39;</span><span class="p">,</span>
<span class="n">body</span> <span class="o">=</span> <span class="s2">&quot;Hello Ingrid</span><span class="se">\n\n</span><span class="s2">Who are you?</span><span class="se">\n\n</span><span class="s2">Best regards&quot;</span><span class="p">,</span>
<span class="n">files</span> <span class="o">=</span> <span class="n">files</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Send more than one file.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">files</span> <span class="o">=</span> <span class="p">(</span>
<span class="s1">&#39;/home/mau/file1.epub&#39;</span><span class="p">,</span>
<span class="s1">&#39;/home/mau/file2.epub&#39;</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>If your client email used <cite>mbox</cite> format, we can save in any path into your email client configuration.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path_save</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/.thunderbird/7iznrbyw.default/Mail/Local Folders/LibreOffice&#39;</span>
<span class="n">message</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">to</span> <span class="o">=</span> <span class="s1">&#39;ingrid.bergman@email.net&#39;</span><span class="p">,</span>
<span class="n">subject</span> <span class="o">=</span> <span class="s1">&#39;I love you&#39;</span><span class="p">,</span>
<span class="n">body</span> <span class="o">=</span> <span class="s2">&quot;Hello Ingrid</span><span class="se">\n\n</span><span class="s2">Who are you?</span><span class="se">\n\n</span><span class="s2">Best regards&quot;</span><span class="p">,</span>
<span class="n">path</span> <span class="o">=</span> <span class="n">path_save</span>
<span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">send_email</span><span class="p">(</span><span class="n">SERVER</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>All emails always send in other thread.</p></li>
</ul>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="easymacro.html">Library easymacro.py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html">Paths and files</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Email</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html">Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc.html">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="writer.html">Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="base.html">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="easymacro.html">Library easymacro.py</a><ul>
<li>Previous: <a href="paths.html" title="previous chapter">Paths and files</a></li>
<li>Next: <a href="application.html" title="next chapter">Application</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/email.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

152
doc/build/main/examples.html vendored Normal file
View File

@ -0,0 +1,152 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Examples &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="For Application" href="examples_app.html" />
<link rel="prev" title="Base" href="base.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="examples">
<h1>Examples<a class="headerlink" href="#examples" title="Permalink to this headline"></a></h1>
<p>Examples of macros used in production.</p>
<div class="toctree-wrapper compound">
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="examples_app.html">For Application</a><ul>
<li class="toctree-l2"><a class="reference internal" href="examples_app.html#make-custom-menu">Make custom menu</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_app.html#delete-menu">Delete menu</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples_calc.html">For Calc</a><ul>
<li class="toctree-l2"><a class="reference internal" href="examples_calc.html#data-to-cell">Data to cell</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_calc.html#copy-visible-cells">Copy visible cells</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_calc.html#merge-by-row">Merge by row</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples_writer.html">For Writer</a><ul>
<li class="toctree-l2"><a class="reference internal" href="examples_writer.html#set-autostyle-in-table">Set autostyle in table</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_writer.html#insert-math-formula">Insert math formula</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples_draw.html">For Draw</a><ul>
<li class="toctree-l2"><a class="reference internal" href="examples_draw.html#save-image-from-clipboard">Save image from clipboard</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples_base.html">For Base</a><ul>
<li class="toctree-l2"><a class="reference internal" href="examples_base.html#create-table">Create table</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_base.html#insert-data">Insert data</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_base.html#select-data">Select data</a></li>
</ul>
</li>
</ul>
</div>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="easymacro.html">Library easymacro.py</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Examples</a><ul>
<li class="toctree-l2"><a class="reference internal" href="examples_app.html">For Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_calc.html">For Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_writer.html">For Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_draw.html">For Draw</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_base.html">For Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="base.html" title="previous chapter">Base</a></li>
<li>Next: <a href="examples_app.html" title="next chapter">For Application</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/examples.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

158
doc/build/main/examples_app.html vendored Normal file
View File

@ -0,0 +1,158 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>For Application &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="For Calc" href="examples_calc.html" />
<link rel="prev" title="Examples" href="examples.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="for-application">
<h1>For Application<a class="headerlink" href="#for-application" title="Permalink to this headline"></a></h1>
<section id="make-custom-menu">
<h2>Make custom menu<a class="headerlink" href="#make-custom-menu" title="Permalink to this headline"></a></h2>
<p>Macro example in library <code class="docutils literal notranslate"><span class="pre">mymacros</span></code></p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">show_info_debug</span><span class="p">():</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">INFO_DEBUG</span><span class="p">)</span>
<span class="k">return</span>
</pre></div>
</div>
<p>Insert custom menu in menu Tools in Calc.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">insert_menu_in_calc</span><span class="p">():</span>
<span class="n">menus</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">menus</span><span class="p">[</span><span class="s1">&#39;calc&#39;</span><span class="p">]</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;Label&#39;</span><span class="p">:</span> <span class="s1">&#39;My Macros&#39;</span><span class="p">,</span>
<span class="s1">&#39;CommandURL&#39;</span><span class="p">:</span> <span class="s1">&#39;zaz.my.macros&#39;</span><span class="p">,</span>
<span class="s1">&#39;Index&#39;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="s1">&#39;Submenu&#39;</span><span class="p">:</span> <span class="p">[</span>
<span class="p">{</span>
<span class="s1">&#39;Label&#39;</span><span class="p">:</span> <span class="s1">&#39;Show info debug&#39;</span><span class="p">,</span>
<span class="s1">&#39;CommandURL&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;library&#39;</span><span class="p">:</span> <span class="s1">&#39;mymacros&#39;</span><span class="p">,</span> <span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="s1">&#39;show_info_debug&#39;</span><span class="p">},</span>
<span class="s1">&#39;ShortCut&#39;</span><span class="p">:</span> <span class="s1">&#39;Ctrl+Shift+Alt+M&#39;</span>
<span class="p">},</span>
<span class="p">],</span>
<span class="p">}</span>
<span class="n">menus</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="s1">&#39;Tools&#39;</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
<span class="k">return</span>
</pre></div>
</div>
</section>
<section id="delete-menu">
<h2>Delete menu<a class="headerlink" href="#delete-menu" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">delete_menu</span><span class="p">():</span>
<span class="n">menus</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">menus</span><span class="p">[</span><span class="s1">&#39;calc&#39;</span><span class="p">]</span>
<span class="n">menus</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s1">&#39;Tools&#39;</span><span class="p">,</span> <span class="s1">&#39;zaz.my.macros&#39;</span><span class="p">)</span>
<span class="k">return</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="easymacro.html">Library easymacro.py</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="examples.html">Examples</a><ul class="current">
<li class="toctree-l2 current"><a class="current reference internal" href="#">For Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_calc.html">For Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_writer.html">For Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_draw.html">For Draw</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_base.html">For Base</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="examples.html">Examples</a><ul>
<li>Previous: <a href="examples.html" title="previous chapter">Examples</a></li>
<li>Next: <a href="examples_calc.html" title="next chapter">For Calc</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/examples_app.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

208
doc/build/main/examples_base.html vendored Normal file
View File

@ -0,0 +1,208 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>For Base &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="prev" title="For Draw" href="examples_draw.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="for-base">
<h1>For Base<a class="headerlink" href="#for-base" title="Permalink to this headline"></a></h1>
<p>You need install <code class="docutils literal notranslate"><span class="pre">peewee</span></code></p>
<p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">-U</span> <span class="pre">peewee</span></code></p>
<section id="create-table">
<h2>Create table<a class="headerlink" href="#create-table" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">easymacro</span> <span class="k">as</span> <span class="nn">app</span>
<span class="kn">from</span> <span class="nn">peewee</span> <span class="kn">import</span> <span class="o">*</span>
<span class="n">database_proxy</span> <span class="o">=</span> <span class="n">DatabaseProxy</span><span class="p">()</span>
<span class="k">class</span> <span class="nc">BaseModel</span><span class="p">(</span><span class="n">Model</span><span class="p">):</span>
<span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
<span class="n">database</span> <span class="o">=</span> <span class="n">database_proxy</span>
<span class="n">legacy_table_names</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">class</span> <span class="nc">Contacts</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
<span class="nb">id</span> <span class="o">=</span> <span class="n">IdentityField</span><span class="p">()</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">CharField</span><span class="p">()</span>
<span class="n">born</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">BaseDateField</span><span class="p">(</span><span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">create_table</span><span class="p">():</span>
<span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/test.odb&#39;</span>
<span class="k">if</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
<span class="n">db</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">db</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="s1">&#39;base&#39;</span><span class="p">,</span> <span class="p">{</span><span class="s1">&#39;path&#39;</span><span class="p">:</span> <span class="n">path</span><span class="p">})</span>
<span class="n">tables</span> <span class="o">=</span> <span class="p">[</span><span class="n">Contacts</span><span class="p">]</span>
<span class="n">db</span><span class="o">.</span><span class="n">initialize</span><span class="p">(</span><span class="n">database_proxy</span><span class="p">,</span> <span class="n">tables</span><span class="p">)</span>
<span class="k">return</span>
</pre></div>
</div>
</section>
<section id="insert-data">
<h2>Insert data<a class="headerlink" href="#insert-data" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">base_insert_data</span><span class="p">():</span>
<span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/test.odb&#39;</span>
<span class="n">db</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">db</span><span class="o">.</span><span class="n">initialize</span><span class="p">(</span><span class="n">database_proxy</span><span class="p">)</span>
<span class="n">rows</span> <span class="o">=</span> <span class="p">(</span>
<span class="nb">dict</span><span class="p">(</span><span class="n">name</span> <span class="o">=</span> <span class="s1">&#39;Ingrid Bergman&#39;</span><span class="p">,</span> <span class="n">born</span><span class="o">=</span><span class="n">app</span><span class="o">.</span><span class="n">dates</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="mi">2001</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)),</span>
<span class="nb">dict</span><span class="p">(</span><span class="n">name</span> <span class="o">=</span> <span class="s1">&#39;Sofia Loren&#39;</span><span class="p">,</span> <span class="n">born</span><span class="o">=</span><span class="n">app</span><span class="o">.</span><span class="n">dates</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="mi">2002</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">)),</span>
<span class="nb">dict</span><span class="p">(</span><span class="n">name</span> <span class="o">=</span> <span class="s1">&#39;Kim Novak&#39;</span><span class="p">,</span> <span class="n">born</span><span class="o">=</span><span class="n">app</span><span class="o">.</span><span class="n">dates</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="mi">2003</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">)),</span>
<span class="nb">dict</span><span class="p">(</span><span class="n">name</span> <span class="o">=</span> <span class="s1">&#39;Jane Fonda&#39;</span><span class="p">,</span> <span class="n">born</span><span class="o">=</span><span class="n">app</span><span class="o">.</span><span class="n">dates</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="mi">2004</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">4</span><span class="p">)),</span>
<span class="nb">dict</span><span class="p">(</span><span class="n">name</span> <span class="o">=</span> <span class="s1">&#39;Marion Cotillar&#39;</span><span class="p">,</span> <span class="n">born</span><span class="o">=</span><span class="n">app</span><span class="o">.</span><span class="n">dates</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="mi">2005</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">)),</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">rows</span><span class="p">:</span>
<span class="n">Contactos</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="o">**</span><span class="n">row</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">()</span>
<span class="k">return</span>
</pre></div>
</div>
</section>
<section id="select-data">
<h2>Select data<a class="headerlink" href="#select-data" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">base_select_data</span><span class="p">():</span>
<span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/test.odb&#39;</span>
<span class="n">db</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">db</span><span class="o">.</span><span class="n">initialize</span><span class="p">(</span><span class="n">database_proxy</span><span class="p">)</span>
<span class="n">query</span> <span class="o">=</span> <span class="n">Contactos</span><span class="o">.</span><span class="n">select</span><span class="p">()</span>
<span class="n">rows</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">get_query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span><span class="o">.</span><span class="n">tuples</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">rows</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
<span class="n">rows</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">get_query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span><span class="o">.</span><span class="n">dicts</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">rows</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
<span class="k">return</span>
</pre></div>
</div>
<p>You can get tuples or dict:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;Ingrid Bergman&#39;</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="mi">2001</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
<span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s1">&#39;Sofia Loren&#39;</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="mi">2002</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span>
<span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s1">&#39;Kim Novak&#39;</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="mi">2003</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">))</span>
<span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="s1">&#39;Jane Fonda&#39;</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="mi">2004</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">4</span><span class="p">))</span>
<span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="s1">&#39;Marion Cotillar&#39;</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="mi">2005</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">))</span>
<span class="p">{</span><span class="s1">&#39;id&#39;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="s1">&#39;Ingrid Bergman&#39;</span><span class="p">,</span> <span class="s1">&#39;born&#39;</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="mi">2001</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)}</span>
<span class="p">{</span><span class="s1">&#39;id&#39;</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="s1">&#39;Sofia Loren&#39;</span><span class="p">,</span> <span class="s1">&#39;born&#39;</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="mi">2002</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">)}</span>
<span class="p">{</span><span class="s1">&#39;id&#39;</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="s1">&#39;Kim Novak&#39;</span><span class="p">,</span> <span class="s1">&#39;born&#39;</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="mi">2003</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">)}</span>
<span class="p">{</span><span class="s1">&#39;id&#39;</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span> <span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="s1">&#39;Jane Fonda&#39;</span><span class="p">,</span> <span class="s1">&#39;born&#39;</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="mi">2004</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">4</span><span class="p">)}</span>
<span class="p">{</span><span class="s1">&#39;id&#39;</span><span class="p">:</span> <span class="mi">5</span><span class="p">,</span> <span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="s1">&#39;Marion Cotillar&#39;</span><span class="p">,</span> <span class="s1">&#39;born&#39;</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="mi">2005</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">)}</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="easymacro.html">Library easymacro.py</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="examples.html">Examples</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="examples_app.html">For Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_calc.html">For Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_writer.html">For Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_draw.html">For Draw</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">For Base</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="examples.html">Examples</a><ul>
<li>Previous: <a href="examples_draw.html" title="previous chapter">For Draw</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/examples_base.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

159
doc/build/main/examples_calc.html vendored Normal file
View File

@ -0,0 +1,159 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>For Calc &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="For Writer" href="examples_writer.html" />
<link rel="prev" title="For Application" href="examples_app.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="for-calc">
<h1>For Calc<a class="headerlink" href="#for-calc" title="Permalink to this headline"></a></h1>
<section id="data-to-cell">
<h2>Data to cell<a class="headerlink" href="#data-to-cell" title="Permalink to this headline"></a></h2>
<p>Automatic calculate size range.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">calc_data_to_cell</span><span class="p">():</span>
<span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">(</span>
<span class="p">(</span><span class="s1">&#39;Month&#39;</span><span class="p">,</span> <span class="s1">&#39;Total&#39;</span><span class="p">),</span>
<span class="p">(</span><span class="s1">&#39;January&#39;</span><span class="p">,</span> <span class="mi">100</span><span class="p">),</span>
<span class="p">(</span><span class="s1">&#39;February&#39;</span><span class="p">,</span> <span class="mi">200</span><span class="p">),</span>
<span class="p">(</span><span class="s1">&#39;March&#39;</span><span class="p">,</span> <span class="mi">300</span><span class="p">),</span>
<span class="p">(</span><span class="s1">&#39;April&#39;</span><span class="p">,</span> <span class="mi">400</span><span class="p">),</span>
<span class="p">(</span><span class="s1">&#39;May&#39;</span><span class="p">,</span> <span class="mi">500</span><span class="p">),</span>
<span class="p">)</span>
<span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">data</span>
<span class="k">return</span>
</pre></div>
</div>
</section>
<section id="copy-visible-cells">
<h2>Copy visible cells<a class="headerlink" href="#copy-visible-cells" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">rangos</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">active</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">current_region</span><span class="o">.</span><span class="n">visible</span>
<span class="n">doc</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">rangos</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">doc</span><span class="o">.</span><span class="n">active</span><span class="p">[</span><span class="s1">&#39;A15&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">select</span><span class="p">()</span>
<span class="n">doc</span><span class="o">.</span><span class="n">paste</span><span class="p">()</span>
</pre></div>
</div>
</section>
<section id="merge-by-row">
<h2>Merge by row<a class="headerlink" href="#merge-by-row" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">selection</span>
<span class="n">rango</span><span class="o">.</span><span class="n">merge_by_row</span><span class="p">()</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="easymacro.html">Library easymacro.py</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="examples.html">Examples</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="examples_app.html">For Application</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">For Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_writer.html">For Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_draw.html">For Draw</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_base.html">For Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="examples.html">Examples</a><ul>
<li>Previous: <a href="examples_app.html" title="previous chapter">For Application</a></li>
<li>Next: <a href="examples_writer.html" title="next chapter">For Writer</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/examples_calc.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

144
doc/build/main/examples_draw.html vendored Normal file
View File

@ -0,0 +1,144 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>For Draw &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="For Base" href="examples_base.html" />
<link rel="prev" title="For Writer" href="examples_writer.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="for-draw">
<h1>For Draw<a class="headerlink" href="#for-draw" title="Permalink to this headline"></a></h1>
<section id="save-image-from-clipboard">
<h2>Save image from clipboard<a class="headerlink" href="#save-image-from-clipboard" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">save_image_from_clipboard</span><span class="p">():</span>
<span class="c1"># Target path</span>
<span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/Pictures&#39;</span>
<span class="c1"># Open new hidden Draw doc</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="s1">&#39;draw&#39;</span><span class="p">,</span> <span class="p">{</span><span class="s1">&#39;Hidden&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">})</span>
<span class="c1"># Paste image from clipboard and return</span>
<span class="n">image</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">paste</span><span class="p">()</span>
<span class="c1"># Save image</span>
<span class="n">image</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="c1"># Close document</span>
<span class="n">doc</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="s1">&#39;Image saved&#39;</span><span class="p">)</span>
<span class="k">return</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="easymacro.html">Library easymacro.py</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="examples.html">Examples</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="examples_app.html">For Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_calc.html">For Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_writer.html">For Writer</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">For Draw</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_base.html">For Base</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="examples.html">Examples</a><ul>
<li>Previous: <a href="examples_writer.html" title="previous chapter">For Writer</a></li>
<li>Next: <a href="examples_base.html" title="next chapter">For Base</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/examples_draw.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

140
doc/build/main/examples_writer.html vendored Normal file
View File

@ -0,0 +1,140 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>For Writer &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="For Draw" href="examples_draw.html" />
<link rel="prev" title="For Calc" href="examples_calc.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="for-writer">
<h1>For Writer<a class="headerlink" href="#for-writer" title="Permalink to this headline"></a></h1>
<section id="set-autostyle-in-table">
<h2>Set autostyle in table<a class="headerlink" href="#set-autostyle-in-table" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">writer_table_set_style</span><span class="p">():</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
<span class="n">table</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">tables</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">table</span><span class="o">.</span><span class="n">style</span> <span class="o">=</span> <span class="s1">&#39;Academic&#39;</span>
<span class="k">return</span>
</pre></div>
</div>
</section>
<section id="insert-math-formula">
<h2>Insert math formula<a class="headerlink" href="#insert-math-formula" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">formula</span> <span class="o">=</span> <span class="s1">&#39;%LAMBDA_{deg&quot;,&quot;t}=1 + </span><span class="si">%a</span><span class="s1">lpha_deg SQRT {M_t over M_{(t=0)}-1}~&quot;.&quot;&#39;</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">selection</span>
<span class="n">text</span><span class="o">.</span><span class="n">insert_math</span><span class="p">(</span><span class="n">formula</span><span class="p">)</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="easymacro.html">Library easymacro.py</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="examples.html">Examples</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="examples_app.html">For Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_calc.html">For Calc</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">For Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_draw.html">For Draw</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples_base.html">For Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="examples.html">Examples</a><ul>
<li>Previous: <a href="examples_calc.html" title="previous chapter">For Calc</a></li>
<li>Next: <a href="examples_draw.html" title="next chapter">For Draw</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/examples_writer.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

205
doc/build/main/intro.html vendored Normal file
View File

@ -0,0 +1,205 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Introduction &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Configuration" href="config.html" />
<link rel="prev" title="Welcome to ZAZs documentation!" href="../index.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="introduction">
<h1>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h1>
<section id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline"></a></h2>
<p>ZAZ is a script for rapid develop extensions and macros for <a class="reference external" href="https://libreoffice.org">LibreOffice</a>, in
<a class="reference external" href="https://python.org">Python</a> of course.</p>
<p>With ZAZ, you can create:</p>
<ul class="simple">
<li><p>Extensions for final user</p></li>
<li><p>New components for used from Basic</p></li>
<li><p>AddIn, new functions for Calc</p></li>
</ul>
</section>
<section id="requirements">
<h2>Requirements<a class="headerlink" href="#requirements" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Python 3.7+</p></li>
<li><p>LibreOffice 7.0+ with support for macros Python</p></li>
<li><p>LibreOffice SDK, for new components and Add-In</p></li>
</ul>
<p>In:</p>
<ul class="simple">
<li><dl class="simple">
<dt>ArchLinux</dt><dd><ul>
<li><p><code class="docutils literal notranslate"><span class="pre">sudo</span> <span class="pre">pacman</span> <span class="pre">-S</span> <span class="pre">libreoffice-fresh-sdk</span></code></p></li>
</ul>
</dd>
</dl>
</li>
<li><dl class="simple">
<dt>Ubuntu 20.04+</dt><dd><ul>
<li><p><code class="docutils literal notranslate"><span class="pre">sudo</span> <span class="pre">apt</span> <span class="pre">install</span> <span class="pre">libreoffice-script-provider-python</span> <span class="pre">libreoffice-dev</span></code></p></li>
</ul>
</dd>
</dl>
</li>
</ul>
</section>
<section id="installation">
<h2>Installation<a class="headerlink" href="#installation" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Clone this repository (recommended) or download it.</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">clone</span> <span class="pre">https://git.cuates.net/elmau/zaz.git</span></code></p>
<ul class="simple">
<li><p>Move to.</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">cd</span> <span class="pre">zaz/source</span></code></p>
<ul class="simple">
<li><p>Start new extension.</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">./zaz.py</span> <span class="pre">-new</span> <span class="pre">-t</span> <span class="pre">~/projects</span> <span class="pre">-n</span> <span class="pre">MyFirstExtension</span></code></p>
</section>
<section id="my-first-extension">
<h2>My first extension<a class="headerlink" href="#my-first-extension" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Move to:</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">cd</span> <span class="pre">~/projects/MyFirstExtension</span></code></p>
<ul class="simple">
<li><p>Create:</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">python</span> <span class="pre">zaz.py</span> <span class="pre">-c</span></code>:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>↪ python zaz.py -c
04/02/2021 23:07:50 - INFO - Created directories...
04/02/2021 23:07:50 - INFO - Created files...
04/02/2021 23:07:50 - INFO - Don&#39;t forget generate DOMAIN.pot for locales
04/02/2021 23:07:50 - INFO - New extension: MyFirstExtension make successfully...
Now, you can install and test: zaz.py -i
</pre></div>
</div>
<ul class="simple">
<li><p>Install and test:</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">python</span> <span class="pre">zaz.py</span> <span class="pre">-i</span></code>:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>↪ python zaz.py -i
04/02/2021 23:11:40 - INFO - Don&#39;t forget generate DOMAIN.pot for locales
04/02/2021 23:11:40 - INFO - Compress OXT extension...
04/02/2021 23:11:40 - INFO - Extension OXT created successfully...
Copying: MyFirstExtension_v0.1.0.oxt
unopkg done.
04/02/2021 23:11:41 - INFO - Install extension successfully...
04/02/2021 23:11:41 - INFO - Start LibreOffice...
04/02/2021 23:11:53 - INFO - Extension make successfully...
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Introduction</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#overview">Overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="#requirements">Requirements</a></li>
<li class="toctree-l2"><a class="reference internal" href="#installation">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="#my-first-extension">My first extension</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="easymacro.html">Library easymacro.py</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="../index.html" title="previous chapter">Welcome to ZAZs documentation!</a></li>
<li>Next: <a href="config.html" title="next chapter">Configuration</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/intro.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

669
doc/build/main/paths.html vendored Normal file
View File

@ -0,0 +1,669 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Paths and files &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Email" href="email.html" />
<link rel="prev" title="Tools" href="tools.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="paths-and-files">
<h1>Paths and files<a class="headerlink" href="#paths-and-files" title="Permalink to this headline"></a></h1>
<p>Remember, always import library.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">easymacro</span> <span class="k">as</span> <span class="nn">app</span>
</pre></div>
</div>
<section id="get-info-path">
<h2>Get info path<a class="headerlink" href="#get-info-path" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/myfile.ods&#39;</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">file_name</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">ext</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">size</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
</pre></div>
</div>
<p>Or get information in a tuple</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/myfile.ods&#39;</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">info</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="exists-path">
<h2>Exists path<a class="headerlink" href="#exists-path" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/test&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">path</span><span class="p">))</span>
</pre></div>
</div>
</section>
<section id="path-is-file">
<h2>Path is file<a class="headerlink" href="#path-is-file" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/myfile.ott&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">is_file</span><span class="p">(</span><span class="n">path</span><span class="p">))</span>
</pre></div>
</div>
</section>
<section id="path-is-dir">
<h2>Path is dir<a class="headerlink" href="#path-is-dir" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">is_dir</span><span class="p">(</span><span class="n">path</span><span class="p">))</span>
</pre></div>
</div>
</section>
<section id="get-path-home">
<h2>Get path home<a class="headerlink" href="#get-path-home" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">home</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="get-path-documents">
<h2>Get path documents<a class="headerlink" href="#get-path-documents" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Configurate in LibreOffice Paths</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">documents</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="get-path-temp">
<h2>Get path temp<a class="headerlink" href="#get-path-temp" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">temp_dir</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="get-path-from-libreoffice-configuration">
<h2>Get path from LibreOffice configuration<a class="headerlink" href="#get-path-from-libreoffice-configuration" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Default get path documents.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">config</span><span class="p">()</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>All options in <a class="reference external" href="http://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1util_1_1XPathSettings.html">API XPathSettings</a></p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">config</span><span class="p">(</span><span class="s1">&#39;Config&#39;</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="get-path-executable-python">
<h2>Get path executable python<a class="headerlink" href="#get-path-executable-python" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path_python</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">python</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path_python</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="save-and-read-text-data">
<h2>Save and read text data<a class="headerlink" href="#save-and-read-text-data" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Default encoding is UTF8</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">data</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;Do you want to know who you are? Don&#39;t ask. Act!</span>
<span class="s2">Action will delineate and define you.</span>
<span class="s2">Thomas Jefferson</span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/temp.txt&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Change encoding</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="s1">&#39;iso-8859-1&#39;</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="save-and-read-binary-data">
<h2>Save and read binary data<a class="headerlink" href="#save-and-read-binary-data" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">data</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;Binary data&#39;</span>
<span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/temp.bin&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">save_bin</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">read_bin</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="join-paths">
<h2>Join paths<a class="headerlink" href="#join-paths" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path_home</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">home</span>
<span class="n">file_name</span> <span class="o">=</span> <span class="s1">&#39;test.ods&#39;</span>
<span class="n">path</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path_home</span><span class="p">,</span> <span class="n">file_name</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="get-a-temporal-path">
<h2>Get a temporal path<a class="headerlink" href="#get-a-temporal-path" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path_temp</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">tmp</span><span class="p">()</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path_temp</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get with extension.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path_temp</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">tmp</span><span class="p">(</span><span class="s1">&#39;.txt&#39;</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path_temp</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Save data in a temporal path</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">data</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;He who receives an idea from me,</span>
<span class="s2">receives instruction himself without lessening mine;</span>
<span class="s2">as he who lights his taper at mine,</span>
<span class="s2">receives light without darkening me.</span>
<span class="s2">Thomas Jefferson</span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="n">path_tmp</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">save_tmp</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path_tmp</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="get-a-temporal-dir">
<h2>Get a temporal dir<a class="headerlink" href="#get-a-temporal-dir" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>All content and directory is deleted when exit context.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">data</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;Do you want to know who you are? Don&#39;t ask. Act!</span>
<span class="s2">Action will delineate and define you.</span>
<span class="s2">Thomas Jefferson</span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="k">with</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">dir_tmp</span><span class="p">()</span> <span class="k">as</span> <span class="n">dt</span><span class="p">:</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">dt</span><span class="p">))</span>
<span class="n">path</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="s1">&#39;test.txt&#39;</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">dt</span><span class="p">))</span>
</pre></div>
</div>
</section>
<section id="get-path-for-save">
<h2>Get path for save<a class="headerlink" href="#get-path-for-save" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Default open in user documents.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Open in other path.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path_tmp</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">temp_dir</span>
<span class="n">path</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">path_tmp</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Add one filter</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">filters</span><span class="o">=</span><span class="s1">&#39;xml&#39;</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Add multiple filters</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">filters</span><span class="o">=</span><span class="s1">&#39;xml,txt&#39;</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="select-directory">
<h2>Select directory<a class="headerlink" href="#select-directory" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Default open in user documents.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path_dir</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">get_dir</span><span class="p">()</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path_dir</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Open in other path.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path_tmp</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">temp_dir</span>
<span class="n">path_dir</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">get_dir</span><span class="p">(</span><span class="n">path_tmp</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path_dir</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="get-path-exists-file">
<h2>Get path exists file<a class="headerlink" href="#get-path-exists-file" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Default open in user documents.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path_file</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">get_file</span><span class="p">()</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path_file</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Change init dir.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau&#39;</span>
<span class="n">path_file</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">get_file</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path_file</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Add filter or filters.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path_file</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">get_file</span><span class="p">(</span><span class="n">filters</span><span class="o">=</span><span class="s1">&#39;ods&#39;</span><span class="p">)</span>
<span class="c1"># or</span>
<span class="n">path_file</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">get_file</span><span class="p">(</span><span class="n">filters</span><span class="o">=</span><span class="s1">&#39;ods,odt&#39;</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Can select multiple files.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path_file</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">get_file</span><span class="p">(</span><span class="n">multiple</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="replace-extension">
<h2>Replace extension<a class="headerlink" href="#replace-extension" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/myFile.ods&#39;</span>
<span class="n">path_new</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">replace_ext</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s1">&#39;pdf&#39;</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path_new</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="path-in-format-url-system">
<h2>Path in format URL &lt;-&gt; System<a class="headerlink" href="#path-in-format-url-system" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/myFile.ods&#39;</span>
<span class="n">path_url</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">to_url</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path_url</span><span class="p">)</span>
<span class="n">path</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">to_system</span><span class="p">(</span><span class="n">path_url</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="delete-files-and-directories">
<h2>Delete files and directories<a class="headerlink" href="#delete-files-and-directories" title="Permalink to this headline"></a></h2>
<p><strong>CAUTION</strong>: Delete files and directories immediately, always confirm this action.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/temp.bin&#39;</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">kill</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Delete directory and all content.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/safe_for_delete&#39;</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">kill</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="get-files">
<h2>Get files<a class="headerlink" href="#get-files" title="Permalink to this headline"></a></h2>
<p>This method use library <cite>pathlib</cite></p>
<ul class="simple">
<li><p>Get files not recursively</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/Documents&#39;</span>
<span class="n">files</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">files</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">files</span><span class="p">:</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Add filter</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">files</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">files</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s1">&#39;*.pdf&#39;</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get from this directory and all subdirectories, recursively</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">files</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">files</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s1">&#39;**/*.pdf&#39;</span><span class="p">)</span>
</pre></div>
</div>
<p>This method use <cite>os.walk</cite></p>
<ul class="simple">
<li><p>Get content files recursively</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/Documents&#39;</span>
<span class="n">files</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">files</span><span class="p">:</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Add filters</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">files</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s1">&#39;ods&#39;</span><span class="p">)</span>
<span class="c1"># or filters</span>
<span class="n">files</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s1">&#39;ods|odt&#39;</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="get-directories">
<h2>Get directories<a class="headerlink" href="#get-directories" title="Permalink to this headline"></a></h2>
<p>This method use library <cite>pathlib</cite></p>
<ul class="simple">
<li><p>Get directories in path not recursively</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/Documents&#39;</span>
<span class="n">folders</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">dirs</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">folders</span><span class="p">:</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
</pre></div>
</div>
<p>This method use <cite>os.walk</cite></p>
<ul class="simple">
<li><p>Get directories in path recursively</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/Documents&#39;</span>
<span class="n">folders</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">walk_dirs</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">folders</span><span class="p">:</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get info in a tuple (ID_FOLDER, ID_PARENT, NAME)</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/Documents&#39;</span>
<span class="n">folders</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">walk_dirs</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">folders</span><span class="p">:</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="get-install-path-extension-from-id">
<h2>Get install path extension from id<a class="headerlink" href="#get-install-path-extension-from-id" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">id_ext</span> <span class="o">=</span> <span class="s1">&#39;net.elmau.zaz.EasyMacro&#39;</span>
<span class="n">path</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">from_id</span><span class="p">(</span><span class="n">id_ext</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
</pre></div>
</div>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="m">24</span>/06/2021 <span class="m">21</span>:47:29 - DEBUG - /home/mau/.config/libreoffice/4/user/uno_packages/cache/uno_packages/lu20665x29msz.tmp_/ZAZEasyMacro_v0.1.0.oxt
</pre></div>
</div>
</section>
<section id="verify-if-application-exists">
<h2>Verify if application exists<a class="headerlink" href="#verify-if-application-exists" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app_name</span> <span class="o">=</span> <span class="s1">&#39;nosoffice&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">exists_app</span><span class="p">(</span><span class="n">app_name</span><span class="p">))</span>
<span class="n">app_name</span> <span class="o">=</span> <span class="s1">&#39;soffice&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">exists_app</span><span class="p">(</span><span class="n">app_name</span><span class="p">))</span>
</pre></div>
</div>
</section>
<section id="open-any-type-file">
<h2>Open any type file<a class="headerlink" href="#open-any-type-file" title="Permalink to this headline"></a></h2>
<p>Open with default application in OS.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/Downloads/file.pdf&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/Projects/libre_office/zaz/doc/build/index.html&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="save-and-read-json">
<h2>Save and read json<a class="headerlink" href="#save-and-read-json" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/data.json&#39;</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;type&#39;</span><span class="p">:</span> <span class="s1">&#39;calc&#39;</span><span class="p">,</span>
<span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="s1">&#39;myfile.ods&#39;</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">to_json</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">from_json</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="save-and-read-csv">
<h2>Save and read csv<a class="headerlink" href="#save-and-read-csv" title="Permalink to this headline"></a></h2>
<p>You can used the same way that <a class="reference external" href="https://docs.python.org/3.7/library/csv.html">python csv</a></p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/data.csv&#39;</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">(</span>
<span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;one&#39;</span><span class="p">,</span> <span class="n">app</span><span class="o">.</span><span class="n">now</span><span class="p">()),</span>
<span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s1">&#39;two&#39;</span><span class="p">,</span> <span class="n">app</span><span class="o">.</span><span class="n">now</span><span class="p">()),</span>
<span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s1">&#39;three&#39;</span><span class="p">,</span> <span class="n">app</span><span class="o">.</span><span class="n">now</span><span class="p">()),</span>
<span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">from_csv</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="zip-unzip">
<h2>Zip, unzip<a class="headerlink" href="#zip-unzip" title="Permalink to this headline"></a></h2>
<p>For default, save in the same directory with the same name + <cite>.zip</cite></p>
<ul class="simple">
<li><p>Zip file</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">source</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/logo.svg&#39;</span>
<span class="n">path_zip</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">zip</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">path_zip</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Zip directory</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">source</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/test&#39;</span>
<span class="n">path_zip</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">zip</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">path_zip</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Set target</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">source</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/logo.svg&#39;</span>
<span class="n">target</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/myfile.zip&#39;</span>
<span class="n">path_zip</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">zip</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">path_zip</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Read content of zip</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path_zip</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/test.zip&#39;</span>
<span class="n">names</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">zip_content</span><span class="p">(</span><span class="n">path_zip</span><span class="p">)</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">names</span><span class="p">:</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Unzip in the same directory</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path_zip</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/test.zip&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">unzip</span><span class="p">(</span><span class="n">path_zip</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Unzip in other directory</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path_zip</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/test.zip&#39;</span>
<span class="n">target</span> <span class="o">=</span> <span class="s1">&#39;/srv/mau&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">unzip</span><span class="p">(</span><span class="n">path_zip</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Extract one or more files</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path_zip</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/test.zip&#39;</span>
<span class="n">members</span> <span class="o">=</span> <span class="s1">&#39;calc.ods&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">unzip</span><span class="p">(</span><span class="n">path_zip</span><span class="p">,</span> <span class="n">members</span><span class="o">=</span><span class="n">members</span><span class="p">)</span>
<span class="c1"># or</span>
<span class="n">members</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;calc.ods&#39;</span><span class="p">,</span> <span class="s1">&#39;subdir/file.md&#39;</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Merge zips</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">zips</span> <span class="o">=</span> <span class="p">(</span>
<span class="s1">&#39;/home/mau/test.zip&#39;</span><span class="p">,</span>
<span class="s1">&#39;/home/mau/pictures.zip&#39;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">target</span> <span class="o">=</span> <span class="s1">&#39;/srv/mau/file.zip&#39;</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">merge_zip</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">zips</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="copy-files">
<h2>Copy files<a class="headerlink" href="#copy-files" title="Permalink to this headline"></a></h2>
<p>Copy with the same name</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/image.png&#39;</span>
<span class="n">target</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/Pictures&#39;</span>
<span class="n">path_new</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path_new</span><span class="p">)</span>
</pre></div>
</div>
<p>Copy with other name</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/image.png&#39;</span>
<span class="n">target</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/Pictures&#39;</span>
<span class="n">new_name</span> <span class="o">=</span> <span class="s1">&#39;other_name.png&#39;</span>
<span class="n">path_new</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">paths</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">path_new</span><span class="p">)</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="easymacro.html">Library easymacro.py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">Tools</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Paths and files</a></li>
<li class="toctree-l2"><a class="reference internal" href="email.html">Email</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html">Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc.html">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="writer.html">Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="base.html">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="easymacro.html">Library easymacro.py</a><ul>
<li>Previous: <a href="tools.html" title="previous chapter">Tools</a></li>
<li>Next: <a href="email.html" title="next chapter">Email</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/paths.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

589
doc/build/main/tools.html vendored Normal file
View File

@ -0,0 +1,589 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Tools &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Paths and files" href="paths.html" />
<link rel="prev" title="Tools for debug" href="tools_for_debug.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="tools">
<h1>Tools<a class="headerlink" href="#tools" title="Permalink to this headline"></a></h1>
<p>Remember, always import library.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">easymacro</span> <span class="k">as</span> <span class="nn">app</span>
</pre></div>
</div>
<section id="info-from-pc">
<h2>Info from PC<a class="headerlink" href="#info-from-pc" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Operate system</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">OS</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Current user</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">USER</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Name PC</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">PC</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Name desktop, only GNU/Linux</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">DESKTOP</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Language</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">LANG</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Language with variant</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">LANGUAGE</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Application name</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">NAME</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Application version</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">VERSION</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>In Windows</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">IS_WIN</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>In Mac</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">IS_MAC</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="message-box">
<h2>Message Box<a class="headerlink" href="#message-box" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">IS_WIN</span><span class="p">,</span> <span class="s1">&#39;My Macro&#39;</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="show-warning">
<h2>Show warning<a class="headerlink" href="#show-warning" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">message</span> <span class="o">=</span> <span class="s1">&#39;Caution, this action is dangerous&#39;</span>
<span class="n">title</span> <span class="o">=</span> <span class="s1">&#39;My App&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">title</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="show-error-box">
<h2>Show error box<a class="headerlink" href="#show-error-box" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">message</span> <span class="o">=</span> <span class="s1">&#39;ERROR: Contact technical support&#39;</span>
<span class="n">title</span> <span class="o">=</span> <span class="s1">&#39;My App&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">errorbox</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">title</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="make-question">
<h2>Make question<a class="headerlink" href="#make-question" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">message</span> <span class="o">=</span> <span class="s1">&#39;Is easy Python?&#39;</span>
<span class="n">title</span> <span class="o">=</span> <span class="s1">&#39;My App&#39;</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">question</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">title</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="inputbox">
<h2>InputBox<a class="headerlink" href="#inputbox" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Normal data</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">message</span> <span class="o">=</span> <span class="s1">&#39;Type your name&#39;</span>
<span class="n">default</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
<span class="n">title</span> <span class="o">=</span> <span class="s1">&#39;My App&#39;</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">inputbox</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">default</span><span class="p">,</span> <span class="n">title</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Private data</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">message</span> <span class="o">=</span> <span class="s1">&#39;Type your password&#39;</span>
<span class="n">default</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
<span class="n">title</span> <span class="o">=</span> <span class="s1">&#39;My App&#39;</span>
<span class="n">echochar</span> <span class="o">=</span> <span class="s2">&quot;*&quot;</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">inputbox</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">default</span><span class="p">,</span> <span class="n">title</span><span class="p">,</span> <span class="n">echochar</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="date-and-times">
<h2>Date and times<a class="headerlink" href="#date-and-times" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Get today</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">today</span><span class="p">())</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get now</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">now</span><span class="p">())</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get now only time</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">now</span><span class="p">(</span><span class="kc">True</span><span class="p">))</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get <a class="reference external" href="https://en.wikipedia.org/wiki/Unix_time">epoch time</a></p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">get_epoch</span><span class="p">())</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Simple measure time</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
<span class="n">app</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
<span class="n">seconds</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">end</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">seconds</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="thread">
<h2>Thread<a class="headerlink" href="#thread" title="Permalink to this headline"></a></h2>
<p>You can execute any macro in thread</p>
<ul class="simple">
<li><p>Normal execution</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">show_time</span><span class="p">(</span><span class="n">seconds</span><span class="p">):</span>
<span class="n">app</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">seconds</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">NAME</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">def</span> <span class="nf">main</span><span class="p">(</span><span class="n">args</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="n">show_time</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="s1">&#39;Finish...&#39;</span><span class="p">)</span>
<span class="k">return</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Run in thread</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="nd">@app</span><span class="o">.</span><span class="n">run_in_thread</span>
<span class="k">def</span> <span class="nf">show_time</span><span class="p">(</span><span class="n">seconds</span><span class="p">):</span>
<span class="n">app</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">seconds</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">NAME</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">def</span> <span class="nf">main</span><span class="p">(</span><span class="n">args</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="n">show_time</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="s1">&#39;Finish...&#39;</span><span class="p">)</span>
<span class="k">return</span>
</pre></div>
</div>
</section>
<section id="dictionary-properties">
<h2>Dictionary &lt;-&gt; properties<a class="headerlink" href="#dictionary-properties" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">args</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;Hidden&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s1">&#39;Password&#39;</span><span class="p">:</span> <span class="s1">&#39;letmein&#39;</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">properties</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">dict_to_property</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">data_to_dict</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="tuples-or-lists-to-dictionary">
<h2>Tuples or lists to dictionary<a class="headerlink" href="#tuples-or-lists-to-dictionary" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">tuple_of_tuples</span> <span class="o">=</span> <span class="p">(</span>
<span class="p">(</span><span class="s1">&#39;Hidden&#39;</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
<span class="p">(</span><span class="s1">&#39;Password&#39;</span><span class="p">,</span> <span class="s1">&#39;letmein&#39;</span><span class="p">),</span>
<span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">data_to_dict</span><span class="p">(</span><span class="n">tuple_of_tuples</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">list_of_lists</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">[</span><span class="s1">&#39;Hidden&#39;</span><span class="p">,</span> <span class="kc">True</span><span class="p">],</span>
<span class="p">[</span><span class="s1">&#39;Password&#39;</span><span class="p">,</span> <span class="s1">&#39;letmein&#39;</span><span class="p">],</span>
<span class="p">]</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">data_to_dict</span><span class="p">(</span><span class="n">list_of_lists</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="json">
<h2>Json<a class="headerlink" href="#json" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">data</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;Hidden&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s1">&#39;Password&#39;</span><span class="p">:</span> <span class="s1">&#39;letmein&#39;</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">json</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">json_dumps</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">json</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">json_loads</span><span class="p">(</span><span class="n">json</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="call-macros">
<h2>Call Macros<a class="headerlink" href="#call-macros" title="Permalink to this headline"></a></h2>
<p>You can any macro, for default call macros Python.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">show_message</span><span class="p">():</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">INFO_DEBUG</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">def</span> <span class="nf">main</span><span class="p">(</span><span class="n">args</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="n">args</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;library&#39;</span><span class="p">:</span> <span class="s1">&#39;test&#39;</span><span class="p">,</span>
<span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="s1">&#39;show_message&#39;</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">app</span><span class="o">.</span><span class="n">call_macro</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
<span class="k">return</span>
</pre></div>
</div>
<p>Of course is better call directly if both macros are the same languaje, but, you can call macro in Basic too.</p>
<div class="highlight-vbnet notranslate"><div class="highlight"><pre><span></span><span class="k">Sub</span> <span class="nf">show_message</span><span class="p">()</span>
<span class="n">MsgBox</span> <span class="s">&quot;Basic from Python&quot;</span>
<span class="k">End</span> <span class="k">Sub</span>
</pre></div>
</div>
<p>Call from Python with.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">args</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;language&#39;</span><span class="p">:</span> <span class="s1">&#39;Basic&#39;</span><span class="p">,</span>
<span class="s1">&#39;library&#39;</span><span class="p">:</span> <span class="s1">&#39;Standard&#39;</span><span class="p">,</span>
<span class="s1">&#39;module&#39;</span><span class="p">:</span> <span class="s1">&#39;Module1&#39;</span><span class="p">,</span>
<span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="s1">&#39;show_message&#39;</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">app</span><span class="o">.</span><span class="n">call_macro</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
</pre></div>
</div>
<p>Execute macro in other thread</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app</span><span class="o">.</span><span class="n">call_macro</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="call-external-program">
<h2>Call external program<a class="headerlink" href="#call-external-program" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">app_name</span> <span class="o">=</span> <span class="s1">&#39;gnome-calculator&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">app_name</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="s1">&#39;ok&#39;</span><span class="p">)</span>
</pre></div>
</div>
<p>Call command line and capture output</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">args</span> <span class="o">=</span> <span class="s1">&#39;ls -lh ~&#39;</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
</pre></div>
</div>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="m">21</span>/06/2021 <span class="m">22</span>:27:22 - DEBUG - total <span class="m">1</span>.3M
drwxr-xr-x <span class="m">5</span> mau mau <span class="m">4</span>.0K Jun <span class="m">17</span> <span class="m">13</span>:09 Desktop
drwxr-xr-x <span class="m">6</span> mau mau <span class="m">4</span>.0K Jun <span class="m">15</span> <span class="m">12</span>:35 Documents
drwxr-xr-x <span class="m">2</span> mau mau <span class="m">4</span>.0K Jun <span class="m">21</span> <span class="m">20</span>:26 Downloads
drwxr-xr-x <span class="m">2</span> mau mau <span class="m">4</span>.0K Jun <span class="m">21</span> <span class="m">16</span>:18 Pictures
drwxr-xr-x <span class="m">13</span> mau mau <span class="m">4</span>.0K Jun <span class="m">21</span> <span class="m">15</span>:34 Projects
drwxr-xr-x <span class="m">2</span> mau mau <span class="m">4</span>.0K May <span class="m">11</span> <span class="m">18</span>:48 Templates
drwxr-xr-x <span class="m">2</span> mau mau <span class="m">4</span>.0K Jun <span class="m">20</span> <span class="m">23</span>:27 Videos
</pre></div>
</div>
<p>Call command line and capture output line by line.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">args</span> <span class="o">=</span> <span class="s1">&#39;ls -lh /home/mau&#39;</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">app</span><span class="o">.</span><span class="n">popen</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
</pre></div>
</div>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="m">21</span>/06/2021 <span class="m">22</span>:34:42 - DEBUG - total <span class="m">1</span>.3M
<span class="m">21</span>/06/2021 <span class="m">22</span>:34:42 - DEBUG - drwxr-xr-x <span class="m">5</span> mau mau <span class="m">4</span>.0K Jun <span class="m">17</span> <span class="m">13</span>:09 Desktop
<span class="m">21</span>/06/2021 <span class="m">22</span>:34:42 - DEBUG - drwxr-xr-x <span class="m">6</span> mau mau <span class="m">4</span>.0K Jun <span class="m">15</span> <span class="m">12</span>:35 Documents
<span class="m">21</span>/06/2021 <span class="m">22</span>:34:42 - DEBUG - drwxr-xr-x <span class="m">2</span> mau mau <span class="m">4</span>.0K Jun <span class="m">21</span> <span class="m">20</span>:26 Downloads
<span class="m">21</span>/06/2021 <span class="m">22</span>:34:42 - DEBUG - -rw-r----- <span class="m">1</span> mau mau <span class="m">1</span>.3M Jun <span class="m">14</span> <span class="m">11</span>:53 out.png
<span class="m">21</span>/06/2021 <span class="m">22</span>:34:42 - DEBUG - drwxr-xr-x <span class="m">2</span> mau mau <span class="m">4</span>.0K Jun <span class="m">21</span> <span class="m">16</span>:18 Pictures
<span class="m">21</span>/06/2021 <span class="m">22</span>:34:42 - DEBUG - drwxr-xr-x <span class="m">13</span> mau mau <span class="m">4</span>.0K Jun <span class="m">21</span> <span class="m">15</span>:34 Projects
<span class="m">21</span>/06/2021 <span class="m">22</span>:34:42 - DEBUG - drwxr-xr-x <span class="m">2</span> mau mau <span class="m">4</span>.0K May <span class="m">11</span> <span class="m">18</span>:48 Templates
<span class="m">21</span>/06/2021 <span class="m">22</span>:34:42 - DEBUG - drwxr-xr-x <span class="m">2</span> mau mau <span class="m">4</span>.0K Jun <span class="m">20</span> <span class="m">23</span>:27 Videos
</pre></div>
</div>
</section>
<section id="timer">
<h2>Timer<a class="headerlink" href="#timer" title="Permalink to this headline"></a></h2>
<p>Execute any macro every seconds.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">TIMER_NAME</span> <span class="o">=</span> <span class="s1">&#39;clock&#39;</span>
<span class="k">def</span> <span class="nf">show_time</span><span class="p">():</span>
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">now</span><span class="p">(</span><span class="kc">True</span><span class="p">))</span>
<span class="k">return</span>
<span class="k">def</span> <span class="nf">start_clock</span><span class="p">():</span>
<span class="n">seconds</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">macro</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;library&#39;</span><span class="p">:</span> <span class="s1">&#39;test&#39;</span><span class="p">,</span>
<span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="s1">&#39;show_time&#39;</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">app</span><span class="o">.</span><span class="n">start_timer</span><span class="p">(</span><span class="n">TIMER_NAME</span><span class="p">,</span> <span class="n">seconds</span><span class="p">,</span> <span class="n">macro</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">def</span> <span class="nf">stop_clock</span><span class="p">():</span>
<span class="n">app</span><span class="o">.</span><span class="n">stop_timer</span><span class="p">(</span><span class="n">TIMER_NAME</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">def</span> <span class="nf">main</span><span class="p">(</span><span class="n">args</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="n">start_clock</span><span class="p">()</span>
<span class="k">return</span>
</pre></div>
</div>
<p>Execute <cite>stop_clock</cite> for stop timer.</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="m">21</span>/06/2021 <span class="m">22</span>:43:17 - INFO - Timer started... show_time
<span class="m">21</span>/06/2021 <span class="m">22</span>:43:18 - DEBUG - <span class="m">22</span>:43:18.080315
<span class="m">21</span>/06/2021 <span class="m">22</span>:43:19 - DEBUG - <span class="m">22</span>:43:19.082211
...
<span class="m">21</span>/06/2021 <span class="m">22</span>:43:46 - DEBUG - <span class="m">22</span>:43:46.126446
<span class="m">21</span>/06/2021 <span class="m">22</span>:43:47 - DEBUG - <span class="m">22</span>:43:47.128487
<span class="m">21</span>/06/2021 <span class="m">22</span>:43:47 - INFO - Timer stopped... show_time
</pre></div>
</div>
</section>
<section id="get-digest">
<h2>Get digest<a class="headerlink" href="#get-digest" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">data</span> <span class="o">=</span> <span class="s1">&#39;LibreOffice with Python&#39;</span>
<span class="n">digest</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">sha256</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">digest</span><span class="p">)</span>
<span class="n">digest</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">sha512</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">digest</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="save-and-get-configurations">
<h2>Save and get configurations<a class="headerlink" href="#save-and-get-configurations" title="Permalink to this headline"></a></h2>
<p>You can save any data.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">my_app</span> <span class="o">=</span> <span class="s1">&#39;my_extension&#39;</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;path&#39;</span><span class="p">:</span> <span class="s1">&#39;/home/mau/work&#39;</span><span class="p">,</span>
<span class="s1">&#39;save_data&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">app</span><span class="o">.</span><span class="n">set_config</span><span class="p">(</span><span class="s1">&#39;config&#39;</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">my_app</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="s1">&#39;Save config&#39;</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">get_config</span><span class="p">(</span><span class="s1">&#39;config&#39;</span><span class="p">,</span> <span class="n">my_app</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="render-string">
<h2>Render string<a class="headerlink" href="#render-string" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">template</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;Hello $name</span>
<span class="s2">I send you this $file_name</span>
<span class="s2">Best regards</span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="s1">&#39;Ingrid Bergman&#39;</span><span class="p">,</span> <span class="s1">&#39;file_name&#39;</span><span class="p">:</span> <span class="s1">&#39;letter_love.odt&#39;</span><span class="p">}</span>
<span class="n">render</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">template</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">render</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="encrypt-decrypt">
<h2>Encrypt decrypt<a class="headerlink" href="#encrypt-decrypt" title="Permalink to this headline"></a></h2>
<p>You need install library <a class="reference external" href="https://github.com/pyca/cryptography">cryptography</a></p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">easymacro</span> <span class="k">as</span> <span class="nn">app</span>
<span class="kn">from</span> <span class="nn">conf</span> <span class="kn">import</span> <span class="n">PASSWORD</span>
<span class="k">def</span> <span class="nf">encrypt_decrypt</span><span class="p">():</span>
<span class="n">data</span> <span class="o">=</span> <span class="s1">&#39;My super secret data&#39;</span>
<span class="n">token</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">encrypt</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">PASSWORD</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">token</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">decrypt</span><span class="p">(</span><span class="n">token</span><span class="p">,</span> <span class="n">PASSWORD</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="k">return</span>
</pre></div>
</div>
</section>
<section id="simple-url-open">
<h2>Simple url open<a class="headerlink" href="#simple-url-open" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Get text data</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">url</span> <span class="o">=</span> <span class="s1">&#39;https://api.ipify.org&#39;</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">url_open</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get json data</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">url</span> <span class="o">=</span> <span class="s1">&#39;https://api.ipify.org?format=json&#39;</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">url_open</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">get_json</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</pre></div>
</div>
<p>For more complex case, you can used <a class="reference external" href="https://docs.python-requests.org">requests</a> or <a class="reference external" href="https://www.python-httpx.org/">httpx</a></p>
</section>
<section id="color">
<h2>Color<a class="headerlink" href="#color" title="Permalink to this headline"></a></h2>
<p>Look colors that you can used in <a class="reference external" href="https://en.wikipedia.org/wiki/Web_colors">web colors</a></p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">color_name</span> <span class="o">=</span> <span class="s1">&#39;darkblue&#39;</span>
<span class="n">color</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">get_color</span><span class="p">(</span><span class="n">color_name</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">color</span><span class="p">)</span>
<span class="n">color_rgb</span> <span class="o">=</span> <span class="p">(</span><span class="mi">125</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
<span class="n">color</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">get_color</span><span class="p">(</span><span class="n">color_rgb</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">color</span><span class="p">)</span>
<span class="n">color_html</span> <span class="o">=</span> <span class="s1">&#39;#008080&#39;</span>
<span class="n">color</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">get_color</span><span class="p">(</span><span class="n">color_html</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">color</span><span class="p">)</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="easymacro.html">Library easymacro.py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html">Paths and files</a></li>
<li class="toctree-l2"><a class="reference internal" href="email.html">Email</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html">Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc.html">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="writer.html">Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="base.html">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="easymacro.html">Library easymacro.py</a><ul>
<li>Previous: <a href="tools_for_debug.html" title="previous chapter">Tools for debug</a></li>
<li>Next: <a href="paths.html" title="next chapter">Paths and files</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/tools.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More