From cca2073c307f31692009b0e0d2b243ce57e4a6be Mon Sep 17 00:00:00 2001 From: paul-1 <6473457+paul-1@users.noreply.github.com> Date: Sat, 16 Mar 2019 09:37:31 -0400 Subject: [PATCH] Version 5-9-49 from BoomX2 Repo --- SuperDateTime/COPYRIGHT | 340 + .../plugins/SuperDateTime/html/images/0.png | Bin 0 -> 11745 bytes .../plugins/SuperDateTime/html/images/1.png | Bin 0 -> 13730 bytes .../plugins/SuperDateTime/html/images/10.png | Bin 0 -> 12572 bytes .../plugins/SuperDateTime/html/images/11.png | Bin 0 -> 9380 bytes .../plugins/SuperDateTime/html/images/12.png | Bin 0 -> 9740 bytes .../plugins/SuperDateTime/html/images/13.png | Bin 0 -> 8650 bytes .../plugins/SuperDateTime/html/images/14.png | Bin 0 -> 10685 bytes .../plugins/SuperDateTime/html/images/15.png | Bin 0 -> 12691 bytes .../plugins/SuperDateTime/html/images/16.png | Bin 0 -> 12377 bytes .../plugins/SuperDateTime/html/images/17.png | Bin 0 -> 12075 bytes .../plugins/SuperDateTime/html/images/18.png | Bin 0 -> 8690 bytes .../plugins/SuperDateTime/html/images/19.png | Bin 0 -> 18414 bytes .../plugins/SuperDateTime/html/images/2.png | Bin 0 -> 13668 bytes .../plugins/SuperDateTime/html/images/20.png | Bin 0 -> 6431 bytes .../plugins/SuperDateTime/html/images/21.png | Bin 0 -> 9087 bytes .../plugins/SuperDateTime/html/images/22.png | Bin 0 -> 10743 bytes .../plugins/SuperDateTime/html/images/23.png | Bin 0 -> 7865 bytes .../plugins/SuperDateTime/html/images/24.png | Bin 0 -> 7734 bytes .../plugins/SuperDateTime/html/images/25.png | Bin 0 -> 18090 bytes .../plugins/SuperDateTime/html/images/26.png | Bin 0 -> 9355 bytes .../plugins/SuperDateTime/html/images/27.png | Bin 0 -> 16536 bytes .../plugins/SuperDateTime/html/images/28.png | Bin 0 -> 15687 bytes .../plugins/SuperDateTime/html/images/29.png | Bin 0 -> 17184 bytes .../plugins/SuperDateTime/html/images/3.png | Bin 0 -> 11936 bytes .../plugins/SuperDateTime/html/images/30.png | Bin 0 -> 15297 bytes .../plugins/SuperDateTime/html/images/31.png | Bin 0 -> 13539 bytes .../plugins/SuperDateTime/html/images/32.png | Bin 0 -> 14825 bytes .../plugins/SuperDateTime/html/images/33.png | Bin 0 -> 14877 bytes .../plugins/SuperDateTime/html/images/34.png | Bin 0 -> 15596 bytes .../plugins/SuperDateTime/html/images/35.png | Bin 0 -> 11941 bytes .../plugins/SuperDateTime/html/images/36.png | Bin 0 -> 15841 bytes .../plugins/SuperDateTime/html/images/37.png | Bin 0 -> 17929 bytes .../plugins/SuperDateTime/html/images/38.png | Bin 0 -> 9222 bytes .../plugins/SuperDateTime/html/images/39.png | Bin 0 -> 9782 bytes .../plugins/SuperDateTime/html/images/4.png | Bin 0 -> 15389 bytes .../plugins/SuperDateTime/html/images/40.png | Bin 0 -> 11543 bytes .../plugins/SuperDateTime/html/images/41.png | Bin 0 -> 11609 bytes .../plugins/SuperDateTime/html/images/42.png | Bin 0 -> 12255 bytes .../plugins/SuperDateTime/html/images/43.png | Bin 0 -> 12717 bytes .../plugins/SuperDateTime/html/images/44.png | Bin 0 -> 15040 bytes .../plugins/SuperDateTime/html/images/45.png | Bin 0 -> 18176 bytes .../plugins/SuperDateTime/html/images/46.png | Bin 0 -> 19843 bytes .../plugins/SuperDateTime/html/images/47.png | Bin 0 -> 19263 bytes .../plugins/SuperDateTime/html/images/48.png | Bin 0 -> 17929 bytes .../plugins/SuperDateTime/html/images/5.png | Bin 0 -> 12671 bytes .../plugins/SuperDateTime/html/images/6.png | Bin 0 -> 9153 bytes .../plugins/SuperDateTime/html/images/7.png | Bin 0 -> 15175 bytes .../plugins/SuperDateTime/html/images/8.png | Bin 0 -> 10501 bytes .../plugins/SuperDateTime/html/images/9.png | Bin 0 -> 7275 bytes .../plugins/SuperDateTime/html/images/MLB.png | Bin 0 -> 26591 bytes .../SuperDateTime/html/images/NCAA.png | Bin 0 -> 10955 bytes .../plugins/SuperDateTime/html/images/NHL.png | Bin 0 -> 32198 bytes .../html/images/NOCONNECTION.png | Bin 0 -> 6611 bytes .../html/images/WEATHERALERT.png | Bin 0 -> 11185 bytes .../plugins/SuperDateTime/html/images/_25.png | Bin 0 -> 8691 bytes .../SuperDateTime/html/images/blank.png | Bin 0 -> 1095 bytes .../plugins/SuperDateTime/html/images/nba.png | Bin 0 -> 12506 bytes .../plugins/SuperDateTime/html/images/nfl.png | Bin 0 -> 12883 bytes .../SuperDateTime/html/images/permission.txt | 37 + .../SuperDateTime/html/images/yahoo.png | Bin 0 -> 6473 bytes .../plugins/SuperDateTime/settings/basic.html | 272 + .../SuperDateTime/settings/player.html | 245 + SuperDateTime/install.xml | 18 + SuperDateTime/lib/HTML/AsSubs.pm | 136 + SuperDateTime/lib/HTML/Element.pm | 3848 +++++++++ SuperDateTime/lib/HTML/Element/traverse.pm | 329 + SuperDateTime/lib/HTML/Parse.pm | 155 + SuperDateTime/lib/HTML/Tagset.pm | 471 ++ SuperDateTime/lib/HTML/Tree.pm | 182 + SuperDateTime/lib/HTML/TreeBuilder.pm | 1869 +++++ .../Plugins/SuperDateTime/PlayerSettings.pm | 123 + .../lib/Plugins/SuperDateTime/Plugin.pm | 7023 +++++++++++++++++ .../lib/Plugins/SuperDateTime/Settings.pm | 350 + SuperDateTime/mlb.2.font.bmp | Bin 0 -> 13132 bytes SuperDateTime/nfl.2.font.bmp | Bin 0 -> 13132 bytes SuperDateTime/strings.txt | 478 ++ 77 files changed, 15876 insertions(+) create mode 100644 SuperDateTime/COPYRIGHT create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/0.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/1.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/10.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/11.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/12.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/13.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/14.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/15.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/16.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/17.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/18.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/19.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/2.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/20.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/21.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/22.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/23.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/24.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/25.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/26.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/27.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/28.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/29.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/3.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/30.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/31.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/32.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/33.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/34.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/35.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/36.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/37.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/38.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/39.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/4.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/40.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/41.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/42.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/43.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/44.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/45.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/46.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/47.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/48.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/5.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/6.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/7.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/8.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/9.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/MLB.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/NCAA.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/NHL.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/NOCONNECTION.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/WEATHERALERT.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/_25.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/blank.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/nba.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/nfl.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/permission.txt create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/yahoo.png create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/settings/basic.html create mode 100644 SuperDateTime/HTML/EN/plugins/SuperDateTime/settings/player.html create mode 100644 SuperDateTime/install.xml create mode 100644 SuperDateTime/lib/HTML/AsSubs.pm create mode 100644 SuperDateTime/lib/HTML/Element.pm create mode 100644 SuperDateTime/lib/HTML/Element/traverse.pm create mode 100644 SuperDateTime/lib/HTML/Parse.pm create mode 100644 SuperDateTime/lib/HTML/Tagset.pm create mode 100644 SuperDateTime/lib/HTML/Tree.pm create mode 100644 SuperDateTime/lib/HTML/TreeBuilder.pm create mode 100644 SuperDateTime/lib/Plugins/SuperDateTime/PlayerSettings.pm create mode 100644 SuperDateTime/lib/Plugins/SuperDateTime/Plugin.pm create mode 100644 SuperDateTime/lib/Plugins/SuperDateTime/Settings.pm create mode 100644 SuperDateTime/mlb.2.font.bmp create mode 100644 SuperDateTime/nfl.2.font.bmp create mode 100644 SuperDateTime/strings.txt diff --git a/SuperDateTime/COPYRIGHT b/SuperDateTime/COPYRIGHT new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/SuperDateTime/COPYRIGHT @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. 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. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + 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 +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 2 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, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This 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 Library General +Public License instead of this License. diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/0.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/0.png new file mode 100644 index 0000000000000000000000000000000000000000..79c4b032ace2bf5c1883ba98312c9ace6bcad4a6 GIT binary patch literal 11745 zcmai4g;_mKF3lu0W#odZqDFiKE+$BhZyXBYn`v<xi?NrLlFm)3=;qV;3zA}eSo*V|6S;)@NeNy0<-W2*;ZOz8UUyt z5k!eUg8xSSsH!Ljfc^I=>?u!!-@$NIGV*}8O8<8$j5^f~OIOPa8|&YfAN~k?9OUvfNAg5-9sOo>E@nGt zOyUT_ILFX1M+^*~%LEi`T{HGG3;n;h7}Pvbl8NJoKHdj{y`cjyPaf#tw}25;3qU_W z4&X~-wcZSwII6D8C*=D+NfW8&*@~xXZWk)A{rl9cOKtUMpukIi*o&$_jd|PjuJ;tO z7IJ^O9W|$2++_klrg$13T9Fn_s0eViU5dCW-cnfS>NA>42pDSYJfKnintZJKdjpnO;{i$$WgOe~uyvn_bO zat_pUob9k_+UTyAx$azWXh1GyE)+_ROUe8CD%dCCv)&mJG`H``iAsxFtB=*S9=4N8 z2qbz-%hdh=YQH4o{C|G<}H0oCQBNlJsX)%$@k;_681}g}8!K zKm{UBoduAGxZp`(kR?DLh~fadz1)+8ZR+^UFZ=~bqc@VNGwJH-Sq>;CaNBC&ynDy? zB_{{1WE2_RZ}OM+zzl0SIs)Gwkf)DVab+dO)9vZdhIp%;v!fgf5E0>5$HRlmhTom| zomt>$X)AdA{y7R@s0|dmn=sc5IPWzVBSc3gI`S0xpl6oEr(ZWbYhC_vY`$`2Y%E-% zM446NJ5&Z8!3sP5L*$^Pr@{fVr!|(uayJG}%rR{|9fgrmE5zJ&J8$!;V0CkB ze7xk%%PF&1KZfg~m@g~{MvjeK<>W1zQEwR6{6_)}OH%~n;o)J+k1Bn(h2OD+05N&D zkcId0@v*@JqS5{INA&*u1?SvX%p%b%H{caTvg2$Z1~f7`nZ|tiqG`ur{NLEG%@@V) z`-A#0P!Yck4KWJAiWA(1$MmxJd^jg;JWQXX2fw^!L^8~Hmi$7ZYSw1#l=a?$$TwLr zI9Oui8BBio&yFkjX);6tQ>x=E?7z2<=WuiGoOM9*bJ3VXpqmtLnHg*5CWS$yUI%~C`cKv??h!Y zs2#2`YDNHnQqZ=w&_6IW$RgyT{=_!Y|1ifqMuM$?w6eM)g&xx#9(a9wO#{SU$sr>z zKOhDMayva@PsxP_t|izFlZc3l;A5irh1%g0=Y9YMBT(9JEJHlqQzWjp)Is%kYR$`u z%~M?f)l81T>!UeZWx_RQK?Y@+P7)iXN_u628j;~MlD#%LR57mp?UC>)NW|dRC`MJy zp=h7Yux23cm=`T-&@*R&0db# zLIR#*Bwt6nb|;6xc|_|A%awk+XZ0MWPnYA10)m2h1aXmU=&?kRKaN$<5lYh$V#%O*A6;ddUwoUIB;xDX&aMu5cu0n}Wn`%TQf~`<17DHo8N1(qISOb6x$qQ9 z2ojsZ3abFtNOk4Zd<7^Z$0vA2Jv|&Kf&7F+k3O5yCJtC*OzQso-y!DRZtgef)4o3; zZi54<4BK;>5}c3wyD33F|DB8R4U@i8y!TfJA)PK~`5y1XQJJ|w;YV|}{r0UNSO0RH`}a(r;Nbhx zqR^;@4jPIvB0$mF%{^_y>rf4VjJ`n|_d#(1H>l!eQ@K(3r<^UVKkEX$plr;rb45wN z5V4N?_W#hJ`}`l@6?O3WtKxGo%sn6Sa2c;sW7t7hp4)`|_S?6H6~}3Nev8d#;WxUH!i+dG`C=ol=WzerJ@ak{K z>c3kzzECxx{;H#ivxu<%z~-TF54hznhTJHq}2vD9v;64QGS2az7`3vY+D^5;6!;hxwipS zyo<geeFU<`M zUpxt8V8qr}M&Ypp9^P3XuU1(Y;v#>zz8!b%jRD6smf;a`~&!%CT%Kv`!=56^WEMO)q z#A|We!2-dz%f&3c<#R{FrAf@#7DgEtU7OF3|2kJz*jkJ!|Kg) z%3DPCU)Bb*Cc)2bU^mSSw+u0>N%uLby`DmcNjt z7-7!0TgrwpD1TvKQ(J51T`Q2Z*U~k#FJiV}tAv3ZkN4v`#^qo7@2l~9$6ujOg zNGS79r(Atd7?PK=wq^=Ij9-qeXH(#abgxxrhafLPEmH zv&ayp+?UUf{eZFG--k{<37GVIP-N$1tK6QgmVY5vx*D&b zKcNm-fB_KmG|+yzxpq8Gh>Ncq1DJ99KeD45X-fg{llvi8yCq4~`KUD24GrjUhJ*l^ zUtE;MM_z(@<0q5zjKHmI+ts(y);}PCAWp8|jpCD0^ne9m>Pl9Dld0n!SrQ!uZaEn*27W0pUE39TONcWWEy+W) z0&%!PMThE(D6cSo58t)J*ofM(j-HDJt6AtbvDXnN9=Mh6z zGcd)L6pa+foM zmdvooX{#akUX11!{0(C%WhJJbrglRZE}T2DY+l|P84Dl!7!4{W?%qfK-Xamz8)I@x@`swi`T|Ic8JdhH)C)PuYx zy-w^8Ca)+Q3R777MI~Wtm*tYL+be>wi{aX077hBybJPd~IM1_bMlr5MO=U>4peej~ z=>B3&s-MF#6lG7tT8b~vgR&8NJ7MRk!itTGq@t>-ZLE))Gl?pVKie*H<);nYzVe@0 zT8f1uB>_6}n?7rImdAR$_pgYgyUvpB*zE83`N-6{vlAI8Fv&}1lsXnqSk0drbXG2PBoc_C#cv{CCLDmo1~8B)SPKx&a$My;QgHdSUC# zcngc>WpgJT4_HJy#j2cxqY1<%g$?-dIgZ4?50tpRzV5f+|7G7=> z5GG+PVCCWh*DN;|EuO%MsGN3UNeUQPIZopG2Gn=0|)X4_EXS(;F9QqA&~I??4Jh zN-sI^t&<6klQ zv8j=+42TLx1YAhU?uveX!f6Nk#M;0ny9LO9D)k?Yjr; zE+42V5F7PG6V&~wPoYHkU0`y2M9Ek5*YmDT(1(z%ejMYxWb+;y9OsUk)hq!gG7>BF zn864Imf<7<;RZu?AYg*bY^cb;fCR8C}zlPB`Do7Q>GmBk0>6kdyl?0A3F z(^W`qZZ+n(yt*Plzt=e|RZl^kw<1Xc#Lz^j2U}NQ}X49#oRDn-_S+3^+C;Y`@zZykJAeONK>K| z4WJ5}%MzWIg@Z$$8(*p8Nfr0WG4qH%v{R=wF^FPVuo@_^7au!dUn_iYV9@_U?* zX00U!v(t8wsN|-b z0APKORmb&mX9&JVhaMsXTHkT-uw2ESZGPYJ5eaT&W~3K3HWI*j_m-;4&Kt*XCiR=z zcr@1Dx-o0mr)y|{`o#oaIV~pq2+fq8zH5is_~QOuZ+akZQAGu^K#uq%3vXLzo0<>*`0yQ%KbL$8^m)sk@pKOaH*p~&*E_qfb&@ycA|*6BQ-xe1r>>cv)J}U z=eCFs@o@ZLiAQW(#o@HXj}yhnQc2`}JN>SYa~vRq5X?^)28JrLX;S{-n-=>nA)opQ zL!tmLm4Q}LQX)c0gl)D{u_~~&A{k=)(-02Y3fv^~J+O`FA;Go#*35U+RSNF~sowWL z-9g!I9|HY|s^9)cLg6z352RgOxUNwLW3S>A=*}Mk={p56!Uwmd6cy2mXIRi_(W7MG zktI_zD}q$#l?2~#JT59X$tUIL<~Cv;ZDd*{*NcYtD%CkG@v)JE)98ro!W|ckJjy;F zvsr9q_XwwAAb#-8>)Fy))KU5Q`031Pq_U>!n9?9rI9UjA=xNO1-sJJ&Kp}G+Mdzc} z#`Zx&F$>%y;&HoUD~^_a7Z(?29VfQJ4(_Ao;X#c66<|&&cfQQi@K$C2nSR}r<3TN$ zN-^ZmuGs8t_@@I1-Vp3&>yUQ5S^1WDkF>`yk#I)ga$Bj;4+6)A$J$6W zGxh;~`FO*{+5rZ(#0<*epn7V+3cQmUt<A-}@ClSg=EYg-g$8DBz08|y$L^00SLL#RiC}6i!#&Y&` z$3{bibx;Ya5EmC7#N2bnL~P2(%iD7+uWdt)olI6wPfslTBepbE_WV}mkW*(Ao46P= zYarUCIRjxB`{+fH+m{Q$=0kpQ2EHlj;msECn=O^p*kRcins_?6Vj)lvblOost)4)! zpy88g>i=*XKQ^{#Z8Y2&(i7pc;fK}X=a-evUzLJ1a{R!tQt=}Apz?>aoBdtfBSuS_g;X%u&o@<4yK}r%`d@KqYLzcShzBZDCa*e z-7k`E4v z&2=g19qocXKJ-8Ar|^tIAhkdTz!haOO(rd)L|!*HF03G_c@cH*#hs4E{yz{q9h zuH^&&U;##j-TFw=-T^`N#2g&z=k06LcJC`Haud6syRmKM=_KP{udqdZ-tp>~G1EXn zDy$zHS)PL>O@lPr%{YI5uvmBdO5C`@a)bF+JYT^JxBXCzC? z5nao4BKURKi;t+qu+}6q&woWnF!-fRP}8XMU)CwWb)wC+Fuk~>BrhanFnUa#+R4<- z74}*x-XlI2ju3(%HEbPXpS(*#%RnCb6@s2f7VJ9kwMB!890`Cf&#fTMD#e<_GyKR+ z#t=g*qtsH--fmRCc$Up;ecV^yd-|9H=TE<#_{mcIOcIZ%DBhZQ?kX(nC(W?Es_sXHsut;&Y-w8(JNYE1L}-N@69f&}d>u4r zheH*CLsKG;46C|IYNO-M;A~|5d3m~hUQZ93qxX|{!~pl@NEhv)xl7-BxHc#8z!i#a zTcF}LwzG$eKsM5evNdFkPo_q$=!d&B2YB|Qi~-?oHJAu)+%y+#wx0ixSH$KlO>Z|1 zD)*pROwY@kTB4QFHGEuYJndVu?UGjMSv&!z* zWR~;~aK>M=)a3#b^b&b#ckve>Q77q#QGqjgJfeeJVrY)wWBo9%GF`R-%td%;+c zq|ovhw6W}!M0uwe`_=w^c1eZ;IGhQ2%XhxW;q^7+Pl0e{so0`rt+?^aIMn?!$bY+| zUf$~C(7Z}?!c_5=5NcdOg81vn7Q?rZHc!S{JQ@mVwS)5$;#OY>J%X5GHzYq~KwPrx zuD2~U*vTshukA#NfugFy<>=l|QLV3nhASXNzgnEhAt5<~=@T|CDv}PFvFPc)bdH2c zo7!>b*?*E`NU_B%_v%J*-ezTUm+hBg@v}0RU-fni&s18{7#qmV8qT2>k*Y?8 zAm23b6>L6~r{7}wy$}WNb}4cGQ&llbWX16t+!%DLrOVAWSi@g#B`He=LQbKj>F1KN zFV0EJ_KDf8Do~|6Vp0b(pU}Z=Eh8({r<9eF$7VI*D6$;~m)0yOR51;b-)THpUH=Rv zFRlRQ^2cm-^8r~*Ny)km3YCp;WxaVOHl_-9*8y=;aj*x87;}kQX$Bc7p$07>k-MWl ziL2^+5mp*jEfTA4Q2plZQd-|5Ls~Ne4Izf@d;ZqIvoDz-%RgKKTIN1h8I#(Q8&DBo z5?lYaD@$Kd2lVG@)@^ZaF`9B9{wtcPW6`5pF0jj-j1 ze?dp*M~*q5>DT5SrWZ`u?uF?SCO-$G@gmUZL~lxP6;`SPtk``oN;B6(;3*qt?(dVI z_Z8?Y&2&^(z0^VbIo5CW{Aj;N5GM845qqC_`NIhMMo4C|kS0iE83+Y_ws@JYQWXm7 zYjSd(|3>Gr#|YnuU3FeOqk#I#vkv{YJH1^rr&JQY4|-*0Q01;j#Qg{po~lpz6`aBa1EA%2P)vrZcezN%Av zNXY3K^Qn3_rfQYQ?2mvR_qAcLc$3L4G7jCAG=11KA%jtQb#}#jbRd7atz6GQ?V}tG zBAT5LDjC*$p_+`xnRkW($Mzl@@cDA#R+t#qoUt6MDP4kgkSyq7(efa2;GIWGu~CK^ zts+JHCJN9a1CiOkvY-p)TR2drfMLG}i7nufqTf|m40Vv>@%(3PukY#aOalVI$14I; z(6{^6IyfR6+9XjRzz?MgHn2^l_)n_lk`f*ixaQrvxZHJY;d1};_;^$&(Vr5oISNq5 zSQti9?GQzP1gm0$Qos@B;urUfe>OHsal23*{^mw19P#Svb3|y+OX;%Ih~S2~A_v+9 z1QH{-Vr=p#BTS+raN+a&5Q^OgP{D03yx-|*1GW|nxqNGTZPSehS6+yrj@}y}Q)5t? zEuVW>7Gh4aECZ9Qs#RAa>Pw_a{XD-70K5pj`?*Nmb9K*yn`foNRCexC}n#2qn+y>8mStc?vXPX3~R;V2UEj{Ad>cy2B}hXdb(DA$hR`QY<7;T3uKK`9R@?Tz2zGrM3F?=9~Rp8qqpM)b0as%SiaZn4Z+**cGT!$fqQqCcb@D`lK&y875|Z`q5bU2|N8@3I8h)9eLUnnKo{_ z|CCawy&mIzvyk0;1{7Y}3-x87%6WOFaQBS_LW%oUI2KnY4D7SsBf+Qpo+v>id$o%* z0sU`t8PN7bURZ+N!7n^^0{=E3C&3*`oqBN*o18T)H~Ik>b>%B|Wy;g!IJ_rAP7?8p z#FucfBA|zMXe_~HwdSWbG=~B+3R#-|pHR?4yh~oA{SBSd%zQ$*-nV@|1-*TIPm%Sd z)+6zW8eEG}WeU48SSHejA=>kUODKbON0t30we$0%x~2(x20vrm2h4gfU(XzKT}`fj zUiCIWyJ+hT?!H7wI;qiKP*>~qRy(br4B4AdtHz2yyLkF`lgXHA8sz5InTBjYe9}Ow z#Q_xgWIol7D%(Qziofas8sGQ*kDp_VKT>445crmh1|H%4VI+#E{QC?e3(fdNV3jchmA+{<`!0&rBev=gjw!=DP4L^|%~s z6uWYz{9mgK7WslXWq4`GJ{P7()6tkUO3nTiZ<(k1NB02I5;N<6yKO2olxBa6$r%G@84Ef_B1px&>NVh9JkWf{f54atEbZt$HzocZNL|6 zBZ&KrIJ!l!E5; zlEOv56;Dg64oT8uZ5v#g?t)AICn#UmP;Ln`SA&w_+VHV@TZ*j+Cm=&kdv1Qkdpr#H zj?p-;_dzND1wKF{YNs_{j{Xx(N%aWfW)$C^ek;x42CGbLX{pt=-k{Yy!S%p#i6jLi z71qbx9^3i%UhAYpZ<)bv%q@xeuJDSTJrPk+u6ii?nsbA7*94Q*lv06p;&y9meJ)%v z&Rl|0aQ4WdfoOb>r+B(w>X5k^8(e3K%}xDo7RdR@)Yt9_vF9o5pdE{Y6Uz_6!X-ar zVCB=1h!mS9oh~=8oSSCFw1S&u@|21ru}FW7O|m)Q(sy?<&z~00I8-bm`->HFy4Ooj zV3XQ@8Zp=F3w?^@gQKM-fvVx(suPoykd?`Qsx=BhnL|G$or|f#@l4nj!z5zPi>yiF zyg&W?8;dUZ6QaP@28WHd^@+^+iT#jFZEfw>N7)pK zS0%lLJv+p;)aZl1qAPTr%`HS|whOa8{&}zMh9KSyep&$E@RoPS!Ku^nvypD5N7KwF zrf#5T4o;^CuMA3cX~**UW3@xQ9?-_TMJXX%hU!idU&f>hyLz$-T4vJgcei)U8ie8M zfhWKpQZM?>)Mkv67ennMQy7$p|Cd{1_b2wxYX~-p1G{bpiU$o?ipz$}^qAhH=v8~&@9J1OZgT#zn{VB?*cA;4ob*~eOF3htZ22qr zb8RQlUGUS}^pzGwG>zm(DAP;bE=RWwyPfIg7ar7lu$igJ<|BO%JbFt*f3hp3U!+N0dP$L_UdA=Vp}p{!ZY)4-iXMnfmTj_H zfA%IS2d?kBGYk(@&~EJ+2K-$2SMzQZ-uS!*fd3oF&8NlpEkP-52OuL;!$Le&pf_cV z9RqMu;N++M`;{f7OMmEsfjvAY`-g|b_Z;#3t`GdJYA&<>ez50G^1f!-(WZ&rK_tMR z)A@>R^SeMtH$&C$0Y*n6)JUq^{c8|*NI zWbm=jx@r~HlfTxu+Bw_rn1^^l4M?mQ0Sy6d$n^#aAkgV%NZ{gnN_xgOd26GCRnZlL zGwAt?#qnOe{Vxo;B6ccfN^Dhq4vCr1UW&JGk6~J5#GylmYCaW}`?Gbi2N_0sj7B`d zugeB$84;3nGO8t_l(Gj4?YmiCNsXiJ(g(I1TzYnyeKy3c4kjdwGGL`YB~gPESgVy3qVU5r&R|_pzT;Llx$=kp|V958am}yG7cJ+ z>d8im3{m0C7vf|QJn^wpdIb<}SQm^OOLnd-ML<8O+iz}PY$`1h!rE{=(R|vqRh%HH zLsFiGn)PF8>3&@Uh*j!t`;-S5$9I(V^OK=lB-Ur)m3@rJ zlCN^}t-pj?+GTjD{{>kY`&~GMD+I^{r0{-L%Uh4cH)PK^AWVP^l^q;3Nr7I0`S=G{ zemM#6ziw*QXJ79q-KMSdI#pZ2SB7&}NCT_zW*GMPnDVFZyci+u*gs;xAk`tjCq#2| zB8YNrS-)iC5Gxvy;n3ehzj7C$dh##djObL7V3Hqy#Ij?YTJ^h-q50*7l~YHNyi2jF zf6+;4@v4%1*=qF0_C|)fz&t*mQ?}JM=Sgum&)zikc)6j*_NJb~YH4V&s|KC*b`_Oe z4Su1vHWI0;vv(ixkD;&T>&W>>95?LAH_O0iRZu(=E5#Zm?eZm!I*sD!iYg@r2G((jK}6R}Y$HZV30P*+P#y6U4oR{D&m$@pKaR zTS)hTy<9bRPnxvDB=+|9+}301MJ^+1&TZs;HWOKgop_3$!avwhCS&>U#4$5DJI&JY zr$*DsQpAWzn&!(o9fq_!IDYXEm~a`)OZo9^r2!_}`idxxDr~^){N-x9&YFtvYO*G! zGi;d#;+f?k5*{$`H!D3xUbChq!bG`c2cU{qMRiyj2-PmQiu)k}d2=%^MjR~!K^s*x zi|))n9yUNyL}006u+1H>a)_W@n9^CeaHT{dK@WTcC!+OvPasH87|1MSeK-B)c&>)O zAoW>S5eMKzS2?wyT>hwDqGG?bkjDz;>me;<8c5?!6$)p-N#zy&tyNf!Fr^lO;4eo* zjnV%JxetfYn{TL^>`=`W4N13L1lK!%nIQF{Qdq=8B@5YbvM2(9T!)gcbVw`DR_H@S zrX${a<`m44qC+KsMi2|%?%BX8J*i@qed4DQ_c#Sg6=YlYX0qprAH5;m_`E|coka_| zr8KzCmsxvqN8HK^B8xWhKJOQqruc?#ELfYNF%EYnsJ`upyaNUW)Xv9Wg{f@aeGeYC zlOtHIBisxRgmQ(6Y!P|0vL=y}E0blDx+21avUW=AAQc@ChITWuH+A&iU$L2Y!h%o9 zHNwc%WWh8LS@o!Bdq;tZ)@}Ze0%{vV6F1u{_px^DkO6wV7e(Hmcs@|qJMKisK#I>n zDF-XgJC11CIbT1 z4GCe!>;tc{EM6(fgC7686?T-T0Pop*Pr9Ks1-%f1lOVnptB~;nP&J{CvNBHbY5WZ^%L#^lSRv? zx$*7;%EKeSSzo2d?HXO@o+h3gRG#c>eS%YQUa0)7%04(iP49}F`mK1!@D7{>G8)hE z3G>poKg{Xpw5}fKkGn46gJwXGU{=JRwUKH4W0OXUeoY;nh91`?T_GQp==K5-EhVkz z(nV}Ro&UpvjU**5*5sHazhfL91ws`Bl8x$d%{{uf_NC6rUir62rZ4H=pH}cjs-{Nm zdAO>_MS1uN1?a`V*!^#~kAq=2k>}HGfo=~eiBdOpMVhwJ zquY!&wUX5Ofg4ZXe6htr|N7NMn28t5vVk%Vp9pc^>fwDirTEF?kbEzDz=(UUj9SWX zy2sUQONB>WdEkCbvCmO>3b`F z%5?SeH|%K^`^apo2Fmnt>$gEcQn&q+k2!hu7Hsy8kWZI85%;TI7mwA$mi#&oZR$JB zxz!=^Y?!5A_F#jqLzD3^MBKMcSD9%zPB7D1``N%@(6R63et95%VM&QQbLZ7P-P%~g z>t`G`PjDh-D8bzyp33(7$q>8jZ_|a89sZjMcnmXh`Lg-ocY57qH~lL@@_r$wQ9}Tc z$0^F#9buk|F6ZEf9?X=Ytgc0x0D^&NgWr64!pI)O*pJ|gCf=YAcOP<_rGwGb#10|^ zP{lVe^~g0(zdza1-7c+0vdnq4|7O5friG}3-1J$y<_m18Z@;%W_(Vl<`*=ZHABn1` z-k~{&F^8MY9*MjOIBD^|zTSNj|B`$u=u~3$?HBLi@z@MbWp$6;0(=sO#(Wr)KwX>=9k5>)ed|r6IEfKZ3&H#ha`c79p*?cF^D09t_!LIZLWPc*Unvk zciLC-^CMK5k3Xi8*mHxKdnuMy8OVHPkk~4Cnz%ekeTY{ z<06urk^=)J@2U`rIDNg`Omtsm00|q%7pIZ}TETRiV}|uFbS@2Uwxw zXv%n?>0Z|p=fb)!qA)P{y9Z5O`#*HTqs7>4>9yh8p!>GNbZ*1+tal*h91Jbesh>+@ zpiGeJ0Mznr<2Qa8zCsu%L3>1@*Sv=pA1yoz`gD{8jp=QADN^*9K3o_ij58P=2EJFj zTDmtaSZ?#X`b?RZw-rGx71r>&ApX~ls0)lpA-&%9-uG^2uIpR+cn<6{XWu?@BNUIP z_w0iZF-l>yAh&iv7N*SAwhyRU7(Eq^srZ{JRVEzqW5Ozszlc($FY~P%j-`tS66h zN7`j;l2XPL@3fGDpt^b?#X~*>xua~lKhb}Mn?t|D39?Z=ADMsaynrHHg!9hyU(-Wj z+xUH%0yB9*{7My-mG!!o(+_9}d;tLgkS1~1(aR+F1RBrL0Hd}lSDoc`ttj{&4CY1B&?aJ+KA5Yp zeO}-sRY04(aA{d8j0@crAx7s-2Y=9R0IdnDi8?d#rRGoOZHf?zPa>{rmpLRo#`V06 zT&A+W>IdGXP#c!3y()+aiGKDA2R7JaswIOd^IbX$M;ctnXmg{~YOYjisT~*I_jgkK zKEr<1_agq)%ZSKBq}nE>8(4uDLsw6)@3c-@G%vyqib>1`XgROi)3U6mOeS>{9)JH< zpir_-`Iee`WW(|#eSLjUO3H}h3ZF#^R&w6W(s;}-WpP4aI1yO5)($& zUmiClsWQ8nrH>76H|8xi^}z|o@`UKJi_N^fA*UxxA#dQgDt4N7vg1wIFnfIq5=a#f<Ae5>5y@jGvn{y1g`xuI@&ro$a9j1neSn4qkc|0 z_|yP;6c9i|5-qHm={}0B38K$Z3f6x5LR3@+62dCNTT?@0Qb0#N+ZnIKBz_!nd(wdz z{!zL(VG!VnMD>UifrNyF8g_Q9X+(6`!rCWAa>ix#NJn+_Ts&REU4U`2vYQ`pL$~EH z8?fF_u{omQPg37L#6eK^G$CyARFOT6eUUhEE;c)x>S(oz$fTfd&GVy`(T7=|(A<{< zg-ZJ)G=;omPl<gT*CD!kJMDjAfB2=_q?^S5++voftrq14N1y{n_N~K90M5IrI z!3Ni}$_w6!BG1zB}n(M=}JfFeIqU51QfQ5}E4hG*>c^C)D zk}3#l`RVEP@2H*rQ+)Z-y5nrA;gzCd1O>8dQ9^F+t0+i)3n~NtkjA9=xKvwvAFrln z$Zg<$emR}aeQ0Ov@H4?0l*b#)Qf$euY*C;2j4HaB65#{_ZZf2$ws2q3;G2;Vl`mf! zH@YA0dGW!e>i$)7$;0PpumLEB3RdJ z=f7X^7~Rb2n|5&Ksq?_qUUWk@-Is<#HX#s(_m>B)o$u~jzpg>F@*hT1!W@r}oq3F! z_oD6Vy4Gh(M>7=j)OUZPRohV^jco$Ey4LoSttdZpQb!a$9f0nhdow^7EzY&}vaw`{ zr6Fu%b?Mg#Hr>*1uCR@IDAE`kO-3~3rC<(Q)QbT#omAC5--$78z0$Sq&x<`n7tRwW z+v_f(gLkt~XL-JXZdaJRGWwt^l$Od9Chih^xOc>9^lX%0(CN+U@9uyrlgE))Jj=G( zJDjpn^vWdYAs}=QkBXWaIl!Lea}vgEKLLDuac#YO_(Jy~5LLJQKz8cJhMVSA}r9tGgTQ^0%HAkOtb$_74 zb-$S}{Df7UJKhUd1N4T>u+`tEr-35&WhveL*{yxP@9$`_7#}0Zvg&1F16QhZ|)eWp=*tTmm>)EadU8PglDr@?O|HOBp7$Xp98U z5c=9FCXN@d2HUTy_>r-sWub}mA+~_ zwU`#82K<-kADHOgVw2b8-==`;SFw`5{b^o-yKSp}pNoroh1Ws5iaDihh9N-{-#xfV z;@#r3{kmnC!q3LJY7(qCUY~ex_fx3*ZA}IZcs)$!xwIH*T2c3_gF_oN5ga}HQ$j5QjJ_QyGZuaDgxPPCT3fbm( zZ8k$`v(`_MKS&)E5dRHPj~V2DcIBm`a@gs&dqsD4d%xYk#zzvgo9Bf-6u;KlDJhw+ zq!caRn*}H`u*py4*llxcyWhL)cZRy zPU^jfNg$z+X*k}+S-rz2VaHsFSdxjc`(R7PXj?dXSC_@uaWp>+zs_VBvr*8AyuO=Y~Q zvr-V6ym!oIhAX@;vp0*Y)YH?`2>jc)*wyg+j~-a6`NB`=>gw+@BP7&&=b+)dJ~0SZ z^}0sZ(UFEf3m>>w*pY+Z5)UJOltRyvH^pa!;A`C>_rN*vCSW2GIF>iJzTlvnzA!IA zxZug{jnK(FQXEw9>Dv`B5z#iEuDnl_`aPs3CnvXCK3!>NrYbz!mg0(SB{hC;2^qO)0cY zpI<+$nolCAU1twwD(al28J{SM<_$0Wkj5z#1UZ_~UBaLc2qBGV6qjKm2-I7|YvO-G zDbHvQhr`7$Qwr{P)v6{XStPeXU=c$PBvO99(Zl{?c08vQvhL5C_9jIMHp%x+n+g}x zn0mI(c~1oSDQvU(E$HAwj)^wth7#eI!DZ@d>!d%|$RYU|TA?u6A3`e%1MVwX6BcX5;{@45ITKJ$Un?-h9s9VeaiOKiY%d zkJTuZb#W_F$LVs!OGOq>kFGC#)>>O2V=ic3T=%fnk$;089fHoCrR-;+k<0`q552OnA1ptbS0XEo1HI8O2E@L$o~_e&fm!DfD5&1!`pNwn+6UU$N@DquXB&= zPYm?=4nGQA1vCaG3Jje0nmWeDovpo21sPvE1`A43E#Sg2s?0gg%bEXnglUhDUjWcX z5}$~G>%TZg?tf41)gDk?G{A=G9qOQl9t`+^V%8Xm*l#NGE+n$B7|vIZe;Wz{?~a95 z??fjr^2y5UdTUJYsb1HJfOsaJ^b6d?^e_*I>;8}v%wcG%P_XL zCvE5_Ry+miU3ZaWPrb^t`e9avQ?OcqofVqya@4Gy9eNc{o{ZK5Rqd1Kq*dgkl@pOj z)sB&NcA$|O$jfrT zLY4JwyX^%0{s{T`83*^ZxLDU5oUBrp>T@m)UQArS8gB8@Ii*>z&FD4BsS%U=YXl^ZKb% z)ZYFq#|yG)$P)J^MKq00=44~3>GWKPW5^6)i*V*FofwSIscctqA(w;8DmC>8etsz} zYA7z!op*;tqOy&SXMr?pw-CP63+6x`nv z_hbt-cjTd_pztnETYUzez-Jw8R@FFc($5M^o-*lHEDYapx)mVj#Ii=toey*FmnRE4 z`xp9apA-E_M>FcA1#=XHVOXVq=Cv&#XoIc*S^(kzh&Me`b0gwQHAn ziuVB%rSG@GmjqwKZI%N$eFe!C8m_wL4#Vgnnq;NidFuLLVOLOWan$VWtgN}gR3F>> zGPV!=Feh#H=TC6}td#!GBmKyj{+sz;Yk01_3uA^Ek2OE# z91y~CYY#=c{Ci|`&x>A|YsajBvFW2M>_Y!M`Se`rdCL168-p{=c!swIdgdXHQWK>I zpV2Ey^%4zd=!b{E;>vd|*=9JweQ-6l zBqgOXJA-Z!G-2r|i~*)T-lMO*m)H8=-h^ZuM}H={`FAJ1j>7<(ynr!;BS4exuqNl# zmF&)ye5$6!cp&%5ArQ|lPZuKr|MKgXfs1&M{1eC0WvbQ$Tev~0okf$z;8o`_Cr6Nx z+f4H*1!>I>mNyr5$8=CYiIoV=7*-1giFg?>0t*r;orDw;+_@MmLEl+R-I!qH#!gL2 z0~8UlAbCAK1qH1UJ!XSBvhmSW?W9d_Ai))-#$>4uP{+&rN6RlgvuPkq*j2W&D(wt7 zoNZNQekLf;RM_Coj5HqH+hauc5AgA6mOMEDxCXv z+o;-dkLb zS}{SEPp0tUC{I&gUmuFUjTOZ>`hg6yu_Y4`cb=-TlkTWI$X%0N-s!58OT_!`Sa3=0- z3bq_0Q?iqEvM1fKZ`0}BNA@0G^zL5tY$HP`Ff>()D%k-tmt4t|9F4)B#mOq5l~4Fg zCMGkx2$o@Z{5-t-d;FaN(^*%8>t>hpVyggy$`5J%xpoi0C;t7(Qrme`laMfhbBJ0= zp>ZJMVop)EY*+{-S9L2qzxFk6d(AntP)(dT_)276Mp&Kd=(Or~**P#^Hm9!3lNMpi z816zC3FgkA4rK+!$><4~=vii__L^$pm=FUZfa_S#PpPMu$9rdoJxv>rs;H1Y{9=bm zy`Td7LX_Yi!Sp!`KeUMWKc`gGBU6F04gxt;nkx7p5FgUVx)AKhq%JD_?{KoA=a?iJ zquW0S`bybV`UVINGaP+wHVHJuFZb}~R$VqHC2y}M>;8JTZwlWumnip`ePG&f#fG?o zU0$e2oXhtjs3NF?S-M0B`doBWmVMq2hxillF@&#vaqSzEx?k@hBEbKnj~5y|P-YF( z2cQP)Nf|l0XGTs!_{NGrtPTp|0Td&Q@`b3&gMvN1O+$;rSTdbw^QslLdNR{kCLb7p zf1elyUt`(Y9jNVJc^E4O1<`prtcGZ^riM-AcNtp{QLtIe`n+o@ik%E2hKV-Q*{}M8 z1wugThK=Z`VtN>%xvdLmT@wOW{B@T1xp@>FeMSVE}K(Hmp$RBdnZeA#ahX@+C#-lKG!Zgu9A`9Bk4Q0QKhPt8cM zsCpYW+G4uQJ2s=mCa0cGiMD#PDGTI8ZXVA^#CKgxxiIkj%yPUf6aF+j1(*h|rxG7G zZKU!R1+ad9tU=n4CH4qn8+ta_W%~oYn~sL0>#Ro5?^Cbx>HYl|*2uMp$))gE?oOzh zn%dgMuTNhoBhZZJ0GRWAZZURhYD%_pzdm#n8n$>m@T2tA)c1Lao}T+*@_Yk4rkhi_ zpA9XWI26hL-s5nVfrRi`fhI3)d!I|wJyo{;1`r!o-gXh1;g@rnqLokUDN!{32+|&A zYIIxx5m0_rl1v7dnk_fubT5B+S~um;LY{(GzfhN zFK)&_jQwExBSuqa`7# z2BoE??HwQYKLp(3+PlE;nnUT$9`3FyoNcAq(?Y-AEH_IBQWnN;bTryyYIT3Hnu2sU&mWf$x04l+T?puC6FU;@xh-`L-25RU7}$)wQYL-?Y=a zOZ~2;zzd4b=7$Qjgz&zomnGs1^2Mp5sw&69+dH}g9~}faC?m{$@~b@>Vgv^=r6EsD z{Qhn?-1_?208ww}GZ{|{Mqn4+K2j8$8}ale2`6}9;N{TgIKZEmkWam4QMb331Cj(F zOZ<(#l|Mi|@@zr~^RD^}jNrxN2-av`OLzRA{4uZD*0#q=6Lg~YItGld;Xpp^nt9rAOVlN9RmER01*@sTGvvg4ky;tdu{P1dBp8j ze(T)(KUx9A5hgc#w={z98EWHfDjk$T@lJ0>R=yoKEp|Rl${n|`w1lRm>DlH9ay2=m zaxoPCj4F%kIlM66ITBHFS_%fBS&h#|y<$et`7BRYpe~5cY8?OK_TDV+?LZM4D8k&O zQa8q?<#`5E#v&KsTgPL=`^JG|ZByXR{j0o5F5N0zjsbe@e^A2E$D43t5bKv?Xi#`4 z+S=B(es#P4;bZ6!hsPUIE9ZHUrZIYYkai^#T#ZM(E^1drq-B0ot64R@0g{l=d+b(H z+lf}p6q=1lNOLV-y}Sj;ftH?LyqOF9Z0{M7@!b?ht+;3~(OgfGOJ+%Gt4x$(l9j$V zZ4*1O1W25@)JY`AgKuCdoR|VJHg$i}rcZ)C_~p`b%(NM#UjFp{{(dv2kLXo6sp`j) z=gP^NhK8~Cx0hrV{Z37Oszn?z7z@3D(hJ0eG;kI7nWQq2&I8Nbs|I}8xO#sY9hg%h zHd$KQnorTZeFXni{lXqF0RS}{z6iVLX#yoq1z?Uo_LZK|Y zy`ka66{r{`CiJdVBI2B4IWEn8=vreYHx$f8iBV}uQvYV`QoN0|(Z(~bAV}?Cb59p^n{kU z8-tWqx)q1!=}NoZbX-zWQWd6*w6QUbI4zMyJ@lpG%Qd$a030PkGVQWk(y$ZEPcYps zPS4IBzB_)Dx2QdMf+Hj0yI4q zg5>eo{Tqfnfra=Ud5)`y>^C@GirGsfO4j(S>r$X(^ zDl9E%AAKIONlw2S zSF&$g%R*G&8Qk0Pzx-N){wCe(&)>`6KX(+d*342xlZc?a-AO9Uujb+#%lD%|PrxAt z&W46<4Y$jAz&HbHKA`G_>8FAJbfDX73FdIwzgPs{VRj!~@RTUzvl+13<_NzwqN3&O z{|ehHEv?(E-gWCdZ|~~9F^=H`ghnZu)cM^zLRzx!V%Flu+64XqI4BNOW|wUs410Zn z7Q_PT+r6O7E}K$imiypd%)8aBkFi$xlk|CH7+gq5v2}HMYRdhLUbcw%;NXBBA{*ka z@rNCLS)n!6F^aK@_hC_*y;hAoW7*ux><#z@g%mTrLO#m1xREJTm+Fj%TFcTQ*SnFG zD!!K&9|JvP1&_Pc_D=`LD*SVc(J+3E?re$xUB}B8OzfllgELE}kTrn%?xR3rqp$_)^^21orWs{kdlE3k$59($9VQ1$+16564 zpCSIkG&U&!&Y&m=BDBf(Ar}=DC6>Ty*p=5RDlUY~oLhL@xl(?**j1el=Nvur?Lc%| z&6gR!9;>u!Nh1p|_!G`}!P=z40byt%3oYh@ghJa7vh52hoo%~QIqO<)j@)nbb2|^b z%Iv5P=Q`sD>HJ6mWtl|@rjV^uMJld)i)WB8W^X5qa%je(oqNL~$VwW8+gwijKJLsX z3{IkNev>cCgAFodshX{>Ec4>i7+>t%Z*Kri35MA_(4}w3zcCx<8@Ygh`@>3I+@OE= z&gWw~8bytbeUlPZGm+uLJar1CA$wRR((9jV}j>%P48`D&N3;_woo1Csj(d zXKpV~hU?&BV7-|cP4`3hj&idHt!WIHJw;#XVE;v zLRL=)<0xs?FwwS!>tHOqAPy6|ibBRkk<1UWBXwmc=-z2xV@=Kz+=Ng*DzU>{qQ|w> zK>s-&pg6)^2-bNx=~WU|J-IpW%Dc^A$^X}tAw(WNYWhWe{jL zf`;Wb@qV`;z+z1R$$8N?9)%hQmSPpN0(?Z4^m(ol+c>oQ90tszeEjg#L{R*A zMk%g(Le`seq!LJ?z^B(01{v&OP+k-E+qlONA9eHk7*||bNqO##zu+)C(C_)4V{(YI ziRoh+t^%7C`lRA6(nBHu;O6(cR&>{UWv%>pS&wQU2Q5zWrzYMH3z)!wJLQ)8z zOBZKVrYm(;FBVFs1TvYFaq1?$DoRVO?)B!3Znvy5f{=2?0UhE~6c1&fMpnT6lEmve zylJXE?|ulVfeq$WWKi=>e;nI(tIch)9UiZgzYFPT^XeFOT~ZD>#O>HdV z3_7p0cwE%6S%rV-OXOC`0v05}y=ND8@%8jx_a9JG?LDCzAQZaF4b5R3ZSXo;xxJI) zX%_%i4rHh)P$P}&sHmv!>J&{)D2`XW_I8H-XK#Ihj)Y+V`Z-JW)nj+JR}&$-&D=kZ zHe>bOvtcKIaII+C{;66ddM}y9O#6D@<2Y|@H_w*`mt8K7&yqjuAZaS8?wBfVPE(_% zWJLM$T%1BA>sV7y4>vMQ=!6bpNis@Vc)0YieD+?Pu%X$-pJ`lLXT-5tJMJ1j!9X7TW-&$W zNi-l?(@ag>K}*C!D`p zqzc#p8bOSkU{Zg-cE(lKRat^+Rawi#Nn(GN7Wnv(^5koADq~hu-2o-+`bWi%(H0Th z`*}$4-h%4a)sB>ctqk3Q&miiEp7(M+c%Cq-Ym&bL9s)BnQ5g8)2WJpu7i)}M%5sEw zGak_;L7*LdU)?(=#~KiW%NfW9C6hQ>Z~qy4feq(BkQW(N<#~natY_>|KJHkR!k>+k z_)SK~a{83CO+ibA_A!N-S%r-x+FNn5`#XiN_L7ggjfd`jYWFa>keR8B=1=o-isX>G zNHAMzRJa_T7Y*#@U22t42huu)qcoFP1U;JN`004FGlm>(^_icSdYP>*Y3VyNm%WIS4}ml73oodvmPw*VnEeR}85QZvb@p3T zPQ{8@)qc@8?4_a!V>`8W`UOpL1!V8Wkhw1gNMc7S&4w#7y5M3&$Bo^Qv`WxwtXiT~ zqhf3i709dzR$AGddC73Y3o8`$+E6(0R2yWf&N89sqjBXzn4#K~GjhlFS zj2p}@|72s;1q0vMjYgX!T`tX^rG(x7L$rK4Ei=xOHHI-hAN$i0?1pdn3$+Un(kcuLyp)`T3>s(r&tn$&55sCT4!@Pwi#{ zxiF{HQc@A*(}V?WFUlXUbS5^baV3KKdsbgyGYFR}Eda{Z+xVkYR6+5>g#7e92OLCD7d>6s+?Shvm08 zHagZabkn4tX%DX)SwI=o(OGt&U_z`ubPGC8olLV>^G?{rkPUA4o~Uad3{LtI;()ZA zjEjhg%;mmPCeZ4vL$i(pI++iq782{JvM)q`)8yn_+#uNXo`o4&3+mn#6@PyBXz4;Y z=<3q4tep7mZ#jRKuB_E}we(j%5YlhTptO{fPFGW_0<&{n0sJdBj^%9Qv63bu84(q_ z*Cl2ctubM%TtgDg)QRG_3%K0TAn#FosI z2hZ`~-wUWw&>*+V{sm1OeCXl*gYd(fS*5?HStI!YpP5@-eXK!>O62Tb&+9hrdheft z7L}%T?YzCW(jBoQoGs<&cR#=e8(*LQ|0CjAWy63FYn&Y6Eu*3WS9V>G#mT;;bb;e! zFE=r7vHO}LmDKFh6mf3?R^)VQ&(?=G7y87Wi$DzH{IyDD$l8Xu_HSDd6l`Hot^8}M9@PtA!Q`4Vl-{#tpO}C zk{>`-C~Xm8ao^E=XzhNsL<3cLSoagn>EN954wE`B6?AZl44rVWp59-W@Xy=*<7WqI z7uH_0ZSwg;qVFerWQMKryTTTqM_JgS7JZ8Mz?h#xa3cth}0WG7=mc zcQR~o#X@VHeU&=*s=jr9)7ygMKOtyurgfdn%+`8q0?zBc0F7y`@h)S}7qldnGZh#= z3av*s;@)KPQb$1?Oh*jNE=;tsHS;3Gw<;d51~=Z12PW&PRbYi_Fs|Vczp|<@^{r zb9ABmVI`!h_pI(MykzCMoAk?)H5~f$7V(2-hv2y%0U@ZEzv7bxB$ssx3GloPgj z0$ej>=o#QyliA{|ZWpFfy^E1wMLlc3yjFZ7^T$wOPXUX}Y0?gDupVc>^?4ioA`9QC z?N|`$<)z_q%TioI>2Xy4=$bJv8dR#W=9B+S#6@icmkhgv68z2r*`*jO;eP1YMBupC zc&v2wH8P6mF?%XS$!pnTt{zQ%SU%yb=^n=BP9QSoae3h|m_XxeIA`}v`Rz1m-!s=Z zhDRz)dD4iUo^{QyPXcyAuun|80&YD+m)i1=bWhZ1j(7`bPMTBIN7jU=Ky+NhAIItg zHb-D|Cr10Updt53iBqHIe_u{iny-$$M0bVsgmEUH$Twi!U`5J7PJGsMTemRGND;3wV4;S_w`k8omB&V~xm2SGv!m3`#W9Bj zIkWK2tJ4?4aQTzAD_YN~(lF|)ikpin}4i z=9gf}*8HbDj;5xdf?t=4RM72Uo;>uCJh62UT{K4s-*|g!RdoUn<`iM7?P4s{PoVvN zzEi}ZV8NtF2HkcEzlM%}aP)(O>AR~M~qP;hFCC*EN> zonSFN>QD-{VEld@oZ++$l3@Ojh-v0VTA;?{`KrH)W>4E?6z$;C@hD9OA;w{#I7pHz z)|Fb&3GQ{e@bn2r$j50roph@w(qu6rUtph5j;8Ef&B?2ta7*mT10pe&E*5$XjP6qV zm4-eeMU~5+vy`)}JHPWplOWvN)?)ukbM9~4=!t>q=oT;6k;ZYC^QnkSO-Fz9%@aXz zzmXyP%CV6>O-9V2o1xt*UF~Wj^;(}q;SwGZVYz&oo7eu5(apPG#dAMt%}v$WI0nr< zpI7Kce|9bf2N$wS^57ESuL{rdJexv2D86W-J6TGqH5YEZKDS-;6W;|c z>3I|){S31Z7f=8$jAHcFeS_3-wnloHyIBF3Sp9NW9oA6MI~!9|)gVw&Q?0}R@#JFu Uti`WX1NH_fE2zuY%9@4#4{Rky!T&Cw2p&^uk@*RtVxvbtYE`k z#pj>24|!{SR{an2e{*y1eb&?YjK$-D>E+ezz}+mjw_IEA2yVxz2+l9M$E&&< z=~?nDC{#AvkHKo;X{T%!@Vm)D7&-w>unOj zZq&2rYy;%G&&upbkF;fJ0RMy}pBAcemc><8zdZ44dRkJK=L=8Gz<4U*!PCbZrg9CI z;S~STF=_MzWb~kgbN^T4$V@>*62xt`)tfqF51TJY1~1{llMkzn$a)py=hLkaIV*GY z1d>nv-;B5&xgAC8Kp-t-G$_g&OU!W^XF^Z(JF&A5b$I3Mu!%6^Ve*qMcyNs7mgOHwA-Vk3Ibv6p#`&+Jn5gN zI5;_bE0UPV$c6VOQ^(-HIJB8ePKXm6Q1XzU2`u#vF%%EV2(~MO47C7{>!~z{q{HJt$igr61?lV9A_1=Jc?N=I3{Fzwd;NXxD zN|Bn(#|5QOze>-^*4&@DQ)M~T%o-1Aa#-7 zN!uKko|q))w|3_WpLArw9lC-RDm8Znl<6ysBXE!lfv>(Bi-iIrzJ7SK+~CHlWw+Xo z!@oJqYTuC&aJNI^d6x&V11}ue#Bc_@eq=fOOv`i}HLZdLy#*h=7*|t%6Xxmn!|RG% z>OOIIH}Ls%@0-hkU9n&tDjBGR57K{^a?XYi}?*Eb`9B{g5jMHBNHPZ zx#=_Mt3Y z;P)Whc6?oH;kw2LC@n4hkRm@1cgyrol4+DHnkinfoVMh#*Vh+xLFoac7Ay2#USks4bWwpmz@h0Qn3_fkPV zTb|;z9s6%v>?sFs{SZI&3Ykh<%0zdzLP6HWxk|sVh;m5a3J;ruo4fC5A!Ob4vhwcF zQjdJ&N|!oN4Dcw-)+p*7_$S*HKpcb;v z+jX=+(6;ZKF*}Z3&|HSmwChR!ld?w_yDkE#&suo4Gdvg@6L-A*CH`qzbpbD8I4zRa zC@m$39e5F#hH|R5u%=2`5B>%^=3thge`ERwxJR~)1%1I1!72_4r~un6)>8fEt=$+n zIQXz&oxgL8-XTpGj!aBU~QqJPi*ccNZFHE$%J7C@H zoD{Kc6yrs5HU#wtb@w^x+xuUCvRx69XUl^ne1Qy&U-5+b2HA@J0NbI|;#BedB*{S$ zqHjC)B@G`}RGCY(0d-*NBhDZ7VCsnlLsWs!!D9!G-O~UF!QIxvsxE=ke|NN~-|BQ( zX)q8Tt2Hw>CoPmC1FFzup%8UXF3aG(*8Xqt}NrkQ0ZK93q(+GJp}gD-E2n@41Peh(G=51rs%J=My{gr@r| zU=#Tf((G>W0tJZQ2H{z(4j3-uUZbY8mNaE|E*ittPj489D24X=SzS%giy!G+i!Vnww@xPJ8 z3`6GT=DvdjEF#ZVyn!#(mZ?>oW$JqT7Qj^zJ4c0okx6Hs_{x%kPf%rd?Nz6lk&{zm zP&vp{L>_1r~uHxK5uUSN?VZK^R`CQ_@sy1M!~24kKWufk6_etd)E+XIG- zT#C5&ocnJ+rnV+dn3Iu{3o|(qU8pfTw^PK*gk%}sTh~Cmxib_~>+8>z7nF5-NG$n^ z0O6dtai%)EHFAcn(%|X=9R+;UJBUi-AyK%b#l28Z^LUh$P*OoHtdIy}ZX0<8O z&*xUHLSxvx5k_%Akbn4~QMsVGC}+}0BrJfZ2RtTReSL#WY)3rMB6q$+P+Huj85%u6 zjU^?NqYSwj>~dh^52@vWB4S!+_>b_F7C#J0e8+7l62(wKYb(jFz~#Db)GG92nmkWd z&Z9Nwx3%bW3`?5roLFjfgC@5p+CvBR0fm*#o6F$s4tuq4H_rRw`nZA7K!aVGLd5~> zuSkqRx&RqIgMm>{rGVEC&=wDeh=|CnamA}NJ3O%fg1YVw`DQbtomkX2OVhp>&M9yy zFH#r=V5{NhtIkOTW3`~cbXoMxD9_#(hIXSsol==Qn)Lu!1o?O${>r#TgKvtC255A# zcA_KT9c(s>RlS_y_3C9m1wNOq*zP=t#qDkjOcoY5nmLML_oWIc*MLB36>m@mki5OU zKe!Uhmd%lJh8oM_hig=VMoY*TnV2$ia|>q5J%Xpdkzew8)%Ul=&6yMK1dQxQ&D!!M z3blZb@*-u?1ZGp)ZYc|s*GYJw`p{0$b>Df2K!rwTO%3wB6w=hCC7&NRKYv#4r!>wu zX^(o@W}PC<%H}}%bV^htN&Jtqmd6tGP#v2Q^G0kO9L_F8=rAFey3~P@^qQx57fsIZ z(Ldat!nS)u5XkgU5iw;(( zGkyD5P*&e~EX)3N=GgCGT4$c+&^6Ph)`v_QzBq7x#fdxH&GKvwAd7Dm`VNN%{6OrGDEJ;a2=T7v}H%u2kbF1y_+h zRJV6*XS=tvBfeH@BE0^;iCO`8?~x zmK@k>+=uRdvL4A9j<67gW5RY&nNn}YZ7$`|_q78)d2R;tvF~qJR~DNUuG~mgHt(&| z(<6}C$ZJ=Dd|5WUVxWOb5kC7>V14V4p@1`#!J(mW{Chm)vOtF(e1Lx$7&7Lj@3OSf zd4G@hM626k|Cu*xt_AN6J+)9=-%+omx3|wqrw98NTq-e#pP-cg!in93yGF{$h+MGd z_`M>4J)vU8oh?PV9+4;;omONXussue7+G+2oTRbmkV8cn(nF0>}A8(7-f z8lSf1Nf$5n$T2skPTrp$PvEs?sztc%2K@oz4LEjV-_<{TCTp=>A!LY}n#gf8FO1-5 z@E2{iPN}bV3BUz0B#m$g2_fjl4Dp8{m0uFBHsn!ekYP#Kqi6$%VJ@VmulnXbSG~Rc zAsiG92{#@d*&TAC=nJppOOP+yNpEBOh-UL?zyxp2!(fbV>w(R`(JL#W3+GM+F^7%C zRfJFyd`|r6gxyd2!CZp8VW$r;9y-;S0))XvMn<}%nt;B0dZybl_L;_uE32sBWhj~> zd14LPk_2zD&A8`o1UC)z!a%MU?a7$-pT|};nwnG3)yv8ktgFaZBs}U#Z^wj#lyaHw z^_snT`}*L^Jr1=@w5PPA8e~0$09a5bXknwlEm>>bmm2}S_4W0h+Yc0Sp=ToVjn;dy zxHvfV9$R9A$~m z*7<%sjlZ!mFq~xw_=~(7S4e8A&Cm5Kf$qn7)&wQ+P=O>_*RLK>3tFJ8fj8`~+K|0} zU#eNj$;nA@t^X|(Df*mvv}9ILg+~j75Uv$p7KQ(_mqyCr;o*lPh6Wy}T?^MC-zVNS zyzK`iMnDrp}-<(XOF+TyPHDH zIaH=`GBHy`LSF zemhrKo`t-kXYa4Ka@5t&=2%6DQ778ToiSk@`7!R%OcH z+t$y{IGaLyzIdOSs82Cp5KQV58O|ECZkYDn^x5%4ObW{p7Km86JIYVRgsSM&Y2zO0p?!f zwL^Kc|NBcp>mGu}7e3-B5W zU(St3KBt0& zI#Ddf$7FNLbW$|or!USh+zHgG!26~XM2SFOKdF)xrBc@ z0}+@Q@^DKOPD6WvUk8)AcV_;B5ugBsAZR1+Wqs>nn!jhH!ws(8Xg;xz=4Gr^jJ7R; zsjxLlc)pjuKVcqHQNc_x^bOm9@b3XfyTbBTTw`>nY*W)z*N9-91N-i-X~eL=8HvQP z)QU5+$&3q>Dq*%9dK9^X{7IeC?RBfHeqVc!#m#?tW#>T+-&B69neyWIK%Z64bD z4pN97nCuxZdbo!uA%iL4k?#56R(wPY^7#GYUIe~aO_w#{zNesnVFxj640UPN{^YTG zILQUXMkI+AH-C+-ow+7)Iiriun{HZhCK*0L6XQTU*2E3B?G|1;=R=k`S&Oa^z z5BwKr9zA`atQvFA4TR3T&qPiWk+CCPTW*~s>u2!uS*FRltyS!Ql#}y_@{aVPV5Dbe z(x)i9TrVu)htmwjQR++C)a8%2^u`q1=d{*iS+K26&sxqir^qAHV{Sn~N$#l8iOAs> z>8AO<0)^fzg&bEH$_tL?FVagIQ1?s!`L0bIm9TkYGgS_K#uHZ}+kFZ5&jjFl;zJfG zxeYnH*i$o!nuSmKTL~b`U^*2bKsnh~OV9=lCOeiw^2BpiNqdn->nwc60@~Pn@b5W& zU|%LyA{s=2@tz+e%Lalu|8Sh4p1BofA4DqX&p1!oS`to}1z-7M= zRA^vMT_Q??X-&B||EiivO^5fL5gDug{4A72O3U?PMJl|r29fg~uY0^aVb|&orS)7f zK%S;s(=&1howBh~n{I%?)UVD&;_cQv9JikE>JTX$vqEKs2&@QS?qqlPw!_*o*@hQsYx}Y z(ARZ{%GJu#;Dgt3jsDg3HPhz4TcAUXmo;L>D+pw`rlWh@FB4a4^b(_HHMSJyk;b-F zo5F!s?FvkF{oP;U?ywVCdt5(1#v zrJ~i%lFQ0?fNY6KFg294Pk8g19dOt4Jf-r*Z?LiIFq`A?Xd=sNY;CLeQ*C?7Ch2lp z?(tm7#f#c7%zw>gBlYMxBhL>X{~2x}-nduXS`yg2*nnV4jLj=^`<_cSbd06^cWxmu z!$-4!*BwgKHw`Uj4^u<8p2LMn-@V(3f8M_JIvNs3PaRt6{0L~}_MOOVUiXLPtT+1b z_rVuiNpX#Un&TQrRN^8V+C98^qM0JDiA7g&9#2?*%q{L~U-r2v&(}(h$leV|pP0sPNuj4EO=wPPYz}bo9X#FA`ME16x~QW!wJVAzHvHE%vgi5qg>sHj|M-Rr z$=%2(P}gH)(C>C@>W@uJ|1U{O@d;koul>ATu>k@SDJSf?&yi>m&&0S}_jJ97b( zFOQu)eL6lPpqmDy_4f=HBJl+U#`Zo>@b=3SA5w!>T!O>lQ4ZQL>+bWhDWw&D4;a=< zpG)>)R|2Zpkdr5@Ga%gbOZ-K1t$&Gh^NQ#3$Zt1z+ip!~`|f0?wlGg93#y%;4&Bu_ z$fl>oBYcAuGi<6Yj(Lr=?E|8iba?7@=0_p!o_*^3P_RgURZKt+h1|3()jvQUmR+yS zDTb`j*mkzeGnHOQa* z$1eG4NZa@2V}cdQ9q77WTAdy!Jsfvg?M)CINU4~3k949@wBqY{3fzU++Jjow za{T3inJr2tiExB7-a)5ckP(KryJB(E6j!TVAN=s%lgMM!j~}snKTWTRy3r+8ERs_# z3zKzyxnNb-Ke?KtZV^36PF~s)hxR;%;W_Q}JK_G_isuZcesutc@4B`21o@nFr&aPB zhU|7Md(wKZUA9T$ce!k7?~^>OXYK?l9&^&V$c1)v*KlAT9v$u2oq94Y8F)}`c^%N? zt~CD0XjvltMm{S(-6I05?V!; zT`S=-_nyPs^lCE`|BD-go&N8y#^Qd(jni`2wO+RuH`Q}V{MlOGoq&JQ$bT~8@42?? zdJHG$80=mB$))!eDbW$hc_I9uIs)R9G9_@NpBy+`_!+u zirQ|3)CARYL|Pow(*g{IQoPMa#7xMOAWzi}s(+aqOf7hB)^Yy^d(&ehrcjpklAGJS zHa{Wjw=+DK742OMZ=cF*pJ6e4IMPB?lh*H|vWCsLEWjAe?n~zlFP;AO`%0N?Z7Cy3 zMC2|D{QF#or`gq0KBbpWPbjV)9(nvwixeYMil~9y%S=t=%OfY6x}0rv{`aI=50q1ZT>u04YOA$ zB5R(5Zrr98Cf3d;I3DYfq;qNm*`@EBZ~jRWx%6bf4IePs)gApR=lfO*lHn8r$Cs`m ztB0q%dgubF{ik}8Hi&deaqU+d{1Do_Xum1WcUymwB3*mJd?O$uA(dD4I?s`U+lO&r z_C(u_!}oRR8pnFe>HPZ81I7=Bk8dysdGjUJU22}{BLsJYnT~A&=xy}bQqD;B_2GY{ zclWo3Z)&{l>dS`I-xMKPJ?6E=al1(#=phT$)=g)q8BH-zwp5qkA#VRE_7OUrLl^R7 zUt)ErO#ZI;a%0-=c6*=-(=yq0T0)_65tgtX8mqCUs+NU^AO^a z5Xmj7Mc!tUOU3$>IoIucJG`25*j`$a&dGD+*2BsWA0hkX%t+lb_uY^AOY*tI?eFu8 z9!wXM(`6x%pKJ?K7X~~z&{{2A60Xf81wk>GE}rF9uX>3g??5j`&9^z&#Jm(HGtq>C zwZ`rK+=)utuy;gm+3lU#z4V0Z)>^Bbc2ZVF*q)x_XG;xMrVg%?TlO0-ws1CbC^$;O z+qUCz(yC*t$FDEbmoDP3_af0KC{IKC0Rj{J!QSzn#>J%YYE!WFwp&<6)7%E~8MUG2 zE0||^+Oyv+dzXYxL$x*fuWS3oO(gYYqc9)NHBaz|KDtw~KktxswEVM`+o$x|-m`yB z!!aT#ShQTfdQ?0su;Ih49c`21)|kcB4m))As!9K26FkqRk;A~!s8+GzZKfE+!X~+3K#;zQeMSnZZW0T1l0Jp!K_5aP% zswUfvx?QcmOKwiSpUF0kr&MU+Ew4Z>fn?epXvN{6k43hR2W*dA5D_H zD9M7$K0d^kZ`pcuVh@XXseg_iDKt`E!tH2&x3YsfpbTHn(#Bx`QeE0@O9K}Q=cxHY zpgi&KZomE%$MriTKaKh`Bepaidy-4HC09r6XSa^GT*6*QOqJ1xJ+mZGpHTMrD0GUU zjPZyb58sx8YYrhk{nl&&UUwru{(#JjE(`Y3W~QS>mkp<>MLflEUaN3|wj|z4qFqxT z8SizK_L|NYlg1Ak#7izrE^!+H&ZY0>cc~5AD=4V)gj#A8Uewu={7u>$c_+izrabFd zOvdm2ZO&WVW|9Esr~}xtchqKMWn9*@ zE1Zi65`s?FO*34NhTa}IR~$v=G7+Kn@|tp|kOxnjKXh`5kHWa(Lp0b*uD~oPCwZ5XiLn#=)eDTP zNMz-8H*s$2qM{{_Tz`$ z13>LYifn26nN#dN6mI%mO;MKp7C|!9*;T)Ct$rUe8+W0f_7K>gioP^VVLDd44(K%0 z&LEKKF#7yfgeha2f#lPIcy+R(u5$4Lt>S!Gp5klq+&8!rnB3R0FkKM1mrKrZ;72Vb zfi40NlDFyjfThouo0u66e&Sk_)1swO`Ha{it@V~Me;$o zJh$cNF^-Y0eXOd}Dgf5@VE2AT_*n?&?=M87qg9Sdwa$I=q=&&>X{f{|b^AMS%y!&R zv?`9o2)?zf7}?=i@orZfB`B=at(GkG52R*>hct!{F;T>6hPIp2S0D?Z|GG3takdg- zBG0~CkttN-Z6IJ``E{$zk`;9p1sb)?o6SO}Qyo5$vUB@&=3VU`fFDkd8TN}QO+9m$ z^9Z8W{>ZwqvGJ0}`Db__ZS|0cEa+=keTVT@Ro~nk?k;Zu8PI{(4ZD2bWKcY{7z@)? zmNo}@;;W}M;f-P+xT?-YqTPzPY9z$wjZZFhE6!q%`)PeeeC^TLi*ed`Ey#Tp4miB? zIk_gIYggxXdGYr3K3TLI*r77`s4g6cmZ>QK^6;$LyU<%HSP$h$4AeGi+k-N?&Ln&! za5Sk9GYH%L@%wkuuhjSZCj_KyAKnUDgnyAk>bOK$)9JXEXeFOVNnYIFMKZ3>5yr7X z3+L9M7PZ{UCD$wq{~m7A?xs7QiC>I>rN`fz27I|QZ$m5`H49|I5y{rxwn_pp&5i`oRCYlL@W=;(12)dtS6+MKGr=MOKCXWAY6I%(~_| z>aur0R!f7MOr6XV?GPrW9-Hoo{xj*#Qt4^WJv8RYE$I}_*5;yueBHRXgkF;{05@2W z?n?j_IHech%RrtTl7w!Ka8(?x39^1!9=w{yb@*8;~KpL6#3PKg{l`6swhh~QAZvMt6# z*=R~UMP=F6rYMJYxh5+g?1+eVR+}sPolo{++qgW*_pE`!>gmmlqo~2MJ}oM?`@DRg ziI%FYUz$fuBJA?D-;!U;&;LZV+;L|4$nmzg{BHW}QxJ<}dFWeTtOCYb^l4TBLJHG5 zTQn?1ext6AyM=fxGW!@;r4$zNfUYAkfj0LxrhUQme6g&{aUumFEpU0Do0>+q*b(EF z5HXlW07rK%@wnEG|#-lbmlqE9&kLd)VWO z3ridn>+q=t;`eGXnKZaB62s&iRy`UXBWs9l+}%8gvp=YG5WG?Q^IGyxs?NIFXG;Mu zd1ZDn1C6sn3vZfUA(b(q?EuDWiV*murnQ4NWSrfh$9xXoO$8F`zSX zbpA}gh2boORrC>}{MBaZL{#;kr@hhf$?ueId(l_S#i%`+%=@#Gc+JNpB-L)UG1BR5 zvu9C2``HwQ{7(FiDzBN>4DW5bH@o~!ftQ93D^2HMslk%>+8t`)EAk8MZU5>bGzf#D z-i1oHEXSvvM#_k%nz(0U&MO~#&A!3d>hODFsnv^5+zy$hojB@kf;C+fC#7t~W=UN< zEo*44>%4dcVU1xsmU9?n;Vnr10C)MHdhTn5FFLFXE+-|aO{mGfE|79-@$C|Zi)L5d zm4n-AzGyj!AKLzo8T}d*?xrI!#JRB^IdbtJuRIkZ%wIDJdcr3dZu@m*yYNTptlTua zD02Rt=`gYP@O2GP4fcGKPD1-B4=0X}XNUz~$I7dfR|$QRJL4k?t7hT^aUl0t0`2^Ks~%qwXkOq}t#UW9E}hN7?6K@m#+PQ%DqilP^(N^TJk$AV9?S!RGj9FBRnpiL z6X5X$1!ObXMZ8;eUHGAM7^%m2{Xs$~tIWZO_}=$-*b#S*IQp25C&k~p%IeCf(VICD=fdPi4)ms7NpmMPCe?^K&*O98SR57(bwvoWY^`ui;fnc@Rh-iE2? z5^w77u4{96FVsjZjj#}a^g)R=J3T%3TL!Ked9gPhngNO661OUWwFx`Za~z82x%p}w zQxcZh>g{;1PF!w&$I95-e{(f7b;csrG%*vrGe=i*-8SBNKc%)X*>hxoRp5U>=_Hzj z$-3jbhL|y2HjGc=P^Z0@3^FJ2#v!No%ZLb`lFJGrH|`d;3zg-i$_39>B@dYm99=Vv zJZTza7ZNzj(9_Y9fw$#hSK zM$g+>ra*;IHD7;3tv{L)U}o7TyU9y0>=9PsepNA^((X;oB)XyR7su(Bi?l?bN0gE9 zwFrrD>6O)wWn=F8xl-!41Vu*D1is?QP`qmP@>*FsY`3@Rn&}Or$ze{F*>wlZAmzfC z3NE>;hDsLI!N~@mAS|@ya%=uNncvn%jnr8&b(_2mgKh^Z!ig%Kj9J(HV_q@{U&yU0 z5VreZuJ4^Kvf@>A_c`n+6y2FHEmb?Y>+RP zTE3|O67Vd&63q~6nByJ?jkcMrG;pb?)ME{iQlP}i!siB0bva~cpV)&fl4C00e7tj# zzK|x~0+Va6mpd{0m-9$jhNsHp&!fbOe_AND=B@MJSke)#BSvPFUf9K)(*2$X+Nc~g zCCvh?iUG)tWI={V>n6Y&h4uz!SjMK*s2L`+=>@a&A`zE8Y9j1a9DxW5nTo7% zxT`PQ@f%qZ%wh`JPTU>F+U}%1P@q6P7HNxI2~|M2@tS}1`OIk{=h7=Z{uBS}s~b-0 zcXD7;+Sq)forG~qq~`-~@d~DSOYvefBegOr#@9~gge2$d#mOi&oMw6lQSn2!>_H0} z-18cA(jmGmla8@eLvYgX&_YwE*WsnrBhPljF0Z%f-g@_1yXd?+D zNZ-pSI<#=E;}L~_QFQRbD>CYVy~-sDve^|JUQGG$Nrv{d(k!xKb}nJR+qi>j`vgM^ z^?Tk1OuqMT6}hPU;!a2W*KU{X#@d2m0)-~$p|^oqfxT*?$zTUg7{@f6Y`6?NC|0L>a8iB`3hc#!TZ>4F)MxyRa%*%j4QDfQ z+-T*IE_p9O*WwXNooN1rx@gu}TW5bzEgQf}7z9t3ePM_#{=?cVVTIaK5^4S1r3uDJ zNR@?RndT#t^VY_>jeAZQDValG#lR&d3W)5t}M*o33ntrHIX~ z%bzR`m(qUKR7VT6YTMXBgml!o{VqYeN$&VOlauqyBazw6{O&cg_Io4$XcCGCW9&oi zl%vI8y5EP)yrR2`VWp(=SCuJhYEX>97uHZUCA5^Y-iW6t^v1UQ^wrw`N_52`{4&1@ zU@Zsl!oz2LmL#tWIz|t6kuA?;Qh;Tt0R`Q>MMW%EY>5y`VC!F#lCuWi*A z(omL=vI1%Hv&ysfNQ06I8ft!?hsFq>`hFK7^6QutN_F4e8pKUs=%0x^wrQYhS^KR_ zUWJ*9!c1g^%Wf~Ax*HkSUV6;!4nWbby3oB5i}?HWc;0_von;rRQQ4f+;_>W(M3-sMZMnUg_P>@}O}~0FI9yo&%n`wtaB;=i4dwR^WB^n}k||?vxJMEB|}ru?M51bl#{_iTW@szOkDG6$(DOXHiWqB?-v?7Lh%_{Y-8BF?nKn zR-^hTCM-!)&??1LQ_yk-R_&~jl7#uadze2*|05Ku;&sf>n!21x7^i0(%`quvO@i2z zG4;Nz;b;ORnU$5R=IXo1T$)o!y1SCrAn$z)tJhGvl#$#6O|Ank zWMmMrc#Li8PuZF#=vB5CR9(3Y=ridnEuYPXS+M#+WztuphqhD$*SzRv7SX@!Iwh9);;LCVP$qaD z)Qqg5dIX-|F_ru{TwtBmt&zIgtxk!0#YDb(ne^ zc_vD?_dRdVssKH}m#)L8J+p3LTKxaF@xM?B*dJ01O!BSbPA&dlAzP&S6K?`n`bUc2Ck@9>3@gfkb@KezzkBBm(}rFJjnI- zqqfQ13UsD1@rM&CSC6Dy8A)y2#T-y4xDq7}`9HUTg+qg6l!V`)eaR&JcZSTfu!w-_ z&zpDzsiKYW0nvhg)LX89p-wnB@i&5%9H#$X*}bcQU#&>r!kwC|7TRf~$Fn(SZZ7Yt zxBT<3yz^UP_y$}cHO5F*adbVX-v;N}OXC`}?(hH42Zb;Dc&eC%sb~OWNy*NU8B71I zgPz~HlK$<%>#dwtY4oy`xK+kY!;MZ4O~IJB%A3m7Ay8v_JB@oI!dnyl9@H080it3CQqF77TI}?r@m=`xDE^(C|;& zMKj@nS@(yMIZczXQqFBc<~295_)x4%qkx;KSP|OSe%pl!XIsum(6(go_cIB?ye)=Z zH?S8i09e9Fq7Yoft^py1!$a0vTh+?M>%E4iRs*f}ihCY^9b`|;(-64BgCAvprKv@= zEqeEdo{z}exyS3>ls@xgYXC$nmjI&sGAqlvpuXbSc)QQMqwuzy7$3;$AKu@33ebJP z`PD^X%N%~sM5L9#GYF(Yt!z)f!EFK8Z2r>o$@8Gyokx>|?XHaMA3ElB{6VdF&&5Tp zl=tEOf_gdJuxxIRzp(`KrEbmlDd-4)Sv9_z4Gk9=E*=P7l*b`dOC?!}85|vkJiGn1 z;t#Y@%O8kdN4Q*`b6|wZYCs^B4)%Y1x09>Q?tZZ4dlk2rDrVv=-UkCaE${YlTl|r2 z&c4fsOPI1?8{w99iAHWLrJ^m*!=fH~>tM`*JX_c^)hYo3Qkf&py|4lQm#1(qtl7ID( z)pwyik+nD3E#@n?7q(7LQ#j#pA0~8T2$>p#`<$3|~j21Z(-p@Nc4u3cV`jOV; zIccb@&dh~d_*~-r!y-V!a_p-d3`j{Vhh@egM?OH+h(s-`K z`yK@XL>!l+N=sS6a!Es0Nh&4uBb0-m|9sKHiGbL_3I_!Q8t@F#8L-i~(mB73S^pLh zW+cI5@P893V9@gv1L|ClKX}z5d9_dI>nkauGxvKf?~bSC8s>_-i4zE&TNs0Qou2iN)g=-L8RF3Ij03l(w-&uvj$(lK0(9r0gM;FxAl8@i| ze4Vz#yY>%h>2Zb%QsJ-q?NuMe7Kw5|Hb`-=&nvX2rt@!p>n%H7y|Hf0T=qWlZ}mST zt1@iDfiW{s6EKm*%BFAh@!@JT)unyE{LX*#70#EXdVKc~rD$nu>nP7fr9cn<S9rzkRXVp3NEWe2KgY5ELHR!gvI)tW9 z3Il`z7&1Bh=QXQ!$oZV+X7stLRTq!LWp56KGKLP%u7%@8Iy3(meruD~a+++XcFcDf zJfU#-_O>Wt!g?fVh(e#X6y$UXWak;VB9`ktlMqdifk5;}$*N3!@jV;^@e4J!Bb);t z9E`|$jL&lo%UtC~J`V#g@BEf=rJr_+^vt}Wl_N8auc_j{@q?HEu$lZ1tEc}?ECrCQ z-KCVT9zP>;J-g1=`V;rvW@lIePNrh7SW||YgtPJgi_zlJl7%4E$zjKl%#?C@MFkKl zi2JgvT@_a}zrhy=LE4+aYe440NHk%%idRrz>uCSI)BEhxzhegE^@(NR!`4d2dza3oV5v=zkZ^__DHnU$-L#d^aoBcs zN4&F>CGfCDy;r10BX33`R3ZC&I>X z**xdy>~W_1<9kJuBkoF-sT!dI`&|Zyzj6MxCw+OM{u@shDjIfIu{}-@X>M`yJzStWzw{B_!v`HM?$sayZ{`v8)(3`P#x`Mc6R|5!k<&Z! z({Y*lzq={0E|2=hMVeg$@@t6z*5kGV_n5eaDPPfy>6g0i{G>#w39yT>Nn}#{sxfG* zT)0jl5%W#4V;XJLm`L!rr0bp@SRCf6m&7%p;yXdB%k}-u z2W=DnO)V`~wW_SdZCj66#}#Z+q3N@_gAH+B5~h=l@&FVud~0fwWsBjXz_Ycr{V~$> zNXp~pZgF^zi8>7$*^rY+MsZ?l19g(1pA_9F8LnGVQnePx3%oD&a!v1p(SG~Qyytks znI^|aAtR7EY#o=zI=~LEbkKk{6-j4S1-Nb{KfxWZt-ZY*^K)6T+<~82V6@&HH%1a1Sxpj&>tkIM+V=G2G`AI`7WMQH zhJovzlQX|zO_AjT2Qlx^$1sW}R95|jE~;{%Tav^S(PyeMW-7^PLcy@6xzA~yNIDAo zoeLKoz2e%I4EC5#IS46j((jkF$2B6JJd&uGsh>&I8g)2HHcQ=7P*G8>UEL+CCM>I~ zV+WVOar_@1Y_s^$38hcjxge0^8^0vd5_67>cLAx`^lRP()CedYNHGb4G5ncK1ii$d z?(_Kj3U+(7e&zaI#hotw8eC}O0t(pG^2H?gjtk#xUc9KuP4e)X0=)fhahSpTxKuo3 z_1Obe9*3=aPNR9Ru>8BaqM$S{n8@U?|EYpx$g;+quq^SStd>(P{XN90@q8vDt9rH zfI&?(hKOj+EoF4SzdueO(O!Pd#igJT-KsEDe9F}Fyr2xzT2PbW2o#I0!RHRdn2Se|z%9GX&-C?(XFBa)>Q6Y({PXj1!LH(1Ph5oP!T6 zb#eSC68oxEVNBP8En=1y0-#0&uQ${~Qmwg{?&oXCs&o%ddwJe-{>C1JY$#0V&ph3n zBud>z>IHZfRDV2Nc;U3{=JXhXDcfZ#%|ksv?Se`{-=ps7>%X|tJq|~C(yPR=Khv!R zD6s&A=3QVpOj&wrMB(gC*usb4i7oUJ5^4l#T)qxx+SyUM+&H=pqzNGAKnLpXro)wH)fy^= z(>uTBe}~PclcD5fRFQtGZreX5(V|IqlvEb=zeP!_z!QD$meXcEZJG>6tm$K$pAUFR zP|7f{5)8w}L{hl~CdWuy8?VTiZR)?_Id`p~Fm$)j>6;*#ZEozIxzXs!sIkdV+CCU8g|Em#KNlz~gLHBnetPjuo% zotZ;wOwdTJa?{;8yLjO7t)->7yO2Q-w>$}IppCCr;}WmPv^kcacpCwtmh>Un8qY&% zW(9MWgERB@Jk34fh0)KCZ>;4sNwABeW@iob>+SKUc1Yw3=~2^jareZn*LRya3cOmP z1EHb6dphX}Jj&*-ZVa*PgR1&Xn&jpVOi162>izlCab=gcRdRz%j?D8tLR`EMDe~S_ zMP<7Sb)>BzPR}YKiU(!rgRD3);c%8LZ;s@so6fnpIm??E(mH)ERJ<}(L8BE zr+&}E9Va}-@@?YZAJN1Ga6^~(_UqqNsvY8gnlNap072~V5cIo0Z_Lbib!*!|?icvs zvd`e0*m!trKTa%NI(!OH_=VELk5|%uTfR$%He*!o5_9EDVkls~S)R`K|I6#UdJCh+ zj=-NYO=Qczb)N5p;#!Y>(cGrx8$cC|d6OZssxowXCyX9D3bBqE-}akNdw?QGjZL@K z06k?W%u6BxMePRTsq!E2C_{>)2Q@w~IyD&*5kwNj%L{f@^*tEr&MNBJ2U0dHzQ6(f z@<*cC=epbG3W%<_PW`EheK!$M>q<@DyJwAs{4=c>9kKW49}@#+$+<6Li; zJ>A`s2VB;!Vrn#^l0f3-{8j5^`(DA^Ub0FFN*=3(%$`OhmroZiB7;x>gLI+DRNX{D zxudY<%JL1$7 z9tX#l^4dbb!Qw=Vi!7lvZ`x!f3>6DEC^iEIStDhm&BQ=7FjU~h+ZR4~czE>5N^yglK)C`DiUvapoOlWscXuHwsu!RBUVmbK{!CC% znCxxf=`X=Gm42t;zm$lk>!q6}89=seT4vnxG+))YIdU?BtbQ43N3m6-N zXUEXsovW2L|JkB=V;iMuE&0mI3LjNG%8x8Go8ngE`dRGOF>WV#N)tT?Mm}TzvrRx z?>_+sv&T^MKlKk6yTxx4s zb8-*}GfY{Yk%$5h^ed!!v&y8vin@hwA2Hlw6Ke#~@#^{md%QBoib{93tIR$ydYh!m zs%fH)n=+ItnJ@)g#}SJ4s1na0%vHm(F`@A@=x;eocH?a7-v^Xy9O7 z&$M-8=$3amT#UTe7(k5s#pTDdUIuIlIL%Db`Ev;;5tP$M&2@W(^)uu-1d^=Eii>_n z?#q6PKq0ugv$Jp=w`Za%Ybfd-;uI~L&HGe}1%u?g2ui59ZGIxZ>vKiu3r19lkcO{w z{=?WIL*%J0b@$)X8w1d?TR))z-(xkj)f-+(cIA@rM<83}v#K<)Hu z81%J>2nUnHKp565nudq5jdvtJpGJ`WWEH{$CSK^9kCZ(i#{>dSi9y8VmS9U$G z>fih?w5esQx^(+Up0f^4DFp@1f8YD_Ft8=MfZ1%4IL}^>(gL zFTLwEq+`Yjzf-3}eOn%r6*ewJ#06OK@NXB3yFrkUsO) z@+`q8c}&iMvDRk=p{GWtF8)%y3Dja?I-Ho5 zGwtj3i2>(Z1d*0H3a@sN-wn%NL7NuU4t%dxgbFq4PDXdMqu5}!j*elCH3X?s%VAX~ zvzrYZY!t>UglHB1>=ZJhA*cmGl+itIT|uptgs_O9>6kL<#O28^d=$E2clJHI+Wb7z zvosU>28)pXIYIx23b98|vw+9UJ36oJQQHU{1O^}CldW0j{GN+w!Xawl4b;HM^P!Zl zjg3qWm|3cA1#OO2mcrjZ?LS9~qTG;N)2t8!fWg@51t2MAFU+b-EvBeoZoO}^KXUD0 z@2#r?ZkF}vs0ov2-@ZxA7G#$Q{BbG=y=WoFL|X?Fg=J-G)QAdVL~<0u)ure3Uw@+G z!@KbmAx_H1o#IsZ_0L#dp4-j2?pr^0l50MOoIc0;g0?nH?&|9D3U|5Mxlk|x)3$n? zzKUXm?d&A58i*PHl(~UL6=SHz@kWB|%~d#$SJwjo+giBAd|;H4KCF@=Mq3~+$87Gp z3s+IsqOSP-UX?XoUoa*(7>EJ7S1QpmkAqg}?(Ho-K8{SFmPcnpsYQHREpaFY6?ykp zTPAK%9Nuv>CgK?&L4wDFWj^TeV&W`A!qUR4J^YC@Fv&x22ozFC%LN%5=l>hNuiEd| z^!gt+?<1m4E9X%TNYA1?RX^h}`*@ydlYh6dE98I`#_wk^(y9u`ctzRy^w{057jU

uC zp5uYI!ocDU=p^e5TwCv0mzlfiV8A#{6>Nlwql7UuE_~nP?brGWJ7b_~rk-e=B84UM z^LQ>YuWp2uKqTu+x@fEK$ttWb4m|EY$+dE5)=fXAJsL#*=)DE@Jf%qRsxBUBlKd21 zyOJ(}yD`X=Vi>RC0I1{TH}j=dZ}0=@<>h6u-z(DUK!{A7u2yp-TpyXla%&toI~7HF zr>R^x)9g>reS4Nkb?0>F#1hX!_~7&>BSZ?CqO~ngc}ynVTTy*fo8C1x4I>IKr^!(L zKYK|W+9Z1aHS#LvwuAjhA%Y(FJI6n%y(eG?lEo zJ6~z!9hKZ`)_yN0LX+`~+BM#v61NycpSZDm6XB$gj7zk6bU0g-*UmnZkP$ffGGiq=e7647o=m-b z>uR#1?x}Di{vyj-_Zb=?yPY-3{Oi1Ri4+sH4FPU|wu&-6pUX7vThG+p+w=Cdxm#*7rKhPUG+Z$Fl&N9St&THi zk*`fD=4zsg*kNTYSC342KgzboJ~~tgzhlnPvY2sAf?^hBo$DBIm9_Cx^w2nDHvI3_ z&|i(ac?9mtX$2w{!?|_y&_CG4a7LrcBq_`H3pXNBCT9Ke&szmejFzRQo3-#?tK;_B zA}!Uk^0$^aag4#5Yv6b`omhf0`P>@chLI|mszGms4!jhxa(8|6qNZUUy2s29xX7sGWUtG&XCasZt}4IF=|lnnO7GP$YY- z=43mIJqE3(HgG6;yqoRkZswlexA~iIazyX6zqn&Cs)Lm|=y#$z7Oht%&hAqk0)siQ zQTZMH;NO)^;CVyWEF#EjTRFp2&G(fAR4mg=91@1cT!hrfU1`u`+u=PJD`85?$$;PN zhyOwJcRtLLHrlh~@ySn-h|&H!!AJ$7C%4*@?r18*)ZRBeI-8b~m=92Vm>et`H+>?r z{%AP!$7=mqQ0jMjm!MuEJ`l!VN(%i`ulWAUM=ugbv0Pzqi7vWbWo)DL@sIUXm?5dK z_`a!6Z4=#tc+pCt8qOkJP{B<96cdj(L#b#vYGrZ3<}PXC<7Tf~+QvVC0YcZ_< zQzY17-=htgyr*pi+!KY?mfr|>6ia`rX#TWWMU?^=rXUf@#*%AT+)IRhF^$hHuV4B@ zr0_{accPaBy^1}iOB$TXW=P#gJ+NW-bWMmJw+H~D}{!KnGeqQe+qrS7`fW993O zpNL|tV{D9pJ`a7Z+OVg8b>a!}!t8$7$P~M_tT`k53r4I2K!c$lvO+Gn+a>GSQ1F|J znPwVLD6)Yq;(eGZWp5Zbs_2VF9LJ5mo&j`l{3Tlw#~Kbx=9lBHxkZgLqpm(aQzuy* z`dq?bU5-$>SfN3gm=C>6M^5#zwfY~Mi!DieBuoXM0Q4aCUAb}2hk9G){VNuBfm9%d zL90b3rsN9S=InN$mXWrvTh2Ff6pccx*9~NqbN1q`l9FPljnM2Oc=XH)OrstVaXwpg zc-p_NjCr(o_lhMZ%2 zMSKEdNPXAREGgy{rlzjYkVCTa+%~>N*6|`|H(&7D{sLdde82&P zs#^){Yz~c&SPhcm>qAIP5=Sn6gwxKE6;J-l+rL+hFs=_GRX}!19ihMNxRowDy$#R= z^BmA1^rDQDQNQ#Bt$HpE)%@Wl&}eL|Sqz9ASmUw!|Q({)28Wk(9i;D|suOGxuzfl`kWRVK$ zMLYX(p>C|`#AO~R<1$_uR946y!`13zY(!v;Ej1(I>$H?(NPMzsO}&jtaN@;iIdk?F z544^d@0Ej{nH~g1A?V$$lj!`8KfK-U@-Is~nG=0s5QF%-Oex-uyx@Mh0PU|GH_J=z zKRfKx1a({^$9J7C6WlHX4a=PjS~`D@myyJHMfAb4KY>-O=!YlO8Yf+BRn2lm@u7ym z@t<51V$&M|5WqWuug!(CdHs@>%*?ZZYOK$7)ylTZICaO&(-lC68o0Q_4t8k!F_3ozo_ME5ujG0H6=qYDlL!yF3TQ{p>@rbYdsJ= z3dX@e!-uqsoTI|w!?0jA^bI&lF^yGx0-CgP&-(m|fJEqybn-qf^p8u-&QxFMMbl+2 zjM?A3OV2PcN~m56nyRyl zAGZp=-l22Ee1kpBW6HAkyA;lmJN{-dbE>L*NMYWQ{^f60t@@(3lb)TR!#$9j+;_v+ z(|Mi-LNp9+WyBeG^S*E5I-dGI8<9UxGedV>ldM|`G5!YUH0Gml6knPSOca+B8KIwH zO>WH|wYtmMjF8snnsr54saQ%ZVir=MjR58TViPXX#Y=}SnVQfdjv-BjDyOLl-~HmE zSznN9dw+j-?ggH5!aD0#M|6rY?MMbM0<~!vAypuOi3a2{{ASy5CRHUUBxLb3hIF~g zpz$<&5QDi|HIwbBWA(vFAtA0_`C0o5W!Yqg^lCi3FkyB7zM+`uwJ zqS&p`W?V=B!OU=IBn$AKqBVOa=PgvtZCh=oLC+>7kZc8yW{r zEKzBAydR}_jj|EnV`z7G+EWiFTp$t}zq^rmttw<sjEPaN8hWeJ3m|nNHHxR>8-i#z8?r!Bi0Jmx1amlh@wq6_|CE*&S0AKqe>d~~IntNp0@gwmH_Sjwu_b4>amcwTx zDo*VqT_#YJ4zFDG)%-kpL+AQhU)PPxet6_+tKaE5$auMLmn8I(W^$=V*l((Tx_`fa z|HDQ;6IiflEFagihQ^y5H>C}|bPK3)MwRyezaY%*MV-K3a>x8IFrWzcCqjRPGEV8Q zMm(QWXDqCincJIG9d{!+3>Fj^-(;W>#((o>e&}qqjW_-Al7l+{*t08k8z?aTg%jsb3y?iFi;{+FcxHxC zIU$iSRq;zL7o}ZU4)=ShfN6%vYp=$kt?`k-z7I=SS5gYzJk(@^SMT3gUQAS%^omiZ z7O`Nxg3rx?8&;;qLMYrJy#a`sxjFQ_75pqHddYqYL|?tEmP;SX8dFA?keE0V*8e(@ zU@%tU^~P{_BwlT;kXmNihW|z4%k*05{Ur&Fm`7&beL?gM)^Ll-uglbj)2GW42*U$) zW&70j`JWivAZvKedz+P>m6_GmS9S9^@>n?k{$tIHk*h?A|2YRHBqp3)ue?6{m%{%i z6>g=#N{d+u==6NLA9^|&*?5`CZP*{pyI-CTj@fSce22K%c<7Nzm$^1VnVM?kvj}>^ z@4oy8T5OJxau1Y&3!i+5{3TxswkJ3b+ucc)3 z(_3I;?>)8qVlygx8&z^SW0tl;uET$|I9jk|dql7FlNTtq%2n5hEV-Oi1OyKNh=?%d zt1|)Ly+waTVtzevmD?UNv9KWm5Utf~Nt3;&YdsVuPKDKt#T1AF7R+63_A#ihs9>?{ zH2IG+nGJGvb7eaCFzNN2#4|yI_>1s)N)_AcznE5WGpDg_p|qXlu){NOsD{N`3t;IH`>bQE5Tz<^-lU7lJReLC^&^t&2s}1gSh^R5EOODS zVJ`hGL0;R4FsrraN55%HU*FB0dwZc-Wvmuv4w&Hwg^~Z@2&s0v{V{$}^V9bMi6Bc_ zZ(uPVO3C9`$;9i|IuWXwtQMhneC{iOe7(KKo1;l2y7p8toa9MG%3m_9M>9r(Gq3j`B32LAbu=tN%fGlcE# z=0)(+r#Cp^iKcCTyO0F(Q9PDs%fkV>0vM!+R%no zH|2pLgqwdbszQZe?>{IY zF7BJOsxlMScffbwuf~kQ%US}(-Y7rpg+Gp!-_=2% z#{DFXo6Hll(9p0F70iQV?k_+{pgo=a$FvLP0Me)9zLEBRX$Yf_Jd#s)DTEz%do4U;QenAZ)tHr6a?{&D2yFJ z{X~$dD6RWb*(x=Dp($GSF4uVz^-`oQxrinq3Xh zQ`R#_C>Z#WgocIwnwGx!b@lrCIPBl!@e0M{M8^&~#7^+v)x+t)6_NlV(*=#;vr9=5 zr_ZFG-G>Tici}zO^^Fv86y)T(y1H5~^;7ZX(KL7*n+(~oL_C%1WX;YJk)YI@_7NP@ z(P1UXW1+JrTXGp03BIF>S~-4;NkUoi1rMdd8k5*&=IC%#JA)=wnUEmfm%e|YzU*jJZ(H3v;FUj(STce=iL_m;95NjHTK`TVo9bO za$#t}93^wNf$c%G_pw}s5F~h@Im<_+^I3|Q*h8f*EEk>~z z*$Omp(RE;s#;v8buBzqx{2${HCdRtSD9N6{l4_L0Of7Ic6?c`|k0`h#NYIe&Z=o-q^= z+xpXZbLP#E|0f^6op?9dHD)O=0*aje%yBK{tS4=y%zmM_9 z1_QBW2||oe@%`kNt`xq-QK>bo)8MKM+jBG`jrzce02Z zoVgHc?e1RBY1lRv)AO~B%(gALJlnlgDB0I64<>1*Y!(6sHRk6$JHnEM-G6vE;KiY= z8or8lv9}-1oOHBvYzrB77-B@{PL3(rUb}v88Q}t(9Z{K*2|w6OIQNNUVH*7v<*uM$ z$0$IwIP8Po;NkIKP0jG_C^}L$F`>7Z;N@##X0k?acPHnkyt7kDedI$E{p0Y(v@{I9 zIOo5aT-O+3H*lehYhGye7Cyp?IQ`4BqQ#aFeR+CcrLu8Oi?GGwd-s!WHEdk17ArZ92 zc2|844$lj%#cPE8TW2hs{4OJ!z=EU-8Bv0t{v)>%0VKQNrpJwT|3QmEFQ~lV0CZ4n z<6B1T>6eA~iOap>qjq|V%tT)e)SL^Zu$UAi_?GV?hn@x!BNx|a^*RhoYYFQS;(;>P z2WhVvx=*)EcmhkH_RMYzjU!`u7Re1Oon@75c^6;*<3bWXI|m06|Gtgh0{_xb>mur6 zi=+m?2IG|Ia^HR$)isA+xqhD9`{VD(^@N##rMp|mnx(xxvo!)-|A1FeyZejPj4?x- zBUNxFU)3Sr&W}k=3w}1f{$5ZL_|cDlF)b~PkJGi0f(ogWlLn;~D~Jwy`Mid_Av!WI z@iKSIQyS|srm0`=LxN^Qe7mG>zdc1#q(i!b-CVubUQ2(Zk?|K^Xs~)yJ%VaUDEn54 zIU@=QJ7c!dOYR9P$I#S@C3ihsog522(iRsOyMKcT>Nur-jo~3F_UB}j-J~fmp%N@c zbOgL9v9adhSI-@jypK)kB-$#(iAPx>i8%rZaS+|LsI7z3 zB;p~SVr#t6Q`x{z`1c_o6S`9bW=)w-&RsCRyuOUm7kA?ATsbxwaKvY4XD3V_L(<4k z)k5ZON}vGF#;05Z?dH#2y||XV*+G!8SHiVt?R;h#4!00xn~tTK*(HpUef*MU{Ureb zB(!%R7FcKrkTt>5Wkuxk7Ke=Y)9VfQ(*xk~*&i1Yq&91LXi;g(atLt%eUNJGy zU&DzNFYkv-$|xo%Sg1*;)H1pTB*78WG7ppR2SLhWUvFK7`hDjnHl^OilCng z=V#uX8?M2s6@)?Awf|8v+{Cibii`JIx0uOY)lkg<3NDV@Od1Z%T8J~eDYtYFYV)i@ zeH6k}AkRu1w~CRa14B(-6ijjEeV$Ut(g!CC8aF$u$4Zj4y6Vq|PGVccGKKBfMs*bs z09;>7Rb)ohBgLndMC*b5G(dg$7Zm}ZMx9VOt`6(10s~@4T1Ta7ehA4AGh#70yLiMy z-7zcL-TAZqXAKG|k$J!6Elz};hzLSL#u(hQrV5mMXTd)M2}CUkAN?=PR0mT>EN5!{!EP(GeVT8ZO7DDu{# zgoMQprQpyUnHHlp?`+Bi&k`W;2YPGA&KML>CMQY|6a+j z!VyzaQ)K{kF$_@CoDMr2Jv$RXk{HAXDOAgJv9$AWW4=-B*TAr=?(Vp&*3eOq9IWIm z^f@Tsc<)P`i)I67mLv zKVb%JzAjwJX%_MnrhH9#qj_5bBevf-@zM{BKq+o7K!Y{S1d<%s#355EWpG<%4 zg`4qw<8l!ywp?)W;N&Q9&C4+28a)bBQzV@TcvTM^>9ieaqosKmy{lr*TZyF?uvc#3LL4`)F`wdDxp~!XtWYVn>i&>#9rI zajP+SF(F}rqJCuyP=~wBl9@`E7}G~;d{-iK)N)Asl$^o7eQLl9kk8%iXP_YxDC$%} zv|~43-90+Cz000-bVGU$NGHYJ7y?E4{F~nr$qtlC=3V7Nv68jpx147j-hX zpRbyLQUz*5Tz^+D&x5Mmzz|!E*jBHVkbRvZKAq~PlKPZDOWOY$t^(?6lSdK>m?`nf z7xuaL_-JS>27kS7E3P=0`yAWug&#~ zrK`1?SB}RUx;D<;vY>Nx*oo&8)zA2Lc6KIhj#`4`eI^3R$y|4dspLK(ftXwdD2#b` zHHcohHK%nr@Og^fg^MmS)q|Bb(U2>N>CV|Zq0|+;WhQ&7d#(J z1U^zm^#+~R1wZbmN9iXAAm9q5W50us314)iI}yW3uHSv)M74Q*sk25kZGr-J&~7QCp=9oB>)M66kAc$YW(zP*}N zE^E!RQl?vpt@yh*7NPq@Uk>Wuh29ck>JZ4nuP(1~gCxTz0~mlF4F0GWX|Est{uScO zdpM&ByYWmND{qimgCNTWr0CwdxJ%al7|$GH#yI5u$VlL+$M<>;Q*#%42mkv^}aS3M5b8(On zb=Jz;i9YezgHuFoq&ul+Iz^$VR|4#iXL5||UGDCOB?Fj%U4izLfwIO$r*qkJQ7l`& zrnS32X)MR(;)Qu<>T zWC&r(fP{d%qM>%)9-&H7B>dVlM+ZwLxQpU~;5Czuh#q%1*_)T8_k-6LX;V{x+PGTj zt!c`U?hXE@e;cK}mr$v`)1%|#9!0(EP!xIX*g9jQvO6OQ11701NnAgsPm$|MMBg1I z9sMFzoc5be`Vm>_tG*9(5H_`1*D>5{oWzzEy$k-*P}hK)mWmbTjI+I`hwA_V^}D;$ zyBDt=dX6hLqyxC$4Yil{o)>}l57>;1Z&mH>)$S=!G;^LFs8(j$pY43Xww`#{{h5OF zt6L;!&CJdFS}9KpERFeX-lhDtGmU7A7R{pb7N^?19V@Af-bW-`EYq)j8vTC(~2pSq% z>3&FAMA`Uv+Mc9kq#Gn%SNr!+1#d6fL8-Z_X0If=>_uwxjn&(vKWFmuEKY3;6(3@) z=<~sr_CjjU@%2vD!ABYjS?3q%a=_!yC*jTRSPK9n;5)#-^VkaLbl8W05#u_xe!{CC zOZAJ9zGnsyg=L1&evv11lTV=lEfNR^`^jH|AEkkz2+SiStGC@R2_qHf z{C~;QVQwS@KD1U>p?fiG940VBaOxeuj3n(q`ny8$`Xcfmv&qCB*N29;Y$PNkaQdt2 zlif9~N#k;59`-}s4v3W&jPNt%(9wbFPF+D;4~&a(tJAa>`f8b^%_a%k5exm*K7-`D zJN)65UZ|s>+#D>TaQ?TsRV%CNz%{tp3KbK^@R`i-s5}_A^=;0ejUjgaT zpksMn1R4qgb{`d)iyuNECjnyZAhYd2-&d~%c0tFswm!+WaTkg!R-JhKaW+hS4he911J05BKb>wv7 zMm*xkpD3fYv-e$T#gDZ+jYDM>>n!$0bjBI7lV5Eut34PX7e*nt7Ocds>l*{FBGx(Ezi(x?U-gcTwi{{CJ*>u0YQ0{&N9y)%RD6otj2IMx+Ftp zzbKW#a^;BVk11UsNp!s{;iY@&#Nk1SmlRl#mBa@j0nu3{iN0v$1zqiBmyfW1TFoL^ znu}U&8_kHv^_7OId?ysw({WXO+{a#>kf zdx|8akStwXHS+rDN-BxUTEbYMTH{F)vS!=zYh}31rNG-Z_^6^H`6^ws$=%1-dWJLB zi1lM->#v_KO%k+eEo0d}@5ocFwP4*_v$NcoBs*`!8lBGzLNHC81TLb=(P|VWP4-&{ z8Iynak8>kO4Mq>UCF(y`i#0e0V#UeLQ)x;vy2-Lrm7eu@@T+CISl($DRM`aE2S2pP zUi-Pd_XqS&(h9jY(ifwi2Q!=P17!HserHDf@tnod9<|egB*X>*I@{~(TX1y!F$sD` z+f>a^^HS+9yNkRihp2*Ut-(nDtn=p9j={^z!{g%fU1q2}lqYL$G$MVXCvp(hY$&vK zNMF=FX#nr9fwCb3!lDGq6HXk=7|h0|4i<<7N4Qu)2RPA%#|d#%7QQAOKkiXeydM8z zfGJN&ii0jc8$3|_!k;+uuIVISKS5TYUyrDG9}w#C^%JWKR%|`mus5s4Dd7vuwqxpH zgt8^LpQW}iuyY|~)B;`bTMV{5Bj5E$B zOzxO5vhp^pbfE*4gV*p(*2#%t6|9f-ZPbOZW6^W;0%@b^U`Y+OclYWQO?y;oLX#4} z!W^SK>wpF1A{2M{F%S`JEmSF|6}Rr{_Fsq@X{AyK$ECXoX^fIy+@x#%9O=6Z{kNBo ze%)JmV>@v}O)$6njEUpJ!mbYJH%(@lvKn>CN}+?h;D7e&D$ce?i#Vmn9DH3)&D6#X ztVv9$fNXu!!7xl)oRJ>~i>ifLk6G~TLl8k}q*b=g3X%LbKUQ+w_@iwX_qil%>}vZp z8PVmnUHgqwcaLYWwz16oE?KPTA3n1tfIkJQcCpIAegYZuuk2V7-*-btiamIB3Mcn! zDW%FeS%05@6reTgJSehH|4JqWcmJR%9?)x`1al9$z=T3Nr^RQ$3ZWpgss#pGGuBJ#9 zR%TN7h4ag14pF|v&saz5;;Q{+^Fqs(r6cIBEMM~vwV)mgZnA9s43td_z2fwFNg9Aw zd?SJwl@oGNz-ahlXBdyL$xb%eM7#qPP1Z_|wCtR3wwag|vEAZ9Ok<|KdE8=z^T8t2 zsqK6T#h-BP#tZaovi)kB`U*@s(GAq^yg6@^?1g$9$`C&>jw4QK1ejSOq7AJPqo zargKqPIg*jpP_u=O74i<+@ZLyxEvwq+82mo!#_2mnMk%)f6Kfz^AP&_$qJYFCbV>7 zfko|43~LoyR5|CLvx5VW3P;ZL=VE#@L@UE~ZhnRBpou8@J_rnowabb;fgefm269-i zpM2s}y9iC4(bOf4zj=5P3rgo0l3nHP2-LnPR4fas+12&np^0f*(%e2!JkZGc711yP zcPGEpTy-QTFuoAM$2jO!e%yZM4jtdN+FG3iIY!57eHkE6aZrP~k-wUV*>q>$K9+g+ z2zlmt(F;nQX7fd9a(J?=wtHq86%rUn%1!zDP)WCN( zQ0ys3q0Ygq*q}G#mwjf1g>F<>=;aFbzD=CTM)REGl=5YpRbuJs>-!$g5*xN1e#CDC z*oy!49-SI;gM!}Ks9{gp3+cZ=hs{G{e=;;#&CmZQNI)JP+xTP7gXr3nC%4vx)DADh z`@ijmZ5FEwKs#vfqC2=)|8sDZbG~5Te7Jj0+-+?V8;c1H;2CVcvwRZuIHrX#?$9Vl zDc;rBZaeg!^T@H>4<6*=tM5nMUx^Gqm?-btN-)x*XX0~1mOJ(i7^2a1f#S5W8f+=? zqnU)7HEFWewh+O{e<{Tvkek~P`=|p>wIZV%siyYzTY}Mw$j1_|a9o~MNJ`PT$h^q|I z`1#6i7CU#h-Xqxm4_Y#Gz)edd_3OSB1*b21D}iFgRuX2{l~_OHuZNVyY<+YN4)`S) z5*exVUZoE9OKyQuG4p{?RiLDbykH68FP?jOo*6%?FIhNukj_of(Fu6?8t&@0#amzY z^_6AXkTD|gxGv$Fk;FkI4bmY$3u|_Wq2dc$kF)oiDA+N3&zuBeu4) z*xHq_l5FK=kSH#MGhW$mIeRwx914X7HaT>yZQ&W!$iHQRX;;H`Gl8z{JDIN{(eOarLMV8w^cyQzTJhl0yY? zvsRPDSevQv0DSzFinoapVIrs1w7J6MIo4_0o4!3N1)$$AMVE=O(Eug+G9ZzveFom6 zFDT{4tC%my`&nd{Q9X0PVmn+dEs+2(u8pTg=#~VBhKm01xEU7d?BN+9m-$urcQ=>y zY#Wz|mV&o$>(%Y27dw)-p;AmmCU#8xo))u@AK}|ld|2}zOvDQ(KgP1yNrXL~OTehj zok*ZbQ`Cqo&@t~&hlz*N&fJfWY-)v-+00pLg$7W2G`r1ua zN)J}@ujZ1PN6-CwLx{zo!UR|L63@`2af!y0kxB=42{+MK`K4}evY%}p+*Wy|UHwwZ zsBJh7;u`r=HVoVET;lJ!=FQV;S5YpQg4ua%SQphtDJQ}s1at4gAAU}J$8#9`9s&-a zTyY^C%mCuZit(74nhLwuwTsg0;3I)2F!PcSnPhc z9#x)Q{b3@+AZ<@Jd98$iO5eLwU0|tR#YA-+MocQTS(3?8Gv6t%V{eFKY({^KB)A~l zOmQmCfT{bIce{0n`&i}Y!W<(wMz^P5*XeJ}M8}e9#GUQx5Ha@dTD#ti^5pLfmab+# z=kj~Llmz_--qZC|GjqXbgh+q?qbEXL*^~{R zn;~%m^2b-6E1+$6RB$A;%BPDsDF=_=PD01Lu+Bzl+CQlH=cQ98AN}XwgG+eb>g3{F z*-iyGldSHd6P-&uwxSa~=X@(pS?6zUnD&SLM4tAAI;T62*RE|ouiOIR*Hca_<=Zc) zB|oAju1pL*BDY{MhZ>sr8+bYT2if>KAUAU@`)NXT)Q!%5X=&=lko$NV4P-3s*p literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/13.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/13.png new file mode 100644 index 0000000000000000000000000000000000000000..22eef10c10834b505c5e8118dc0863ffb09fdbf5 GIT binary patch literal 8650 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�_qgj4~J4KK%pspdC#0HJ6X9OtIdZK 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 F{|^B!iRb_T literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/16.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/16.png new file mode 100644 index 0000000000000000000000000000000000000000..fd4b5ad0de3bc4f8a855b6fcf4ece17827a138c1 GIT binary patch literal 12377 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 BI5_|S literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/18.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/18.png new file mode 100644 index 0000000000000000000000000000000000000000..daa426fdac4b4ee0ca87e018db2e5d1bb6710939 GIT binary patch literal 8690 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 literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/2.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/2.png new file mode 100644 index 0000000000000000000000000000000000000000..d104cd2d72ca47aca12794ce32a0dfa15f62014f GIT binary patch literal 13668 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 X8|il~W`#VkHAqHML84aNF!28XWnF!z literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/20.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/20.png new file mode 100644 index 0000000000000000000000000000000000000000..adf36b7fdbf3be2bb60ff8de097a08a549a9c617 GIT binary patch literal 6431 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 literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/22.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/22.png new file mode 100644 index 0000000000000000000000000000000000000000..2778a19ebad562548bbb91a08da6967a90414a3c GIT binary patch literal 10743 zcmW-n1yEbx(}sh)Yw_alr8q4Fic=)Ttw4d|B)FI2_QSn6lu+CqikG4(?(XjX-Tyb4 zn={GW%*i=t@9w+LZp26R4|v#A*dP!HPe~E11&p5myD-s#cQH$mNnk*=ey{c(1gac- zix#;Dd`ADQ@&OEb`QIzIy(AI%2FqDd9}0|$|9>eA*-3*y9QsP&_d1^QM}A(OGy`rs zm2e;LV-z+Ql2tWj=JyeWipD8meb-IxFc$sTnrfcm`Pq1$mFmQpbCw+14+l({F-M*x zPM=j$;w+E!!iolK6qOlE6T{fGm|gw@MOb_R{hflsJf;?8zM$LSVo-=N$Y-29P%UX2 z?^aZpw(C|d`#}1_F)4N*S^OJtoP)Mgc|pEE5NLs8&=%0CmpTPVdQ3@b0Zo*Goi1wa zt%h{B_E2Fk=-P7A205fsF~2ZZprj$m9VLhh^Wx;+r-P`-%L%gp0-x zCmu+v#NwW-fe+A}=76VVsa9RC$o0?Bn(uKbtOROJNr>1OS&NdQt1aye4No4NI=0Fe zq&){B`zg%@tNJc<%qWn?>Kf{4{a!{I z58IEfCGIJB4D7Rca``|;xjkXap9vOUN@IL(4(EQt;j}SY?@Clql!F`{Bzy;qJ=(p; z+H){{B$tIMl8ix=frQ8e&waXv0k>l>JLq9OYt>5`JXP93BO!#Uh`Q=w5!2`Uu#@M4 zw+%)wqtU}#;ub6JNM@kQj`NzG4j*ZEIZ?^Q-(q}`TXW9UPs=bG;CGWp?l+HnCG@jr z@o`Jg-#a%sM2^qx7@~A>8yoa@1u7nGx1TkI$51zoj@4RHv|QB?{nJj1O$U|F+jbAB ze5U53H#hB4u)A6?_&dGtOY0k8vOn1Jnv|f7^)8x|WR=7$sCmYh-H@Y&%79f38Ly*& z$Mqd)M3!lEK&9C2xFN>elE;$Q-T3P2*M%lG>1Iz!HB6+&1;kSb-^<)|obTa}aQJB4 z$llGL1bHyKh|Q?j_3<1DE&%}__hsw5j&l`5Ux6c?lVmk*QnWeyFMBVK{WD9rp4&|H zt=1pYG5#B~3k<0;(?@nXUa2h9QaXz9^U1DkzmH55svyceUTLgUP~K}mvM=$%$b|9= zrmGIit=!(XcAaL*Jnu@$C2wzDsDnv}6h0`N&X-j-{dhVOnvz;tst+S*ha{@9KFMM> zTIo}vkbUYjW|8Q%=Qh#uPZpQd~c9-4fzH|kZ z-fwfQ;mPUHPC!iv3^wTI>)X5HQ5!}Nyj-E60lFxA~FWs*j z7mVXu#C9H5Rat{yuCkqG9uYSkt?*AFa!FR&<{d(1XV_t)Tcq7Tw);(+5 z#6QRMs@NrleF`0Wo|Y03H?Z0;k;qO+nr7Q9;)N>**&^ z8yP8JW&t%(Zj1(FtX#rqrHQM!Ygx&ofW<7KQD56$A+(gImnSA3=EeeCauXJDvI;

-~qv93?n9BNjfG&14gLj8hKpl0 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�Dm>u{JE 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 J7h_F>{|^G_@IwS_9K}xy>q@HuX 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℞KW7oQ;oVPZ}_(MG2J`X0v__$eYf7 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 literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/28.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/28.png new file mode 100644 index 0000000000000000000000000000000000000000..186d625be349fc8fc1882ff459ddad3ca8c58ed9 GIT binary patch literal 15687 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 literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/30.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/30.png new file mode 100644 index 0000000000000000000000000000000000000000..9940c9ebd4a7b9e968624fad0be3c613af3dd7d9 GIT binary patch literal 15297 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 literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/31.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/31.png new file mode 100644 index 0000000000000000000000000000000000000000..dc6db08fd4acedeea3c4faaded1527fce40fa94a GIT binary patch literal 13539 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 NNLErwqDIU(^na9VxcdMA literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/34.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/34.png new file mode 100644 index 0000000000000000000000000000000000000000..f3beb222bdeb9b1b6139f4fbd90795fe6b269976 GIT binary patch literal 15596 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 B|84*P literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/36.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/36.png new file mode 100644 index 0000000000000000000000000000000000000000..15cf7d2de5b65449634e35d8d8436dcc497f4c50 GIT binary patch literal 15841 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 rc-nJJ$xljE@XSq2PYp^9TPpQ)<8b?<#pQA!Gu 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 BVjTbg literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/38.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/38.png new file mode 100644 index 0000000000000000000000000000000000000000..69a43d57c2f0b4b35fff4601ee324337930802e4 GIT binary patch literal 9222 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 O4N#C#m9CXE4gEj1S@Z?~ literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/4.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/4.png new file mode 100644 index 0000000000000000000000000000000000000000..25b68e81ee8a154ade092e6bd50516f3b9d08603 GIT binary patch literal 15389 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 literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/40.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/40.png new file mode 100644 index 0000000000000000000000000000000000000000..a9067a41c85cce14369657da151eff47baa0f4cd GIT binary patch literal 11543 zcmW++1ymc&77kL}OVQv`C@#evf=h8P?(XhZym)adPy!TphvE`ki?^k?Ly^GS|D9wr zC)u3cnc2DblRL2=ROPTS$S^=45VnH6j0Vv9{&%3E0H1=Ed~-m9Y$K^62?EuQ^1q5Z z0KTJ`E6K@#UjBO(byuVTzo5Iy>w5sL{QnQxF$Xaah}BO)MpDan?Ig%25d1s)lVu%#` zx_y*%vb@U{Z~0DwLP91pR~HpC>n+C^lf`Roc!hb+CLeo z+Vh;;jK?(xVIe95eYJ#*QpGuQ&W|C@4661BL1!Oiq)?NEIQ{Tl3|L zdNm%lR_k}(sx5E0?wRaQ=Mxh?<9JHa&JQWa$(9bN1z$&a1V3KSn_wY79g&o&_R|lT z`Se-0O5-6j#f9tf#_6%5XlwUh88t!ehu5&15|+^`iLwY|x$f+QLt8{^4D=&JU8@xdy8%#))>D+7268eYdaW4GG5nv#*Ym zIePk}it*-o6Pe=%=oQ8Z^)s{S6&zh%Kf|Bz_g5FQLK5CDXf9k}$>nxq4nAsEWPDG=Ks7iX>TbqbsB~ ztji#dSrSCzEi5h;H*}D}gM!ZeMa|XJ?&g95?qqeUjhZXl+I$Zo^Snh02w%8>Idc0q zBl(zgvQC~v>Et4^wkg)wT{D%b%$PcKY96)k_jEZcHysQ-tB`RL7U7q0%!~Z9AS#G6 zKO%y7>KHwtesnd{XDiY;TItMrNI1R1=QpI`Oj3(XQvK9VgM;R3K6j*yX?Bk}&HLU2 zQso^%6?u$C@v8I$zFvbYJcS{rt5rD1TOpOpd)Y{R2%#V}T`et2y*k$&%;mt{j^&WM zCl_&!3HPa=epeS!9Kq<&^8TZna4r-Q2=*lem%CRpap1tye05wK4f*Ns*-`FAg?P`u zdxzT2;G?d4Oj^y2K24R^7+Rm*y^G)B)Sn;_NZsmjk(M+o5epT` zUzfwPGs9kskz46m`LF%v_1k|8#nBVF!7IH~8QK{jB&JfKFX>_BeaNNRL2#FDX$Asx z0SZ-CXZ>)qLfoM4?xWzxW1gzs``Z17v5HvW3njHkYrp?gg4VcN zjikK#iOu3cj3lC59Sg@lMVV2ObSNQ*OiN3rq_e8(ugh6ikOC8-e{);g7gaAhH3k)u zzL%RSlkfij`ca>y)zh+G?u;Lc;315{ZsjNc77v@ zK`E044@)A`>ccpvfB;&+`01ixMz{uwVr5trvz9hQ04&KwI0*8S8 z9CVbKdd1N;!@rm)lEF&@^6~OsDfHjH;9yJ}8(u0?y2z*vqEOYv50sW}e@lQ^wHVh- zC5Rh|_jC~@UR2URkm5@6fHzgdgn<|a5=cTCaic~qVg|j3N@~9U21R6Mmds@MkaH-e z+zYX@Bb8B)WS!ti9s7j^3PJtn%glpexhn$)1(nfO%!jo z!jDzE9N{ZcKmcRLS!(!c^eq&jr&zM{{EuQgvONKId+uy+W51h`kelp~4tV=L zCee?Ij#)Lv#P|s2GT+lxo9TyX(X9^H*_TWPzo{Z>*Ng+{ zF)(~)KsPV|^Pudd;UWImLw8*7cw=mw&#bO8!kWMpDQ)Js(S`4^KP8v4o(RNq3@(L? zi3=_vM4gO0_cY`@r7)zbtXVtfa9EtwQ(5*D34D&Y=jaOCcx`1RlIrQ7n34DW zn>t}Iup)J;-e@l_+S(UjC+*?I4}qwWIBDpSzK>ZB>}C=PZs_Jv7+$hQK{L=^4rpZu=sZ|ROWIXOZ4sh*_v)QF;VrJn@{NFr7pqvsEP z^dq5u(9%NAHTE&F?o)ou)SSka^{N{z=A>7c{uxs?veqQ8mN+ykj~rKGDyxExT%g8m z%si{ctjzfOkerN*_wUg8`T6Dd>7??qiOdtyBe--iUJ_XBSMUu7dCp@%0I|zjo0~Ij z_BT2SF3@Wb#%E-U1^$5PpQTfcHdK1;ht(T3N?EtOyu8B|5q5lxeJS!Q0Eo8ZC8Y37 zi@esF=bYKXl_c>awZKY||4My_7&>Jg0o#}6C5wVW0nh`FByMd7AXs;?%7YA zoCZ#fh4;m;7Sgg#f7ZhX^jKRy%r_Av?fF{D7FH)of*jZWiLL*84!HDyiSc~U*KQ6P zOD*Ft4m=q72p{dZ3IOAbTqA!8MFZ1#qx1pDxN;V=d=xcguHcs~50&(~lFR(9o{y2P zf%OQdj{IBPW2VnviZ*8Zqod)g!&U<;9i^H?=5MSoq~9Um<%uEqCDhj6VM1ba(G8ni z|I!bJNnR(lw61GIAY`V)Bqg&ZELK_IT3@#;nz zh%ti*l6XLtp;wUNC6MJLq3@UI1II&-0y;X6Iy;3p*6VgMx>K)zU^PBfC^7 z#X_x6G>DxSHEiGGod{spRxg5LpwTE^9j}^Mlx$8@2>%rS_k1VT?ltkJ^Q&b;_MV@H zx_+#n$G+KV*S)Qyy_A*Jo4B9OU#1w(!G(x=vh)PeF1BcJc+lU!eoAiU44c%wpGb4gf1;)$j$Ris1CYr86)ZyWo_YRBDO##OLi&N=BfRH;4&-3l6u z!01xsw|{3n^FF2&iu#^~1wDS>_1)C?s2*m;qHDGYZFC(j;ZfH##B5#1P8&TAVp8mA373od&_sc+D*RR;y7F!fg0({>OCFu@}PUg@3QvqJoz+WyB}gxAQ;#H zqMTQ5&}033dYH-woZ{*YSy>bbz&Sj$rXh&66nJZ#1R?cc##Xe?qo`C!7E!H?{trni zSW83S%ni(gr}dW7chMxdvwv)gcH*JOs2hBI-d78H;CV4L&?$!>_djL@zI5J+9p3n| z*XyzFHoReRJ@Mk-hE~<~uR1Ih_0%JY~HP!3whD&z? zosYq`SHp>HlrRbSt&?G~{X14`4{H&X@~FBp?SjG)B5J>HD!*`)ji&C&Zgce!`=vK^Bw`nZth zarStD8}glLd^~kd!zgH~x$XFprOy2KyY%#Q3H6(=;tHt%?b6Z?@eXoeg6@d&VnfTN z)U_yV74hRCTz_v$N*XXg+c&1sH2gev;<$|=fFg`&o9SRu2IQ9O@uC#$n{nqh-0O|LQ#WOmYgc?x&UO|X zvZ!xrx_}k%+&vfmeCZ1k;rLY8yVuw&;@<=}@Nwh%e*fd9?Ytzpq`CPGVYnzU#g+s3z{O~ zZgOe7Ducj8vru)sRJ3*j33qv-LBw#rNn!pG9W;OsqNnq36hGV(gk2G~uj#eek?t{- zCG55Bkn&hNcO1vD1bh7lc)PAbi)tJ0^I3Ptn>S}VRf~c5+PZrUEZ=`z{$`<$qXp=z zrNTG@vxD7ludfTiht+wisFoR>t^x@@n|`PlzF0ZsJ8++^p@I!zNi@=@V+x~(KgzOC*Du~^@@fxdvgLB|@}ePbn7kZDX91Cs zSVDUjZSn$hasJrsfAiI{0PG_x2Z6k*5_oy)xtbR5b#XVP$R~vKKL-U&6bA3cVy>+v z8BLNnSS4t44ucc8Qb2@}^azvc+RZ#9SUo46?cQsSd{KCau)ffL>ox_?2~cQaGayA= z;Qo1T!=%)aru#`0OziAS-40Qq<6qCr3Hz`a4L39Gqh(%kt{n3n@&yi z{$GYtCfnnUrRzmgjjIHYTHE!}#m=(feWN5P$S(JY_T!8;f=EqDY;rxq<$r8Ew zu~(JFZg^Y5q{>RH77!ZpI5|IsD}KEVm&2jzSh3{uV5?C&k3Dkv@n4Q^XdozI`XgXS z2nmDj4`#Em>DAl6_dZ=oYJGWNyzoaMB9H>!b=wJ${|K)_CeSk+iDU*`T-=B~flrK@ zjI#x#2z)D>oRmD?kqcs0ATum<=2!%n#P~^E-f>#PC5D!kR!P;~H;c!m8e&|3RFfQi zO`c-1n!&dcx@ZblZE0` z099ts!o!w42W-x|Fc%jW<$vsbPTo45Q@&jM2~DLo|FPxxHlKi|^chqWP`5I&$kQ zhCY!aKMusi!V&@Sz6tF}7V%(g{{Vl}=2ak-W5Dqv~$3l$BB8(*GW;YSN%6}*~H;tWc|!{-M(2>&rnqF&R}S!ORR3~&Ah?IBB<}$dsBtm`{E z%4F%xo6q@zZ^p>tNi6(@RCtAG6PX6xc*z6Ghqa6dQN-f0u)sOpj2175bm^5(saL`@ z)L>MYM995b$mO2ketyXF%w+ca{&DEL_aWweO(TyW7m26G zO0?qSZLGFN^UL0uI< zqRVF?iXYm(!!51oL=_d?_%yO7SRzy??Ez_@eaxT?!OWFEs4Hikphm_+?x#gFccLe# z#Ey}wDgZ30+?R%(3@74`*RzEoJMkvZ(oV+4js}QN!w$7Vl>Xb#!mUmlmk>p}=2b^o z6(_bo)49p|H`q+fY*Ex`zm6b9W}EV2!Fr7 zVRAnw3WvjeE<{|iwM~*S**i!amI~sB%NYsV zTC+kra({gV88GX*S~BTp8WMC6N9>$W@tZc=!o#6bhE=6jt{XpH_HI0Ga2Q?19wj9a z|5Et94ZzQJyd2fNeMrd5zA|H)-w>c#u4-C$svC7mzc$I>PL;_3j!5{#flN^w$;V_= zz$<`4gH2sYExr|SAt`0CM=jbzXj4L274$oOny?a|dP$Mc`T-;OvphY3F$KF~79VKl z**;I{kMSg5k}|(Jrlh%u{d5ygIgcNQqT zy0YLo((s!lniD6dDQd=imZ|4vDy03gS@-2qG-(fPQ>!1}DfR->3pj0e70Umh{eDm- z@^5+gl(U?h8y8^1m^B;VE2zlbQ-iY7(@j?!tN^G%i<0s`OoCcp4m4@uXsZ@1GNF6L zK@k)B?HkQzj-u$5qB|PA$eNFoPiL4^3Gt}2m3M6e$S19N0A$X}wsFF;{BO0-X#o7} zUo?sWFIoQl*7Dn0z?sM|DJij7n@Ah(KkK>jz5%?*1EqBPAxt9nfeJA=DXU36A|i~A zAeQ9vt0qVO+F_#<+Pf+!H5%gW$vVIQxST)FH~d+8m`07O2_5>4 zu1%##qN1YTYHMK#V*<5b61UBzCB!)*q;XNLE6x*;-(2pHP>?w+J}MyS>HM-*Y$k|lME3YI88vwDqpuGH;DA`JtH=uC3=^d9 zjB3XojBO-^rl_Piv$2t{&qCi#onT8KHwmFkvB}6Pmc-6eeh)=GOCz|x;IG*tymbD( z`cb*Ci8x*s@OZ|@$Fco3hwJ^nhN^nFKb+L)h{n>8p#!}L45=UCIk$9j+89F;Ad26a zS~jUQ$0DkjkBS>t#FLtt-$<0FN9^1XGlwT(eM7-xF8d@~`pSkoN%o-N_{Nv}BRfQ$ zQ$z$SW*s+F=Kvf}P* z80i`}ODgHaw5DqONeV{#&gmW& zE~Vjxz^%eT>}jlwNQTr86p}9@OYhUTPkz`pHb;E^Ku<6{d+W`KB7l9Q^$W(vu9cK^ zDIG4Tl4av=nZ%W&Sg$apI+=SVOoV3V%yB%%cS=sHK$k~3LJ~3$GyCkSp_o>Yz#Knq z)YV$uRj;7M;t|wE#PHJH@+`fBM*EY`I*&Hk35{{wiXFvOpRFmx$O(GRM z`uhXCt>>#78Iy%C9!aIA6$jt5*nmq$Kw1|nW2EWIzBDTt0NOooSah8lS5GWj#=e4n z{uB|OSy*_&ut)%`RqR}TXBj^~K|mb5eY1`4WXI{}z8?1m)VfW>{f)AG||C#H4Q`c`sI-* zCO|&qu~u47{;aO z9Bvwl&&*MOSWrMQ69ySsZg9x{zSv8S75IKWjflO;pau|eL9T-=95A5HZsXn5ng&=H zYaK!h3k#M+oJt;7mNgjs8Z!IIS?zyd^6ao22PhOMLSh0XB`sZ8=&B=ELa(D%(v(*a zw{!&$H}{0^{9L;8Ygix1+j%R_mKRZ-*QsakJ1pqlBFkil6!xfg7*h}6G=1(=kJD9o zVq(3mr)t1D{@m&+x+I=D;FL?^c|xojGM|*xc)T++ zEusR-nSep2wh>JV$IEu`$ci7YBuL=I8|2KZ{PG!`%by}&1RpgE@+y)?2AIg1apB88 zN8s(WuulR%y33rVH(-A3CBw^a_miKFHw#Wr$;WJ*5=M@+Bt$&*V#7Y|OVI_berZIsm@@jsgFmeX* zc~hO-bdpLliI~JFCu%G4z*$#TwMh`2CXOi%L7h<8z#yy3d!DWJIT&#BeT0qKZ;%8- zRm+WY%Jo>IyE}b^A0HpBoqT`)W`wA}Q?n$r27N0pZfiP5w0Eygd_<*O(y|IwUfXv5 zmdkaH2+PXS%_GJ_z6I*Z2$%iuWu?&2zZ-@~u2<_f3K197kDC1QF2s}2e1LCT{N|&= zjgszPTwi;jN~+51^6pPiGX74xHRjKs>~lWeQkvhI*Y3J`0&o-Qw+3gZUdu!!%=v+Q z_#6Wy(gI)u-!_}`kF|dsE9=LT*Q;C3W%%awydGnM99k(49&xi4>!-|Gqf}+PN2DvR zj>wS~<-pCNDOXzn(g?))38z4JXt zM-d=H*QInkd+3m>|M-WshSS4d#NfE;WR}>vP{cfeh7gOF;_$H7=2Lp!UQ>=mnd*Aa z*!R1L8D`8n+KE$X3Q?0wyCw2>HVZ2<1rjq~gL79sExC`Z5@<-UCI#k1&%LPPIO;o< z{9Y&Geo-0ty7VY{kdCaUZn?fG?bM1(9~t84{LP08<&#WAVns|oPUqbZ2a&w`^^Cvg$nlAI^;`e|MQ*Ln^?1akTNM$xT};q}GKdBDIw=8VI?u5wr@E zj5AI^EX^&MW?GG{ZZ7)Rpxv$m+&G^W*EMG#&pNnu%rZ&UYn`w}6T=je*`D<~I`JP#-TF;8h41m8Cgv8cHPZ}F3mAEVdO<(Yb4T$YzVTyAA#>4NjH)^!OX zI_f$Ny{#;5r4xmECI{Re(BTVZ4kL1Wd%z&!xa{PRKeG?b$H+DUR zq&49pZ{t-HoqfY)-X~t;UYjh>uKEG?L&1{4nasQ$Ze6(@$t8Bp`uh88m3M31h_JV+ zPv0wW@|QprbM^)}-hO8{l`U(~%TzmZ!Y`~jx7Ks048x(mB1?fy%a1M}+jNDTCM{mK z+hu!kWqTU9b6QByQs%qW)m$BQD@;JVeX>m%G-Bp=1P->VU=|RUWH@y!M08Ny!kpHp5f1*Mkr#Eyf?&{a$Tx&wa*BBab(gm%ww$H z!Z2TxsfxV$+k~i>np)m6eVQw(aFKN1NUmh5XiAL!4NT=NTpcjVyqot$UdU-vZ=ScO zHDvp88V`Os@JIjsJ37t_5Gu;(1z+yag4iNV;EksNFk@r~Cnuslx;}r&uX4z(4V4k; zGX|`H5PWO8->jk<x|C-{RQpwnLF(Isv8Hcma7dubCX$4tAEe;73h1ea@uUDq; z*V0ve+~=878_;k-h)R+=|ISmEZYS6zPs$=xIV`ETj{Zj%$5dsN|C)Jy(wW0t1#|vf zKZ+#Y@5{N=L@vL7{3rPv{07Ih8Z(enD$Cktnc30zi1)J zO%czJ<%-VCB$@;^k6gdLjNdvN34euI{;)bit5F0#x{GDH_fp2}IO}=D*c~OwP37_x z!G_4LCbfiA2M|Fc68H3q-fo7d*VpVS< zN#Q(D;@xJtuKn^gKBu*oEa}Y}S#3r1NxcvXCxP#thk3fiYn=1?HiGEk$$hA2#D0V= zvLde|1XQlYbxIz;dY)^`B)grM&%BTM-mj>7K%zcP24(KT9fsW7}Gr=Vge0EhZ zTA!x+LbX@OQ80nS5D)A|ruEm-^VD>)_Vh7xw*vMxuX!kssVQooPpT-ZVJoUAS0aNr X@?I@`$Es8T{tZ%qsLFhoG7bM9!EkB_ literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/41.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/41.png new file mode 100644 index 0000000000000000000000000000000000000000..3b45d757b5d6cdf03cafaff79677e8f982bf6c1e GIT binary patch literal 11609 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%0AQ8@qH7t=WmtqF)r-M8cv3Znfah8 z6j)rTKi@u!6tvtL406|-;aBV?uDq-@>oxXNq=%dy=yL-a7Y{S*z$aRvG3zGhU{ z;rvn1sZe=k{xlQ6(`xi+84EcOh%Kw>*QtNUGBNHy0c^qX*!_zHcpKyFa(!uQbQn!U zEa-P8%gM>{d7hT%_&9r@2xV01VMsGc(6F~pqZ#~EP`cDFY7@<^{Y5I8GSE%n%Fq8d z0F!K};NugOLdq zZf^ML(Q|D9kAbyuH5!vSY_re1xXv{3;7y_+LcY%plQtD`YbrDqU zBDFA_{5=dcE;%C2#KCOBh+psz0Ef&-vyUMN@34A!RheQ#S7QfHX|LuyG*hyxyV@-a z|55%T2)ykL1dNSG%M~ou+hTW!Q8B8d16;UV(L*L)JWOKTpdZYRTP~J5>@ClCh=C$d z%SGd-KGZ8Ua?_Bs?i(9jBcmf;6M>I=_pMB*$mW@hc*}f>vJBuK)5}LXEV`Szhb!J} z;PI*im4f8XjOLgaz7b)|Wbw1@nd0+Z`cmnR>dn#aIpe>H_3*hFbBMva&Ll z-#AH0S){8x$+R6or1|xw#EpgCEu{A3yAsuAA*>l9LfO#V?A^+5vM38Hs27hUbQ|G| z2vsl$09l+DMfSJCjGT;(t%55}KNaXVTd)of4>w2D(*HbHv7D`yuu>grCa&5Qw6&4N z=Jzz6TmTZ0KXw3qQBwhQb@}cQ;C@i2AMmn`g&wtO=n&EdQ|Q9YdIXunHd|qsqN;hw zWm@@)lQ`UV#r)#~i&+8$w7nGTs@AL^2L%dqe4=lGt z4vX!!y`6;KgmQ}^iiafi4<0B)D)IxE!Qqy+&n?ckvL1S@xHq5KqQ<2Si~evhdQjp& zd2rz1ZeJL_8v~6BT_(L;juxwA9hA{MOCcLOBQ{c4&^UH!NwBQ6_$Hu(Q&qz3jb(+#a-L7%{aXq^z^u z`NL%?Z!9ce4c9(-7wmqU%aPw$;JQ4Fqr?PI?2?NM1iT^@G^1gSS#SyZ?#z#eb0(p)&rgx2u*eXnz9)`qlCi#Z4@C*cU9d+X_hi)`E#0DP2Cn zgtal@WOW4OJDiHGuAUROaXQ*iYr~~BYjjxsnmA71TVd!ccA87AN$m4tFf4mCV^V|z zUv*@$mq6ijno(TiJn`geBG9@&r+xPH8hH2Se!V~a7x!D3Bt+~`5Nkak(C}t5_;yxU zpA8t4Lwz|vH@}rE8|Mb=K4=Pj(Xpx52d+rBh==$IN%$$LOB%0B-AE~(rmk2Ah%PLsz7yF!m94T7z^ zcN&JeF?DtBK7pn-|d5_!jzFR;r z+>;khrRv{7QtPO7aufai$_aCqJon-fN8&soL@K<6)iNMd0L;@r&yC_$^bc>CWXohHGaR}k0B^H~A zQH7Ydk>q3;!Ud3Z3b9bX_IvsU^lg`J@d62(A6B`;f~cm>9Y&0uS_6c5sFDQMQ^@_G zAvXmAWR+B4a>{oSWN5Ty)QEi3Xgx~8B42z9Zq~qDLG-n7L zHKIRb5A1~Lie2!81eW2%xB5u`ZY~elhWo&AR(=uV|3dakAN?7Q+WBHHp9pAlR9wz< zb+ZgN{TlwHKK6csH9z(GII(>=M|`2BK!*4oM#K`%+;nbg9B?hI%Ud_jD^s4qR!hNz zpP}%zqg%vj#F9TECu=(a10LiqO`fh-CdL#kB%jpXqkzC>=TJ$NcfflwzZ>3x8S}tso0>m`et4<}zeqgJ#-n~RH`ZA54glY3MaWmkeJwBp`hMnscj3*8uiIC+YScBY&_<*H0A_cXVNY5oeL|R7vYs9@4i+Y92JdxYhGK}uk9_D&AQOA z^48HfTe^s-b)yRre&6@?rAf_yCiCmjqP8^T5z5-QR}`82;U#kk1u&uLyPFli zaPmRl0b31)MSYLWS<>o(4-Mbiv-P(IfiKIN^{vaPYt_o!ma*5m0aTeLM-Q7gPaeZe z-aTThWERx{hMN#ZJ8dTkV=A?awRd=zPgVb@B~90I`))#ipxHGvC>6I8O8E;;0PPe< zvsgu>un&Erqp=>37$+3(DvG^}PEUEkwn_?X?$bV#0!}fp^Od*HBMgV=R}R;WoTrK# zokbIw&7#}ncQFTDOAT7J(?5+bzSiFiHfN1%H+w^dbNGfl`Z`!n;G}=c0c=V+GEqWk zQD{uaC5Se|**|oyIR--~5O(?8j2=fZE+XpX-wWWHYcO78%h4g%9Bkh&6b4Y2%wB;h zML<@VOg31b@Me*Ey%?Tmv7V63RVslGdJ9vB7N#l0KyHF(hq)xGtFmoT)m};QSz$=E zh;Xq~dnlamtsS&UOS&Scdj3&w)O;|Bocz5;?(06m*}@`rv_CsB7#cR32QV`lXtjYc zHi4Sjadd{ET?^s3paQXu`d(_4bC(L0te#SGCdy^yE?@*f3iw5{1~zm zzuT>X$s9~UtV1PS1b16zV7i09;ix=Poz5}IaTWd6WULaua%nL(h$!8g@I%t2JTyTY zg~Cml$m{os!W0!Ma zyvzq4hN`C2aJQr0h*87 zT-1n?0EI-X=*05S1%w}fj(F6E7RD)!144n;qz?^+_wCG4iRI_f8;ZN5;Sa|AYu9cQm)dpa18 zpjoGGhmaPc33>(X^kk!*q%7|o=CO!upP@~MR6O?<;vxuUZ&Q`QXTb}JQgJ=hbMynD z_<3?)%L}cl)~V8zrP_Sz20%}BccT#P=ZVz9=jhbF7#cVy>Rg*1TPRzMJDm1d6Vg@*TI(`R!wDcLUICp*x zQsbm`p{lUbX~Wye3{~}=^t$J*;3bH~p>b+0!T7TDAv*Fzo&yk)(V4?IxkltxWw7E5 zY!TR1OCHA|MP-!dUT9dJrAzJbP>T?A`J&*Iaf zidH$!Jz2w`w$J*(zTW`BlC~J)g=eQg@C=U)k+VGQ<&}d{a`$`V{3sznhQRh}tNn^!GX{>_{{^?=rSJt^FwgFM%CUbi;nRzAt=)l}8py8>yRKEuwNv3q)67e0EM}D&Q;HW3uooUuin%aM zMx)goaDOsK-@@0-@&gf(zr1XVD`WU^Sxv1l2z5fTlf|Pm0|YO&pZS3o=|@MYKP`MdA0*O0L#y8?W)S>d(REbn-mB(e(LoKUM9mbV3VU{`mD_+ z^Q@?p#!EY4#9SMBG3o@#K24g0(cgRk?k}CN)s%Nxpl9drDekcy%}fwGA*Gv9sbsK1 zYXA*GE-2wi*|RN?lmk~HoPPQTPh4@tT-2W47gl-%Q{BS9q?RJ?^8{yn1<#{b05ip8 zWt$d^LX#@MrW%VTtQT5#28}!VE`EfzY-T1I|Jv6Ay8P$LQGVq)OWUC_%uy$;VsrEie$i?GN z1qk{o+7vJ_aDF#5mPXV=y=CgYEUTL8lAdr#26njK=$sYx*~^Sn3_4Z)!3}YQ8ABIJRNB`j_h)w6vhL|HE zeo$}3LNmnM$sy9`0gOl#4|;KUY)11?A_}oE+`BThOBxlAC(7@=H<_u9)sw|B9yw=9 z#*uw=wOIhPJZPsOFr=9MEuR5q<7r8cgUIsg^l@T?N?3zcHm)q}?Eb*nL~eha^kQHk z{HB&-$2Ywd+*--$PLgug2mw~##Oy%fN0U0{NyxePL!?3wKr+R8svw@X<#dK(7{J8E z8+8JUM$6fR=j!+*{fQR#-+sP9!o>hKRch@9h>`iM1_d}yR4nTV{h<69YFH?Z$jLcP zx+U1a40T}|T_*IZdLBESQ%!VIe)ZEW4{Sei*X2;7JJhI;yXasUlx_OPRo^DQW%@Xm zFh`ZQmh#$nDR-nNe<_hRvfE9E9{P*e_)wbLWM~P&?V)~6^KPplj%K;?r+OIHN1px^ zCuix?t_Q?Pe+N4imx_-OJa)Lmez4z>#1sczer>TN5*5Vsy2@o z<&ki#dy+6xLaHLdlUhX*ZNuckus?3vD_@vw@dj&iFT#aL?c>Ny5gfn!ku(m@VGM5M z8@%JXj}|k;2DoL}wvCIK(2M|7(i#cl7r^R{%3^Jz+W|8LTB8LTNhnNwGM3{>^`?+t zuQ#*8THd_Ht6!+YO5|x+vr})9T0Lv-&6TrP(|;t=lXpdulHr00q@-|W$|P)dO8Von z@GiH);~n0;Pn0|hQza%2pS|30L=B$#{YaMAVxnCliDN+HDU@W}%(!FX#N3sQa;%%; z9VQgyMsKa>KbWMha^ct6M`vR=xIUH9K)Y>3&D{695eO(MCdtr}IV3M&@9l_sl zQO)TF&x)yWgHX50^6WlUNj<|G<>nG<)#jFPLye&zH<;wvPO8a4s)Adx@_ZM-0L1;>PZT z196|YI%yEQG#CF{#;}8n=TG+AFU89VqKn2FE7krUX~iEy+D7-#(lVj%nI0eu*|m4x zeJ8lAVFxUY%0)lCF65|*jgGYP`fbHwuQ*b#*R%xmEnXI3*!j3)tPBnP^7P5_`@0Wm zCD^_?kQkb;&paM~JZlBNTn-DVcFiRjj{|*h$54sR!38jyU$Pc^_{3*K(4!bptZ%0a4O~t;iO=^43fo`_n+1tCE5dhJdGwqGD zhD$$OCl!T7f=ceECa`1e;f+LCoTdl{=)(*`5qmGo8s>49s3j^%LL>Q0@Wug!{~!%< zi83m_x&!|PlYXb{H?TTi@#e{`B=INONMIjcJ1Y>YKk{~f&>){s2GPfM+Fnrao*PeY zQ?mO0=HE6L9di3517p%T{0oSV3Z9h;nGYUS)A+jOZU;bZUTWYbtIrC7O)|xeywP7W zNz2%MgT}YZVJ8=~zoO5RYe$r9Ho@}Kfe>@~rv3(rT177^dHT&1Y`Z+HcqSwxo5+4} z>iX(3_hJp%0qKK>K6hUR>h?e=+=5|6`{^RV=M921?*XSzy7*R!?3$-6(+B>7p$l0x zJJ;+vr+i0{%CWC_CHZPQyCZz@u-4+8#Sr8!pBpwcUK_0-l+5 zh=_JF#!&4{o3!$=T^+l`#m52VRugo2sd1DB`W>oFyh}7%!5vD!R>+5-sm$c&502#G zV)SB!jrXCc;T_YduO z7mO@w3Tv3aX*tEPpx)x(lwQYH`w~Ewl9GYUeEaILp!l$uVGsgaG?~NmHW3`X$8Hy^ zW{x?>Az(jJ>WyTFcu{f4F2e5UXR6^5esE>=%@B~teZpx8bBdv*iFUD$kFJgwjB z$V(7wq@po~1n=J9DXsv)QwQll&pXLtY&fx@1L=@NHc0AxEWXdX1i&UhVR6r;lKFY{dP+!%e#Ks)E*94Mr}cQx7>imp zD7Q|*cW{)wP|_YC5AO=p()wOI7&0QRUq|z1JhD)IZhQhYW=>KMB7L|Sw+#|=#mg9p zGmY?*9BI?O#899j6dM zh)0BGuUD<7j%%{-_#ZA^s|-jQ8b|VOz&W~f(4z%4LD@lo+@5l397ap4r5fHz7~(ro zaFa&op0d+vhlU9;dPK)r;+Z^#YcLW)XkKto&2M@0U}L7Oh`o2hL_DLhiU#K5#!JM+ z@LDPpMDWAD!(ESS7Su#M9hXPGOEV%QdY-__BaKM$mr@^)(c>e}W~|{pll%IjMhT~l zhxpxNeROMHhue>*my7!!c1**)2z)Q^W}5H3&&=$R+a~-#H=;@Y{c3Mi2DHS|fWB|m zu>YB9{d5dGwOwpHz0KWWYafV*%80s>?)kW?iaMr}s!Ay$fHNCut_q`674|hiQC3Z+ IO3Ezse?tn(s{jB1 literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/42.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/42.png new file mode 100644 index 0000000000000000000000000000000000000000..ea36911ca1979c478dfc99dc1eb9b8bd11eccbbd GIT binary patch literal 12255 zcmYLPWmFtZyIfp?yIXJ#?i$?P-QC?oaEIV7!QI_uaY%3$hv4qc-S_)*&zznwE_fdUB|8 zLkDHV5JJV#D5R;shK!Fx+}h_s;ot5=zB})(20Pg2kjy676WU|iqlpei=3pf$r!mW> zKXNIaynL)|bZzwX%*%NFMaT?Uno>BrsMu2X(D1ltWMvmB{GL8+?X``$)^~@{AHfp< zc}1?65ActirvZ@e{{Nv9@Hxi6H@Z9v`4?)?rQr$yi2x#l<+z5uQCW%Sr~31~`T2M0 z++5<7W*4(Re-HDsvEsxntM$4pZNCS+Yg4Gei$HCEURobsI<30UTGGq*{0y`SjQ|g?_;;cmw2Q0$-V2?hp+d=LHxm)_!}D=yCWsDv%Y6Z z5w(Ubwu>F5Cb8rcJJ;UInws$wmGtTw8in=c@ST$|Ku@%ok-0yc@djPGbASKFUeq#c zr@>fqLH_8UfB~}jUq#RQKSYInQL>&lsQnW-W%$wt_0)o0hx2(yBi!jbeX?l86+7&$ zu~=?7g*TNSgmf^I9no2#rlPA08$<@sP)Wow0VYM#?819^6<0K%p9a@4P3Uz#1OA zIh=dvxGb&m_*|RHX9>Uz7^7vCio!!sOmqrQ)6h{dPKq(&eAlyMSgJLQJIw#2+4OdR z@%8lu7%%?;61hDZcx}CcqA+RhV;|gpW}-f0fFF|Uv>E8`;4z}d`HxD#=S}-#BE5HP zGQDTY!NI{^2S<)BGgC))JbsTd#-Yg!WPg})=QG*JgAsq#TBG-zfcl1--}*#JqNg(o zzCP+UJ?FlPDVsYz?x87x@AlCvigLg}SkShIv#F=UUkFNiFANCSUZfSifolJOa-`g7Jv ztECYv!+$kbn}E0|<>a#ic{1?zxSTNfz0NW^z;FwYn$G{Ub#ZCnB$y47hI)I6#{ReU zdeIiNy86e()WQPWvHPDUqpm;V1j9rjEh6J&h>cESJd`5D$a8;c8rYAz}+L)E-)VvcRuVMl&OL0+GAhke&Cc1Efi8iID?ygc{K z?BGcQOGjnefM*Wd^!kiW7sLC?Q}#J4wB+TJTv!<`P63fV8TN&x7y6#x%k;K1Zja6iqvm^N2x~lc_0(i=9JA;QeE!=nw^3K^!1vC z(S;r%;b7Tk3;0Ylvd;>=lFH5SI(b-Vq_%iW;>>P+yzIBMIxNfQ2lC9k-i4Kymj|a{ z)O2|bo!*PVCn0Mxm+J&Q!nqchWnQTJNWjeSUiz;GZLu^|mHdnCdpo|KFWtC)?=$a> ze9cDT6MlMs+`JdQ3kvGq{)cPS-CA7yE^WDFz>NF$0SFl&b5BP(mKHZtxeFDG1nwoO zHkR5y~b!tbzHFTwum6e@aSc&u&h%eeTEsstP zrOj`CAen@5x#}x%pIcgj9Xk4=lpP*r^uBA@{XBYFUQyxmkbo-eJ8}m_I|7#q-PgLi zION#%TW}2zpRn7@ zn%#Wot=Ud5Bk{x_T)!SeKJXWAzp0$v9V?C(`-V3a4Hgz6py<<&XqqDO!7;2IjQ8ZB*ITr$^-@*R|esc?7#qW_3 zq0qz$Uv$m55Xsk8eLsIfcyiuYD{9;Fy=_+ZdTcD(-Gv%l{t5YChjd@>vz^|aXNdWQ zH1zdD?0VgqYTu@;lvP!;-1Ss1vW@bcTI_0hV|PG z9NnAS9(6Zt>;y2P`uDCy;HhBfe-1#!Hf0(=Zl$YI5X22~OvT#0(%(G4XYktL2(8tV zWOF;{*V`^m6#c?wy5K|WCiVz!v)|nBd0*1&ZEyp|D`8_}?~Up?j+CSuK_mcwxknJe z`P77BL4~2wGSY{9r7B%e7>R3Jk2YF&<0b+QJYDah$4Q_k0Gl#qrs%XLf0Q08W5E>Y z1K`qE?s!41CX`6pt&9ALhnsQ$YK1(=HW1W22a27&H6H5r92^fu)b@wbhS$stF^I*j zYvV3+Hh=`zz!hQLksE`Kl#_R^#5+C8eY9Oh{Oa{RQj(&)x_U6Z&y$$oqN75EZ(_!m~YmhZwU$HGZN;X4_cyq2FaBV#N@e;hLM31MBICm(t@ zyXExY8Lw1-D^qhz%iy`|ca>E83SwHcq#F(Sp(8hyIU{1X(aGe`EI}vsnmv6PVkCV_ zSaeaZ050^8!GvNn=&W9`yW2f(wIE*H*bp53 z77GAKsHAv{ii&bzL@oIC7!q;0PyomX;vRHMrDF~Q0|8(2*rvlj1(tPLSg}&9{}QzTY|aAv`m`|bP*YZQ?UmJ2ix4efs^+vJx_yLQRVA<*T%9N|NAoXd2BEvBO_o% zwdRN(eetc5HK${H*0OP>pf$*cDBYUq=UBH*BUwf!l1 zvfg+{OkG`_ELWBw0f-(ai5^1@g|_327uZJ{U3AwJ_&C+w{5nWWOWU8(V7Be)=d0n> z3OmOA`pZ;Iwo_qV+)WKrS5L1AR3r$+vyv7$*XhUoakoG8kj zxLuFf^~H{>m6FYS8(Vt!7#?+^w1MKBl~A!H!uD2t-WT<$58V7H*`pC-zSXwkWR(tZ zOxtVl!`JH!BZ-DqR?@Gu#yvbdENu9UZj}t|I_lzS%txJ^A-;?nuvb5DA&V zjwX;Mq#OF9voHrJI&Ad37CF83)d4jWx^~pcatH`exP}y0kI&Bfmz{dAZ_4iZl|P(WQnLV)C_ zNycggrw$d}V*IZ|eR{p05J$|ogF7TE@q!#=aQ+YwqM^#Pp^sYuxM5*oJTEI|enu}- z9cBvi-(3DuT4#kj=(Q<(c|A7Q&dlVgDe=E6EPul|ju5oEAH1DS_*`a~bRsM257|@d zPye``EU&6s}J-^%f zI_oAndf?X_Y=Mc)fAIw(x5IjSXk-e^7u?;*4mY(*Hk7YP-6FnS8POW8u^<6=ONno&*akxljjOe>rf1=q*h7F$2=<1sz0{d4q`2I%5=GN9hm*kis zeP*r7mmFSDueE93!z-altHW2E7>gDV>fC}tPKQF0g|4-ujijFx99Z0Aqobo!Ja+;y zvNy|mQ9=eXgaTj%U2 z_uS%QSf~l5L4v^c0bAxAuI-d((2Ww}-OS9>o3)+Yd5h%G&bJH*33Pmwasd_%&3xB^ zbG?&fU0xpA`V<`_Tfzk3pUq7OP%Ep=U&^QV55w^(-*_TpzwdMvI#s*L7%8c##Z^`F z%PVvB{nC_qH_!flxn5nf0L(E3u_<%Qn%}>n!4zt287fAuU5cQv{A=$I8Iq-?G*FbH zWF~?SRBS`=+Z_!t%r_ysGz!cK>m=OJQEx1odG@jL&Lt^e+IbIQ_SswEeNR!PNRlSQ ziTR2L-+y{btrl`4V&5@}^v^}b6<4?_~)g{TZ^A3kl+_)T|R=-P9__-Wz ziqpf|j1US|NiG25*sWKM0ZBRWciiiW|4ojelkoJjvcm(Ug$`=xh* z3=7o>HE2pFqA#OBZqve=YB0MEbroC!K0BRHbA$#b=EPt*3Qzz zWapGDy0xvv6c~R#F5_T8DyB^K?*Xa*YG6HilR}Nksel~xq9|wUh+hd}SH|;DZln2P zZjPjY|5zG?Gf9l-XxX&Z7nI)7?a6@3DJ=DY~ZDD}YD^5Q9rK zdSI9$fX#;MAFA|Tu--JVa8!!`!FuZzhtGdOMMq_*(~Cs7R3|0+4ZaPOi`gIp$Jp4! z@W6Qd9Y6=S5Xdr&c5?0~`qD2$njl$R?_f9kJ`Le1a{hB_Z(XSoLW~1r!0)mf3e>8s zqSCRuFA>vr$sjod*$(D2Ttolsd<~5al|C~#l7J`jP+wnV9Ss->4Yf)pe#90nfa|E{ z!8hhy+;Kdtl|tJHc?8*fb|ffpB4m93X<)%c7(1J(Vf9@BB6|_eeEqvOIOJ|{IK}x^ zd>;Bs(YL&)(KWwsg!61X+--(G=zfRYQfOP+=JR&7?E2{|>QIA&x|SALX@p?UsD_$G z*925SeoPPgTgJf$YLg;=3AS1t2pQ*3S{PtefdPB=njY_l;^w{3J*uFx!7#Ly`at5e zo;M2l`F(tLtM}(DmcV21P`s?HR_4Qgh$LD~=k@HwEgMyVdhC`LkO`N5Mt*bIrNqL< z1y2gmVzFmrqPt%+n{Gon{z~k;J^6ldXpp5grb93H);2Z+!!npVo?WjMdqP-hb^1bW zG-f$eNR$l$2ymxMwF6uE{*bxE#8=PnbsO%JHAceMzkl(E|D28VA1o{?Vzbm+ngA!Y z?0hMS^6EYBZEbCABt=Cbz+^@iI(CZtSez0q`yr=;n$WBEPRp$lpj>1=ol=HkDS3La z;r&|Erfk%Q2~L?5c6Rbr`33M;E+y8D_NqP4pxwj#=+hr*?WIy3Sn_DpZg zZ9eG7@#&-KLenA3( zAxpi>W6qxJ$yM;C1NfVvi&tk;U*l;+E zl}=vwWS%wI;=KvsAh!d^YJ}{KHqcz+p~*BvU3HUQoRx8%;yr;vjvOZpZ*XKCU(cq3 zeEr^RVU_nW8W2Rcgddm)UN05kPSY=l(hEG3ZgdPnFggob|6D8plO&0a)o!#SI*hn< z3S$U3AtLadE3nky|E$}Y;%Ir`HyZPtvw#0qoQO{~1y7U$we-ze9fFIv*1uw){jvq; z7Ko4yG|#)WEt13D{}vo9nd_M9`>QmQ+!L7dD}NO|Xup{Gl>iA(k^s>~)Jkk~9?kOu zzu}2bwv>XHjib`+>L4-T-zn25erxDoA`eT(T9*x#3l+^^GLIjM2K|r)UD(ld;x2%C zDmX6pRjs~-#P$~Q-Gycv^Yc4X51${*LMt()ezy=1jb^Pm3z^%`LUCJwqk<=_Pw7A9 zGR`Y0Qr&;e^$FW_eogJZYu^5r;u;~$%=EO78X2 zw2lTXV0qYLLAKtnMD+AbcFP>7+&)L*=ar9tn(+C%pClF{+M+|#LK2VLX~*dJ2d*F7 zO2!C(l_;hgaMxBgAZ}@|7bK6NV&{}RYY1AU2x=~n72b_xd!KboHH9viqw;JU&KY4@ zpy}=Doy-kPfE~FDS=E392MNdy~dq&^gBZ{I`58V_=+4CLLFv zl=-C#xi?Tt-SAMg+(%#8UKOT>v|3Th)n)2H1_=%7_m>kFh81a!mo;PccjNK1Q~4_u z!p@qQrDi=VF3B9-A(KM1{RIjKyOrJK(nte=V)3md94~=sm9l7fcxwvQ1`z}HGIc*! zG39{KvcJ?6NMV_>EBl1HMKeqYgxHAWx;vPtXxmP443-#zMOyO4c$G4=LP-3i(HgLyjjgDye|mN@~E?@~=D(IRl{3z1Z1j^{2jdK->; zZ9TwDf|ix+n`G773QD>4qNZBq06)))heLw=o1)q|W+b|`Ef5NzooSr?D~{1z?lu)d zww;D(Db;En9aaPJl0QKWgZsQu0D)i)n!{HDfnrwE@vlK$%rE+C3v_V7O~5WveU8z0 zpEI+{Q|Z5==tpEB#B(E^yd}Fs<1i=eRcq5u%yt|?#B3!Lstm@XPpNa6Ef@I-sPuiy z(C3>#PXJjV!<}P;7y}faFbMtdvUPOd)RLOwiQ#=W2{JdZ2>ylk@uL^v!BQr z1`ti=t^OzOCqRFj3?c(xc6}#`-|viF%S-#v0eMv_lnIAoL`GCZZUI54>+47Ud~^#w zdvps8efO@>njx&PD&UywcA?0GIln<&Z2?1hj3%H35dwyf^RRUzGx4?)nb*!=*+>1iKnRp* zF=D;>gD1ZK{;1>YV9WVI<~_QV*t(?#`B*0y5DUAzqhLTZiGwx?((_&-)i$s^n0>t3 zI?PpnblPfGJnTOOzf^0L)Bth>N6w=PLKQwvYRkJ>9o<^UGAs1{<>O&yyJEA2lV+*X?i7ntWA#_nzy6aOa~S~^`n^hy1$o5N2Y=R_>dhHx+wq_ zWEa-Sgtz2!e7)Pw-AGP=9-H=WZk2rkz!qbrp2v_tLxGWlNIBqtX=vRL9tl zy`NmSiV+>o@Y8&Vg_~(a?hMuhxay8{kCA#1cRWbxVk?^GxcOBNF@9J-Le0yg`!xa9 zkvvv?Js<&LQ<(stUoOY_t;3`s{8koYO9iydz_>MpVCu027!QER;Lb^#XQr^fyV{wS z-gi#}yLCF>meuxg_jX_S0Ah3k1%!hd^4G|;a<$UmH)-@e6SZoiotK#^MIU^Y*TbRH zLa=iVW6`#CH-9BC1+z81r!Tu#O>;=SRxJ3c?GaXgp?s;_gE4`ZF$$I%apQ!zhEkaG zBS}qT|K3DNPxW0JCE?ztsAV|L$rsCl37tq`j=&Pd5rOwmiV+16Y+j0NuvFdJe)}q6 zwk|cpG#{vPgfT51ELBo&RJ=iq;Bz+_7sapDszalf>{o2YKQx2x;L=e(S|{L7mLXsZ zfb(d0875f1)HR*SO$*J?sqS%`&|ZF|@7a~0a5ZhMjslHuOAPKn!gfJ*t~j4)F9&J9 z4rk#K#-8dGDULi9blx5zzLSVz;mdZ3V<8{isofEXo;6ZxQ3b)#Jtrwsu=(?mOtmxl zx`#dVuq9}>bZ)%dr6me7n96wR>Ej5tFa_GVEo2((;vj^w7GDA(P^jjYxhR^_X{rn8R`s8B#SuHF0- z=`kjfC|{Cvnh~9J5xWwVOCnco$z40${-`OpaDOc&A>A&EMx@ zqoeJd^}AI;MzA9VWhB`Tp>(Tq@!(>NkqyKV4N*nMv}QSSH8omlcxv>xEG2;x0IEpz zj&nt>?my#|GcICg!l-D6gVh?=-nJEqpeyUUK0m*{f6fwa^31x+CI-#Dle#N7Ub2)w zWAq1)SarPUD5J=>>^QCJE}Jh%aFzSms>EM`DPs5IVz@N|i9+9;uOJz1p(gwe6|cSl zDiBQ5J0DeH0VrbSDy2q+#x;|w%6mJ$U^*1y&YbZfsZ?~Id8 zGjxi5y=nL(_(v4s8+)}&;Qhy%NTXj4XHXZ=4;w&_js#f9-DZ(uG*thGX|#x~Ya^3K z2Jd1pFuHIL-T#G5lEavA(@VF;=|5Mp;GUe%XbGTl{1b44w|ogk-lPAVPUjW~3ym->Mtg2mDog0K z-M5X55h?ZO5e1>RJX1+DV<|LW1DXWcx`n5a#jc{8LqTfNDl{UwB5>a(VVJMW^#<(3 zvA~`8#N+JjN2EZsYNd)SlF~YQT!KwWjeuE%^C)pD8Zv3$KpomCihVUzLrmGi zRk*f4$hJk3Su9dU239c4)az#npH9${SKb`HahWg<2cVclmmA_0gH z+_P63EGfh~qjfYIvZV-MB0*o3DE+w)b-s9~3R!vw@X&`&ne8CB6v;&qdu`R0Bku;Wy&g>(e_vbSg@>lAZ00 z`f<5I>U?`%{TZYR_)uH_3GNO0JcT~!p+faR6XW<{xJ7RlBbIygrPwKhIals2tF*bX4^>-B%r5n&p?yD4yQfM zcGG+0@y*=7uLZxP7!_+Op!w6Er%mO>Z9E*NU&ycHEJz$u{SpKPWUVx}ov$SSB>!3G zMc2Ghw!kN!cm;Z$Xg}IZBwm%9 zSB9+Dao~HgII#&4wym-&CN5cA`R9lCz^<5hn{kmY;-qt@`VOyCa0gbRl>|vgQ@Ta% z7zYmTHx=W|Qb7`BzB!A8DRl^!?>QFr?(+c1C?>0RDjFaf3I%7j*r;q-V@IsHimQS9 zQOTl{1eodI0PQ$twEbgSW!#w#%PE?#tWP=r=>!}dw;N$gwvm^uCQqufx+c}4b2k!= z|4{rsqqk*Y)ZMwkSIka6IU!I~CP*#^t^%~waTcFaiQQydtf+A-m9UPQC08TpI4ng% z7`ib1zx(M24pjZgVoPXOBNwN@$=@`)$wbI5qZ1c|$Te)Cq?TgRDML7^&s?O>cP%q2 z{`?w}*%$ag(?=we6u|kCDO$Q8eNgT;v4(QGi^_iv6CJD!NQICNKmRs46w|V7nQEJ$ z<(F!a)$d3_z^eR^jXjOj0!#*W_kiA(ZY1~A)!49)26Y8S?}u|#-)V&6mW)|6sgTxD zUMX;Tmxx??VaO;%5{=WfiZw)Y^B!!P)ybPVB=#|pXt52ib2nI@<08j_seU6Y(d&0x zA&pHk89H!i(B2WTz)l?7LUqSh=iND`AiNACRDk82?6V%9=s#XI&kyb+uav8VUrygv zQX(#P$H>;Cz@0(Z-0nAODtjX0h9@-?H;WFf^#TN4L83tE@V@!&XHpNne8YLi+$A&D z5_3%m_^>g=lLdh)bv?co<$%U9rcF!{b4uYUwj#4{=zrqt-!m=ZMyEl(XM9p(L~4b? zdMD_GT3NAjilm1h=WB{~7Yx%;Up5^$XR}nxYjrqAJ)}ysd;;t6;PUDjCW4SMUGrqI z5RZ0KA#pcP<;U2g_3sGN#dLIH;>BC0^~=AkLHBDybEf*a{49+;2Wxt1r~;+|qV67- zB?v>JGeoja(kaq}S-1h8lOb!mYjf2h?@yj{bY-{fo(?#2?pwArEdRm=20@TfC;K&N z&=$_8ZKhPmF4+BN?p59CX$(eELB%#_4*2Cjp3QM3o5o7ef2AVQtIy z``9-Y3PjwFBcK`NM4KtjtWC_dk0Z=|i|BRcS^-bZ6hm({ye>bHC2gpq9-9|_hLX~wctZojVz}>_jZ`8$Q+vfYifG~+ z6jq4n0LCa*z=Ca`tCUv=E@#-k+;Ay*mh0_4EK&Xlegd4%;a91&b?t6%v*^^ru!W) zJ96?quzhdJL`BW^7i}BB9cIi!>c8N6Ix*!A%&_5%_Q$BSz?T^;gcRL|miI{6c}l>_PX` zUovM{lYxgQW0_C&OU_*V2a1Joo%_n=FJy6Nbv|caX(X&{6ie*Rkzb;@Brw~Egm39= zEQ0XL)>`VDj5_Udf=_Am*6H-L`^#5J(iNVfScuk7=N~8eWYL`|A6sv0Mt2P}M`Kcm zeJU9!r7rcIfc zHFPp2A_+DeN0SSO&4L#0g_0>i^~M`E8f);yUoARwNNQ#2k`Fha> z_hvBm$N5+IAT5D0|J+C3$<#6|>JHxF>Y?Zia;tF4gH(>Bz_BChYbI#@eTw4d4Aqm- zD_hUWF^CO+%ID!9*{du3viTC-ZF73vhCV?Ot}zb)m6GZiFB>&uDu7CZ?J-sT)Aex? z;vrSw-n=zwbyohs3X&!%XGa#7-)d`yC(S9_r*CTI;&=q`0+s)&@zWnDNwh5}L&cVn z$)I5qei)L0kdoH02so-p?#S2C$3JY2O-ArPm`qvyls9IFXm*X}4K@8o*TFI@QeXv{ zr*{LNkax#)C0k@f%oq%_mXd7bppxqcP726Jh3#)p{yJAQwP=Ui$B?Z z<*~e^m2BEi%JyRiU5pw*EW%aQ?5a)n60V;7s@mIB{Y})-M-wOkZK#fItBcF=`!V7K zH!1d26Byofra93aCrealpo5zfQu00!d*gss$Qut9POKLEhe}vVPL}RoCaxCX_4#XV^5aUf8dp;a@=D0E d3i1`u0G1q>g<7Nv1@PGb83{%4S~260{{wkp=!gIS literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/43.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/43.png new file mode 100644 index 0000000000000000000000000000000000000000..9cf2a515c475990bd32aeb1fbd4949ab991e6454 GIT binary patch literal 12717 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]D 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%0A|JO=Dss!rZm3{U8u0)V-#fkTz{iDsd0MKZ!mcja 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 V1=Ow#sZ9U?002ovPDHLkV1j)hvqk^_ literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/46.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/46.png new file mode 100644 index 0000000000000000000000000000000000000000..a33e09b74ad23bc60ca6594a03f43ec2881d62b1 GIT binary patch literal 19843 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 literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/48.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/48.png new file mode 100644 index 0000000000000000000000000000000000000000..3a5443b65fede2da9f3c3359337d17a67797f2fa GIT binary patch literal 17929 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 BVjTbg literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/5.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/5.png new file mode 100644 index 0000000000000000000000000000000000000000..da85ca6fbf7fdf73a43af64e35634d38dfc1cc4f GIT binary patch literal 12671 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 FV1mDwF8lxh literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/MLB.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/MLB.png new file mode 100644 index 0000000000000000000000000000000000000000..e0923534202302a71baaf0ef1d81b038b26b3100 GIT binary patch literal 26591 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 literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/NCAA.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/NCAA.png new file mode 100644 index 0000000000000000000000000000000000000000..624058d637a89d5d898d091a69b6b8be1d00b30e GIT binary patch literal 10955 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 literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/NHL.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/NHL.png new file mode 100644 index 0000000000000000000000000000000000000000..880007dc61a3881fdb4cf88181a8dd6c9fff6f16 GIT binary patch literal 32198 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 literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/NOCONNECTION.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/NOCONNECTION.png new file mode 100644 index 0000000000000000000000000000000000000000..06a90dd8301e0dc4c363f55afd3b0a0f5286e506 GIT binary patch literal 6611 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 ~eoxJj^^Ng% zj3+;3`HROtFtfQYY_UXYnmOO}$JYMN`BmcZg%nyv>ALu8aUsFCkCq$eBBmBCa3jkk zhuV}V-(Zz(sm|zkLrb0aTsat}EqX^Ym+2}F<6cPFj#L*j8@8ACDJ;Y(>n8pE;l5T; z0sD{@gnG%c;-iZ3Hb`d``gQ)|!{i=f)`hA74i1EEEu}@bS+E@JZ!761v5uuvPW1|Sfgldm&Hxbcvw7=vGpoZDDzir73sUWwe!@;Hjb~eJlxPm zc1S6#`qG&$8KJW#=E!fA;#GquWd`kiFdgBooH7A+jZFhqR0AEdj;)#IV&|s5CE2(W zp2p1tvhs}>bK52DSe>b8=XY-y&FW+svHBYzjJFjUK}niJ#m-yNfs^_Tz7=NJDItSV3IXe8oOG{j-US&`Am9iSLF z$#>r2qGW)mT|T{qa@$1K&{N?#LRe@9-^cpQ6m?(Dmu99B`q|OM`0a(c;7HW~Rn<&W zguSiZs3DWy$+B0DkvHkyICcqJ2ACn=qHeJWE>&_aY(A;03KC2I5UC}@9y9e}bjqsJ zl8Zrx?0jE;EPZKEad|Ed)iC)%WLC9%EB55$gPZc=x!2MgE+(4W+160{-oAgPwBDt- zX;~MPYcDiemSLl}-V}vkE(N)DC&-~AY8J5808F!2zt@@-f|YI z)8@NU3%fkiDxo!d0W}v*E_{l(`?%}1jnsV2HKy2pI>V`1mwqI5#mu5%mV}QKo9mC1 z8Kq=NeGW#&`;O!u4A`Gn9_uA*1Kk#j5z*yO!+;v86`hj12{8d@1N=(#-jAK5%r AUH||9 literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/WEATHERALERT.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/WEATHERALERT.png new file mode 100644 index 0000000000000000000000000000000000000000..e22568ab82577cb39dc9e4246c272682d0cfa346 GIT binary patch literal 11185 zcmc&)Racu)vkt+%XmKblTBOCLcyV_qR*E|mheDtfcXum60>xber4)zY?(Ri{CWrH_ zb8-H`cQI?;xtZDf+0Q$(*UXO8P?N{Up~3+G0QiauAGH7gl;=+r02aoxGX7d-{jAVz zq*SE4^6#T zxD}yuiZ=Th=AI+BrYfIe?UqpFHAp{x+@-W{>&;wS-CJgl`p%BSQBZ(@HVQPCmHVHz zHg`QCZxCTmY*k0ZfPw(x1W;RAYQr3SE#8S>iM2_k>B+IW?kUkp-Tz6WYrc~(Zz2z^ zfR@bL{HnGjQA&sEm0ujlr6mH*h*%X}62L{!^?I!O@@0Dc)>>t0S@VfTg0WJ9^jR(7 z!^=pRNZ<%VTO?@oOFOzMx^Ya|$?;Rw=k`~xkQ5kC42cEid6y*ZP(}jvDUR$wn)s<1 z4gzeXu=4z=r1tYNaI;Yyi!JM1V*a)578`@jqU0J;X( zrZ}l7CHbxtB+~3EcX7XEu%!JlEY>;v3Oc+7M{p;iwBJ)8ki_J{DfH;Zv9-^vX!*C_ zcXLhp@Q>AN-^gRi-8Q^)S+!)KkyZ-_SCQ>RK}nCim4>z@Y$q0bKT4_j{EW~hSm7=J zszU1}RsX-631<#HSohn9Y5bgmDl(Qj)(>*!^F zLRorH4lB9nhT@n_zUC$()e>=_4*tkUy0MCcC}eceV{3&$zut>9nHm40r_uv50$V8d zSvwnloQ5oHxTt4ZD$M6AY5E*gk_OxuuH6a4CB}r7_5E+Q2iDhEh1{7J9v@07U_5~c zhGB>i(Uoe`n5{Sf2n&+|#of36SU5OSr_$+;7ZI%&@S>5W^EZ}5M%*G(;;;^5(IvaM zw}2Ba;e3QI?qg_|i0 z;H4H&qF_lbZMYFUJz&fqoGE|O$s%|{B_ks>^lGQyrJfvKDs4(pQ{s@T^*?2<^e5yI zB4bTFs>2$%Fb~Y7+g8U10#IyGjeES>f9%)eXP0CPFwG~Xj&MY+)_0kF z?`dR>{U~4B1E3jwE1=v({su{*<*4 z>g>Ptjb;iw5L2yTdq@iEGV?=X;0BU535CNSghtl33>wzX>EU%V3Vbl1;DirmTEP|8 z+OEeGb+-=bw8*g(Rg*hU{JytU7ak&HD9`_MoWbC$TZ4shXiRQxI^HTZIYi7)YrBLx z^1BpwxQkE?3onX1ZTL+K!OU0i=eiJTJLQ_oGfyXxeHtSg9i*`$`o&kaHXkAgt&*bP zpS#FYrA1S^Zo?jpuGmIfy=VW<3HDtTOlbM`B7FLL8mn%K*r9Aqwy*3~+KHI7`c+RL zj{L_XnDafHUS9omD={&6?PX>2L!*O@Y@OEYFL3{uBgBd)rVBi?-y83&Xa|{sbS&$T^`#y~DEyfU3Ax7ofj1S6!RT(SS@T6G zI`jY^ZMAPgJ`)Vw<|Mksyuigp0iXyebL@@zB@M1NXXI9Mi<%|T>KrX+GR~REkVg6x z!DHpGnC7Z?I@Sd6hek&mqoQQR9~T+E(BQYw4i9mJ=NdPwa?{pOkH1h5uI=~`WeUQF z+}%C433zS+Hf~a6;xKhHH3|76 ztD|n*_Dx)~00SwGFs+i3W2pZ_7?2??H@TNcs*4G#&vx*A$(BQs97~bCn@G~~MrG5% zryZ?&_aS2lp3Fs8m*m8kMG*vO;37Vd7=Chfrh~7%ZJCR0*$%xdbSq-xajI+f=|6%@ zh4^efGB0s?1!|MSTjGosYl|oe!qr_7B5zL&tYu$o_NQe615I=Cs|A+%S$R=8L?#yW zwOnD6XV?6Jn>cE+N#vOMPc1(@+~UYoQ7V2T$PJbJi={$@ zpGlO!5410Ok4_W}t9eD^t8&ix{mqgwc@TCE4%h}=FImC}MKT+&l>1HIhIoq%`NLz> z59Nib&DcqKIlR(+D{Y~=bl7q^(&}6Sat-AyNEnmYe6hlLw!9G0_hl>?6%)AB1R~Bx-!}uPH4wLdPtyKOha(S`zVYI+W^WM2F1kYC!7yj zM_nNGYlH&+R2x-lSa++VTiR>LC!r4vm*){E`se!R_p4gtPv^jW|DP2 zYHnGs>~F`e@fgYhs$N5!$7O88DRfIGi;69YiWZ)W^KgQnzk1Z=Fmt}_rour{`|m9|f1)6cTf2@~Gx9S> zE6h}@wnB}8!_m&>5?_}Y&)d7E=81m$E>>H=YkGOYsH4;u%*`Dg%j}$-yl-$4$iBDF zH;~-mPz18StNY&Jh8nmD?CK+;aRtA`68k+%s7fdaP>Y?0AJJLD+e4BMzl6Jkyy`y3 zpOWVC1X~j2>vv2weIO}qS`gm|YS)tn4SV=s9cPXVk5`+W9=Q^@7?pYjDpf!29nH|b z+&6?Gp0ty26aue0*f6&H#;=kzl4tkv`coNryo;IIfs9TOc#VHG`N#q?a?)S>YZ6 zxU(8gFT8tZ)?nhj-+0YhMctsaqE@ODU(!FZ4_}2sF|M{O#ZMj&q=aUcwp^x|i@B}{ zKcQmasSHJl+t>Wjcg@k>LwY(OX$@bm<4Wdg#?y&itK|-9^K{jOJY3Oo2-$CS0w3!& z`d+AEVkpl`edRfCY*Ug^E#@LiApQ~nLqkDZ{|N3{1Dq!tk>I4(5mFuNpb$V_ll)Dp zD5J4A>gT*pHNAa}{d5QC=mnd0-v5b?igvPZ_-iH&;6}GK*VHgX7ztv)G|(^zX{qAn z7){y#5#7}T?Rz0oU6``C8XgzL;8fB}PLY(+GYd+2l&>0)lX#Z_A`6_XS3v+83!dVm z2h}Yf-?l=(VTYZBv3>CQ>UV0FQnL`T`z$70501s24QS4ezOix6{t^_lQr^Cmqwlvh zMTPoLD~Lo8cV~Nh9u*V6%CmzuggiRP(9FHyw9B%;01TXn+)~6w>x94mt#d%tDUOpd z+(a?@LK5)Jvg*-@h6z*D?WM1g)_KQh8VvLgfP;US&Nbln&3s&`2|r4<#7gTODPK4N zwO;n>!5*K0ycVE+hb?G?f{zB(_VX!Iz(dK9sJGfDzoBf;`O{GxK6YkytHE%B&4wLf z7d^?p0P?R&yxngm1BenrWL;sbL4bFJHKq73UD`8q!O@j|h0xi;48|=v-x;43jN;Bt zM%o;lU;2-x^BeiK+OsL1?9JJJC~nrn_IC^g>A)72HKDTda-;WOEb&W$X+3cW@o0_M z72DnyYstjhI-fU%CND1Uo`h14h7OphLZ8IYt-e7@VWd+2F98c84?#Z=B&`lPJ%!Mi zJb!AZzcK4D=>CtLE*?y1>Sf@2>?hplsI3qTeAVLWy&OK^Iz_i#Eg)mH;pfty#*gYa z(NVt&Wx{or!qmbYllv4tLe6>2LmDOtNH^e89AD}LKI4T8yL&Wpkr@nl;b*ih zmIei;08N_R&dOSG!q=*r$0Yb_@+H>RY=_h_R#&ybS=^!-NM{d#oh*GfbwE&_&urnzU)f(APld?#ofA-*q-Y!v zSBR7OU_b!RF7 z9^lo7tDWJVb-_@%kRSv_kh^_yj!DjpTXt7oMv2|&tul*_>~A9FJ)L!@nV&7gj5F(j zot?l!hQ7b?%$zLQDqUVE(aTQQvEKtDCSt3v(X!syx&RsaeJh`-)KCcHAc!W})VB}% z-HVz0X`~Pu_-&v5-4nV*_GBSQ%G}(kZy@npTUeqv9hg5$5u`6Y;;HUt!p?R2Sx+aX zEXm>z;lIw#w*ei#n{hpoitlB^2+y7Q2Gwb8>^+#EdslHi+4H+ahTm@(0T=gLYuxf) zBb=%=Q=(DLzr?3IaYG->HfeWGs3t@1nbmZMMt@P{C0%jkQt+OO0ZMMkSJay7~}b*lYF>kSb_L3C-1 zOnpaM!34Hh1!7p;E60ZV1_zK@#G~wxr$V$WE01N6cXzl-5x?=j*AM^ZAczC8uUcn8 z!65|jBMHe;jNyQ6Ud^DXXh4Ty5Xl81*^uFdD~o!rA0K(-0!H|)ODK&C!<2->yG|ty zax7oe>|Vvup?_Mz#N?eu!q?chFO%wQ;*0FQN1Fh)KdyvZk$%g7Oy=k$XhliaUFg}L zJ`^I)<^Aj&dAe_2?IGgE3PFKVCoSjcv&1vBlm7O}9ji`*A^;F}jsC@wsNpTeSK5P? z;`w-wMZZPMn^(G~tF7h8Ae0BMK!k9mL`}MBrLaoYi0OdP&!aU+M3&ws=|m~i$vzp< ztTG3_T+Un^g^ejn+q`v0_bz*&5^p*qy=1>OfreLQ@TCVC_4u(mcGo5@9a8#Ji zf-k47c9P5iDGLm4)aXjfFHW*#Np5HsIb}}9 z&TOqvgd_BxG3zfTVWzuVlejhAe@aJuy3+F^kp0C$MK=1Xs3quoUnqFjGC7NAN2h?B zQq(KC)?Lu92f(?>x*k#>0rF z7JGSRRiS>bFrUMDpw=Z>}Sg1Qi>!+|`dqlgp7*ZW+S@z^R&9yhsgvyRBy zBmHcc!<|2^i2Nd$DGJxR*y1FmgoR6Y`fD5(sVfi&=l-_qrsnVf5iDtG9dmWfBCY(1 zRLP7vfd9b9KcWXvs3IAxgs-VBzDZb_xo<|^i`{Ix5rd#q@7bIeNnMToe}fetb_}YS z{kH$ET{e+`IU60$@&=5!5fV4Y_FXkPL|$=XGQtRL&29Op#eX8Fb{*=TeVy=A-xH`A zr!jIPJe2!m5#QvrZ3IM%y}-{XJ6A@&?544qZN4yq6w%7*iAHM3Knljs!J*MHiPg?6 zoq|Y`WxZ{IVWL!9wX69dE3N>#8NnE1pb?Z&)ka{4fD2CmuDS$}9%(e_K?I+|rt_i?$YFM!E z?!f@ZWEg+>N*c7|qs`CFQe^@cp9p^4up+PzG5~<9Kx%4gCuI7@zN{2@v)6~4$D6!$ zSY@ARKAaq5PQ}mIy@E|a&j!p3Ob-k4{=#0ha(=RKB`z8+QLS!sJ5Q=4D5X7W)ko@1 z|13Cq8w(F4TYFRlBK;K+NDuM>#T)`K`h|ECn{Cy)G-4{*lhI#h0Z5h4tXRPwdubgBGN3)u706XwHjqFp-`uxiKME(BpxW?ZplNxzgPi-; zu5uNr9D_ph5`82`Y;T}ZkYjoCP0|%zDG(Z&vC3Sqn+JZ&Wm1S~cU-Hpj`CZoXdOrr zR9#yS$9Ii3B_(uMsPOH~{uLye$>u16e3XA5LNNHQ!)`I!#qfSGqjoEn{N~@NGiFJe zDs`R;Acxy-=!x({OXV3;I!(%`Di3*0qAb@w-;<$%BNg(SBBP3Io&0Zgl)$fri@ z6P8!HwQ+T#NYUt=U%|Gg@eC4Y<`556#*b+J`R+u|{p;1o2P8fA*@mCIc2nq6j^ zWEXfFYzK}*B?$>$+b($zNYzn%BeaGG0b?2KLIhx@A&&VXNn;J)s5BRwVm0kGVct3WcqLN zC&BEjX}jmtZggfG2=BTQ6REU5J%~qXspQ4bfC>~eSjbz=`rHi|Xl5)Pj^Y!*!tqbyH=EXrfu6p2CbL?$92@6Chz+|}DPMf#rN zTOk8Ds32`FGv%s%v?2|E%RolYb)WS!;(PUJKEHolI!*^=-9EQ@ND-iTfo1S^aKthr zjDqLwdS`0mwo3&@!6;Tx%1xI}TbskeUHc+RwYLL1w9+UJ&g+H9&Ehn2U2&*3yWJq; zwPqeqx@>il1Q^R|3X%DExWk=S2$b3XxvK?;@4@LkvJt;Hn#w9BN6%TUM57|?x$ba( z=mx_lp)u8nLB?oXS?5DQ`cOtKIor1U&EkPZ{`oM zBm*8dL~J%pm#bFVSk8>D*D*%jPM(g(BnB0HH##RBN!PU`)X;aCUvvCgwRsy}wi;Q2 zH`WaJF~EJ1n7B7k21)_0mVu^R2~;q3!ULJ{^8+|2u%=!2p|vuK2ZsK=#4$q7!+Zte zb`t(*RqY#p19+{+mcR6GUHQ%bOcx@HXcy)P6?eFE_oY+dSzpzMbVWZoSSGTlk z+?lc+TmOdL&Cn$O<^!!Ynw=c`@wLimD1v95Da4Fh4o}M?#P8~`Gu9t@l0)ra!*&M8 zSo^CJBV_A!l6M*KQ8;cHqA_TYU#h6J7rx_RbK>(EM+0!uqMGAExSwh?`q7GjEt)%hNyJ zWra&n@Oap+@NC!nnMM6%ub30R*l6=~Nu~SsA?tED=FRmUT~~zcjN@jp6}2UK^dD*R z6_z@OH}(i6 zZ=kZ|N1=8GzrG$wI}PUFyCq`mdq#@_%C{?RB2L8q|2iT5=q{$6BVQw6Std zBF+9UMnF#pc-yal{T@XnYn{xojVCdFL(7sW$gcPlz181?x!O0fonKxzM4YhL_>q_$ zuVRi%qQMyRHf|d~V*Gq_mEL~^OilLgbmV`$%y+d={kmPznz9Z z(1e_HE1K#TTJVSDxcjItZW=k?ZSJHa?himu*VO@tG{~eY`Cz19i!)*OU}_9VAib!X z(7-@~aH#Ifjw0gbt)u9~pPmIO)Rsi2uI)VDmUH}fGNW<#(da_PPpELM?3TpENKzAl zr;F=3&W>{|+P5bGRh5Okf&wD+a8kT5OTEtl=2B9r=9yRSYUl)IRr(*mka1l#sxdFV zwqRMI0GO??*^wfji)#~_WLzyGEanQnnFCVeImB1s*WZ?zy?5EBJA_Y=CYo#6DGtWX z5LU0y;9)dgZaids+$It?LwE_eMzUDqYw<$hV(+vrN^kqOhQZrSUCvs%Ht zM!{xQe-u4at;rM_t2g8_O3v39I|U>OsB*)Z3C84b7;ppIqO{jujDw9!ot@eyE%)j7 z@{t^`d)R{XPmRn1;bLc3^zUFwYa#w|Yt2u8sjIzj!$E=01GBNzm){{^J@2Eu2&+A+ zt^U}x2iOp%_`Z&*sq$VIxzzfs)v!2n=`DA9=i_sO(QHV=?wu&yKn*=hsrJz%1cy_> z(nq>|MIC+Hqp*42s}K@0ONEv)xjL?_CXy|KEN(O$-F^Cwr}891UP|wNdN$2$duTPa z`gjidfRqxVA;=AfJ9a)!f;>OfZSUHV+?-*X4p*6gXX%&ru)Fsj^Un-vKE+db-g+bN zenTap7al8D`Pq?B*4>z3kq%?06#NZu!c*YkoE+h~QXyvSngh zSD}4uHzLivEtpncp}whq<%diajQwM743Pt1p_Mlm(&K90Eq~!TX)$H}^ltSgY*!sm z^Q$Pk?Z>@6n_8IcVEcICjYs~oHH7;$Kx^&Hi}G_;N)*gi?2zovHJkIic+!kf(U0X< za<;<6EjGy-^eL|WX0kSve{V6TXl7>PScgYr_B+1R4iD1Qh+4??-{*v}N8=!Fer2NQ zzGZoOf4}#RSMQDnrEdJfTF~TXT+)Mba$R#xErNTcPPTJs(atCAK8W67O=h ztyPoUC2{8Uin%tYzCiuA9`hrYR=Brn^w+vNcvawS;x#2D<(|V(b&u&|TBXp1I-dLB zxfg1F^MkH@EM0)dV5Ra}8oqWuI^MkrUk^m`vL47I#~UW=2aNUolf!Ws40aZT5vI)axF{wd*WX=xZJQ-Qt#u z#yE}_<%R5h=S@0-*WL+YXvJxAbJNzdo!G**SDJkOFfEjUB$PMN{_zCQW8ioj zWx$G~ol7itt9t!Gs6h_RQkv&ACY_(pN&CXWf=%)7@dGN+u%$_S%%S&i@1^d}3XA@D z37?~rW+;kdth+Fv{Ob{3E?NkXI{9pG;~#LW$IYZ zxrjOu$ATW^-pKm%YsYnXIU9Ri9wnEksA^F|j9BW^lDZ5yHBcy3>Ph=%_-5>0gR0k8 zo>6n#uh}r0hmbyTW`RvmhL=nhjQ1I}1i15LWjQvV@7f=7$-SRv^+~mk72r9F%qZ9o zoxf~z_u77R_sIoPaaMz?546Ll#t8J>;`=}kW~SEYD2H;3%=;$tKPdF>>?DJuQ=(~J zF(i$Vtlc{bL*HCSd#i22ie^pw3JCA&2{bMp-fw>h;}PAD3_3cSrc*;~Fg{O^wYIw> zZ8*Lb-7PzCti#MMmDO{33{!ic_A|_LUS$@B3yDdSTBWhu6RQ#T15r_^Pk-Zs#mczo2KY#4Q?V^3cpgHX zEM95%N&~f+%iJUs%EW6O>CoG!ng^M7KF}bhTtM&&`p183VI4QC{#KAfdsW4k*ks(} zob0poSt6dpzmKZcDB?cmV6dqeb>BW02G1p^icZ9tb z8x{YT?WVJDXAj(Isort!1LX~=f^>Kow7R;LmOMmdu`IxT3~aI_=~py2qG?v>CjuVh zStY{lUZ*3UypEC#U8+G)3txtiSv_(sI!si7#t+iTf>-L#O{f)DB>}=g=l(&*v*{-S z0n|n_l$Px533r}Jkckt)=*F@{aSj698qs}en0mDoL#0J5LiX~dKKyXzNFkdBO_M)8 zbp4hlICoV77aaRkOWL>6=IMY~4S4vPVjJOHHCFtV*s%0TFbO(-6C^dhO9%d>%FfGH zebLNqGxZ8^q7Ue}4{Xz4<5qdwY9l<;LpOTOqg8TvH^T16^hvqRDbX(Dw!w(yYoP*z zLV7>19ZEDGn~k1|6uTgjO;1(AqL5rlp%l0l251<6AC%~5mUZE>G z4^55(TG!9JU{lsP8XW#y?p{OiFR|Q$m(l^ozh@1N8{#Q%jGwQMf7!)Udy&C;-%ud=>2J^|oZ}KtP69YfOv)qY#n1he0CLhVVCxJ>NkZ z^@nfF%K4poS*8$Z>rB|lTZtk8H?9`Z&l-_rkCUju1x~NgWw*~dl?6!evWpPmP9)-) zH!OfvKkrf9Q<3t8LXQ6Qp$K#?X-oHXtjFkDcBPB8j6TW9Zi%{+zopO4 zC9O|Ztsm3|bm@G=J{{?v4x|$j#R+C?{i(7c&45bQ2jB4*+02znlaMu}b>$_x}OCA|r7C literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/_25.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/_25.png new file mode 100644 index 0000000000000000000000000000000000000000..05cf468ede7eb0bc7c66d6a93e3452d7a1c98534 GIT binary patch literal 8691 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 F{{at}-Mat) literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/blank.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..68945a976e02640175929180f49d6ad5d49725ee GIT binary patch literal 1095 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9GG!XV7ZFl&wkP>?0v z(btiIVPjv-@4(4GzCyA`kS_y6l`2qkGXulV|3LaB14F3+1H-EX1_rAc3=HD=lj4uM zF)%Ri^>lFzskoK&=l_5E!x|Dh85A03xHTuFFgGwr`7$WWFtA+6V3K$U6m}Cnz`@SI zXflhz&4Phr!9^B>LyQg#y=o1Dd<;w(CX77=3<3^|ITKn&wT=eUXp*2q&f#HrTh9Eq UCH^@dFw--5y85}Sb4q9e0D(;h^#A|> literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/nba.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/nba.png new file mode 100644 index 0000000000000000000000000000000000000000..7573bf39030f6bf5b96ac729438638a8079939d8 GIT binary patch literal 12506 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 diGrbz0FXN_cDq4-*8t#;{|62>pd|nR literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/permission.txt b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/permission.txt new file mode 100644 index 0000000..171f943 --- /dev/null +++ b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/permission.txt @@ -0,0 +1,37 @@ +Weather Images shiny 2004 rev.4 by JyriK +These weather images are designed to provide the various weather +conditions reported by internet weather services. These images +were originally created for use with Serious Samurize. +http://www.samurize.com +And now are included in MediaPortal, an open source media centre software. +http://mediaportal.sourceforge.net + + +Changes: +rev.1 Filenames changed. +rev.2 Again, a few moonphase names were wrong. +rev.3 Still, naming wrong. +rev.4 Added 2 moonphases (really cloudy & fog), Sunny with thunderstorms and heavy thunderstorms. + + +You are free: +1. to copy, distribute and display these images as long as these are +provided free of charge and are not connected to a commercial software +product. You may use these images for skins, themes, and other content +for freeware software as long as the copyright notices are included. +2. to make derivative works + +Under the following conditions: +Attribution. You must give the original author credit. +Noncommercial. You may not use this work for commercial purposes. +Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one. + *For any reuse or distribution, you must make clear to others the license terms of this work. + *Any of these conditions can be waived if you get permission from the author. + +Your fair use and other rights are in no way affected by the above. + +My deviantART page: +http://jyrik.deviantart.com +My Email: + + diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/yahoo.png b/SuperDateTime/HTML/EN/plugins/SuperDateTime/html/images/yahoo.png new file mode 100644 index 0000000000000000000000000000000000000000..fd4b4de6119eecebce2a393e6379bbca6912de4f GIT binary patch literal 6473 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

  • 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 F{10nXT0H;& literal 0 HcmV?d00001 diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/settings/basic.html b/SuperDateTime/HTML/EN/plugins/SuperDateTime/settings/basic.html new file mode 100644 index 0000000..d4d7991 --- /dev/null +++ b/SuperDateTime/HTML/EN/plugins/SuperDateTime/settings/basic.html @@ -0,0 +1,272 @@ +[% PROCESS settings/header.html %] + + +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_REFRESH" | string | upper %]
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_REFRESH_DESC" | string %]
    + + +
    + +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_LANG" | string | upper %]
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_LANG_DESC" | string %]
    + + +
    + +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_CITY" | string | upper %]
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_CITY_DESC" | string %]
    + + +
    + +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_WUNDER" | string | upper %]
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_WUNDER_DESC" | string %]
    + + +
    + +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_LWEATHER" | string | upper %]
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_LWEATHER_DESC" | string %]
    + + + + + + + + +
    Long Forecast Frequency   Temperature Unit   Wind Unit
    + + +
    +
    + +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_STOCKS" | string | upper %]
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_STOCKS_DESC" | string %]
    + + [% "PLUGIN_SCREENSAVER_SUPERDATETIME_STOCKS_CHOOSE" | string %]  + +
    + +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_STOCK1FORMAT_DESC" | string %]
    + [% "PLUGIN_SCREENSAVER_SUPERDATETIME_STOCK1FORMAT_CHOOSE" | string %] 
    + [% "PLUGIN_SCREENSAVER_SUPERDATETIME_STOCK2FORMAT_CHOOSE" | string %]  +
    + +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_PRO" | string | upper %]
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_PRO_DESC" | string %]
    + + + [% FOREACH selTeam = prefs.mlb %] + [% IF selTeam != 0 %] + + [% END %] + [% END %] + + + + + [% FOREACH selTeam = prefs.nfl %] + [% IF selTeam != 0 %] + + [% END %] + [% END %] + + + + + [% FOREACH selTeam = prefs.nba %] + [% IF selTeam != 0 %] + + [% END %] + [% END %] + + + + + [% FOREACH selTeam = prefs.nhl %] + [% IF selTeam != 0 %] + + [% END %] + [% END %] + + +
    MLB:
    MLB:

    NFL:
    NFL:

    NBA:
    NBA:

    NHL:
    NHL:
    +
    + +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_CFB" | string | upper %]
    + +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_CFBALLCONF_DESC" | string %]
    + + + +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_CFB_DESC" | string %]
    + + [% FOREACH selTeam = prefs.cfb %] +
    + [% END %] + +
    + +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_CBB" | string | upper %]
    + +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_CBBALLCONF_DESC" | string %]
    + + + +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_CBB_DESC" | string %]
    + + [% FOREACH selTeam = prefs.cbb %] +
    + [% END %] + +
    + +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_OFFSET" | string | upper %]
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_OFFSET_DESC" | string %]
    + + +
    + +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_TIME" | string | upper %]
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_TIME_DESC" | string %]
    + + + + +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_ATIME_CHOOSE" | string %]
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_TIME_CHOOSE" | string %]
    +
    + +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_SCORE" | string | upper %]
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_SCORE_DESC" | string %]
    + + + +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_ASCORE_CHOOSE" | string %]
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_SCORE_CHOOSE" | string %]
    +
    + +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_TEAMLOGOS" | string | upper %]
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_TEAMLOGOS_DESC" | string %]
    + + +
    +
    +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_ADVANCED" | string | upper %]
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_ADVANCED_DESC" | string %]
    +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_DRWEACHDLY" | string | upper %]
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_DRWEACHDLY_DESC" | string %]
    + +
    + +[% PROCESS settings/footer.html %] diff --git a/SuperDateTime/HTML/EN/plugins/SuperDateTime/settings/player.html b/SuperDateTime/HTML/EN/plugins/SuperDateTime/settings/player.html new file mode 100644 index 0000000..9f1eda8 --- /dev/null +++ b/SuperDateTime/HTML/EN/plugins/SuperDateTime/settings/player.html @@ -0,0 +1,245 @@ +[% PROCESS settings/header.html %] + + + +
    +
    [% "SETUP_GROUP_SUPERDATETIME" | string | upper %]
    +
    [% "SETUP_GROUP_SUPERDATETIME_DESC" | string %]
    +
    +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_SCROLL" | string | upper %]
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_SCROLL_DESC" | string %]
    + +
    +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_FDAYS" | string | upper %]
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_FDAYS_DESC" | string %]
    + +
    + + + + + + + + + + + + + +
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT1T" | string | upper %]
    +
    [% "PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT1T_DESC" | string %]
    + + + + + + + + + + +
    Default Mode:
    Icon
    3-Line
    Line 1 & 2
    +
    +
    + +

    + +
    + + [% "PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT2T_CHOOSE" | string %] 
    + [% "PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT2B_CHOOSE" | string %] 
    +
    + + + + + + + + + + + + + + + [% FOREACH prefs.weatherformat1t %] + [% index = loop.index %] + [% IF index > 1 %] + + [% END %] + [% END %] +
    Custom Modes:
    +
    + + + + + + + + + + +
    PeriodIcon
    3-Line
    Line 1 & 2
    + + +
    +
    + +
    +
    + +
    + [% "PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT2T_CHOOSE" | string %] 
    + [% "PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT2B_CHOOSE" | string %] 
    +
    +
    + + + + +[% PROCESS settings/footer.html %] diff --git a/SuperDateTime/install.xml b/SuperDateTime/install.xml new file mode 100644 index 0000000..1269c3a --- /dev/null +++ b/SuperDateTime/install.xml @@ -0,0 +1,18 @@ + + + 8F9E67E0-A278-11DB-8AB9-0800200C9A67 + PLUGIN_SCREENSAVER_SUPERDATETIME + Plugins::SuperDateTime::Plugin + 5.9.49 + SETUP_GROUP_SUPERDATETIME_DESC + G. Brown, D. Grossman + enabled + https://sourceforge.net/projects/sdt-weather-com/ + plugins/SuperDateTime/settings/basic.html + 2 + + SlimServer + 7.4 + 7.* + + diff --git a/SuperDateTime/lib/HTML/AsSubs.pm b/SuperDateTime/lib/HTML/AsSubs.pm new file mode 100644 index 0000000..b96b0e4 --- /dev/null +++ b/SuperDateTime/lib/HTML/AsSubs.pm @@ -0,0 +1,136 @@ +package HTML::AsSubs; + +=head1 NAME + +HTML::AsSubs - functions that construct a HTML syntax tree + +=head1 SYNOPSIS + + use HTML::AsSubs; + $h = body( + h1("This is the heading"), + p("This is the first paragraph which contains a ", + a({href=>'link.html'}, "link"), + " and an ", + img({src=>'img.gif', alt=>'image'}), + "." + ), + ); + print $h->as_HTML; + +=head1 DESCRIPTION + +This module exports functions that can be used to construct various +HTML elements. The functions are named after the tags of the +correponding HTML element and are all written in lower case. If the +first argument is a hash reference then it will be used to initialize the +attributes of this element. The remaining arguments are regarded as +content. + +For a similar idea (i.e., it's another case where the syntax tree +of the Perl source mirrors the syntax tree of the HTML produced), +see HTML::Element's C method. + +For what I now think is a cleaner implementation of this same idea, +see the excellent module C, which is what I suggest +for actual real-life use. (I suggest this over C and +over C's HTML-making functions.) + +=head1 ACKNOWLEDGEMENT + +This module was inspired by the following message: + + Date: Tue, 4 Oct 1994 16:11:30 +0100 + Subject: Wow! I have a large lightbulb above my head! + + Take a moment to consider these lines: + + %OVERLOAD=( '""' => sub { join("", @{$_[0]}) } ); + + sub html { my($type)=shift; bless ["<$type>", @_, ""]; } + + :-) I *love* Perl 5! Thankyou Larry and Ilya. + + Regards, + Tim Bunce. + + p.s. If you didn't get it, think about recursive data types: html(html()) + p.p.s. I'll turn this into a much more practical example in a day or two. + p.p.p.s. It's a pity that overloads are not inherited. Is this a bug? + +=head1 BUGS + +The exported link() function overrides the builtin link() function. +The exported tr() function must be called using &tr(...) syntax +because it clashes with the builtin tr/../../ operator. + +=head1 SEE ALSO + +L, L + +=cut + +use strict; +use vars qw(@ISA $VERSION @EXPORT); + +require HTML::Element; +require Exporter; +@ISA = qw(Exporter); + +$VERSION = '1.16'; + +# Problem: exports so damned much. Has no concept of "export only HTML4 +# elements". TODO:?? make something that make functions that just +# wrap XML::Generator calls? + +use vars qw(@TAGS); +@TAGS = qw(html + head title base link meta isindex nextid script style + body h1 h2 h3 h4 h5 h6 p pre div blockquote + a img br hr + ol ul dir menu li + dl dt dd + dfn cite code em kbd samp strong var address + b i u tt + center font big small strike + sub sup + table tr td th caption + form input select option textarea + object applet param + map area + frame frameset noframe + ); + +for (@TAGS) { + my $code; + $code = "sub $_ { _elem('$_', \@_); }\n" ; + push(@EXPORT, $_); + eval $code; + if ($@) { + die $@; + } +} + +=head1 Private Functions + +=head2 _elem() + +The _elem() function is wrapped by all the html 'tag' functions. It +takes a tag-name, optional hashref of attributes and a list of content +as parameters. + +=cut + +sub _elem +{ + my $tag = shift; + my $attributes; + if (@_ and defined $_[0] and ref($_[0]) eq "HASH") { + $attributes = shift; + } + my $elem = HTML::Element->new( $tag, %$attributes ); + $elem->push_content(@_); + $elem; +} + +1; diff --git a/SuperDateTime/lib/HTML/Element.pm b/SuperDateTime/lib/HTML/Element.pm new file mode 100644 index 0000000..5150dca --- /dev/null +++ b/SuperDateTime/lib/HTML/Element.pm @@ -0,0 +1,3848 @@ +package HTML::Element; + +=head1 NAME + +HTML::Element - Class for objects that represent HTML elements + +=head1 VERSION + +Version 3.23 + +=cut + +use vars qw( $VERSION ); +$VERSION = '3.23'; + +=head1 SYNOPSIS + + use HTML::Element; + $a = HTML::Element->new('a', href => 'http://www.perl.com/'); + $a->push_content("The Perl Homepage"); + + $tag = $a->tag; + print "$tag starts out as:", $a->starttag, "\n"; + print "$tag ends as:", $a->endtag, "\n"; + print "$tag\'s href attribute is: ", $a->attr('href'), "\n"; + + $links_r = $a->extract_links(); + print "Hey, I found ", scalar(@$links_r), " links.\n"; + + print "And that, as HTML, is: ", $a->as_HTML, "\n"; + $a = $a->delete; + +=head1 DESCRIPTION + +(This class is part of the L dist.) + +Objects of the HTML::Element class can be used to represent elements +of HTML document trees. These objects have attributes, notably attributes that +designates each element's parent and content. The content is an array +of text segments and other HTML::Element objects. A tree with HTML::Element +objects as nodes can represent the syntax tree for a HTML document. + +=head1 HOW WE REPRESENT TREES + +Consider this HTML document: + + + + Stuff + + + +

    I like potatoes!

    + + + +Building a syntax tree out of it makes a tree-structure in memory +that could be diagrammed as: + + html (lang='en-US') + / \ + / \ + / \ + head body + /\ \ + / \ \ + / \ \ + title meta h1 + | (name='author', | + "Stuff" content='Jojo') "I like potatoes" + +This is the traditional way to diagram a tree, with the "root" at the +top, and it's this kind of diagram that people have in mind when they +say, for example, that "the meta element is under the head element +instead of under the body element". (The same is also said with +"inside" instead of "under" -- the use of "inside" makes more sense +when you're looking at the HTML source.) + +Another way to represent the above tree is with indenting: + + html (attributes: lang='en-US') + head + title + "Stuff" + meta (attributes: name='author' content='Jojo') + body + h1 + "I like potatoes" + +Incidentally, diagramming with indenting works much better for very +large trees, and is easier for a program to generate. The C<< $tree->dump >> +method uses indentation just that way. + +However you diagram the tree, it's stored the same in memory -- it's a +network of objects, each of which has attributes like so: + + element #1: _tag: 'html' + _parent: none + _content: [element #2, element #5] + lang: 'en-US' + + element #2: _tag: 'head' + _parent: element #1 + _content: [element #3, element #4] + + element #3: _tag: 'title' + _parent: element #2 + _content: [text segment "Stuff"] + + element #4 _tag: 'meta' + _parent: element #2 + _content: none + name: author + content: Jojo + + element #5 _tag: 'body' + _parent: element #1 + _content: [element #6] + + element #6 _tag: 'h1' + _parent: element #5 + _content: [text segment "I like potatoes"] + +The "treeness" of the tree-structure that these elements comprise is +not an aspect of any particular object, but is emergent from the +relatedness attributes (_parent and _content) of these element-objects +and from how you use them to get from element to element. + +While you could access the content of a tree by writing code that says +"access the 'src' attribute of the root's I child's I +child's I child", you're more likely to have to scan the contents +of a tree, looking for whatever nodes, or kinds of nodes, you want to +do something with. The most straightforward way to look over a tree +is to "traverse" it; an HTML::Element method (C<< $h->traverse >>) is +provided for this purpose; and several other HTML::Element methods are +based on it. + +(For everything you ever wanted to know about trees, and then some, +see Niklaus Wirth's I or +Donald Knuth's I.) + +=cut + + +use strict; +use Carp (); +use HTML::Entities (); +use HTML::Tagset (); +use integer; # vroom vroom! + +use vars qw($html_uc $Debug $ID_COUNTER %list_type_to_sub); + +$Debug = 0 unless defined $Debug; +sub Version { $VERSION; } + +my $nillio = []; + +*HTML::Element::emptyElement = \%HTML::Tagset::emptyElement; # legacy +*HTML::Element::optionalEndTag = \%HTML::Tagset::optionalEndTag; # legacy +*HTML::Element::linkElements = \%HTML::Tagset::linkElements; # legacy +*HTML::Element::boolean_attr = \%HTML::Tagset::boolean_attr; # legacy +*HTML::Element::canTighten = \%HTML::Tagset::canTighten; # legacy + +# Constants for signalling back to the traverser: +my $travsignal_package = __PACKAGE__ . '::_travsignal'; +my( + $ABORT, $PRUNE, $PRUNE_SOFTLY, $OK, $PRUNE_UP +) = + map + {my $x = $_ ; bless \$x, $travsignal_package;} + qw( + ABORT PRUNE PRUNE_SOFTLY OK PRUNE_UP + ) +; +sub ABORT () {$ABORT} +sub PRUNE () {$PRUNE} +sub PRUNE_SOFTLY () {$PRUNE_SOFTLY} +sub OK () {$OK} +sub PRUNE_UP () {$PRUNE_UP} + +$html_uc = 0; +# set to 1 if you want tag and attribute names from starttag and endtag +# to be uc'd + +# Elements that does not have corresponding end tags (i.e. are empty) + +#========================================================================== + + +=head1 BASIC METHODS + +=head2 $h = HTML::Element->new('tag', 'attrname' => 'value', ... ) + +This constructor method returns a new HTML::Element object. The tag +name is a required argument; it will be forced to lowercase. +Optionally, you can specify other initial attributes at object +creation time. + +=cut + +# +# An HTML::Element is represented by blessed hash reference, much like +# Tree::DAG_Node objects. Key-names not starting with '_' are reserved +# for the SGML attributes of the element. +# The following special keys are used: +# +# '_tag': The tag name (i.e., the generic identifier) +# '_parent': A reference to the HTML::Element above (when forming a tree) +# '_pos': The current position (a reference to a HTML::Element) is +# where inserts will be placed (look at the insert_element +# method) If not set, the implicit value is the object itself. +# '_content': A ref to an array of nodes under this. +# It might not be set. +# +# Example: Gisle's photo is represented like this: +# +# bless { +# _tag => 'img', +# src => 'gisle.jpg', +# alt => "Gisle's photo", +# }, 'HTML::Element'; +# + +sub new { + my $class = shift; + $class = ref($class) || $class; + + my $tag = shift; + Carp::croak("No tagname") unless defined $tag and length $tag; + Carp::croak "\"$tag\" isn't a good tag name!" + if $tag =~ m/[<>\/\x00-\x20]/; # minimal sanity, certainly! + my $self = bless { _tag => scalar($class->_fold_case($tag)) }, $class; + my($attr, $val); + while (($attr, $val) = splice(@_, 0, 2)) { + $val = $attr unless defined $val; + $self->{$class->_fold_case($attr)} = $val; + } + if ($tag eq 'html') { + $self->{'_pos'} = undef; + } + return $self; +} + + +=head2 $h->attr('attr') or $h->attr('attr', 'value') + +Returns (optionally sets) the value of the given attribute of $h. The +attribute name (but not the value, if provided) is forced to +lowercase. If trying to read the value of an attribute not present +for this element, the return value is undef. +If setting a new value, the old value of that attribute is +returned. + +If methods are provided for accessing an attribute (like C<< $h->tag >> for +"_tag", C<< $h->content_list >>, etc. below), use those instead of calling +attr C<< $h->attr >>, whether for reading or setting. + +Note that setting an attribute to C (as opposed to "", the empty +string) actually deletes the attribute. + +=cut + +sub attr { + my $self = shift; + my $attr = scalar($self->_fold_case(shift)); + if (@_) { # set + if(defined $_[0]) { + my $old = $self->{$attr}; + $self->{$attr} = $_[0]; + return $old; + } + else { # delete, actually + return delete $self->{$attr}; + } + } + else { # get + return $self->{$attr}; + } +} + + +=head2 $h->tag() or $h->tag('tagname') + +Returns (optionally sets) the tag name (also known as the generic +identifier) for the element $h. In setting, the tag name is always +converted to lower case. + +There are four kinds of "pseudo-elements" that show up as +HTML::Element objects: + +=over + +=item Comment pseudo-elements + +These are element objects with a C<$h-Etag> value of "~comment", +and the content of the comment is stored in the "text" attribute +(C<$h-Eattr("text")>). For example, parsing this code with +HTML::TreeBuilder... + + + +produces an HTML::Element object with these attributes: + + "_tag", + "~comment", + "text", + " I like Pie.\n Pie is good\n " + +=item Declaration pseudo-elements + +Declarations (rarely encountered) are represented as HTML::Element +objects with a tag name of "~declaration", and content in the "text" +attribute. For example, this: + + + +produces an element whose attributes include: + + "_tag", "~declaration", "text", "DOCTYPE foo" + +=item Processing instruction pseudo-elements + +PIs (rarely encountered) are represented as HTML::Element objects with +a tag name of "~pi", and content in the "text" attribute. For +example, this: + + + +produces an element whose attributes include: + + "_tag", "~pi", "text", "stuff foo?" + +(assuming a recent version of HTML::Parser) + +=item ~literal pseudo-elements + +These objects are not currently produced by HTML::TreeBuilder, but can +be used to represent a "super-literal" -- i.e., a literal you want to +be immune from escaping. (Yes, I just made that term up.) + +That is, this is useful if you want to insert code into a tree that +you plan to dump out with C, where you want, for some reason, +to suppress C's normal behavior of amp-quoting text segments. + +For example, this: + + my $literal = HTML::Element->new('~literal', + 'text' => 'x < 4 & y > 7' + ); + my $span = HTML::Element->new('span'); + $span->push_content($literal); + print $span->as_HTML; + +prints this: + + x < 4 & y > 7 + +Whereas this: + + my $span = HTML::Element->new('span'); + $span->push_content('x < 4 & y > 7'); + # normal text segment + print $span->as_HTML; + +prints this: + + x < 4 & y > 7 + +Unless you're inserting lots of pre-cooked code into existing trees, +and dumping them out again, it's not likely that you'll find +C<~literal> pseudo-elements useful. + +=back + +=cut + +sub tag { + my $self = shift; + if (@_) { # set + $self->{'_tag'} = $self->_fold_case($_[0]); + } + else { # get + $self->{'_tag'}; + } +} + + +=head2 $h->parent() or $h->parent($new_parent) + +Returns (optionally sets) the parent (aka "container") for this element. +The parent should either be undef, or should be another element. + +You B use this to directly set the parent of an element. +Instead use any of the other methods under "Structure-Modifying +Methods", below. + +Note that not($h->parent) is a simple test for whether $h is the +root of its subtree. + +=cut + +sub parent { + my $self = shift; + if (@_) { # set + Carp::croak "an element can't be made its own parent" + if defined $_[0] and ref $_[0] and $self eq $_[0]; # sanity + $self->{'_parent'} = $_[0]; + } + else { + $self->{'_parent'}; # get + } +} + + +=head2 $h->content_list() + +Returns a list of the child nodes of this element -- i.e., what +nodes (elements or text segments) are inside/under this element. (Note +that this may be an empty list.) + +In a scalar context, this returns the count of the items, +as you may expect. + +=cut + +sub content_list { + return + wantarray ? @{shift->{'_content'} || return()} + : scalar @{shift->{'_content'} || return 0}; +} + + +=head2 $h->content() + +This somewhat deprecated method returns the content of this element; +but unlike content_list, this returns either undef (which you should +understand to mean no content), or a I of +content items, each of which is either a text segment (a string, i.e., +a defined non-reference scalar value), or an HTML::Element object. +Note that even if an arrayref is returned, it may be a reference to an +empty array. + +While older code should feel free to continue to use C<< $h->content >>, +new code should use C<< $h->content_list >> in almost all conceivable +cases. It is my experience that in most cases this leads to simpler +code anyway, since it means one can say: + + @children = $h->content_list; + +instead of the inelegant: + + @children = @{$h->content || []}; + +If you do use C<< $h->content >> (or C<< $h->content_array_ref >>), you should not +use the reference returned by it (assuming it returned a reference, +and not undef) to directly set or change the content of an element or +text segment! Instead use L or any of the other +methods under "Structure-Modifying Methods", below. + +=cut + +# a read-only method! can't say $h->content( [] )! +sub content { + return shift->{'_content'}; +} + + +=head2 $h->content_array_ref() + +This is like C (with all its caveats and deprecations) except +that it is guaranteed to return an array reference. That is, if the +given node has no C<_content> attribute, the C method would +return that undef, but C would set the given node's +C<_content> value to C<[]> (a reference to a new, empty array), and +return that. + +=cut + +sub content_array_ref { + return shift->{'_content'} ||= []; +} + + +=head2 $h->content_refs_list + +This returns a list of scalar references to each element of C<$h>'s +content list. This is useful in case you want to in-place edit any +large text segments without having to get a copy of the current value +of that segment value, modify that copy, then use the +C to replace the old with the new. Instead, here you +can in-place edit: + + foreach my $item_r ($h->content_refs_list) { + next if ref $$item_r; + $$item_r =~ s/honour/honor/g; + } + +You I currently achieve the same affect with: + + foreach my $item (@{ $h->content_array_ref }) { + # deprecated! + next if ref $item; + $item =~ s/honour/honor/g; + } + +...except that using the return value of C<< $h->content >> or +C<< $h->content_array_ref >> to do that is deprecated, and just might stop +working in the future. + +=cut + +sub content_refs_list { + return \( @{ shift->{'_content'} || return() } ); +} + + +=head2 $h->implicit() or $h->implicit($bool) + +Returns (optionally sets) the "_implicit" attribute. This attribute is +a flag that's used for indicating that the element was not originally +present in the source, but was added to the parse tree (by +HTML::TreeBuilder, for example) in order to conform to the rules of +HTML structure. + +=cut + +sub implicit { + return shift->attr('_implicit', @_); +} + + +=head2 $h->pos() or $h->pos($element) + +Returns (and optionally sets) the "_pos" (for "current Iition") +pointer of C<$h>. This attribute is a pointer used during some +parsing operations, whose value is whatever HTML::Element element +at or under C<$h> is currently "open", where C<< $h->insert_element(NEW) >> +will actually insert a new element. + +(This has nothing to do with the Perl function called "pos", for +controlling where regular expression matching starts.) + +If you set C<< $h->pos($element) >>, be sure that C<$element> is +either C<$h>, or an element under C<$h>. + +If you've been modifying the tree under C<$h> and are no longer +sure C<< $h->pos >> is valid, you can enforce validity with: + + $h->pos(undef) unless $h->pos->is_inside($h); + +=cut + +sub pos { + my $self = shift; + my $pos = $self->{'_pos'}; + if (@_) { # set + my $parm = shift; + if(defined $parm and $parm ne $self) { + $self->{'_pos'} = $parm; # means that element + } + else { + $self->{'_pos'} = undef; # means $self + } + } + return $pos if defined($pos); + return $self; +} + + +=head2 $h->all_attr() + +Returns all this element's attributes and values, as key-value pairs. +This will include any "internal" attributes (i.e., ones not present +in the original element, and which will not be represented if/when you +call C<< $h->as_HTML >>). Internal attributes are distinguished by the fact +that the first character of their key (not value! key!) is an +underscore ("_"). + +Example output of C<< $h->all_attr() >> : +C<'_parent', >I<[object_value]>C< , '_tag', 'em', 'lang', 'en-US', +'_content', >I<[array-ref value]>. + +=head2 $h->all_attr_names() + +Like all_attr, but only returns the names of the attributes. + +Example output of C<< $h->all_attr_names() >> : +C<'_parent', '_tag', 'lang', '_content', >. + +=cut + +sub all_attr { + return %{$_[0]}; + # Yes, trivial. But no other way for the user to do the same + # without breaking encapsulation. + # And if our object representation changes, this method's behavior + # should stay the same. +} + +sub all_attr_names { + return keys %{$_[0]}; +} + + +=head2 $h->all_external_attr() + +Like C, except that internal attributes are not present. + +=head2 $h->all_external_attr_names() + +Like C, except that internal attributes' names +are not present. + +=cut + +sub all_external_attr { + my $self = $_[0]; + return + map( + (length($_) && substr($_,0,1) eq '_') ? () : ($_, $self->{$_}), + keys %$self + ); +} + +sub all_external_attr_names { + return + grep + !(length($_) && substr($_,0,1) eq '_'), + keys %{$_[0]} + ; +} + + + +=head2 $h->id() or $h->id($string) + +Returns (optionally sets to C<$string>) the "id" attribute. +C<< $h->id(undef) >> deletes the "id" attribute. + +=cut + +sub id { + if(@_ == 1) { + return $_[0]{'id'}; + } elsif(@_ == 2) { + if(defined $_[1]) { + return $_[0]{'id'} = $_[1]; + } else { + return delete $_[0]{'id'}; + } + } else { + Carp::croak '$node->id can\'t take ' . scalar(@_) . ' parameters!'; + } +} + + +=head2 $h->idf() or $h->idf($string) + +Just like the C method, except that if you call C<< $h->idf() >> and +no "id" attribute is defined for this element, then it's set to a +likely-to-be-unique value, and returned. (The "f" is for "force".) + +=cut + +sub _gensym { + unless(defined $ID_COUNTER) { + # start it out... + $ID_COUNTER = sprintf('%04x', rand(0x1000)); + $ID_COUNTER =~ tr<0-9a-f>; # yes, skip letter "oh" + $ID_COUNTER .= '00000'; + } + ++$ID_COUNTER; +} + +sub idf { + my $nparms = scalar @_; + + if ($nparms == 1) { + my $x; + if (defined($x = $_[0]{'id'}) and length $x) { + return $x; + } + else { + return $_[0]{'id'} = _gensym(); + } + } + if ($nparms == 2) { + if (defined $_[1]) { + return $_[0]{'id'} = $_[1]; + } + else { + return delete $_[0]{'id'}; + } + } + Carp::croak '$node->idf can\'t take ' . scalar(@_) . ' parameters!'; +} + + +=head1 STRUCTURE-MODIFYING METHODS + +These methods are provided for modifying the content of trees +by adding or changing nodes as parents or children of other nodes. + +=head2 $h->push_content($element_or_text, ...) + +Adds the specified items to the I of the content list of the +element C<$h>. The items of content to be added should each be either a +text segment (a string), an HTML::Element object, or an arrayref. +Arrayrefs are fed thru C<< $h->new_from_lol(that_arrayref) >> to +convert them into elements, before being added to the content +list of C<$h>. This means you can say things concise things like: + + $body->push_content( + ['br'], + ['ul', + map ['li', $_], qw(Peaches Apples Pears Mangos) + ] + ); + +See C method's documentation, far below, for more +explanation. + +The push_content method will try to consolidate adjacent text segments +while adding to the content list. That's to say, if $h's content_list is + + ('foo bar ', $some_node, 'baz!') + +and you call + + $h->push_content('quack?'); + +then the resulting content list will be this: + + ('foo bar ', $some_node, 'baz!quack?') + +and not this: + + ('foo bar ', $some_node, 'baz!', 'quack?') + +If that latter is what you want, you'll have to override the +feature of consolidating text by using splice_content, +as in: + + $h->splice_content(scalar($h->content_list),0,'quack?'); + +Similarly, if you wanted to add 'Skronk' to the beginning of +the content list, calling this: + + $h->unshift_content('Skronk'); + +then the resulting content list will be this: + + ('Skronkfoo bar ', $some_node, 'baz!') + +and not this: + + ('Skronk', 'foo bar ', $some_node, 'baz!') + +What you'd to do get the latter is: + + $h->splice_content(0,0,'Skronk'); + +=cut + +sub push_content { + my $self = shift; + return $self unless @_; + + my $content = ($self->{'_content'} ||= []); + for (@_) { + if (ref($_) eq 'ARRAY') { + # magically call new_from_lol + push @$content, $self->new_from_lol($_); + $content->[-1]->{'_parent'} = $self; + } + elsif (ref($_)) { # insert an element + $_->detach if $_->{'_parent'}; + $_->{'_parent'} = $self; + push(@$content, $_); + } + else { # insert text segment + if (@$content && !ref $content->[-1]) { + # last content element is also text segment -- append + $content->[-1] .= $_; + } else { + push(@$content, $_); + } + } + } + return $self; +} + + +=head2 $h->unshift_content($element_or_text, ...) + +Just like C, but adds to the I of the $h +element's content list. + +The items of content to be added should each be +either a text segment (a string), an HTML::Element object, or +an arrayref (which is fed thru C). + +The unshift_content method will try to consolidate adjacent text segments +while adding to the content list. See above for a discussion of this. + +=cut + +sub unshift_content { + my $self = shift; + return $self unless @_; + + my $content = ($self->{'_content'} ||= []); + for (reverse @_) { # so they get added in the order specified + if (ref($_) eq 'ARRAY') { + # magically call new_from_lol + unshift @$content, $self->new_from_lol($_); + $content->[0]->{'_parent'} = $self; + } + elsif (ref $_) { # insert an element + $_->detach if $_->{'_parent'}; + $_->{'_parent'} = $self; + unshift(@$content, $_); + } + else { # insert text segment + if (@$content && !ref $content->[0]) { + # last content element is also text segment -- prepend + $content->[0] = $_ . $content->[0]; + } + else { + unshift(@$content, $_); + } + } + } + return $self; +} + +# Cf. splice ARRAY,OFFSET,LENGTH,LIST + +=head2 $h->splice_content($offset, $length, $element_or_text, ...) + +Detaches the elements from $h's list of content-nodes, starting at +$offset and continuing for $length items, replacing them with the +elements of the following list, if any. Returns the elements (if any) +removed from the content-list. If $offset is negative, then it starts +that far from the end of the array, just like Perl's normal C +function. If $length and the following list is omitted, removes +everything from $offset onward. + +The items of content to be added (if any) should each be either a text +segment (a string), an arrayref (which is fed thru C), +or an HTML::Element object that's not already +a child of $h. + +=cut + +sub splice_content { + my($self, $offset, $length, @to_add) = @_; + Carp::croak "splice_content requires at least one argument" + if @_ < 2; # at least $h->splice_content($offset); + return $self unless @_; + + my $content = ($self->{'_content'} ||= []); + # prep the list + + my @out; + if (@_ > 2) { # self, offset, length, ... + foreach my $n (@to_add) { + if (ref($n) eq 'ARRAY') { + $n = $self->new_from_lol($n); + $n->{'_parent'} = $self; + } + elsif (ref($n)) { + $n->detach; + $n->{'_parent'} = $self; + } + } + @out = splice @$content, $offset, $length, @to_add; + } + else { # self, offset + @out = splice @$content, $offset; + } + foreach my $n (@out) { + $n->{'_parent'} = undef if ref $n; + } + return @out; +} + + +=head2 $h->detach() + +This unlinks $h from its parent, by setting its 'parent' attribute to +undef, and by removing it from the content list of its parent (if it +had one). The return value is the parent that was detached from (or +undef, if $h had no parent to start with). Note that neither $h nor +its parent are explicitly destroyed. + +=cut + +sub detach { + my $self = $_[0]; + return undef unless(my $parent = $self->{'_parent'}); + $self->{'_parent'} = undef; + my $cohort = $parent->{'_content'} || return $parent; + @$cohort = grep { not( ref($_) and $_ eq $self) } @$cohort; + # filter $self out, if parent has any evident content + + return $parent; +} + + +=head2 $h->detach_content() + +This unlinks all of $h's children from $h, and returns them. +Note that these are not explicitly destroyed; for that, you +can just use $h->delete_content. + +=cut + +sub detach_content { + my $c = $_[0]->{'_content'} || return(); # in case of no content + for (@$c) { + $_->{'_parent'} = undef if ref $_; + } + return splice @$c; +} + + +=head2 $h->replace_with( $element_or_text, ... ) + +This replaces C<$h> in its parent's content list with the nodes +specified. The element C<$h> (which by then may have no parent) +is returned. This causes a fatal error if C<$h> has no parent. +The list of nodes to insert may contain C<$h>, but at most once. +Aside from that possible exception, the nodes to insert should not +already be children of C<$h>'s parent. + +Also, note that this method does not destroy C<$h> -- use +C<< $h->replace_with(...)->delete >> if you need that. + +=cut + +sub replace_with { + my ($self, @replacers) = @_; + Carp::croak "the target node has no parent" + unless my($parent) = $self->{'_parent'}; + + my $parent_content = $parent->{'_content'}; + Carp::croak "the target node's parent has no content!?" + unless $parent_content and @$parent_content; + + my $replacers_contains_self; + for(@replacers) { + if (!ref $_) { + # noop + } + elsif($_ eq $self) { + # noop, but check that it's there just once. + Carp::croak + "Replacement list contains several copies of target!" + if $replacers_contains_self++; + } + elsif($_ eq $parent) { + Carp::croak "Can't replace an item with its parent!"; + } + elsif(ref($_) eq 'ARRAY') { + $_ = $self->new_from_lol($_); + } + else { + $_->detach; + $_->{'_parent'} = $parent; + # each of these are necessary + } + } # for @replacers + @$parent_content = map { ( ref($_) and $_ eq $self) ? @replacers : $_ } @$parent_content; + + $self->{'_parent'} = undef unless $replacers_contains_self; + # if replacers does contain self, then the parent attribute is fine as-is + + return $self; +} + +=head2 $h->preinsert($element_or_text...) + +Inserts the given nodes right BEFORE C<$h> in C<$h>'s parent's +content list. This causes a fatal error if C<$h> has no parent. +None of the given nodes should be C<$h> or other children of C<$h>. +Returns C<$h>. + +=cut + +sub preinsert { + my $self = shift; + return $self unless @_; + return $self->replace_with(@_, $self); +} + +=head2 $h->postinsert($element_or_text...) + +Inserts the given nodes right AFTER C<$h> in C<$h>'s parent's content +list. This causes a fatal error if C<$h> has no parent. None of +the given nodes should be C<$h> or other children of C<$h>. Returns +C<$h>. + +=cut + +sub postinsert { + my $self = shift; + return $self unless @_; + return $self->replace_with($self, @_); +} + + +=head2 $h->replace_with_content() + +This replaces C<$h> in its parent's content list with its own content. +The element C<$h> (which by then has no parent or content of its own) is +returned. This causes a fatal error if C<$h> has no parent. Also, note +that this does not destroy C<$h> -- use +C<< $h->replace_with_content->delete >> if you need that. + +=cut + +sub replace_with_content { + my $self = $_[0]; + Carp::croak "the target node has no parent" + unless my($parent) = $self->{'_parent'}; + + my $parent_content = $parent->{'_content'}; + Carp::croak "the target node's parent has no content!?" + unless $parent_content and @$parent_content; + + my $content_r = $self->{'_content'} || []; + @$parent_content + = map { ( ref($_) and $_ eq $self) ? @$content_r : $_ } + @$parent_content + ; + + $self->{'_parent'} = undef; # detach $self from its parent + + # Update parentage link, removing from $self's content list + for (splice @$content_r) { $_->{'_parent'} = $parent if ref $_ } + + return $self; # note: doesn't destroy it. +} + + + +=head2 $h->delete_content() + +Clears the content of C<$h>, calling C<< $h->delete >> for each content +element. Compare with C<< $h->detach_content >>. + +Returns C<$h>. + +=cut + +sub delete_content { + for (splice @{ delete($_[0]->{'_content'}) + # Deleting it here (while holding its value, for the moment) + # will keep calls to detach() from trying to uselessly filter + # the list (as they won't be able to see it once it's been + # deleted) + || return($_[0]) # in case of no content + }, + 0 + # the splice is so we can null the array too, just in case + # something somewhere holds a ref to it + ) + { + $_->delete if ref $_; + } + $_[0]; +} + + + +=head2 $h->delete() + +Detaches this element from its parent (if it has one) and explicitly +destroys the element and all its descendants. The return value is +undef. + +Perl uses garbage collection based on reference counting; when no +references to a data structure exist, it's implicitly destroyed -- +i.e., when no value anywhere points to a given object anymore, Perl +knows it can free up the memory that the now-unused object occupies. + +But this fails with HTML::Element trees, because a parent element +always holds references to its children, and its children elements +hold references to the parent, so no element ever looks like it's +I in use. So, to destroy those elements, you need to call +C<< $h->delete >> on the parent. + +=cut + +# two handy aliases +sub destroy { shift->delete(@_) } +sub destroy_content { shift->delete_content(@_) } + +sub delete { + my $self = $_[0]; + $self->delete_content # recurse down + if $self->{'_content'} && @{$self->{'_content'}}; + + $self->detach if $self->{'_parent'} and $self->{'_parent'}{'_content'}; + # not the typical case + + %$self = (); # null out the whole object on the way out + return undef; +} + + +=head2 $h->clone() + +Returns a copy of the element (whose children are clones (recursively) +of the original's children, if any). + +The returned element is parentless. Any '_pos' attributes present in the +source element/tree will be absent in the copy. For that and other reasons, +the clone of an HTML::TreeBuilder object that's in mid-parse (i.e, the head +of a tree that HTML::TreeBuilder is elaborating) cannot (currently) be used +to continue the parse. + +You are free to clone HTML::TreeBuilder trees, just as long as: +1) they're done being parsed, or 2) you don't expect to resume parsing +into the clone. (You can continue parsing into the original; it is +never affected.) + +=cut + +sub clone { + #print "Cloning $_[0]\n"; + my $it = shift; + Carp::croak "clone() can be called only as an object method" unless ref $it; + Carp::croak "clone() takes no arguments" if @_; + + my $new = bless { %$it }, ref($it); # COPY!!! HOOBOY! + delete @$new{'_content', '_parent', '_pos', '_head', '_body'}; + + # clone any contents + if($it->{'_content'} and @{$it->{'_content'}}) { + $new->{'_content'} = [ ref($it)->clone_list( @{$it->{'_content'}} ) ]; + for(@{$new->{'_content'}}) { + $_->{'_parent'} = $new if ref $_; + } + } + + return $new; +} + +=head2 HTML::Element->clone_list(...nodes...) + +Returns a list consisting of a copy of each node given. +Text segments are simply copied; elements are cloned by +calling $it->clone on each of them. + +Note that this must be called as a class method, not as an instance +method. C will croak if called as an instance method. +You can also call it like so: + + ref($h)->clone_list(...nodes...) + +=cut + +sub clone_list { + Carp::croak "clone_list can be called only as a class method" if ref shift @_; + + # all that does is get me here + return + map + { + ref($_) + ? $_->clone # copy by method + : $_ # copy by evaluation + } + @_ + ; +} + + +=head2 $h->normalize_content + +Normalizes the content of C<$h> -- i.e., concatenates any adjacent +text nodes. (Any undefined text segments are turned into empty-strings.) +Note that this does not recurse into C<$h>'s descendants. + +=cut + +sub normalize_content { + my $start = $_[0]; + my $c; + return unless $c = $start->{'_content'} and ref $c and @$c; # nothing to do + # TODO: if we start having text elements, deal with catenating those too? + my @stretches = (undef); # start with a barrier + + # I suppose this could be rewritten to treat stretches as it goes, instead + # of at the end. But feh. + + # Scan: + for(my $i = 0; $i < @$c; ++$i) { + if(defined $c->[$i] and ref $c->[$i]) { # not a text segment + if($stretches[0]) { + # put in a barrier + if($stretches[0][1] == 1) { + #print "Nixing stretch at ", $i-1, "\n"; + undef $stretches[0]; # nix the previous one-node "stretch" + } else { + #print "End of stretch at ", $i-1, "\n"; + unshift @stretches, undef + } + } + # else no need for a barrier + } else { # text segment + $c->[$i] = '' unless defined $c->[$i]; + if($stretches[0]) { + ++$stretches[0][1]; # increase length + } else { + #print "New stretch at $i\n"; + unshift @stretches, [$i,1]; # start and length + } + } + } + + # Now combine. Note that @stretches is in reverse order, so the indexes + # still make sense as we work our way thru (i.e., backwards thru $c). + foreach my $s (@stretches) { + if($s and $s->[1] > 1) { + #print "Stretch at ", $s->[0], " for ", $s->[1], "\n"; + $c->[$s->[0]] .= join('', splice(@$c, $s->[0] + 1, $s->[1] - 1)) + # append the subsequent ones onto the first one. + } + } + return; +} + +=head2 $h->delete_ignorable_whitespace() + +This traverses under C<$h> and deletes any text segments that are ignorable +whitespace. You should not use this if C<$h> under a 'pre' element. + +=cut + +sub delete_ignorable_whitespace { + # This doesn't delete all sorts of whitespace that won't actually + # be used in rendering, tho -- that's up to the rendering application. + # For example: + # + # [some whitespace] + # + # The WS between the two elements /will/ get used by the renderer. + # But here: + # + # [some whitespace] + # + # the WS between them won't be rendered in any way, presumably. + + #my $Debug = 4; + die "delete_ignorable_whitespace can be called only as an object method" + unless ref $_[0]; + + print "About to tighten up...\n" if $Debug > 2; + my(@to_do) = ($_[0]); # Start off. + my($i, $sibs, $ptag, $this); # scratch for the loop... + while(@to_do) { + if( + ( $ptag = ($this = shift @to_do)->{'_tag'} ) eq 'pre' + or $ptag eq 'textarea' + or $HTML::Tagset::isCDATA_Parent{$ptag} + ) { + # block the traversal under those + print "Blocking traversal under $ptag\n" if $Debug; + next; + } + next unless($sibs = $this->{'_content'} and @$sibs); + for($i = $#$sibs; $i >= 0; --$i) { # work backwards thru the list + if(ref $sibs->[$i]) { + unshift @to_do, $sibs->[$i]; + # yes, this happens in pre order -- we're going backwards + # thru this sibling list. I doubt it actually matters, tho. + next; + } + next if $sibs->[$i] =~ m<[^\n\r\f\t ]>s; # it's /all/ whitespace + + print "Under $ptag whose canTighten ", + "value is ", 0 + $HTML::Element::canTighten{$ptag}, ".\n" + if $Debug > 3; + + # It's all whitespace... + + if($i == 0) { + if(@$sibs == 1) { # I'm an only child + next unless $HTML::Element::canTighten{$ptag}; # parent + } else { # I'm leftmost of many + # if either my parent or sib are eligible, I'm good. + next unless + $HTML::Element::canTighten{$ptag} # parent + or + (ref $sibs->[1] + and $HTML::Element::canTighten{$sibs->[1]{'_tag'}} # right sib + ); + } + } elsif ($i == $#$sibs) { # I'm rightmost of many + # if either my parent or sib are eligible, I'm good. + next unless + $HTML::Element::canTighten{$ptag} # parent + or + (ref $sibs->[$i - 1] + and $HTML::Element::canTighten{$sibs->[$i - 1]{'_tag'}} # left sib + ) + } else { # I'm the piggy in the middle + # My parent doesn't matter -- it all depends on my sibs + next + unless + ref $sibs->[$i - 1] or ref $sibs->[$i + 1]; + # if NEITHER sib is a node, quit + + next if + # bailout condition: if BOTH are INeligible nodes + # (as opposed to being text, or being eligible nodes) + ref $sibs->[$i - 1] + and ref $sibs->[$i + 1] + and !$HTML::Element::canTighten{$sibs->[$i - 1]{'_tag'}} # left sib + and !$HTML::Element::canTighten{$sibs->[$i + 1]{'_tag'}} # right sib + ; + } + # Unknown tags aren't in canTighten and so AREN'T subject to tightening + + print " delendum: child $i of $ptag\n" if $Debug > 3; + splice @$sibs, $i, 1; + } + # end of the loop-over-children + } + # end of the while loop. + + return; +} + + +=head2 $h->insert_element($element, $implicit) + +Inserts (via push_content) a new element under the element at +C<< $h->pos() >>. Then updates C<< $h->pos() >> to point to the inserted +element, unless $element is a prototypically empty element like +"br", "hr", "img", etc. The new C<< $h->pos() >> is returned. This +method is useful only if your particular tree task involves setting +C<< $h->pos() >>. + +=cut + +sub insert_element { + my($self, $tag, $implicit) = @_; + return $self->pos() unless $tag; # noop if nothing to insert + + my $e; + if (ref $tag) { + $e = $tag; + $tag = $e->tag; + } else { # just a tag name -- so make the element + $e = ($self->{'_element_class'} || __PACKAGE__)->new($tag); + ++($self->{'_element_count'}) if exists $self->{'_element_count'}; + # undocumented. see TreeBuilder. + } + + $e->{'_implicit'} = 1 if $implicit; + + my $pos = $self->{'_pos'}; + $pos = $self unless defined $pos; + + $pos->push_content($e); + + $self->{'_pos'} = $pos = $e + unless $self->_empty_element_map->{$tag} || $e->{'_empty_element'}; + + $pos; +} + +#========================================================================== +# Some things to override in XML::Element + +sub _empty_element_map { + \%HTML::Element::emptyElement; +} + +sub _fold_case_LC { + if(wantarray) { + shift; + map lc($_), @_; + } else { + return lc($_[1]); + } +} + +sub _fold_case_NOT { + if(wantarray) { + shift; + @_; + } else { + return $_[1]; + } +} + +*_fold_case = \&_fold_case_LC; + +#========================================================================== + +=head1 DUMPING METHODS + +=head2 $h->dump() + +=head2 $h->dump(*FH) ; # or *FH{IO} or $fh_obj + +Prints the element and all its children to STDOUT (or to a specified +filehandle), in a format useful +only for debugging. The structure of the document is shown by +indentation (no end tags). + +=cut + +sub dump { + my($self, $fh, $depth) = @_; + $fh = *STDOUT{IO} unless defined $fh; + $depth = 0 unless defined $depth; + print $fh + " " x $depth, $self->starttag, " \@", $self->address, + $self->{'_implicit'} ? " (IMPLICIT)\n" : "\n"; + for (@{$self->{'_content'}}) { + if (ref $_) { # element + $_->dump($fh, $depth+1); # recurse + } else { # text node + print $fh " " x ($depth + 1); + if(length($_) > 65 or m<[\x00-\x1F]>) { + # it needs prettyin' up somehow or other + my $x = (length($_) <= 65) ? $_ : (substr($_,0,65) . '...'); + $x =~ s<([\x00-\x1F])> + <'\\x'.(unpack("H2",$1))>eg; + print $fh qq{"$x"\n}; + } else { + print $fh qq{"$_"\n}; + } + } + } +} + + +=head2 $h->as_HTML() or $h->as_HTML($entities) + +=head2 or $h->as_HTML($entities, $indent_char) + +=head2 or $h->as_HTML($entities, $indent_char, \%optional_end_tags) + +Returns a string representing in HTML the element and its +descendants. The optional argument C<$entities> specifies a string of +the entities to encode. For compatibility with previous versions, +specify C<'EE&'> here. If omitted or undef, I unsafe +characters are encoded as HTML entities. See L for +details. If passed an empty string, no entities are encoded. + +If $indent_char is specified and defined, the HTML to be output is +intented, using the string you specify (which you probably should +set to "\t", or some number of spaces, if you specify it). + +If C<\%optional_end_tags> is specified and defined, it should be +a reference to a hash that holds a true value for every tag name +whose end tag is optional. Defaults to +C<\%HTML::Element::optionalEndTag>, which is an alias to +C<%HTML::Tagset::optionalEndTag>, which, at time of writing, contains +true values for C. A useful value to pass is an empty +hashref, C<{}>, which means that no end-tags are optional for this dump. +Otherwise, possibly consider copying C<%HTML::Tagset::optionalEndTag> to a +hash of your own, adding or deleting values as you like, and passing +a reference to that hash. + +=cut + +sub as_HTML { + my($self, $entities, $indent, $omissible_map) = @_; + #my $indent_on = defined($indent) && length($indent); + my @html = (); + + $omissible_map ||= \%HTML::Element::optionalEndTag; + my $empty_element_map = $self->_empty_element_map; + + my $last_tag_tightenable = 0; + my $this_tag_tightenable = 0; + my $nonindentable_ancestors = 0; # count of nonindentible tags over us. + + my($tag, $node, $start, $depth); # per-iteration scratch + + if(defined($indent) && length($indent)) { + $self->traverse( + sub { + ($node, $start, $depth) = @_; + if(ref $node) { # it's an element + + $tag = $node->{'_tag'}; + + if($start) { # on the way in + if( + ($this_tag_tightenable = $HTML::Element::canTighten{$tag}) + and !$nonindentable_ancestors + and $last_tag_tightenable + ) { + push + @html, + "\n", + $indent x $depth, + $node->starttag($entities), + ; + } else { + push(@html, $node->starttag($entities)); + } + $last_tag_tightenable = $this_tag_tightenable; + + ++$nonindentable_ancestors + if $tag eq 'pre' or $HTML::Tagset::isCDATA_Parent{$tag}; ; + + } elsif (not($empty_element_map->{$tag} or $omissible_map->{$tag})) { + # on the way out + if($tag eq 'pre' or $HTML::Tagset::isCDATA_Parent{$tag}) { + --$nonindentable_ancestors; + $last_tag_tightenable = $HTML::Element::canTighten{$tag}; + push @html, $node->endtag; + + } else { # general case + if( + ($this_tag_tightenable = $HTML::Element::canTighten{$tag}) + and !$nonindentable_ancestors + and $last_tag_tightenable + ) { + push + @html, + "\n", + $indent x $depth, + $node->endtag, + ; + } else { + push @html, $node->endtag; + } + $last_tag_tightenable = $this_tag_tightenable; + #print "$tag tightenable: $this_tag_tightenable\n"; + } + } + } else { # it's a text segment + + $last_tag_tightenable = 0; # I guess this is right + HTML::Entities::encode_entities($node, $entities) + # That does magic things if $entities is undef. + unless ( + (defined($entities) && !length($entities)) + # If there's no entity to encode, don't call it + || $HTML::Tagset::isCDATA_Parent{ $_[3]{'_tag'} } + # To keep from amp-escaping children of script et al. + # That doesn't deal with descendants; but then, CDATA + # parents shouldn't /have/ descendants other than a + # text children (or comments?) + ); + if($nonindentable_ancestors) { + push @html, $node; # say no go + } else { + if($last_tag_tightenable) { + $node =~ s<[\n\r\f\t ]+>< >s; + #$node =~ s< $><>s; + $node =~ s<^ ><>s; + push + @html, + "\n", + $indent x $depth, + $node, + #Text::Wrap::wrap($indent x $depth, $indent x $depth, "\n" . $node) + ; + } else { + push + @html, + $node, + #Text::Wrap::wrap('', $indent x $depth, $node) + ; + } + } + } + 1; # keep traversing + } + ); # End of parms to traverse() + } else { # no indenting -- much simpler code + $self->traverse( + sub { + ($node, $start) = @_; + if(ref $node) { + $tag = $node->{'_tag'}; + if($start) { # on the way in + push(@html, $node->starttag($entities)); + } elsif (not($empty_element_map->{$tag} or $omissible_map->{$tag})) { + # on the way out + push(@html, $node->endtag); + } + } else { + # simple text content + HTML::Entities::encode_entities($node, $entities) + # That does magic things if $entities is undef. + unless ( + (defined($entities) && !length($entities)) + # If there's no entity to encode, don't call it + || $HTML::Tagset::isCDATA_Parent{ $_[3]{'_tag'} } + # To keep from amp-escaping children of script et al. + # That doesn't deal with descendants; but then, CDATA + # parents shouldn't /have/ descendants other than a + # text children (or comments?) + ); + push(@html, $node); + } + 1; # keep traversing + } + ); # End of parms to traverse() + } + + if ( $self->{_store_declarations} && defined $self->{_decl} ) { + unshift @html, sprintf "\n", $self->{_decl}->{text} ; + } + + + return join('', @html, "\n"); +} + + +=head2 $h->as_text() + +=head2 $h->as_text(skip_dels => 1) + +Returns a string consisting of only the text parts of the element's +descendants. + +Text under 'script' or 'style' elements is never included in what's +returned. If C is true, then text content under "del" +nodes is not included in what's returned. + +=head2 $h->as_trimmed_text(...) + +This is just like as_text(...) except that leading and trailing +whitespace is deleted, and any internal whitespace is collapsed. + +=cut + +sub as_text { + # Yet another iteratively implemented traverser + my($this,%options) = @_; + my $skip_dels = $options{'skip_dels'} || 0; + my(@pile) = ($this); + my $tag; + my $text = ''; + while(@pile) { + if(!defined($pile[0])) { # undef! + # no-op + } elsif(!ref($pile[0])) { # text bit! save it! + $text .= shift @pile; + } else { # it's a ref -- traverse under it + unshift @pile, @{$this->{'_content'} || $nillio} + unless + ($tag = ($this = shift @pile)->{'_tag'}) eq 'style' + or $tag eq 'script' + or ($skip_dels and $tag eq 'del'); + } + } + return $text; +} + +sub as_trimmed_text { + my $text = shift->as_text(@_); + $text =~ s/[\n\r\f\t ]+$//s; + $text =~ s/^[\n\r\f\t ]+//s; + $text =~ s/[\n\r\f\t ]+/ /g; + return $text; +} + +sub as_text_trimmed { shift->as_trimmed_text(@_) } # alias, because I forget + +=head2 $h->as_XML() + +Returns a string representing in XML the element and its descendants. + +The XML is not indented. + +=cut + +# TODO: make it wrap, if not indent? + +sub as_XML { + # based an as_HTML + my($self) = @_; + #my $indent_on = defined($indent) && length($indent); + my @xml = (); + my $empty_element_map = $self->_empty_element_map; + + my($tag, $node, $start); # per-iteration scratch + $self->traverse( + sub { + ($node, $start) = @_; + if(ref $node) { # it's an element + $tag = $node->{'_tag'}; + if($start) { # on the way in + if($empty_element_map->{$tag} + and !@{$node->{'_content'} || $nillio} + ) { + push(@xml, $node->starttag_XML(undef,1)); + } else { + push(@xml, $node->starttag_XML(undef)); + } + } else { # on the way out + unless($empty_element_map->{$tag} + and !@{$node->{'_content'} || $nillio} + ) { + push(@xml, $node->endtag_XML()); + } # otherwise it will have been an <... /> tag. + } + } else { # it's just text + _xml_escape($node); + push(@xml, $node); + } + 1; # keep traversing + } + ); + + join('', @xml, "\n"); +} + + +sub _xml_escape { # DESTRUCTIVE (a.k.a. "in-place") + # Five required escapes: http://www.w3.org/TR/2006/REC-xml11-20060816/#syntax + # We allow & if it's part of a valid escape already: http://www.w3.org/TR/2006/REC-xml11-20060816/#sec-references + foreach my $x (@_) { + $x =~ s/( # Escape... + < | # Less than, or + > | # Greater than, or + ' | # Single quote, or + " | # Double quote, or + &(?! # An ampersand that isn't followed by... + (\#\d+; | # A hash mark, digits and semicolon, or + \#x[\da-f]+; | # A hash mark, "x", hex digits and semicolon, or + [A-Za-z0-9]+; )) # alphanums (not underscore, hence not \w) and a semicolon + )/'&#'.ord($1).";"/sgex; # And replace them with their XML digit counterpart + } + return; +} + +=head2 $h->as_Lisp_form() + +Returns a string representing the element and its descendants as a +Lisp form. Unsafe characters are encoded as octal escapes. + +The Lisp form is indented, and contains external ("href", etc.) as +well as internal attributes ("_tag", "_content", "_implicit", etc.), +except for "_parent", which is omitted. + +Current example output for a given element: + + ("_tag" "img" "border" "0" "src" "pie.png" "usemap" "#main.map") + +=cut + +# NOTES: +# +# It's been suggested that attribute names be made :-keywords: +# (:_tag "img" :border 0 :src "pie.png" :usemap "#main.map") +# However, it seems that Scheme has no such data type as :-keywords. +# So, for the moment at least, I tend toward simplicity, uniformity, +# and universality, where everything a string or a list. + +sub as_Lisp_form { + my @out; + + my $sub; + my $depth = 0; + my(@list, $val); + $sub = sub { # Recursor + my $self = $_[0]; + @list = ('_tag', $self->{'_tag'}); + @list = () unless defined $list[-1]; # unlikely + + for (sort keys %$self) { # predictable ordering + next if $_ eq '_content' or $_ eq '_tag' or $_ eq '_parent' or $_ eq '/'; + # Leave the other private attributes, I guess. + push @list, $_, $val if defined($val = $self->{$_}); # and !ref $val; + } + + for (@list) { + # octal-escape it + s<([^\x20\x21\x23\x27-\x5B\x5D-\x7E])> + eg; + $_ = qq{"$_"}; + } + push @out, (' ' x $depth) . '(' . join ' ', splice @list; + if(@{$self->{'_content'} || $nillio}) { + $out[-1] .= " \"_content\" (\n"; + ++$depth; + foreach my $c (@{$self->{'_content'}}) { + if(ref($c)) { + # an element -- recurse + $sub->($c); + } else { + # a text segment -- stick it in and octal-escape it + push @out, $c; + $out[-1] =~ + s<([^\x20\x21\x23\x27-\x5B\x5D-\x7E])> + eg; + # And quote and indent it. + $out[-1] .= "\"\n"; + $out[-1] = (' ' x $depth) . '"' . $out[-1]; + } + } + --$depth; + substr($out[-1],-1) = "))\n"; # end of _content and of the element + } else { + $out[-1] .= ")\n"; + } + return; + }; + + $sub->($_[0]); + undef $sub; + return join '', @out; +} + + +sub format { + my($self, $formatter) = @_; + unless (defined $formatter) { + require HTML::FormatText; + $formatter = HTML::FormatText->new(); + } + $formatter->format($self); +} + + + +=head2 $h->starttag() or $h->starttag($entities) + +Returns a string representing the complete start tag for the element. +I.e., leading "<", tag name, attributes, and trailing ">". +All values are surrounded with +double-quotes, and appropriate characters are encoded. If C<$entities> +is omitted or undef, I unsafe characters are encoded as HTML +entities. See L for details. If you specify some +value for C<$entities>, remember to include the double-quote character in +it. (Previous versions of this module would basically behave as if +C<'&"E'> were specified for C<$entities>.) If C<$entities> is +an empty string, no entity is escaped. + +=cut + +sub starttag { + my($self, $entities) = @_; + + my $name = $self->{'_tag'}; + + return $self->{'text'} if $name eq '~literal'; + return "{'text'} . ">" if $name eq '~declaration'; + return "{'text'} . ">" if $name eq '~pi'; + + if($name eq '~comment') { + if(ref($self->{'text'} || '') eq 'ARRAY') { + # Does this ever get used? And is this right? + return + "{'text'}})) + . ">" + ; + } else { + return "" + } + } + + my $tag = $html_uc ? "<\U$name" : "<\L$name"; + my $val; + for (sort keys %$self) { # predictable ordering + next if !length $_ or m/^_/s or $_ eq '/'; + $val = $self->{$_}; + next if !defined $val; # or ref $val; + if ($_ eq $val && # if attribute is boolean, for this element + exists($HTML::Element::boolean_attr{$name}) && + (ref($HTML::Element::boolean_attr{$name}) + ? $HTML::Element::boolean_attr{$name}{$_} + : $HTML::Element::boolean_attr{$name} eq $_) + ) { + $tag .= $html_uc ? " \U$_" : " \L$_"; + } + else { # non-boolean attribute + + if (ref $val eq 'HTML::Element' and + $val->{_tag} eq '~literal') { + $val = $val->{text}; + } + else { + HTML::Entities::encode_entities($val, $entities) unless (defined($entities) && !length($entities)); + } + + $val = qq{"$val"}; + $tag .= $html_uc ? qq{ \U$_\E=$val} : qq{ \L$_\E=$val}; + } + } # for keys + if ( scalar $self->content_list == 0 && $self->_empty_element_map->{ $self->tag } ) { + return $tag . " />"; + } + else { + return $tag . ">"; + } +} + + +sub starttag_XML { + my($self) = @_; + # and a third parameter to signal emptiness? + + my $name = $self->{'_tag'}; + + return $self->{'text'} if $name eq '~literal'; + return '{'text'}. '>' if $name eq '~declaration'; + return "{'text'} . "?>" if $name eq '~pi'; + + if($name eq '~comment') { + if(ref($self->{'text'} || '') eq 'ARRAY') { + # Does this ever get used? And is this right? + $name = join(' ', @{$self->{'text'}}); + } else { + $name = $self->{'text'}; + } + $name =~ s/--/--/g; # can't have double --'s in XML comments + return ""; + } + + my $tag = "<$name"; + my $val; + for (sort keys %$self) { # predictable ordering + next if !length $_ or m/^_/s or $_ eq '/'; + # Hm -- what to do if val is undef? + # I suppose that shouldn't ever happen. + next if !defined($val = $self->{$_}); # or ref $val; + _xml_escape($val); + $tag .= qq{ $_="$val"}; + } + @_ == 3 ? "$tag />" : "$tag>"; +} + + + +=head2 $h->endtag() + +Returns a string representing the complete end tag for this element. +I.e., "". + +=cut + +sub endtag { + $html_uc ? "{'_tag'}>" : "{'_tag'}>"; +} + +# TODO: document? +sub endtag_XML { + "{'_tag'}>"; +} + + +#========================================================================== +# This, ladies and germs, is an iterative implementation of a +# recursive algorithm. DON'T TRY THIS AT HOME. +# Basically, the algorithm says: +# +# To traverse: +# 1: pre-order visit this node +# 2: traverse any children of this node +# 3: post-order visit this node, unless it's a text segment, +# or a prototypically empty node (like "br", etc.) +# Add to that the consideration of the callbacks' return values, +# so you can block visitation of the children, or siblings, or +# abort the whole excursion, etc. +# +# So, why all this hassle with making the code iterative? +# It makes for real speed, because it eliminates the whole +# hassle of Perl having to allocate scratch space for each +# instance of the recursive sub. Since the algorithm +# is basically simple (and not all recursive ones are!) and +# has few necessary lexicals (basically just the current node's +# content list, and the current position in it), it was relatively +# straightforward to store that information not as the frame +# of a sub, but as a stack, i.e., a simple Perl array (well, two +# of them, actually: one for content-listrefs, one for indexes of +# current position in each of those). + +my $NIL = []; +sub traverse { + my($start, $callback, $ignore_text) = @_; + + Carp::croak "traverse can be called only as an object method" + unless ref $start; + + Carp::croak('must provide a callback for traverse()!') + unless defined $callback and ref $callback; + + # Elementary type-checking: + my($c_pre, $c_post); + if(UNIVERSAL::isa($callback, 'CODE')) { + $c_pre = $c_post = $callback; + } elsif(UNIVERSAL::isa($callback,'ARRAY')) { + ($c_pre, $c_post) = @$callback; + Carp::croak("pre-order callback \"$c_pre\" is true but not a coderef!") + if $c_pre and not UNIVERSAL::isa($c_pre, 'CODE'); + Carp::croak("pre-order callback \"$c_post\" is true but not a coderef!") + if $c_post and not UNIVERSAL::isa($c_post, 'CODE'); + return $start unless $c_pre or $c_post; + # otherwise there'd be nothing to actually do! + } else { + Carp::croak("$callback is not a known kind of reference") + unless ref($callback); + } + + my $empty_element_map = $start->_empty_element_map; + + my(@C) = [$start]; # a stack containing lists of children + my(@I) = (-1); # initial value must be -1 for each list + # a stack of indexes to current position in corresponding lists in @C + # In each of these, 0 is the active point + + # scratch: + my( + $rv, # return value of callback + $this, # current node + $content_r, # child list of $this + ); + + # THE BIG LOOP + while(@C) { + # Move to next item in this frame + if(!defined($I[0]) or ++$I[0] >= @{$C[0]}) { + # We either went off the end of this list, or aborted the list + # So call the post-order callback: + if($c_post + and defined $I[0] + and @C > 1 + # to keep the next line from autovivifying + and defined($this = $C[1][ $I[1] ]) # sanity, and + # suppress callbacks on exiting the fictional top frame + and ref($this) # sanity + and not( + $this->{'_empty_element'} + || $empty_element_map->{$this->{'_tag'} || ''} + ) # things that don't get post-order callbacks + ) { + shift @I; + shift @C; + #print "Post! at depth", scalar(@I), "\n"; + $rv = $c_post->( + #map $_, # copy to avoid any messiness + $this, # 0: this + 0, # 1: startflag (0 for post-order call) + @I - 1, # 2: depth + ); + + if(defined($rv) and ref($rv) eq $travsignal_package) { + $rv = $$rv; #deref + if($rv eq 'ABORT') { + last; # end of this excursion! + } elsif($rv eq 'PRUNE') { + # NOOP on post!! + } elsif($rv eq 'PRUNE_SOFTLY') { + # NOOP on post!! + } elsif($rv eq 'OK') { + # noop + } elsif($rv eq 'PRUNE_UP') { + $I[0] = undef; + } else { + die "Unknown travsignal $rv\n"; + # should never happen + } + } + } + else { + shift @I; + shift @C; + } + next; + } + + $this = $C[0][ $I[0] ]; + + if($c_pre) { + if(defined $this and ref $this) { # element + $rv = $c_pre->( + #map $_, # copy to avoid any messiness + $this, # 0: this + 1, # 1: startflag (1 for pre-order call) + @I - 1, # 2: depth + ); + } else { # text segment + next if $ignore_text; + $rv = $c_pre->( + #map $_, # copy to avoid any messiness + $this, # 0: this + 1, # 1: startflag (1 for pre-order call) + @I - 1, # 2: depth + $C[1][ $I[1] ], # 3: parent + # And there will always be a $C[1], since + # we can't start traversing at a text node + $I[0] # 4: index of self in parent's content list + ); + } + if(not $rv) { # returned false. Same as PRUNE. + next; # prune + } elsif(ref($rv) eq $travsignal_package) { + $rv = $$rv; # deref + if($rv eq 'ABORT') { + last; # end of this excursion! + } elsif($rv eq 'PRUNE') { + next; + } elsif($rv eq 'PRUNE_SOFTLY') { + if(ref($this) + and + not($this->{'_empty_element'} + || $empty_element_map->{$this->{'_tag'} || ''}) + ) { + # push a dummy empty content list just to trigger a post callback + unshift @I, -1; + unshift @C, $NIL; + } + next; + } elsif($rv eq 'OK') { + # noop + } elsif($rv eq 'PRUNE_UP') { + $I[0] = undef; + next; + + # equivalent of last'ing out of the current child list. + + # Used to have PRUNE_UP_SOFTLY and ABORT_SOFTLY here, but the code + # for these was seriously upsetting, served no particularly clear + # purpose, and could not, I think, be easily implemented with a + # recursive routine. All bad things! + } else { + die "Unknown travsignal $rv\n"; + # should never happen + } + } + # else fall thru to meaning same as \'OK'. + } + # end of pre-order calling + + # Now queue up content list for the current element... + if(ref $this + and + not( # ...except for those which... + not($content_r = $this->{'_content'} and @$content_r) + # ...have empty content lists... + and $this->{'_empty_element'} || $empty_element_map->{$this->{'_tag'} || ''} + # ...and that don't get post-order callbacks + ) + ) { + unshift @I, -1; + unshift @C, $content_r || $NIL; + #print $this->{'_tag'}, " ($this) adds content_r ", $C[0], "\n"; + } + } + return $start; +} + + +=head1 SECONDARY STRUCTURAL METHODS + +These methods all involve some structural aspect of the tree; +either they report some aspect of the tree's structure, or they involve +traversal down the tree, or walking up the tree. + +=head2 $h->is_inside('tag', ...) or $h->is_inside($element, ...) + +Returns true if the $h element is, or is contained anywhere inside an +element that is any of the ones listed, or whose tag name is any of +the tag names listed. + +=cut + +sub is_inside { + my $self = shift; + return undef unless @_; # if no items specified, I guess this is right. + + my $current = $self; + # the loop starts by looking at the given element + while (defined $current and ref $current) { + for (@_) { + if(ref) { # element + return 1 if $_ eq $current; + } else { # tag name + return 1 if $_ eq $current->{'_tag'}; + } + } + $current = $current->{'_parent'}; + } + 0; +} + +=head2 $h->is_empty() + +Returns true if $h has no content, i.e., has no elements or text +segments under it. In other words, this returns true if $h is a leaf +node, AKA a terminal node. Do not confuse this sense of "empty" with +another sense that it can have in SGML/HTML/XML terminology, which +means that the element in question is of the type (like HTML's "hr", +"br", "img", etc.) that I have any content. + +That is, a particular "p" element may happen to have no content, so +$that_p_element->is_empty will be true -- even though the prototypical +"p" element isn't "empty" (not in the way that the prototypical "hr" +element is). + +If you think this might make for potentially confusing code, consider +simply using the clearer exact equivalent: not($h->content_list) + +=cut + +sub is_empty { + my $self = shift; + !$self->{'_content'} || !@{$self->{'_content'}}; +} + + +=head2 $h->pindex() + +Return the index of the element in its parent's contents array, such +that $h would equal + + $h->parent->content->[$h->pindex] + or + ($h->parent->content_list)[$h->pindex] + +assuming $h isn't root. If the element $h is root, then +$h->pindex returns undef. + +=cut + +sub pindex { + my $self = shift; + + my $parent = $self->{'_parent'} || return undef; + my $pc = $parent->{'_content'} || return undef; + for(my $i = 0; $i < @$pc; ++$i) { + return $i if ref $pc->[$i] and $pc->[$i] eq $self; + } + return undef; # we shouldn't ever get here +} + +#-------------------------------------------------------------------------- + +=head2 $h->left() + +In scalar context: returns the node that's the immediate left sibling +of $h. If $h is the leftmost (or only) child of its parent (or has no +parent), then this returns undef. + +In list context: returns all the nodes that're the left siblings of $h +(starting with the leftmost). If $h is the leftmost (or only) child +of its parent (or has no parent), then this returns empty-list. + +(See also $h->preinsert(LIST).) + +=cut + +sub left { + Carp::croak "left() is supposed to be an object method" + unless ref $_[0]; + my $pc = + ( + $_[0]->{'_parent'} || return + )->{'_content'} || die "parent is childless?"; + + die "parent is childless" unless @$pc; + return if @$pc == 1; # I'm an only child + + if(wantarray) { + my @out; + foreach my $j (@$pc) { + return @out if ref $j and $j eq $_[0]; + push @out, $j; + } + } else { + for(my $i = 0; $i < @$pc; ++$i) { + return $i ? $pc->[$i - 1] : undef + if ref $pc->[$i] and $pc->[$i] eq $_[0]; + } + } + + die "I'm not in my parent's content list?"; + return; +} + +=head2 $h->right() + +In scalar context: returns the node that's the immediate right sibling +of $h. If $h is the rightmost (or only) child of its parent (or has +no parent), then this returns undef. + +In list context: returns all the nodes that're the right siblings of +$h, starting with the leftmost. If $h is the rightmost (or only) child +of its parent (or has no parent), then this returns empty-list. + +(See also $h->postinsert(LIST).) + +=cut + +sub right { + Carp::croak "right() is supposed to be an object method" + unless ref $_[0]; + my $pc = + ( + $_[0]->{'_parent'} || return + )->{'_content'} || die "parent is childless?"; + + die "parent is childless" unless @$pc; + return if @$pc == 1; # I'm an only child + + if(wantarray) { + my(@out, $seen); + foreach my $j (@$pc) { + if($seen) { + push @out, $j; + } else { + $seen = 1 if ref $j and $j eq $_[0]; + } + } + die "I'm not in my parent's content list?" unless $seen; + return @out; + } else { + for(my $i = 0; $i < @$pc; ++$i) { + return +($i == $#$pc) ? undef : $pc->[$i+1] + if ref $pc->[$i] and $pc->[$i] eq $_[0]; + } + die "I'm not in my parent's content list?"; + return; + } +} + +#-------------------------------------------------------------------------- + +=head2 $h->address() + +Returns a string representing the location of this node in the tree. +The address consists of numbers joined by a '.', starting with '0', +and followed by the pindexes of the nodes in the tree that are +ancestors of $h, starting from the top. + +So if the way to get to a node starting at the root is to go to child +2 of the root, then child 10 of that, and then child 0 of that, and +then you're there -- then that node's address is "0.2.10.0". + +As a bit of a special case, the address of the root is simply "0". + +I forsee this being used mainly for debugging, but you may +find your own uses for it. + +=head2 $h->address($address) + +This returns the node (whether element or text-segment) at +the given address in the tree that $h is a part of. (That is, +the address is resolved starting from $h->root.) + +If there is no node at the given address, this returns undef. + +You can specify "relative addressing" (i.e., that indexing is supposed +to start from $h and not from $h->root) by having the address start +with a period -- e.g., $h->address(".3.2") will look at child 3 of $h, +and child 2 of that. + +=cut + +sub address { + if(@_ == 1) { # report-address form + return + join('.', + reverse( # so it starts at the top + map($_->pindex() || '0', # so that root's undef -> '0' + $_[0], # self and... + $_[0]->lineage + ) + ) + ) + ; + } else { # get-node-at-address + my @stack = split(/\./, $_[1]); + my $here; + + if(@stack and !length $stack[0]) { # relative addressing + $here = $_[0]; + shift @stack; + } else { # absolute addressing + return undef unless 0 == shift @stack; # to pop the initial 0-for-root + $here = $_[0]->root; + } + + while(@stack) { + return undef + unless + $here->{'_content'} + and @{$here->{'_content'}} > $stack[0]; + # make sure the index isn't too high + $here = $here->{'_content'}[ shift @stack ]; + return undef if @stack and not ref $here; + # we hit a text node when we expected a non-terminal element node + } + + return $here; + } +} + + +=head2 $h->depth() + +Returns a number expressing C<$h>'s depth within its tree, i.e., how many +steps away it is from the root. If C<$h> has no parent (i.e., is root), +its depth is 0. + +=cut + +sub depth { + my $here = $_[0]; + my $depth = 0; + while(defined($here = $here->{'_parent'}) and ref($here)) { + ++$depth; + } + return $depth; +} + + +=head2 $h->root() + +Returns the element that's the top of C<$h>'s tree. If C<$h> is +root, this just returns C<$h>. (If you want to test whether C<$h> +I the root, instead of asking what its root is, just test +C<< not($h->parent) >>.) + +=cut + +sub root { + my $here = my $root = shift; + while(defined($here = $here->{'_parent'}) and ref($here)) { + $root = $here; + } + return $root; +} + + +=head2 $h->lineage() + +Returns the list of C<$h>'s ancestors, starting with its parent, +and then that parent's parent, and so on, up to the root. If C<$h> +is root, this returns an empty list. + +If you simply want a count of the number of elements in C<$h>'s lineage, +use $h->depth. + +=cut + +sub lineage { + my $here = shift; + my @lineage; + while(defined($here = $here->{'_parent'}) and ref($here)) { + push @lineage, $here; + } + return @lineage; +} + + +=head2 $h->lineage_tag_names() + +Returns the list of the tag names of $h's ancestors, starting +with its parent, and that parent's parent, and so on, up to the +root. If $h is root, this returns an empty list. +Example output: C<('em', 'td', 'tr', 'table', 'body', 'html')> + +=cut + +sub lineage_tag_names { + my $here = my $start = shift; + my @lineage_names; + while(defined($here = $here->{'_parent'}) and ref($here)) { + push @lineage_names, $here->{'_tag'}; + } + return @lineage_names; +} + + +=head2 $h->descendants() + +In list context, returns the list of all $h's descendant elements, +listed in pre-order (i.e., an element appears before its +content-elements). Text segments DO NOT appear in the list. +In scalar context, returns a count of all such elements. + +=head2 $h->descendents() + +This is just an alias to the C method. + +=cut + +sub descendents { shift->descendants(@_) } + +sub descendants { + my $start = shift; + if(wantarray) { + my @descendants; + $start->traverse( + [ # pre-order sub only + sub { + push(@descendants, $_[0]); + return 1; + }, + undef # no post + ], + 1, # ignore text + ); + shift @descendants; # so $self doesn't appear in the list + return @descendants; + } else { # just returns a scalar + my $descendants = -1; # to offset $self being counted + $start->traverse( + [ # pre-order sub only + sub { + ++$descendants; + return 1; + }, + undef # no post + ], + 1, # ignore text + ); + return $descendants; + } +} + + +=head2 $h->find_by_tag_name('tag', ...) + +In list context, returns a list of elements at or under $h that have +any of the specified tag names. In scalar context, returns the first +(in pre-order traversal of the tree) such element found, or undef if +none. + +=head2 $h->find('tag', ...) + +This is just an alias to C. (There was once +going to be a whole find_* family of methods, but then look_down +filled that niche, so there turned out not to be much reason for the +verboseness of the name "find_by_tag_name".) + +=cut + +sub find { shift->find_by_tag_name( @_ ) } + # yup, a handy alias + + +sub find_by_tag_name { + my(@pile) = shift(@_); # start out the to-do stack for the traverser + Carp::croak "find_by_tag_name can be called only as an object method" + unless ref $pile[0]; + return() unless @_; + my(@tags) = $pile[0]->_fold_case(@_); + my(@matching, $this, $this_tag); + while(@pile) { + $this_tag = ($this = shift @pile)->{'_tag'}; + foreach my $t (@tags) { + if($t eq $this_tag) { + if(wantarray) { + push @matching, $this; + last; + } else { + return $this; + } + } + } + unshift @pile, grep ref($_), @{$this->{'_content'} || next}; + } + return @matching if wantarray; + return; +} + +=head2 $h->find_by_attribute('attribute', 'value') + +In a list context, returns a list of elements at or under $h that have +the specified attribute, and have the given value for that attribute. +In a scalar context, returns the first (in pre-order traversal of the +tree) such element found, or undef if none. + +This method is B in favor of the more expressive +C method, which new code should use instead. + +=cut + + +sub find_by_attribute { + # We could limit this to non-internal attributes, but hey. + my($self, $attribute, $value) = @_; + Carp::croak "Attribute must be a defined value!" unless defined $attribute; + $attribute = $self->_fold_case($attribute); + + my @matching; + my $wantarray = wantarray; + my $quit; + $self->traverse( + [ # pre-order only + sub { + if( exists $_[0]{$attribute} + and $_[0]{$attribute} eq $value + ) { + push @matching, $_[0]; + return HTML::Element::ABORT unless $wantarray; # only take the first + } + 1; # keep traversing + }, + undef # no post + ], + 1, # yes, ignore text nodes. + ); + + if($wantarray) { + return @matching; + } else { + return undef unless @matching; + return $matching[0]; + } +} + +#-------------------------------------------------------------------------- + +=head2 $h->look_down( ...criteria... ) + +This starts at $h and looks thru its element descendants (in +pre-order), looking for elements matching the criteria you specify. +In list context, returns all elements that match all the given +criteria; in scalar context, returns the first such element (or undef, +if nothing matched). + +There are three kinds of criteria you can specify: + +=over + +=item (attr_name, attr_value) + +This means you're looking for an element with that value for that +attribute. Example: C<"alt", "pix!">. Consider that you can search +on internal attribute values too: C<"_tag", "p">. + +=item (attr_name, qr/.../) + +This means you're looking for an element whose value for that +attribute matches the specified Regexp object. + +=item a coderef + +This means you're looking for elements where coderef->(each_element) +returns true. Example: + + my @wide_pix_images + = $h->look_down( + "_tag", "img", + "alt", "pix!", + sub { $_[0]->attr('width') > 350 } + ); + +=back + +Note that C<(attr_name, attr_value)> and C<(attr_name, qr/.../)> +criteria are almost always faster than coderef +criteria, so should presumably be put before them in your list of +criteria. That is, in the example above, the sub ref is called only +for elements that have already passed the criteria of having a "_tag" +attribute with value "img", and an "alt" attribute with value "pix!". +If the coderef were first, it would be called on every element, and +I what elements pass that criterion (i.e., elements for which +the coderef returned true) would be checked for their "_tag" and "alt" +attributes. + +Note that comparison of string attribute-values against the string +value in C<(attr_name, attr_value)> is case-INsensitive! A criterion +of C<('align', 'right')> I match an element whose "align" value +is "RIGHT", or "right" or "rIGhT", etc. + +Note also that C considers "" (empty-string) and undef to +be different things, in attribute values. So this: + + $h->look_down("alt", "") + +will find elements I an "alt" attribute, but where the value for +the "alt" attribute is "". But this: + + $h->look_down("alt", undef) + +is the same as: + + $h->look_down(sub { !defined($_[0]->attr('alt')) } ) + +That is, it finds elements that do not have an "alt" attribute at all +(or that do have an "alt" attribute, but with a value of undef -- +which is not normally possible). + +Note that when you give several criteria, this is taken to mean you're +looking for elements that match I your criterion, not just I +of them. In other words, there is an implicit "and", not an "or". So +if you wanted to express that you wanted to find elements with a +"name" attribute with the value "foo" I with an "id" attribute +with the value "baz", you'd have to do it like: + + @them = $h->look_down( + sub { + # the lcs are to fold case + lc($_[0]->attr('name')) eq 'foo' + or lc($_[0]->attr('id')) eq 'baz' + } + ); + +Coderef criteria are more expressive than C<(attr_name, attr_value)> +and C<(attr_name, qr/.../)> +criteria, and all C<(attr_name, attr_value)> +and C<(attr_name, qr/.../)> +criteria could be +expressed in terms of coderefs. However, C<(attr_name, attr_value)> +and C<(attr_name, qr/.../)> +criteria are a convenient shorthand. (In fact, C itself is +basically "shorthand" too, since anything you can do with C +you could do by traversing the tree, either with the C +method or with a routine of your own. However, C often +makes for very concise and clear code.) + +=cut + +sub look_down { + ref($_[0]) or Carp::croak "look_down works only as an object method"; + + my @criteria; + for(my $i = 1; $i < @_;) { + Carp::croak "Can't use undef as an attribute name" unless defined $_[$i]; + if(ref $_[$i]) { + Carp::croak "A " . ref($_[$i]) . " value is not a criterion" + unless ref $_[$i] eq 'CODE'; + push @criteria, $_[ $i++ ]; + } else { + Carp::croak "param list to look_down ends in a key!" if $i == $#_; + push @criteria, [ scalar($_[0]->_fold_case($_[$i])), + defined($_[$i+1]) + ? ( ( ref $_[$i+1] ? $_[$i+1] : lc( $_[$i+1] )), ref( $_[$i+1] ) ) + # yes, leave that LC! + : undef + ]; + $i += 2; + } + } + Carp::croak "No criteria?" unless @criteria; + + my(@pile) = ($_[0]); + my(@matching, $val, $this); + Node: + while(defined($this = shift @pile)) { + # Yet another traverser implemented with merely iterative code. + foreach my $c (@criteria) { + if(ref($c) eq 'CODE') { + next Node unless $c->($this); # jump to the continue block + } else { # it's an attr-value pair + next Node # jump to the continue block + if # two values are unequal if: + (defined($val = $this->{ $c->[0] })) + ? ( + !defined $c->[1] # actual is def, critval is undef => fail + # allow regex matching + # allow regex matching + or ( + $c->[2] eq 'Regexp' + ? $val !~ $c->[1] + : ( ref $val ne $c->[2] + # have unequal ref values => fail + or lc($val) ne lc($c->[1]) + # have unequal lc string values => fail + )) + ) + : (defined $c->[1]) # actual is undef, critval is def => fail + } + } + # We make it this far only if all the criteria passed. + return $this unless wantarray; + push @matching, $this; + } continue { + unshift @pile, grep ref($_), @{$this->{'_content'} || $nillio}; + } + return @matching if wantarray; + return; +} + + +=head2 $h->look_up( ...criteria... ) + +This is identical to $h->look_down, except that whereas $h->look_down +basically scans over the list: + + ($h, $h->descendants) + +$h->look_up instead scans over the list + + ($h, $h->lineage) + +So, for example, this returns all ancestors of $h (possibly including +$h itself) that are "td" elements with an "align" attribute with a +value of "right" (or "RIGHT", etc.): + + $h->look_up("_tag", "td", "align", "right"); + +=cut + +sub look_up { + ref($_[0]) or Carp::croak "look_up works only as an object method"; + + my @criteria; + for(my $i = 1; $i < @_;) { + Carp::croak "Can't use undef as an attribute name" unless defined $_[$i]; + if(ref $_[$i]) { + Carp::croak "A " . ref($_[$i]) . " value is not a criterion" + unless ref $_[$i] eq 'CODE'; + push @criteria, $_[ $i++ ]; + } else { + Carp::croak "param list to look_up ends in a key!" if $i == $#_; + push @criteria, [ scalar($_[0]->_fold_case($_[$i])), + defined($_[$i+1]) + ? ( ( ref $_[$i+1] ? $_[$i+1] : lc( $_[$i+1] )), ref( $_[$i+1] ) ) + : undef # Yes, leave that LC! + ]; + $i += 2; + } + } + Carp::croak "No criteria?" unless @criteria; + + my(@matching, $val); + my $this = $_[0]; + Node: + while(1) { + # You'll notice that the code here is almost the same as for look_down. + foreach my $c (@criteria) { + if(ref($c) eq 'CODE') { + next Node unless $c->($this); # jump to the continue block + } else { # it's an attr-value pair + next Node # jump to the continue block + if # two values are unequal if: + (defined($val = $this->{ $c->[0] })) + ? ( + !defined $c->[1] # actual is def, critval is undef => fail + or ( + $c->[2] eq 'Regexp' + ? $val !~ $c->[1] + : ( ref $val ne $c->[2] + # have unequal ref values => fail + or lc($val) ne $c->[1] + # have unequal lc string values => fail + )) + ) + : (defined $c->[1]) # actual is undef, critval is def => fail + } + } + # We make it this far only if all the criteria passed. + return $this unless wantarray; + push @matching, $this; + } continue { + last unless defined($this = $this->{'_parent'}) and ref $this; + } + + return @matching if wantarray; + return; +} + +#-------------------------------------------------------------------------- + +=head2 $h->traverse(...options...) + +Lengthy discussion of HTML::Element's unnecessary and confusing +C method has been moved to a separate file: +L + +=head2 $h->attr_get_i('attribute') + +In list context, returns a list consisting of the values of the given +attribute for $self and for all its ancestors starting from $self and +working its way up. Nodes with no such attribute are skipped. +("attr_get_i" stands for "attribute get, with inheritance".) +In scalar context, returns the first such value, or undef if none. + +Consider a document consisting of: + + + Pati Pata + +

    Stuff

    +

    + Foo bar baz Quux. +

    +

    Hooboy.

    + + + +If $h is the "cite" element, $h->attr_get_i("lang") in list context +will return the list ('es-MX', 'i-klingon'). In scalar context, it +will return the value 'es-MX'. + +If you call with multiple attribute names... + +=head2 $h->attr_get_i('a1', 'a2', 'a3') + +...in list context, this will return a list consisting of +the values of these attributes which exist in $self and its ancestors. +In scalar context, this returns the first value (i.e., the value of +the first existing attribute from the first element that has +any of the attributes listed). So, in the above example, + + $h->attr_get_i('lang', 'align'); + +will return: + + ('es-MX', 'center', 'i-klingon') # in list context + or + 'es-MX' # in scalar context. + +But note that this: + + $h->attr_get_i('align', 'lang'); + +will return: + + ('center', 'es-MX', 'i-klingon') # in list context + or + 'center' # in scalar context. + +=cut + +sub attr_get_i { + if(@_ > 2) { + my $self = shift; + Carp::croak "No attribute names can be undef!" + if grep !defined($_), @_; + my @attributes = $self->_fold_case(@_); + if(wantarray) { + my @out; + foreach my $x ($self, $self->lineage) { + push @out, map { exists($x->{$_}) ? $x->{$_} : () } @attributes; + } + return @out; + } else { + foreach my $x ($self, $self->lineage) { + foreach my $attribute (@attributes) { + return $x->{$attribute} if exists $x->{$attribute}; # found + } + } + return undef; # never found + } + } else { + # Single-attribute search. Simpler, most common, so optimize + # for the most common case + Carp::croak "Attribute name must be a defined value!" unless defined $_[1]; + my $self = $_[0]; + my $attribute = $self->_fold_case($_[1]); + if(wantarray) { # list context + return + map { + exists($_->{$attribute}) ? $_->{$attribute} : () + } $self, $self->lineage; + ; + } else { # scalar context + foreach my $x ($self, $self->lineage) { + return $x->{$attribute} if exists $x->{$attribute}; # found + } + return undef; # never found + } + } +} + + +=head2 $h->tagname_map() + +Scans across C<$h> and all its descendants, and makes a hash (a +reference to which is returned) where each entry consists of a key +that's a tag name, and a value that's a reference to a list to all +elements that have that tag name. I.e., this method returns: + + { + # Across $h and all descendants... + 'a' => [ ...list of all 'a' elements... ], + 'em' => [ ...list of all 'em' elements... ], + 'img' => [ ...list of all 'img' elements... ], + } + +(There are entries in the hash for only those tagnames that occur +at/under C<$h> -- so if there's no "img" elements, there'll be no +"img" entry in the hashr(ref) returned.) + +Example usage: + + my $map_r = $h->tagname_map(); + my @heading_tags = sort grep m/^h\d$/s, keys %$map_r; + if(@heading_tags) { + print "Heading levels used: @heading_tags\n"; + } else { + print "No headings.\n" + } + +=cut + +sub tagname_map { + my(@pile) = $_[0]; # start out the to-do stack for the traverser + Carp::croak "find_by_tag_name can be called only as an object method" + unless ref $pile[0]; + my(%map, $this_tag, $this); + while(@pile) { + $this_tag = '' + unless defined( + $this_tag = ( + $this = shift @pile + )->{'_tag'} + ) + ; # dance around the strange case of having an undef tagname. + push @{ $map{$this_tag} ||= [] }, $this; # add to map + unshift @pile, grep ref($_), @{$this->{'_content'} || next}; # traverse + } + return \%map; +} + + +=head2 $h->extract_links() or $h->extract_links(@wantedTypes) + +Returns links found by traversing the element and all of its children +and looking for attributes (like "href" in an "a" element, or "src" in +an "img" element) whose values represent links. The return value is a +I to an array. Each element of the array is reference to +an array with I items: the link-value, the element that has the +attribute with that link-value, and the name of that attribute, and +the tagname of that element. +(Example: C<['http://www.suck.com/',> I<$elem_obj> C<, 'href', 'a']>.) +You may or may not end up using the +element itself -- for some purposes, you may use only the link value. + +You might specify that you want to extract links from just some kinds +of elements (instead of the default, which is to extract links from +I the kinds of elements known to have attributes whose values +represent links). For instance, if you want to extract links from +only "a" and "img" elements, you could code it like this: + + for (@{ $e->extract_links('a', 'img') }) { + my($link, $element, $attr, $tag) = @$_; + print + "Hey, there's a $tag that links to " + $link, ", in its $attr attribute, at ", + $element->address(), ".\n"; + } + +=cut + + +sub extract_links { + my $start = shift; + + my %wantType; + @wantType{$start->_fold_case(@_)} = (1) x @_; # if there were any + my $wantType = scalar(@_); + + my @links; + + # TODO: add xml:link? + + my($link_attrs, $tag, $self, $val); # scratch for each iteration + $start->traverse( + [ + sub { # pre-order call only + $self = $_[0]; + + $tag = $self->{'_tag'}; + return 1 if $wantType && !$wantType{$tag}; # if we're selective + + if(defined( $link_attrs = $HTML::Element::linkElements{$tag} )) { + # If this is a tag that has any link attributes, + # look over possibly present link attributes, + # saving the value, if found. + for (ref($link_attrs) ? @$link_attrs : $link_attrs) { + if(defined( $val = $self->attr($_) )) { + push(@links, [$val, $self, $_, $tag]) + } + } + } + 1; # return true, so we keep recursing + }, + undef + ], + 1, # ignore text nodes + ); + \@links; +} + + +=head2 $h->simplify_pres + +In text bits under PRE elements that are at/under $h, this routine +nativizes all newlines, and expands all tabs. + +That is, if you read a file with lines delimited by C<\cm\cj>'s, the +text under PRE areas will have C<\cm\cj>'s instead of C<\n>'s. Calling +$h->nativize_pre_newlines on such a tree will turn C<\cm\cj>'s into +C<\n>'s. + +Tabs are expanded to however many spaces it takes to get +to the next 8th column -- the usual way of expanding them. + +=cut + +sub simplify_pres { + my $pre = 0; + + my $sub; + my $line; + $sub = sub { + ++$pre if $_[0]->{'_tag'} eq 'pre'; + foreach my $it (@{ $_[0]->{'_content'} || return }) { + if(ref $it) { + $sub->( $it ); # recurse! + } elsif($pre) { + #$it =~ s/(?:(?:\cm\cj*)|(?:\cj))/\n/g; + + $it = + join "\n", + map {; + $line = $_; + while($line =~ + s/^([^\t]*)(\t+)/$1.(" " x ((length($2)<<3)-(length($1)&7)))/e + # Sort of adapted from Text::Tabs -- yes, it's hardwired-in that + # tabs are at every EIGHTH column. + ){} + $line; + } + split /(?:(?:\cm\cj*)|(?:\cj))/, $it, -1 + ; + } + } + --$pre if $_[0]->{'_tag'} eq 'pre'; + return; + }; + $sub->( $_[0] ); + + undef $sub; + return; + +} + + + +=head2 $h->same_as($i) + +Returns true if $h and $i are both elements representing the same tree +of elements, each with the same tag name, with the same explicit +attributes (i.e., not counting attributes whose names start with "_"), +and with the same content (textual, comments, etc.). + +Sameness of descendant elements is tested, recursively, with +C<$child1-Esame_as($child_2)>, and sameness of text segments is tested +with C<$segment1 eq $segment2>. + +=cut + +sub same_as { + die 'same_as() takes only one argument: $h->same_as($i)' unless @_ == 2; + my($h,$i) = @_[0,1]; + die "same_as() can be called only as an object method" unless ref $h; + + return 0 unless defined $i and ref $i; + # An element can't be same_as anything but another element! + # They needn't be of the same class, tho. + + return 1 if $h eq $i; + # special (if rare) case: anything is the same as... itself! + + # assumes that no content lists in/under $h or $i contain subsequent + # text segments, like: ['foo', ' bar'] + + # compare attributes now. + #print "Comparing tags of $h and $i...\n"; + + return 0 unless $h->{'_tag'} eq $i->{'_tag'}; + # only significant attribute whose name starts with "_" + + #print "Comparing attributes of $h and $i...\n"; + # Compare attributes, but only the real ones. + { + # Bear in mind that the average element has very few attributes, + # and that element names are rather short. + # (Values are a different story.) + + # XXX I would think that /^[^_]/ would be faster, at least easier to read. + my @keys_h = sort grep {length $_ and substr($_,0,1) ne '_'} keys %$h; + my @keys_i = sort grep {length $_ and substr($_,0,1) ne '_'} keys %$i; + + return 0 unless @keys_h == @keys_i; + # different number of real attributes? they're different. + for(my $x = 0; $x < @keys_h; ++$x) { + return 0 unless + $keys_h[$x] eq $keys_i[$x] and # same key name + $h->{$keys_h[$x]} eq $i->{$keys_h[$x]}; # same value + # Should this test for definedness on values? + # People shouldn't be putting undef in attribute values, I think. + } + } + + #print "Comparing children of $h and $i...\n"; + my $hcl = $h->{'_content'} || []; + my $icl = $i->{'_content'} || []; + + return 0 unless @$hcl == @$icl; + # different numbers of children? they're different. + + if(@$hcl) { + # compare each of the children: + for(my $x = 0; $x < @$hcl; ++$x) { + if(ref $hcl->[$x]) { + return 0 unless ref($icl->[$x]); + # an element can't be the same as a text segment + # Both elements: + return 0 unless $hcl->[$x]->same_as($icl->[$x]); # RECURSE! + } else { + return 0 if ref($icl->[$x]); + # a text segment can't be the same as an element + # Both text segments: + return 0 unless $hcl->[$x] eq $icl->[$x]; + } + } + } + + return 1; # passed all the tests! +} + + +=head2 $h = HTML::Element->new_from_lol(ARRAYREF) + +Resursively constructs a tree of nodes, based on the (non-cyclic) +data structure represented by ARRAYREF, where that is a reference +to an array of arrays (of arrays (of arrays (etc.))). + +In each arrayref in that structure, different kinds of values are +treated as follows: + +=over + +=item * Arrayrefs + +Arrayrefs are considered to +designate a sub-tree representing children for the node constructed +from the current arrayref. + +=item * Hashrefs + +Hashrefs are considered to contain +attribute-value pairs to add to the element to be constructed from +the current arrayref + +=item * Text segments + +Text segments at the start of any arrayref +will be considered to specify the name of the element to be +constructed from the current araryref; all other text segments will +be considered to specify text segments as children for the current +arrayref. + +=item * Elements + +Existing element objects are either inserted into the treelet +constructed, or clones of them are. That is, when the lol-tree is +being traversed and elements constructed based what's in it, if +an existing element object is found, if it has no parent, then it is +added directly to the treelet constructed; but if it has a parent, +then C<$that_node-Eclone> is added to the treelet at the +appropriate place. + +=back + +An example will hopefully make this more obvious: + + my $h = HTML::Element->new_from_lol( + ['html', + ['head', + [ 'title', 'I like stuff!' ], + ], + ['body', + {'lang', 'en-JP', _implicit => 1}, + 'stuff', + ['p', 'um, p < 4!', {'class' => 'par123'}], + ['div', {foo => 'bar'}, '123'], + ] + ] + ); + $h->dump; + +Will print this: + + @0 + @0.0 + @0.0.0 + "I like stuff!" + <body lang="en-JP"> @0.1 (IMPLICIT) + "stuff" + <p class="par123"> @0.1.1 + "um, p < 4!" + <div foo="bar"> @0.1.2 + "123" + +And printing $h->as_HTML will give something like: + + <html><head><title>I like stuff! + stuff

    um, p < 4! +

    123
    + +You can even do fancy things with C: + + $body->push_content( + # push_content implicitly calls new_from_lol on arrayrefs... + ['br'], + ['blockquote', + ['h2', 'Pictures!'], + map ['p', $_], + $body2->look_down("_tag", "img"), + # images, to be copied from that other tree. + ], + # and more stuff: + ['ul', + map ['li', ['a', {'href'=>"$_.png"}, $_ ] ], + qw(Peaches Apples Pears Mangos) + ], + ); + +=head2 @elements = HTML::Element->new_from_lol(ARRAYREFS) + +Constructs I elements, by calling +new_from_lol for every arrayref in the ARRAYREFS list. + + @elements = HTML::Element->new_from_lol( + ['hr'], + ['p', 'And there, on the door, was a hook!'], + ); + # constructs two elements. + +=cut + +sub new_from_lol { + my $class = shift; + $class = ref($class) || $class; + # calling as an object method is just the same as ref($h)->new_from_lol(...) + my $lol = $_[1]; + + my @ancestor_lols; + # So we can make sure there's no cyclicities in this lol. + # That would be perverse, but one never knows. + my($sub, $k, $v, $node); # last three are scratch values + $sub = sub { + #print "Building for $_[0]\n"; + my $lol = $_[0]; + return unless @$lol; + my(@attributes, @children); + Carp::croak "Cyclicity detected in source LOL tree, around $lol?!?" + if grep($_ eq $lol, @ancestor_lols); + push @ancestor_lols, $lol; + + my $tag_name = 'null'; + + # Recursion in in here: + for(my $i = 0; $i < @$lol; ++$i) { # Iterate over children + if(ref($lol->[$i]) eq 'ARRAY') { # subtree: most common thing in loltree + push @children, $sub->($lol->[$i]); + } elsif(! ref($lol->[$i])) { + if($i == 0) { # name + $tag_name = $lol->[$i]; + Carp::croak "\"$tag_name\" isn't a good tag name!" + if $tag_name =~ m/[<>\/\x00-\x20]/; # minimal sanity, certainly! + } else { # text segment child + push @children, $lol->[$i]; + } + } elsif(ref($lol->[$i]) eq 'HASH') { # attribute hashref + keys %{$lol->[$i]}; # reset the each-counter, just in case + while(($k,$v) = each %{$lol->[$i]}) { + push @attributes, $class->_fold_case($k), $v + if defined $v and $k ne '_name' and $k ne '_content' and + $k ne '_parent'; + # enforce /some/ sanity! + } + } elsif(UNIVERSAL::isa($lol->[$i], __PACKAGE__)) { + if($lol->[$i]->{'_parent'}) { # if claimed + #print "About to clone ", $lol->[$i], "\n"; + push @children, $lol->[$i]->clone(); + } else { + push @children, $lol->[$i]; # if unclaimed... + #print "Claiming ", $lol->[$i], "\n"; + $lol->[$i]->{'_parent'} = 1; # claim it NOW + # This WILL be replaced by the correct value once we actually + # construct the parent, just after the end of this loop... + } + } else { + Carp::croak "new_from_lol doesn't handle references of type " + . ref($lol->[$i]); + } + } + + pop @ancestor_lols; + $node = $class->new($tag_name); + + #print "Children: @children\n"; + + if($class eq __PACKAGE__) { # Special-case it, for speed: + %$node = (%$node, @attributes) if @attributes; + #print join(' ', $node, ' ' , map("<$_>", %$node), "\n"); + if(@children) { + $node->{'_content'} = \@children; + foreach my $c (@children) { $c->{'_parent'} = $node if ref $c } + } + } else { # Do it the clean way... + #print "Done neatly\n"; + while(@attributes) { $node->attr(splice @attributes,0,2) } + $node->push_content(@children) if @children; + } + + return $node; + }; + # End of sub definition. + + + if(wantarray) { + my(@nodes) = map {; (ref($_) eq 'ARRAY') ? $sub->($_) : $_ } @_; + # Let text bits pass thru, I guess. This makes this act more like + # unshift_content et al. Undocumented. + undef $sub; + # so it won't be in its own frame, so its refcount can hit 0 + return @nodes; + } else { + Carp::croak "new_from_lol in scalar context needs exactly one lol" + unless @_ == 1; + return $_[0] unless ref($_[0]) eq 'ARRAY'; + # used to be a fatal error. still undocumented tho. + $node = $sub->($_[0]); + undef $sub; + # so it won't be in its own frame, so its refcount can hit 0 + return $node; + } +} + +=head2 $h->objectify_text() + +This turns any text nodes under $h from mere text segments (strings) +into real objects, pseudo-elements with a tag-name of "~text", and the +actual text content in an attribute called "text". (For a discussion +of pseudo-elements, see the "tag" method, far above.) This method is +provided because, for some purposes, it is convenient or necessary to +be able, for a given text node, to ask what element is its parent; and +clearly this is not possible if a node is just a text string. + +Note that these "~text" objects are not recognized as text nodes by +methods like as_text. Presumably you will want to call +$h->objectify_text, perform whatever task that you needed that for, +and then call $h->deobjectify_text before calling anything like +$h->as_text. + +=head2 $h->deobjectify_text() + +This undoes the effect of $h->objectify_text. That is, it takes any +"~text" pseudo-elements in the tree at/under $h, and deletes each one, +replacing each with the content of its "text" attribute. + +Note that if $h itself is a "~text" pseudo-element, it will be +destroyed -- a condition you may need to treat specially in your +calling code (since it means you can't very well do anything with $h +after that). So that you can detect that condition, if $h is itself a +"~text" pseudo-element, then this method returns the value of the +"text" attribute, which should be a defined value; in all other cases, +it returns undef. + +(This method assumes that no "~text" pseudo-element has any children.) + +=cut + +sub objectify_text { + my(@stack) = ($_[0]); + + my($this); + while(@stack) { + foreach my $c (@{( $this = shift @stack )->{'_content'}}) { + if(ref($c)) { + unshift @stack, $c; # visit it later. + } else { + $c = ( $this->{'_element_class'} || __PACKAGE__ + )->new('~text', 'text' => $c, '_parent' => $this); + } + } + } + return; +} + +sub deobjectify_text { + my(@stack) = ($_[0]); + my($old_node); + + if( $_[0]{'_tag'} eq '~text') { # special case + # Puts the $old_node variable to a different purpose + if($_[0]{'_parent'}) { + $_[0]->replace_with( $old_node = delete $_[0]{'text'} )->delete; + } else { # well, that's that, then! + $old_node = delete $_[0]{'text'}; + } + + if(ref($_[0]) eq __PACKAGE__) { # common case + %{$_[0]} = (); # poof! + } else { + # play nice: + delete $_[0]{'_parent'}; + $_[0]->delete; + } + return '' unless defined $old_node; # sanity! + return $old_node; + } + + while(@stack) { + foreach my $c (@{(shift @stack)->{'_content'}}) { + if(ref($c)) { + if($c->{'_tag'} eq '~text') { + $c = ($old_node = $c)->{'text'}; + if(ref($old_node) eq __PACKAGE__) { # common case + %$old_node = (); # poof! + } else { + # play nice: + delete $old_node->{'_parent'}; + $old_node->delete; + } + } else { + unshift @stack, $c; # visit it later. + } + } + } + } + + return undef; +} + + +=head2 $h->number_lists() + +For every UL, OL, DIR, and MENU element at/under $h, this sets a +"_bullet" attribute for every child LI element. For LI children of an +OL, the "_bullet" attribute's value will be something like "4.", "d.", +"D.", "IV.", or "iv.", depending on the OL element's "type" attribute. +LI children of a UL, DIR, or MENU get their "_bullet" attribute set +to "*". +There should be no other LIs (i.e., except as children of OL, UL, DIR, +or MENU elements), and if there are, they are unaffected. + +=cut + +{ + # The next three subs are basically copied from Number::Latin, + # based on a one-liner by Abigail. Yes, I could simply require that + # module, and a Roman numeral module too, but really, HTML-Tree already + # has enough dependecies as it is; and anyhow, I don't need the functions + # that do latin2int or roman2int. + no integer; + + sub _int2latin { + return undef unless defined $_[0]; + return '0' if $_[0] < 1 and $_[0] > -1; + return '-' . _i2l( abs int $_[0] ) if $_[0] <= -1; # tolerate negatives + return _i2l( int $_[0] ); + } + + sub _int2LATIN { + # just the above plus uc + return undef unless defined $_[0]; + return '0' if $_[0] < 1 and $_[0] > -1; + return '-' . uc(_i2l( abs int $_[0] )) if $_[0] <= -1; # tolerate negs + return uc(_i2l( int $_[0] )); + } + + my @alpha = ('a' .. 'z'); + sub _i2l { # the real work + my $int = $_[0] || return ""; + _i2l(int (($int - 1) / 26)) . $alpha[$int % 26 - 1]; # yes, recursive + # Yes, 26 => is (26 % 26 - 1), which is -1 => Z! + } +} + +{ + # And now, some much less impressive Roman numerals code: + + my(@i) = ('', qw(I II III IV V VI VII VIII IX)); + my(@x) = ('', qw(X XX XXX XL L LX LXX LXXX XC)); + my(@c) = ('', qw(C CC CCC CD D DC DCC DCCC CM)); + my(@m) = ('', qw(M MM MMM)); + + sub _int2ROMAN { + my($i, $pref); + return '0' if 0 == ($i = int($_[0] || 0)); # zero is a special case + return $i + 0 if $i <= -4000 or $i >= 4000; + # Because over 3999 would require non-ASCII chars, like D-with-)-inside + if($i < 0) { # grumble grumble tolerate negatives grumble + $pref = '-'; $i = abs($i); + } else { + $pref = ''; # normal case + } + + my($x,$c,$m) = (0,0,0); + if( $i >= 10) { $x = $i / 10; $i %= 10; + if( $x >= 10) { $c = $x / 10; $x %= 10; + if( $c >= 10) { $m = $c / 10; $c %= 10; } } } + #print "m$m c$c x$x i$i\n"; + + return join('', $pref, $m[$m], $c[$c], $x[$x], $i[$i] ); + } + + sub _int2roman { lc(_int2ROMAN($_[0])) } +} + +sub _int2int { $_[0] } # dummy + +%list_type_to_sub = ( + 'I' => \&_int2ROMAN, 'i' => \&_int2roman, + 'A' => \&_int2LATIN, 'a' => \&_int2latin, + '1' => \&_int2int, +); + +sub number_lists { + my(@stack) = ($_[0]); + my($this, $tag, $counter, $numberer); # scratch + while(@stack) { # yup, pre-order-traverser idiom + if(($tag = ($this = shift @stack)->{'_tag'}) eq 'ol') { + # Prep some things: + $counter = (($this->{'start'} || '') =~ m<^\s*(\d{1,7})\s*$>s) ? $1 : 1; + $numberer = $list_type_to_sub{ $this->{'type'} || ''} + || $list_type_to_sub{'1'}; + + # Immeditately iterate over all children + foreach my $c (@{ $this->{'_content'} || next}) { + next unless ref $c; + unshift @stack, $c; + if($c->{'_tag'} eq 'li') { + $counter = $1 if(($c->{'value'} || '') =~ m<^\s*(\d{1,7})\s*$>s); + $c->{'_bullet'} = $numberer->($counter) . '.'; + ++$counter; + } + } + + } elsif($tag eq 'ul' or $tag eq 'dir' or $tag eq 'menu') { + # Immeditately iterate over all children + foreach my $c (@{ $this->{'_content'} || next}) { + next unless ref $c; + unshift @stack, $c; + $c->{'_bullet'} = '*' if $c->{'_tag'} eq 'li'; + } + + } else { + foreach my $c (@{ $this->{'_content'} || next}) { + unshift @stack, $c if ref $c; + } + } + } + return; +} + + + +=head2 $h->has_insane_linkage + +This method is for testing whether this element or the elements +under it have linkage attributes (_parent and _content) whose values +are deeply aberrant: if there are undefs in a content list; if an +element appears in the content lists of more than one element; +if the _parent attribute of an element doesn't match its actual +parent; or if an element appears as its own descendant (i.e., +if there is a cyclicity in the tree). + +This returns empty list (or false, in scalar context) if the subtree's +linkage methods are sane; otherwise it returns two items (or true, in +scalar context): the element where the error occurred, and a string +describing the error. + +This method is provided is mainly for debugging and troubleshooting -- +it should be I for any document constructed via +HTML::TreeBuilder to parse into a non-sane tree (since it's not +the content of the tree per se that's in question, but whether +the tree in memory was properly constructed); and it I be +impossible for you to produce an insane tree just thru reasonable +use of normal documented structure-modifying methods. But if you're +constructing your own trees, and your program is going into infinite +loops as during calls to traverse() or any of the secondary +structural methods, as part of debugging, consider calling is_insane +on the tree. + +=cut + +sub has_insane_linkage { + my @pile = ($_[0]); + my($c, $i, $p, $this); # scratch + + # Another iterative traverser; this time much simpler because + # only in pre-order: + my %parent_of = ($_[0], 'TOP-OF-SCAN'); + while(@pile) { + $this = shift @pile; + $c = $this->{'_content'} || next; + return($this, "_content attribute is true but nonref.") + unless ref($c) eq 'ARRAY'; + next unless @$c; + for($i = 0; $i < @$c; ++$i) { + return($this, "Child $i is undef") + unless defined $c->[$i]; + if(ref($c->[$i])) { + return($c->[$i], "appears in its own content list") + if $c->[$i] eq $this; + return($c->[$i], + "appears twice in the tree: once under $this, once under $parent_of{$c->[$i]}" + ) + if exists $parent_of{$c->[$i]}; + $parent_of{$c->[$i]} = ''.$this; + # might as well just use the stringification of it. + + return($c->[$i], "_parent attribute is wrong (not defined)") + unless defined($p = $c->[$i]{'_parent'}); + return($c->[$i], "_parent attribute is wrong (nonref)") + unless ref($p); + return($c->[$i], + "_parent attribute is wrong (is $p; should be $this)" + ) + unless $p eq $this; + } + } + unshift @pile, grep ref($_), @$c; + # queue up more things on the pile stack + } + return; #okay +} + + +sub _asserts_fail { # to be run on trusted documents only + my(@pile) = ($_[0]); + my(@errors, $this, $id, $assert, $parent, $rv); + while(@pile) { + $this = shift @pile; + if(defined($assert = $this->{'assert'})) { + $id = ($this->{'id'} ||= $this->address); # don't use '0' as an ID, okay? + unless(ref($assert)) { + package main; + $assert = $this->{'assert'} = ( + $assert =~ m/\bsub\b/ ? eval($assert) : eval("sub { $assert\n}") + ); + if($@) { + push @errors, [$this, "assertion at $id broke in eval: $@"]; + $assert = $this->{'assert'} = sub {}; + } + } + $parent = $this->{'_parent'}; + $rv = undef; + eval { + $rv = + $assert->( + $this, $this->{'_tag'}, $this->{'_id'}, # 0,1,2 + $parent ? ($parent, $parent->{'_tag'}, $parent->{'id'}) : () # 3,4,5 + ) + }; + if($@) { + push @errors, [$this, "assertion at $id died: $@"]; + } elsif(!$rv) { + push @errors, [$this, "assertion at $id failed"] + } + # else OK + } + push @pile, grep ref($_), @{$this->{'_content'} || next}; + } + return @errors; +} + +1; + +=head1 BUGS + +* If you want to free the memory associated with a tree built of +HTML::Element nodes, then you will have to delete it explicitly. +See the $h->delete method, above. + +* There's almost nothing to stop you from making a "tree" with +cyclicities (loops) in it, which could, for example, make the +traverse method go into an infinite loop. So don't make +cyclicities! (If all you're doing is parsing HTML files, +and looking at the resulting trees, this will never be a problem +for you.) + +* There's no way to represent comments or processing directives +in a tree with HTML::Elements. Not yet, at least. + +* There's (currently) nothing to stop you from using an undefined +value as a text segment. If you're running under C, however, +this may make HTML::Element's code produce a slew of warnings. + +=head1 NOTES ON SUBCLASSING + +You are welcome to derive subclasses from HTML::Element, but you +should be aware that the code in HTML::Element makes certain +assumptions about elements (and I'm using "element" to mean ONLY an +object of class HTML::Element, or of a subclass of HTML::Element): + +* The value of an element's _parent attribute must either be undef or +otherwise false, or must be an element. + +* The value of an element's _content attribute must either be undef or +otherwise false, or a reference to an (unblessed) array. The array +may be empty; but if it has items, they must ALL be either mere +strings (text segments), or elements. + +* The value of an element's _tag attribute should, at least, be a +string of printable characters. + +Moreover, bear these rules in mind: + +* Do not break encapsulation on objects. That is, access their +contents only thru $obj->attr or more specific methods. + +* You should think twice before completely overriding any of the +methods that HTML::Element provides. (Overriding with a method that +calls the superclass method is not so bad, though.) + +=head1 SEE ALSO + +L; L; L; L; +and, for the morbidly curious, L. + +=head1 COPYRIGHT + +Copyright 1995-1998 Gisle Aas, 1999-2004 Sean M. Burke, 2005 Andy Lester, +2006 Pete Krawczyk. + +This library is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +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. + +=head1 AUTHOR + +Currently maintained by Pete Krawczyk C<< >> + +Original authors: Gisle Aas, Sean Burke and Andy Lester. + +Thanks to Mark-Jason Dominus for a POD suggestion. + +=cut + +1; diff --git a/SuperDateTime/lib/HTML/Element/traverse.pm b/SuperDateTime/lib/HTML/Element/traverse.pm new file mode 100644 index 0000000..744b4b0 --- /dev/null +++ b/SuperDateTime/lib/HTML/Element/traverse.pm @@ -0,0 +1,329 @@ + +# This is a .pm just to (try to) make some CPAN document converters +# convert it happily as part of the dist's documentation tree. +package HTML::Element::traverse; + # Time-stamp: "2002-11-22 23:53:39 MST" +use HTML::Element (); +$VERSION = $VERSION = $HTML::Element::VERSION; +1; + +__END__ + +=head1 NAME + +HTML::Element::traverse - discussion of HTML::Element's traverse method + +=head1 SYNOPSIS + + # $element->traverse is unnecessary and obscure. + # Don't use it in new code. + +=head1 DESCRIPTION + +C provides a method C that traverses the tree +and calls user-specified callbacks for each node, in pre- or +post-order. However, use of the method is quite superfluous: if you +want to recursively visit every node in the tree, it's almost always +simpler to write a subroutine does just that, than it is to bundle up +the pre- and/or post-order code in callbacks for the C +method. + +=head1 EXAMPLES + +Suppose you want to traverse at/under a node $tree and give elements +an 'id' attribute unless they already have one. + +You can use the C method: + + { + my $counter = 'x0000'; + $start_node->traverse( + [ # Callbacks; + # pre-order callback: + sub { + my $x = $_[0]; + $x->attr('id', $counter++) unless defined $x->attr('id'); + return HTML::Element::OK; # keep traversing + }, + # post-order callback: + undef + ], + 1, # don't call the callbacks for text nodes + ); + } + +or you can just be simple and clear (and not have to understand the +calling format for C) by writing a sub that traverses the +tree by just calling itself: + + { + my $counter = 'x0000'; + sub give_id { + my $x = $_[0]; + $x->attr('id', $counter++) unless defined $x->attr('id'); + foreach my $c ($x->content_list) { + give_id($c) if ref $c; # ignore text nodes + } + }; + give_id($start_node); + } + +See, isn't that nice and clear? + +But, if you really need to know: + +=head1 THE TRAVERSE METHOD + +The C method is a general object-method for traversing a +tree or subtree and calling user-specified callbacks. It accepts the +following syntaxes: + +=over + +=item $h->traverse(\&callback) + +=item or $h->traverse(\&callback, $ignore_text) + +=item or $h->traverse( [\&pre_callback,\&post_callback] , $ignore_text) + +=back + +These all mean to traverse the element and all of its children. That +is, this method starts at node $h, "pre-order visits" $h, traverses its +children, and then will "post-order visit" $h. "Visiting" means that +the callback routine is called, with these arguments: + + $_[0] : the node (element or text segment), + $_[1] : a startflag, and + $_[2] : the depth + +If the $ignore_text parameter is given and true, then the pre-order +call I be happen for text content. + +The startflag is 1 when we enter a node (i.e., in pre-order calls) and +0 when we leave the node (in post-order calls). + +Note, however, that post-order calls don't happen for nodes that are +text segments or are elements that are prototypically empty (like "br", +"hr", etc.). + +If we visit text nodes (i.e., unless $ignore_text is given and true), +then when text nodes are visited, we will also pass two extra +arguments to the callback: + + $_[3] : the element that's the parent + of this text node + $_[4] : the index of this text node + in its parent's content list + +Note that you can specify that the pre-order routine can +be a different routine from the post-order one: + + $h->traverse( [\&pre_callback,\&post_callback], ...); + +You can also specify that no post-order calls are to be made, +by providing a false value as the post-order routine: + + $h->traverse([ \&pre_callback,0 ], ...); + +And similarly for suppressing pre-order callbacks: + + $h->traverse([ 0,\&post_callback ], ...); + +Note that these two syntaxes specify the same operation: + + $h->traverse([\&foo,\&foo], ...); + $h->traverse( \&foo , ...); + +The return values from calls to your pre- or post-order +routines are significant, and are used to control recursion +into the tree. + +These are the values you can return, listed in descending order +of my estimation of their usefulness: + +=over + +=item HTML::Element::OK, 1, or any other true value + +...to keep on traversing. + +Note that C et +al are constants. So if you're running under C +(as I hope you are), and you say: +C +the compiler will flag this as an error (an unallowable +bareword, specifically), whereas if you spell PRUNE correctly, +the compiler will not complain. + +=item undef, 0, '0', '', or HTML::Element::PRUNE + +...to block traversing under the current element's content. +(This is ignored if received from a post-order callback, +since by then the recursion has already happened.) +If this is returned by a pre-order callback, no +post-order callback for the current node will happen. +(Recall that if your callback exits with just C, +it is returning undef -- at least in scalar context, and +C always calls your callbacks in scalar context.) + +=item HTML::Element::ABORT + +...to abort the whole traversal immediately. +This is often useful when you're looking for just the first +node in the tree that meets some criterion of yours. + +=item HTML::Element::PRUNE_UP + +...to abort continued traversal into this node and its parent +node. No post-order callback for the current or parent +node will happen. + +=item HTML::Element::PRUNE_SOFTLY + +Like PRUNE, except that the post-order call for the current +node is not blocked. + +=back + +Almost every task to do with extracting information from a tree can be +expressed in terms of traverse operations (usually in only one pass, +and usually paying attention to only pre-order, or to only +post-order), or operations based on traversing. (In fact, many of the +other methods in this class are basically calls to traverse() with +particular arguments.) + +The source code for HTML::Element and HTML::TreeBuilder contain +several examples of the use of the "traverse" method to gather +information about the content of trees and subtrees. + +(Note: you should not change the structure of a tree I you are +traversing it.) + +[End of documentation for the C method] + +=head2 Traversing with Recursive Anonymous Routines + +Now, if you've been reading +I too much, maybe +you even want a recursive lambda. Go ahead: + + { + my $counter = 'x0000'; + my $give_id; + $give_id = sub { + my $x = $_[0]; + $x->attr('id', $counter++) unless defined $x->attr('id'); + foreach my $c ($x->content_list) { + $give_id->($c) if ref $c; # ignore text nodes + } + }; + $give_id->($start_node); + undef $give_id; + } + +It's a bit nutty, and it's I more concise than a call to the +C method! + +It is left as an exercise to the reader to figure out how to do the +same thing without using a C<$give_id> symbol at all. + +It is also left as an exercise to the reader to figure out why I +undefine C<$give_id>, above; and why I could achieved the same effect +with any of: + + $give_id = 'I like pie!'; + # or... + $give_id = []; + # or even; + $give_id = sub { print "Mmmm pie!\n" }; + +But not: + + $give_id = sub { print "I'm $give_id and I like pie!\n" }; + # nor... + $give_id = \$give_id; + # nor... + $give_id = { 'pie' => \$give_id, 'mode' => 'a la' }; + +=head2 Doing Recursive Things Iteratively + +Note that you may at times see an iterative implementation of +pre-order traversal, like so: + + { + my @to_do = ($tree); # start-node + while(@to_do) { + my $this = shift @to_do; + + # "Visit" the node: + $this->attr('id', $counter++) + unless defined $this->attr('id'); + + unshift @to_do, grep ref $_, $this->content_list; + # Put children on the stack -- they'll be visited next + } + } + +This can I be more efficient than just a +normal recursive routine, but at the cost of being rather obscure. It +gains efficiency by avoiding the overhead of function-calling, but +since there are several method dispatches however you do it (to +C and C), the overhead for a simple function call +is insignificant. + +=head2 Pruning and Whatnot + +The C method does have the fairly neat features of +the C, C and C signals. None of these +can be implemented I straightforwardly with recursive +routines, but it is quite possible. C-like behavior can be +implemented either with using non-local returning with C/C: + + my $died_on; # if you need to know where... + sub thing { + ... visits $_[0]... + ... maybe set $died_on to $_[0] and die "ABORT_TRAV" ... + ... else call thing($child) for each child... + ...any post-order visiting $_[0]... + } + eval { thing($node) }; + if($@) { + if($@ =~ m<^ABORT_TRAV>) { + ...it died (aborted) on $died_on... + } else { + die $@; # some REAL error happened + } + } + +or you can just do it with flags: + + my($abort_flag, $died_on); + sub thing { + ... visits $_[0]... + ... maybe set $abort_flag = 1; $died_on = $_[0]; return; + foreach my $c ($_[0]->content_list) { + thing($c); + return if $abort_flag; + } + ...any post-order visiting $_[0]... + return; + } + + $abort_flag = $died_on = undef; + thing($node); + ...if defined $abort_flag, it died on $died_on + +=head1 SEE ALSO + +L + +=head1 COPYRIGHT + +Copyright 2000,2001 Sean M. Burke + +=head1 AUTHOR + +Sean M. Burke, Esburke@cpan.orgE + +=cut diff --git a/SuperDateTime/lib/HTML/Parse.pm b/SuperDateTime/lib/HTML/Parse.pm new file mode 100644 index 0000000..1575b44 --- /dev/null +++ b/SuperDateTime/lib/HTML/Parse.pm @@ -0,0 +1,155 @@ +package HTML::Parse; + +=head1 NAME + +HTML::Parse - Deprecated, a wrapper around HTML::TreeBuilder + +=head1 SYNOPSIS + + See the documentation for HTML::TreeBuilder + +=head1 DESCRIPTION + +Disclaimer: This module is provided only for backwards compatibility +with earlier versions of this library. New code should I use +this module, and should really use the HTML::Parser and +HTML::TreeBuilder modules directly, instead. + +The C module provides functions to parse HTML documents. +There are two functions exported by this module: + +=over 4 + +=item parse_html($html) or parse_html($html, $obj) + +This function is really just a synonym for $obj->parse($html) and $obj +is assumed to be a subclass of C. Refer to +L for more documentation. + +If $obj is not specified, the $obj will default to an internally +created new C object configured with strict_comment() +turned on. That class implements a parser that builds (and is) a HTML +syntax tree with HTML::Element objects as nodes. + +The return value from parse_html() is $obj. + +=item parse_htmlfile($file, [$obj]) + +Same as parse_html(), but pulls the HTML to parse, from the named file. + +Returns C if the file could not be opened, or $obj otherwise. + +=back + +When a C object is created, the following variables +control how parsing takes place: + +=over 4 + +=item $HTML::Parse::IMPLICIT_TAGS + +Setting this variable to true will instruct the parser to try to +deduce implicit elements and implicit end tags. If this variable is +false you get a parse tree that just reflects the text as it stands. +Might be useful for quick & dirty parsing. Default is true. + +Implicit elements have the implicit() attribute set. + +=item $HTML::Parse::IGNORE_UNKNOWN + +This variable contols whether unknow tags should be represented as +elements in the parse tree. Default is true. + +=item $HTML::Parse::IGNORE_TEXT + +Do not represent the text content of elements. This saves space if +all you want is to examine the structure of the document. Default is +false. + +=item $HTML::Parse::WARN + +Call warn() with an apropriate message for syntax errors. Default is +false. + +=back + +=head1 REMEMBER! + +HTML::TreeBuilder objects should be explicitly destroyed when you're +finished with them. See L. + +=head1 SEE ALSO + +L, L, L + +=head1 COPYRIGHT + +Copyright 1995-1998 Gisle Aas, 1999-2004 Sean M. Burke, 2005 Andy Lester, +2006 Pete Krawczyk. + +This library is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +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. + +=head1 AUTHOR + +Currently maintained by Pete Krawczyk C<< >> + +Original authors: Gisle Aas, Sean Burke and Andy Lester. + +=cut + + +require Exporter; +@ISA = qw(Exporter); +@EXPORT = qw(parse_html parse_htmlfile); + +use strict; +use vars qw($VERSION + $IMPLICIT_TAGS $IGNORE_UNKNOWN $IGNORE_TEXT $WARN + ); + +# Backwards compatability +$IMPLICIT_TAGS = 1; +$IGNORE_UNKNOWN = 1; +$IGNORE_TEXT = 0; +$WARN = 0; + +require HTML::TreeBuilder; + +$VERSION = '2.71'; + + +sub parse_html ($;$) +{ + my $p = $_[1]; + $p = _new_tree_maker() unless $p; + $p->parse($_[0]); +} + + +sub parse_htmlfile ($;$) +{ + my($file, $p) = @_; + local(*HTML); + open(HTML, $file) or return undef; + $p = _new_tree_maker() unless $p; + $p->parse_file(\*HTML); +} + +sub _new_tree_maker +{ + my $p = HTML::TreeBuilder->new( + implicit_tags => $IMPLICIT_TAGS, + ignore_unknown => $IGNORE_UNKNOWN, + ignore_text => $IGNORE_TEXT, + 'warn' => $WARN, + ); + $p->strict_comment(1); + $p; +} + +1; diff --git a/SuperDateTime/lib/HTML/Tagset.pm b/SuperDateTime/lib/HTML/Tagset.pm new file mode 100644 index 0000000..754137f --- /dev/null +++ b/SuperDateTime/lib/HTML/Tagset.pm @@ -0,0 +1,471 @@ +package HTML::Tagset; + +use strict; + +=head1 NAME + +HTML::Tagset - data tables useful in parsing HTML + +=head1 VERSION + +Version 3.20 + +=cut + +use vars qw( $VERSION ); + +$VERSION = '3.20'; + +=head1 SYNOPSIS + + use HTML::Tagset; + # Then use any of the items in the HTML::Tagset package + # as need arises + +=head1 DESCRIPTION + +This module contains several data tables useful in various kinds of +HTML parsing operations. + +Note that all tag names used are lowercase. + +In the following documentation, a "hashset" is a hash being used as a +set -- the hash conveys that its keys are there, and the actual values +associated with the keys are not significant. (But what values are +there, are always true.) + +=cut + +use vars qw( + $VERSION + %emptyElement %optionalEndTag %linkElements %boolean_attr + %isHeadElement %isBodyElement %isPhraseMarkup + %is_Possible_Strict_P_Content + %isHeadOrBodyElement + %isList %isTableElement %isFormElement + %isKnown %canTighten + @p_closure_barriers + %isCDATA_Parent +); + +=head1 VARIABLES + +Note that none of these variables are exported. + +=head2 hashset %HTML::Tagset::emptyElement + +This hashset has as values the tag-names (GIs) of elements that cannot +have content. (For example, "base", "br", "hr".) So +C<$HTML::Tagset::emptyElement{'hr'}> exists and is true. +C<$HTML::Tagset::emptyElement{'dl'}> does not exist, and so is not true. + +=cut + +%emptyElement = map {; $_ => 1 } qw(base link meta isindex + img br hr wbr + input area param + embed bgsound spacer + basefont col frame + ~comment ~literal + ~declaration ~pi + ); +# The "~"-initial names are for pseudo-elements used by HTML::Entities +# and TreeBuilder + +=head2 hashset %HTML::Tagset::optionalEndTag + +This hashset lists tag-names for elements that can have content, but whose +end-tags are generally, "safely", omissible. Example: +C<$HTML::Tagset::emptyElement{'li'}> exists and is true. + +=cut + +%optionalEndTag = map {; $_ => 1 } qw(p li dt dd); # option th tr td); + +=head2 hash %HTML::Tagset::linkElements + +Values in this hash are tagnames for elements that might contain +links, and the value for each is a reference to an array of the names +of attributes whose values can be links. + +=cut + +%linkElements = +( + 'a' => ['href'], + 'applet' => ['archive', 'codebase', 'code'], + 'area' => ['href'], + 'base' => ['href'], + 'bgsound' => ['src'], + 'blockquote' => ['cite'], + 'body' => ['background'], + 'del' => ['cite'], + 'embed' => ['pluginspage', 'src'], + 'form' => ['action'], + 'frame' => ['src', 'longdesc'], + 'iframe' => ['src', 'longdesc'], + 'ilayer' => ['background'], + 'img' => ['src', 'lowsrc', 'longdesc', 'usemap'], + 'input' => ['src', 'usemap'], + 'ins' => ['cite'], + 'isindex' => ['action'], + 'head' => ['profile'], + 'layer' => ['background', 'src'], + 'link' => ['href'], + 'object' => ['classid', 'codebase', 'data', 'archive', 'usemap'], + 'q' => ['cite'], + 'script' => ['src', 'for'], + 'table' => ['background'], + 'td' => ['background'], + 'th' => ['background'], + 'tr' => ['background'], + 'xmp' => ['href'], +); + +=head2 hash %HTML::Tagset::boolean_attr + +This hash (not hashset) lists what attributes of what elements can be +printed without showing the value (for example, the "noshade" attribute +of "hr" elements). For elements with only one such attribute, its value +is simply that attribute name. For elements with many such attributes, +the value is a reference to a hashset containing all such attributes. + +=cut + +%boolean_attr = ( +# TODO: make these all hashes + 'area' => 'nohref', + 'dir' => 'compact', + 'dl' => 'compact', + 'hr' => 'noshade', + 'img' => 'ismap', + 'input' => { 'checked' => 1, 'readonly' => 1, 'disabled' => 1 }, + 'menu' => 'compact', + 'ol' => 'compact', + 'option' => 'selected', + 'select' => 'multiple', + 'td' => 'nowrap', + 'th' => 'nowrap', + 'ul' => 'compact', +); + +#========================================================================== +# List of all elements from Extensible HTML version 1.0 Transitional DTD: +# +# a abbr acronym address applet area b base basefont bdo big +# blockquote body br button caption center cite code col colgroup +# dd del dfn dir div dl dt em fieldset font form h1 h2 h3 h4 h5 h6 +# head hr html i iframe img input ins isindex kbd label legend li +# link map menu meta noframes noscript object ol optgroup option p +# param pre q s samp script select small span strike strong style +# sub sup table tbody td textarea tfoot th thead title tr tt u ul +# var +# +# Varia from Mozilla source internal table of tags: +# Implemented: +# xmp listing wbr nobr frame frameset noframes ilayer +# layer nolayer spacer embed multicol +# But these are unimplemented: +# sound?? keygen?? server?? +# Also seen here and there: +# marquee?? app?? (both unimplemented) +#========================================================================== + +=head2 hashset %HTML::Tagset::isPhraseMarkup + +This hashset contains all phrasal-level elements. + +=cut + +%isPhraseMarkup = map {; $_ => 1 } qw( + span abbr acronym q sub sup + cite code em kbd samp strong var dfn strike + b i u s tt small big + a img br + wbr nobr blink + font basefont bdo + spacer embed noembed +); # had: center, hr, table + + +=head2 hashset %HTML::Tagset::is_Possible_Strict_P_Content + +This hashset contains all phrasal-level elements that be content of a +P element, for a strict model of HTML. + +=cut + +%is_Possible_Strict_P_Content = ( + %isPhraseMarkup, + %isFormElement, + map {; $_ => 1} qw( object script map ) + # I've no idea why there's these latter exceptions. + # I'm just following the HTML4.01 DTD. +); + +#from html4 strict: +# +# +# +# +# +# +# +# +# +# + +=head2 hashset %HTML::Tagset::isHeadElement + +This hashset contains all elements that elements that should be +present only in the 'head' element of an HTML document. + +=cut + +%isHeadElement = map {; $_ => 1 } + qw(title base link meta isindex script style object bgsound); + +=head2 hashset %HTML::Tagset::isList + +This hashset contains all elements that can contain "li" elements. + +=cut + +%isList = map {; $_ => 1 } qw(ul ol dir menu); + +=head2 hashset %HTML::Tagset::isTableElement + +This hashset contains all elements that are to be found only in/under +a "table" element. + +=cut + +%isTableElement = map {; $_ => 1 } + qw(tr td th thead tbody tfoot caption col colgroup); + +=head2 hashset %HTML::Tagset::isFormElement + +This hashset contains all elements that are to be found only in/under +a "form" element. + +=cut + +%isFormElement = map {; $_ => 1 } + qw(input select option optgroup textarea button label); + +=head2 hashset %HTML::Tagset::isBodyMarkup + +This hashset contains all elements that are to be found only in/under +the "body" element of an HTML document. + +=cut + +%isBodyElement = map {; $_ => 1 } qw( + h1 h2 h3 h4 h5 h6 + p div pre plaintext address blockquote + xmp listing + center + + multicol + iframe ilayer nolayer + bgsound + + hr + ol ul dir menu li + dl dt dd + ins del + + fieldset legend + + map area + applet param object + isindex script noscript + table + center + form + ), + keys %isFormElement, + keys %isPhraseMarkup, # And everything phrasal + keys %isTableElement, +; + + +=head2 hashset %HTML::Tagset::isHeadOrBodyElement + +This hashset includes all elements that I notice can fall either in +the head or in the body. + +=cut + +%isHeadOrBodyElement = map {; $_ => 1 } + qw(script isindex style object map area param noscript bgsound); + # i.e., if we find 'script' in the 'body' or the 'head', don't freak out. + + +=head2 hashset %HTML::Tagset::isKnown + +This hashset lists all known HTML elements. + +=cut + +%isKnown = (%isHeadElement, %isBodyElement, + map{; $_=>1 } + qw( head body html + frame frameset noframes + ~comment ~pi ~directive ~literal +)); + # that should be all known tags ever ever + + +=head2 hashset %HTML::Tagset::canTighten + +This hashset lists elements that might have ignorable whitespace as +children or siblings. + +=cut + +%canTighten = %isKnown; +delete @canTighten{ + keys(%isPhraseMarkup), 'input', 'select', + 'xmp', 'listing', 'plaintext', 'pre', +}; + # xmp, listing, plaintext, and pre are untightenable, and + # in a really special way. +@canTighten{'hr','br'} = (1,1); + # exceptional 'phrasal' things that ARE subject to tightening. + +# The one case where I can think of my tightening rules failing is: +#

    foo bar

    baz quux ... +# ^-- that would get deleted. +# But that's pretty gruesome code anyhow. You gets what you pays for. + +#========================================================================== + +=head2 array @HTML::Tagset::p_closure_barriers + +This array has a meaning that I have only seen a need for in +C, but I include it here on the off chance that someone +might find it of use: + +When we see a "EpE" token, we go lookup up the lineage for a p +element we might have to minimize. At first sight, we might say that +if there's a p anywhere in the lineage of this new p, it should be +closed. But that's wrong. Consider this document: + + + + foo + + +

    foo + + + + +
    + foo +

    bar +

    +

    + + + +The second p is quite legally inside a much higher p. + +My formalization of the reason why this is legal, but this: + +

    foo

    bar

    + +isn't, is that something about the table constitutes a "barrier" to +the application of the rule about what p must minimize. + +So C<@HTML::Tagset::p_closure_barriers> is the list of all such +barrier-tags. + +=cut + +@p_closure_barriers = qw( + li blockquote + ul ol menu dir + dl dt dd + td th tr table caption + div + ); + +# In an ideal world (i.e., XHTML) we wouldn't have to bother with any of this +# monkey business of barriers to minimization! + +=head2 hashset %isCDATA_Parent + +This hashset includes all elements whose content is CDATA. + +=cut + +%isCDATA_Parent = map {; $_ => 1 } + qw(script style xmp listing plaintext); + +# TODO: there's nothing else that takes CDATA children, right? + +# As the HTML3 DTD (Raggett 1995-04-24) noted: +# The XMP, LISTING and PLAINTEXT tags are incompatible with SGML +# and derive from very early versions of HTML. They require non- +# standard parsers and will cause problems for processing +# documents with standard SGML tools. + + +=head1 CAVEATS + +You may find it useful to alter the behavior of modules (like +C or C) that use C's +data tables by altering the data tables themselves. You are welcome +to try, but be careful; and be aware that different modules may or may +react differently to the data tables being changed. + +Note that it may be inappropriate to use these tables for I +HTML -- for example, C<%isHeadOrBodyElement> lists the tagnames +for all elements that can appear either in the head or in the body, +such as "script". That doesn't mean that I am saying your code that +produces HTML should feel free to put script elements in either place! +If you are producing programs that spit out HTML, you should be +I familiar with the DTDs for HTML or XHTML (available at +C), and you should slavishly obey them, not +the data tables in this document. + +=head1 SEE ALSO + +L, L, L + +=head1 COPYRIGHT & LICENSE + +Copyright 1995-2000 Gisle Aas. + +Copyright 2000-2005 Sean M. Burke. + +Copyright 2005-2008 Andy Lester. + +This program is free software; you can redistribute it and/or modify it +under the same terms as Perl itself. + +=head1 ACKNOWLEDGEMENTS + +Most of the code/data in this module was adapted from code written +by Gisle Aas for C, C, and +C. Then it was maintained by Sean M. Burke. + +=head1 AUTHOR + +Current maintainer: Andy Lester, C<< >> + +=head1 BUGS + +Please report any bugs or feature requests to +C, or through the web interface at +L. I will +be notified, and then you'll automatically be notified of progress on +your bug as I make changes. + +=cut + +1; diff --git a/SuperDateTime/lib/HTML/Tree.pm b/SuperDateTime/lib/HTML/Tree.pm new file mode 100644 index 0000000..2209e5e --- /dev/null +++ b/SuperDateTime/lib/HTML/Tree.pm @@ -0,0 +1,182 @@ +package HTML::Tree; + +=head1 NAME + +HTML::Tree - overview of HTML::TreeBuilder et al + +=head1 VERSION + +3.23 + +=cut + +# HTML::Tree is basically just a happy alias to HTML::TreeBuilder. +use HTML::TreeBuilder (); + +use vars qw( $VERSION ); +$VERSION = 3.23; + +=head1 SYNOPSIS + + use HTML::TreeBuilder; + my $tree = HTML::TreeBuilder->new(); + $tree->parse_file($filename); + + # Then do something with the tree, using HTML::Element + # methods -- for example: + + $tree->dump + + # Finally: + + $tree->delete; + +=cut + +sub new { + shift; unshift @_, 'HTML::TreeBuilder'; + goto &HTML::TreeBuilder::new; +} +sub new_from_file { + shift; unshift @_, 'HTML::TreeBuilder'; + goto &HTML::TreeBuilder::new_from_file; +} +sub new_from_content { + shift; unshift @_, 'HTML::TreeBuilder'; + goto &HTML::TreeBuilder::new_from_content; +} + +=head1 DESCRIPTION + +HTML-Tree is a suite of Perl modules for making parse trees out of +HTML source. It consists of mainly two modules, whose documentation +you should refer to: L +and L. + +HTML::TreeBuilder is the module that builds the parse trees. (It uses +HTML::Parser to do the work of breaking the HTML up into tokens.) + +The tree that TreeBuilder builds for you is made up of objects of the +class HTML::Element. + +If you find that you do not properly understand the documentation +for HTML::TreeBuilder and HTML::Element, it may be because you are +unfamiliar with tree-shaped data structures, or with object-oriented +modules in general. Sean Burke has written some articles for +I (C) that seek to provide that background. +The full text of those articles is contained in this distribution, as: + +=over 4 + +=item L + +"User's View of Object-Oriented Modules" from TPJ17. + +=item L + +"Trees" from TPJ18 + +=item L + +"Scanning HTML" from TPJ19 + +=back + +Readers already familiar with object-oriented modules and tree-shaped +data structures should read just the last article. Readers without +that background should read the first, then the second, and then the +third. + +=head1 SUPPORT + +You can find documentation for this module with the perldoc command. + + perldoc HTML::Tree + + You can also look for information at: + +=over 4 + +=item * AnnoCPAN: Annotated CPAN documentation + +L + +=item * CPAN Ratings + +L + +=item * RT: CPAN's request tracker + +L + +=item * Search CPAN + +L + +=back + +=head1 SEE ALSO + +L, L, L, +L, L + +The book I by Sean M. Burke published by +O'Reilly and Associates, 2002. ISBN: 0-596-00178-9 + +It has several chapters to do with HTML processing in general, +and HTML-Tree specifically. There's more info at: + + http://www.oreilly.com/catalog/perllwp/ + + http://www.amazon.com/exec/obidos/ASIN/0596001789 + +=head1 SOURCE REPOSITORY + +HTML::Tree is maintained in Subversion hosted at perl.org. + + http://svn.perl.org/modules/HTML-Tree + +The latest development work is always at: + + http://svn.perl.org/modules/HTML-Tree/trunk + +Any patches sent should be diffed against this repository. + +=head1 ACKNOWLEDGEMENTS + +Thanks to Gisle Aas, Sean Burke and Andy Lester for their original work. + +Thanks to Chicago Perl Mongers (http://chicago.pm.org) for their +patches submitted to HTML::Tree as part of the Phalanx project +(http://qa.perl.org/phalanx). + +Thanks to the following people for additional patches and documentation: +Terrence Brannon, Gordon Lack, Chris Madsen and Ricardo Signes. + +=head1 AUTHOR + +Original HTML-Tree author Gisle Aas. Handed off to Sean M. Burke. +and Andy Lester. Currently maintained by Pete Krawczyk +C<< >>. + +=head1 COPYRIGHT + +Copyright 1995-1998 Gisle Aas; 1999-2004 Sean M. Burke; +2005 Andy Lester; 2006 Pete Krawczyk. (Except the articles +contained in HTML::Tree::AboutObjects, HTML::Tree::AboutTrees, and +HTML::Tree::Scanning, which are all copyright 2000 The Perl Journal.) + +Except for those three TPJ articles, the whole HTML-Tree distribution, +of which this file is a part, is free software; you can redistribute +it and/or modify it under the same terms as Perl itself. + +Those three TPJ articles may be distributed under the same terms as +Perl itself. + +The programs in this library are distributed in the hope that they +will be useful, but without any warranty; without even the implied +warranty of merchantability or fitness for a particular purpose. + +=cut + +1; diff --git a/SuperDateTime/lib/HTML/TreeBuilder.pm b/SuperDateTime/lib/HTML/TreeBuilder.pm new file mode 100644 index 0000000..93c8bd6 --- /dev/null +++ b/SuperDateTime/lib/HTML/TreeBuilder.pm @@ -0,0 +1,1869 @@ +package HTML::TreeBuilder; + +use strict; +use integer; # vroom vroom! +use Carp (); +use vars qw(@ISA $VERSION $DEBUG); +$VERSION = '3.23'; + +#--------------------------------------------------------------------------- +# Make a 'DEBUG' constant... + +BEGIN { + # We used to have things like + # print $indent, "lalala" if $Debug; + # But there were an awful lot of having to evaluate $Debug's value. + # If we make that depend on a constant, like so: + # sub DEBUG () { 1 } # or whatever value. + # ... + # print $indent, "lalala" if DEBUG; + # Which at compile-time (thru the miracle of constant folding) turns into: + # print $indent, "lalala"; + # or, if DEBUG is a constant with a true value, then that print statement + # is simply optimized away, and doesn't appear in the target code at all. + # If you don't believe me, run: + # perl -MO=Deparse,-uHTML::TreeBuilder -e 'BEGIN { \ + # $HTML::TreeBuilder::DEBUG = 4} use HTML::TreeBuilder' + # and see for yourself (substituting whatever value you want for $DEBUG + # there). + + if(defined &DEBUG) { + # Already been defined! Do nothing. + } elsif($] < 5.00404) { + # Grudgingly accomodate ancient (pre-constant) versions. + eval 'sub DEBUG { $Debug } '; + } elsif(!$DEBUG) { + eval 'sub DEBUG () {0}'; # Make it a constant. + } elsif($DEBUG =~ m<^\d+$>s) { + eval 'sub DEBUG () { ' . $DEBUG . ' }'; # Make THAT a constant. + } else { # WTF? + warn "Non-numeric value \"$DEBUG\" in \$HTML::Element::DEBUG"; + eval 'sub DEBUG () { $DEBUG }'; # I guess. + } +} + +#--------------------------------------------------------------------------- + +use HTML::Entities (); +use HTML::Tagset 3.02 (); + +use HTML::Element (); +use HTML::Parser (); +@ISA = qw(HTML::Element HTML::Parser); + # This looks schizoid, I know. + # It's not that we ARE an element AND a parser. + # We ARE an element, but one that knows how to handle signals + # (method calls) from Parser in order to elaborate its subtree. + +# Legacy aliases: +*HTML::TreeBuilder::isKnown = \%HTML::Tagset::isKnown; +*HTML::TreeBuilder::canTighten = \%HTML::Tagset::canTighten; +*HTML::TreeBuilder::isHeadElement = \%HTML::Tagset::isHeadElement; +*HTML::TreeBuilder::isBodyElement = \%HTML::Tagset::isBodyElement; +*HTML::TreeBuilder::isPhraseMarkup = \%HTML::Tagset::isPhraseMarkup; +*HTML::TreeBuilder::isHeadOrBodyElement = \%HTML::Tagset::isHeadOrBodyElement; +*HTML::TreeBuilder::isList = \%HTML::Tagset::isList; +*HTML::TreeBuilder::isTableElement = \%HTML::Tagset::isTableElement; +*HTML::TreeBuilder::isFormElement = \%HTML::Tagset::isFormElement; +*HTML::TreeBuilder::p_closure_barriers = \@HTML::Tagset::p_closure_barriers; + +#========================================================================== +# Two little shortcut constructors: + +sub new_from_file { # or from a FH + my $class = shift; + Carp::croak("new_from_file takes only one argument") + unless @_ == 1; + Carp::croak("new_from_file is a class method only") + if ref $class; + my $new = $class->new(); + $new->parse_file($_[0]); + return $new; +} + +sub new_from_content { # from any number of scalars + my $class = shift; + Carp::croak("new_from_content is a class method only") + if ref $class; + my $new = $class->new(); + foreach my $whunk (@_) { + if(ref($whunk) eq 'SCALAR') { + $new->parse($$whunk); + } else { + $new->parse($whunk); + } + last if $new->{'_stunted'}; # might as well check that. + } + $new->eof(); + return $new; +} + +# TODO: document more fully? +sub parse_content { # from any number of scalars + my $tree = shift; + my $retval; + foreach my $whunk (@_) { + if(ref($whunk) eq 'SCALAR') { + $retval = $tree->parse($$whunk); + } else { + $retval = $tree->parse($whunk); + } + last if $tree->{'_stunted'}; # might as well check that. + } + $tree->eof(); + return $retval; +} + + +#--------------------------------------------------------------------------- + +sub new { # constructor! + my $class = shift; + $class = ref($class) || $class; + + my $self = HTML::Element->new('html'); # Initialize HTML::Element part + { + # A hack for certain strange versions of Parser: + my $other_self = HTML::Parser->new(); + %$self = (%$self, %$other_self); # copy fields + # Yes, multiple inheritance is messy. Kids, don't try this at home. + bless $other_self, "HTML::TreeBuilder::_hideyhole"; + # whack it out of the HTML::Parser class, to avoid the destructor + } + + # The root of the tree is special, as it has these funny attributes, + # and gets reblessed into this class. + + # Initialize parser settings + $self->{'_implicit_tags'} = 1; + $self->{'_implicit_body_p_tag'} = 0; + # If true, trying to insert text, or any of %isPhraseMarkup right + # under 'body' will implicate a 'p'. If false, will just go there. + + $self->{'_tighten'} = 1; + # whether ignorable WS in this tree should be deleted + + $self->{'_implicit'} = 1; # to delete, once we find a real open-"html" tag + + $self->{'_element_class'} = 'HTML::Element'; + $self->{'_ignore_unknown'} = 1; + $self->{'_ignore_text'} = 0; + $self->{'_warn'} = 0; + $self->{'_no_space_compacting'}= 0; + $self->{'_store_comments'} = 0; + $self->{'_store_declarations'} = 1; + $self->{'_store_pis'} = 0; + $self->{'_p_strict'} = 0; + + # Parse attributes passed in as arguments + if(@_) { + my %attr = @_; + for (keys %attr) { + $self->{"_$_"} = $attr{$_}; + } + } + + # rebless to our class + bless $self, $class; + + $self->{'_element_count'} = 1; + # undocumented, informal, and maybe not exactly correct + + $self->{'_head'} = $self->insert_element('head',1); + $self->{'_pos'} = undef; # pull it back up + $self->{'_body'} = $self->insert_element('body',1); + $self->{'_pos'} = undef; # pull it back up again + + return $self; +} + +#========================================================================== + +sub _elem # universal accessor... +{ + my($self, $elem, $val) = @_; + my $old = $self->{$elem}; + $self->{$elem} = $val if defined $val; + return $old; +} + +# accessors.... +sub implicit_tags { shift->_elem('_implicit_tags', @_); } +sub implicit_body_p_tag { shift->_elem('_implicit_body_p_tag', @_); } +sub p_strict { shift->_elem('_p_strict', @_); } +sub no_space_compacting { shift->_elem('_no_space_compacting', @_); } +sub ignore_unknown { shift->_elem('_ignore_unknown', @_); } +sub ignore_text { shift->_elem('_ignore_text', @_); } +sub ignore_ignorable_whitespace { shift->_elem('_tighten', @_); } +sub store_comments { shift->_elem('_store_comments', @_); } +sub store_declarations { shift->_elem('_store_declarations', @_); } +sub store_pis { shift->_elem('_store_pis', @_); } +sub warn { shift->_elem('_warn', @_); } + + +#========================================================================== + +sub warning { + my $self = shift; + CORE::warn("HTML::Parse: $_[0]\n") if $self->{'_warn'}; + # should maybe say HTML::TreeBuilder instead +} + +#========================================================================== + +{ + # To avoid having to rebuild these lists constantly... + my $_Closed_by_structurals = [qw(p h1 h2 h3 h4 h5 h6 pre textarea)]; + my $indent; + + sub start { + return if $_[0]{'_stunted'}; + + # Accept a signal from HTML::Parser for start-tags. + my($self, $tag, $attr) = @_; + # Parser passes more, actually: + # $self->start($tag, $attr, $attrseq, $origtext) + # But we can merrily ignore $attrseq and $origtext. + + if($tag eq 'x-html') { + print "Ignoring open-x-html tag.\n" if DEBUG; + # inserted by some lame code-generators. + return; # bypass tweaking. + } + + $tag =~ s{/$}{}s; # So turns into . Silently forgive. + + unless($tag =~ m/^[-_a-zA-Z0-9:%]+$/s) { + DEBUG and print "Start-tag name $tag is no good. Skipping.\n"; + return; + # This avoids having Element's new() throw an exception. + } + + my $ptag = ( + my $pos = $self->{'_pos'} || $self + )->{'_tag'}; + my $already_inserted; + #my($indent); + if(DEBUG) { + # optimization -- don't figure out indenting unless we're in debug mode + my @lineage = $pos->lineage; + $indent = ' ' x (1 + @lineage); + print + $indent, "Proposing a new \U$tag\E under ", + join('/', map $_->{'_tag'}, reverse($pos, @lineage)) || 'Root', + ".\n"; + #} else { + # $indent = ' '; + } + + #print $indent, "POS: $pos ($ptag)\n" if DEBUG > 2; + # $attr = {%$attr}; + + foreach my $k (keys %$attr) { + # Make sure some stooge doesn't have "". + # That happens every few million Web pages. + $attr->{' ' . $k} = delete $attr->{$k} + if length $k and substr($k,0,1) eq '_'; + # Looks bad, but is fine for round-tripping. + } + + my $e = + ($self->{'_element_class'} || 'HTML::Element')->new($tag, %$attr); + # Make a new element object. + # (Only rarely do we end up just throwing it away later in this call.) + + # Some prep -- custom messiness for those damned tables, and strict P's. + if($self->{'_implicit_tags'}) { # wallawallawalla! + + unless($HTML::TreeBuilder::isTableElement{$tag}) { + if ($ptag eq 'table') { + print $indent, + " * Phrasal \U$tag\E right under TABLE makes implicit TR and TD\n" + if DEBUG > 1; + $self->insert_element('tr', 1); + $pos = $self->insert_element('td', 1); # yes, needs updating + } elsif ($ptag eq 'tr') { + print $indent, + " * Phrasal \U$tag\E right under TR makes an implicit TD\n" + if DEBUG > 1; + $pos = $self->insert_element('td', 1); # yes, needs updating + } + $ptag = $pos->{'_tag'}; # yes, needs updating + } + # end of table-implication block. + + + # Now maybe do a little dance to enforce P-strictness. + # This seems like it should be integrated with the big + # "ALL HOPE..." block, further below, but that doesn't + # seem feasable. + if( + $self->{'_p_strict'} + and $HTML::TreeBuilder::isKnown{$tag} + and not $HTML::Tagset::is_Possible_Strict_P_Content{$tag} + ) { + my $here = $pos; + my $here_tag = $ptag; + while(1) { + if($here_tag eq 'p') { + print $indent, + " * Inserting $tag closes strict P.\n" if DEBUG > 1; + $self->end(\q{p}); + # NB: same as \'q', but less confusing to emacs cperl-mode + last; + } + + #print("Lasting from $here_tag\n"), + last if + $HTML::TreeBuilder::isKnown{$here_tag} + and not $HTML::Tagset::is_Possible_Strict_P_Content{$here_tag}; + # Don't keep looking up the tree if we see something that can't + # be strict-P content. + + $here_tag = ($here = $here->{'_parent'} || last)->{'_tag'}; + }# end while + $ptag = ($pos = $self->{'_pos'} || $self)->{'_tag'}; # better update! + } + # end of strict-p block. + } + + # And now, get busy... + #---------------------------------------------------------------------- + if (!$self->{'_implicit_tags'}) { # bimskalabim + # do nothing + print $indent, " * _implicit_tags is off. doing nothing\n" + if DEBUG > 1; + + #---------------------------------------------------------------------- + } elsif ($HTML::TreeBuilder::isHeadOrBodyElement{$tag}) { + if ($pos->is_inside('body')) { # all is well + print $indent, + " * ambilocal element \U$tag\E is fine under BODY.\n" + if DEBUG > 1; + } elsif ($pos->is_inside('head')) { + print $indent, + " * ambilocal element \U$tag\E is fine under HEAD.\n" + if DEBUG > 1; + } else { + # In neither head nor body! mmmmm... put under head? + + if ($ptag eq 'html') { # expected case + # TODO?? : would there ever be a case where _head would be + # absent from a tree that would ever be accessed at this + # point? + die "Where'd my head go?" unless ref $self->{'_head'}; + if ($self->{'_head'}{'_implicit'}) { + print $indent, + " * ambilocal element \U$tag\E makes an implicit HEAD.\n" + if DEBUG > 1; + # or rather, points us at it. + $self->{'_pos'} = $self->{'_head'}; # to insert under... + } else { + $self->warning( + "Ambilocal element <$tag> not under HEAD or BODY!?"); + # Put it under HEAD by default, I guess + $self->{'_pos'} = $self->{'_head'}; # to insert under... + } + + } else { + # Neither under head nor body, nor right under html... pass thru? + $self->warning( + "Ambilocal element <$tag> neither under head nor body, nor right under html!?"); + } + } + + #---------------------------------------------------------------------- + } elsif ($HTML::TreeBuilder::isBodyElement{$tag}) { + + # Ensure that we are within + if($ptag eq 'body') { + # We're good. + } elsif($HTML::TreeBuilder::isBodyElement{$ptag} # glarg + and not $HTML::TreeBuilder::isHeadOrBodyElement{$ptag} + ) { + # Special case: Save ourselves a call to is_inside further down. + # If our $ptag is an isBodyElement element (but not an + # isHeadOrBodyElement element), then we must be under body! + print $indent, " * Inferring that $ptag is under BODY.\n", + if DEBUG > 3; + # I think this and the test for 'body' trap everything + # bodyworthy, except the case where the parent element is + # under an unknown element that's a descendant of body. + } elsif ($pos->is_inside('head')) { + print $indent, + " * body-element \U$tag\E minimizes HEAD, makes implicit BODY.\n" + if DEBUG > 1; + $ptag = ( + $pos = $self->{'_pos'} = $self->{'_body'} # yes, needs updating + || die "Where'd my body go?" + )->{'_tag'}; # yes, needs updating + } elsif (! $pos->is_inside('body')) { + print $indent, + " * body-element \U$tag\E makes implicit BODY.\n" + if DEBUG > 1; + $ptag = ( + $pos = $self->{'_pos'} = $self->{'_body'} # yes, needs updating + || die "Where'd my body go?" + )->{'_tag'}; # yes, needs updating + } + # else we ARE under body, so okay. + + + # Handle implicit endings and insert based on and position + # ... ALL HOPE ABANDON ALL YE WHO ENTER HERE ... + if ($tag eq 'p' or + $tag eq 'h1' or $tag eq 'h2' or $tag eq 'h3' or + $tag eq 'h4' or $tag eq 'h5' or $tag eq 'h6' or + $tag eq 'form' + # Hm, should
    really be here?! + ) { + # Can't have

    , or inside these + $self->end($_Closed_by_structurals, + @HTML::TreeBuilder::p_closure_barriers + # used to be just li! + ); + + } elsif ($tag eq 'ol' or $tag eq 'ul' or $tag eq 'dl') { + # Can't have lists inside -- in the unlikely + # event anyone tries to put them there! + if ( + $ptag eq 'h1' or $ptag eq 'h2' or $ptag eq 'h3' or + $ptag eq 'h4' or $ptag eq 'h5' or $ptag eq 'h6' + ) { + $self->end(\$ptag); + } + # TODO: Maybe keep closing up the tree until + # the ptag isn't any of the above? + # But anyone that says

      ... + # deserves what they get anyway. + + } elsif ($tag eq 'li') { # list item + # Get under a list tag, one way or another + unless( + exists $HTML::TreeBuilder::isList{$ptag} or + $self->end(\q{*}, keys %HTML::TreeBuilder::isList) #' + ) { + print $indent, + " * inserting implicit UL for lack of containing ", + join('|', keys %HTML::TreeBuilder::isList), ".\n" + if DEBUG > 1; + $self->insert_element('ul', 1); + } + + } elsif ($tag eq 'dt' or $tag eq 'dd') { + # Get under a DL, one way or another + unless($ptag eq 'dl' or $self->end(\q{*}, 'dl')) { #' + print $indent, + " * inserting implicit DL for lack of containing DL.\n" + if DEBUG > 1; + $self->insert_element('dl', 1); + } + + } elsif ($HTML::TreeBuilder::isFormElement{$tag}) { + if($self->{'_ignore_formies_outside_form'} # TODO: document this + and not $pos->is_inside('form') + ) { + print $indent, + " * ignoring \U$tag\E because not in a FORM.\n" + if DEBUG > 1; + return; # bypass tweaking. + } + if($tag eq 'option') { + # return unless $ptag eq 'select'; + $self->end(\q{option}); + $ptag = ($self->{'_pos'} || $self)->{'_tag'}; + unless($ptag eq 'select' or $ptag eq 'optgroup') { + print $indent, " * \U$tag\E makes an implicit SELECT.\n" + if DEBUG > 1; + $pos = $self->insert_element('select', 1); + # but not a very useful select -- has no 'name' attribute! + # is $pos's value used after this? + } + } + } elsif ($HTML::TreeBuilder::isTableElement{$tag}) { + if(!$pos->is_inside('table')) { + print $indent, " * \U$tag\E makes an implicit TABLE\n" + if DEBUG > 1; + $self->insert_element('table', 1); + } + + if($tag eq 'td' or $tag eq 'th') { + # Get under a tr one way or another + unless( + $ptag eq 'tr' # either under a tr + or $self->end(\q{*}, 'tr', 'table') #or we can get under one + ) { + print $indent, + " * \U$tag\E under \U$ptag\E makes an implicit TR\n" + if DEBUG > 1; + $self->insert_element('tr', 1); + # presumably pos's value isn't used after this. + } + } else { + $self->end(\$tag, 'table'); #' + } + # Hmm, I guess this is right. To work it out: + # tr closes any open tr (limited at a table) + # thead closes any open thead (limited at a table) + # tbody closes any open tbody (limited at a table) + # tfoot closes any open tfoot (limited at a table) + # colgroup closes any open colgroup (limited at a table) + # col can try, but will always fail, at the enclosing table, + # as col is empty, and therefore never open! + # But! + # td closes any open td OR th (limited at a table) + # th closes any open th OR td (limited at a table) + # ...implementable as "close to a tr, or make a tr" + + } elsif ($HTML::TreeBuilder::isPhraseMarkup{$tag}) { + if($ptag eq 'body' and $self->{'_implicit_body_p_tag'}) { + print + " * Phrasal \U$tag\E right under BODY makes an implicit P\n" + if DEBUG > 1; + $pos = $self->insert_element('p', 1); + # is $pos's value used after this? + } + } + # End of implicit endings logic + + # End of "elsif ($HTML::TreeBuilder::isBodyElement{$tag}" + #---------------------------------------------------------------------- + + } elsif ($HTML::TreeBuilder::isHeadElement{$tag}) { + if ($pos->is_inside('body')) { + print $indent, " * head element \U$tag\E found inside BODY!\n" + if DEBUG; + $self->warning("Header element <$tag> in body"); # [sic] + } elsif (!$pos->is_inside('head')) { + print $indent, " * head element \U$tag\E makes an implicit HEAD.\n" + if DEBUG > 1; + } else { + print $indent, + " * head element \U$tag\E goes inside existing HEAD.\n" + if DEBUG > 1; + } + $self->{'_pos'} = $self->{'_head'} || die "Where'd my head go?"; + + #---------------------------------------------------------------------- + } elsif ($tag eq 'html') { + if(delete $self->{'_implicit'}) { # first time here + print $indent, " * good! found the real HTML element!\n" + if DEBUG > 1; + } else { + print $indent, " * Found a second HTML element\n" + if DEBUG; + $self->warning("Found a nested element"); + } + + # in either case, migrate attributes to the real element + for (keys %$attr) { + $self->attr($_, $attr->{$_}); + } + $self->{'_pos'} = undef; + return $self; # bypass tweaking. + + #---------------------------------------------------------------------- + } elsif ($tag eq 'head') { + my $head = $self->{'_head'} || die "Where'd my head go?"; + if(delete $head->{'_implicit'}) { # first time here + print $indent, " * good! found the real HEAD element!\n" + if DEBUG > 1; + } else { # been here before + print $indent, " * Found a second HEAD element\n" + if DEBUG; + $self->warning("Found a second element"); + } + + # in either case, migrate attributes to the real element + for (keys %$attr) { + $head->attr($_, $attr->{$_}); + } + return $self->{'_pos'} = $head; # bypass tweaking. + + #---------------------------------------------------------------------- + } elsif ($tag eq 'body') { + my $body = $self->{'_body'} || die "Where'd my body go?"; + if(delete $body->{'_implicit'}) { # first time here + print $indent, " * good! found the real BODY element!\n" + if DEBUG > 1; + } else { # been here before + print $indent, " * Found a second BODY element\n" + if DEBUG; + $self->warning("Found a second element"); + } + + # in either case, migrate attributes to the real element + for (keys %$attr) { + $body->attr($_, $attr->{$_}); + } + return $self->{'_pos'} = $body; # bypass tweaking. + + #---------------------------------------------------------------------- + } elsif ($tag eq 'frameset') { + if( + !($self->{'_frameset_seen'}++) # first frameset seen + and !$self->{'_noframes_seen'} + # otherwise it'll be under the noframes already + and !$self->is_inside('body') + ) { + # The following is a bit of a hack. We don't use the normal + # insert_element because 1) we don't want it as _pos, but instead + # right under $self, and 2), more importantly, that we don't want + # this inserted at the /end/ of $self's content_list, but instead + # in the middle of it, specifiaclly right before the body element. + # + my $c = $self->{'_content'} || die "Contentless root?"; + my $body = $self->{'_body'} || die "Where'd my BODY go?"; + for(my $i = 0; $i < @$c; ++$i) { + if($c->[$i] eq $body) { + splice(@$c, $i, 0, $self->{'_pos'} = $pos = $e); + $e->{'_parent'} = $self; + $already_inserted = 1; + print $indent, " * inserting 'frameset' right before BODY.\n" + if DEBUG > 1; + last; + } + } + die "BODY not found in children of root?" unless $already_inserted; + } + + } elsif ($tag eq 'frame') { + # Okay, fine, pass thru. + # Should probably enforce that these should be under a frameset. + # But hey. Ditto for enforcing that 'noframes' should be under + # a 'frameset', as the DTDs say. + + } elsif ($tag eq 'noframes') { + # This basically assumes there'll be exactly one 'noframes' element + # per document. At least, only the first one gets to have the + # body under it. And if there are no noframes elements, then + # the body pretty much stays where it is. Is that ever a problem? + if($self->{'_noframes_seen'}++) { + print $indent, " * ANOTHER noframes element?\n" if DEBUG; + } else { + if($pos->is_inside('body')) { + print $indent, " * 'noframes' inside 'body'. Odd!\n" if DEBUG; + # In that odd case, we /can't/ make body a child of 'noframes', + # because it's an ancestor of the 'noframes'! + } else { + $e->push_content( $self->{'_body'} || die "Where'd my body go?" ); + print $indent, " * Moving body to be under noframes.\n" if DEBUG; + } + } + + #---------------------------------------------------------------------- + } else { + # unknown tag + if ($self->{'_ignore_unknown'}) { + print $indent, " * Ignoring unknown tag \U$tag\E\n" if DEBUG; + $self->warning("Skipping unknown tag $tag"); + return; + } else { + print $indent, " * Accepting unknown tag \U$tag\E\n" + if DEBUG; + } + } + #---------------------------------------------------------------------- + # End of mumbo-jumbo + + + print + $indent, "(Attaching ", $e->{'_tag'}, " under ", + ($self->{'_pos'} || $self)->{'_tag'}, ")\n" + # because if _pos isn't defined, it goes under self + if DEBUG; + + + # The following if-clause is to delete /some/ ignorable whitespace + # nodes, as we're making the tree. + # This'd be a node we'd catch later anyway, but we might as well + # nip it in the bud now. + # This doesn't catch /all/ deletable WS-nodes, so we do have to call + # the tightener later to catch the rest. + + if($self->{'_tighten'} and !$self->{'_ignore_text'}) { # if tightenable + my($sibs, $par); + if( + ($sibs = ( $par = $self->{'_pos'} || $self )->{'_content'}) + and @$sibs # parent already has content + and !ref($sibs->[-1]) # and the last one there is a text node + and $sibs->[-1] !~ m<[^\n\r\f\t ]>s # and it's all whitespace + + and ( # one of these has to be eligible... + $HTML::TreeBuilder::canTighten{$tag} + or + ( + (@$sibs == 1) + ? # WS is leftmost -- so parent matters + $HTML::TreeBuilder::canTighten{$par->{'_tag'}} + : # WS is after another node -- it matters + (ref $sibs->[-2] + and $HTML::TreeBuilder::canTighten{$sibs->[-2]{'_tag'}} + ) + ) + ) + + and !$par->is_inside('pre', 'xmp', 'textarea', 'plaintext') + # we're clear + ) { + pop @$sibs; + print $indent, "Popping a preceding all-WS node\n" if DEBUG; + } + } + + $self->insert_element($e) unless $already_inserted; + + if(DEBUG) { + if($self->{'_pos'}) { + print + $indent, "(Current lineage of pos: \U$tag\E under ", + join('/', + reverse( + # $self->{'_pos'}{'_tag'}, # don't list myself! + $self->{'_pos'}->lineage_tag_names + ) + ), + ".)\n"; + } else { + print $indent, "(Pos points nowhere!?)\n"; + } + } + + unless(($self->{'_pos'} || '') eq $e) { + # if it's an empty element -- i.e., if it didn't change the _pos + &{ $self->{"_tweak_$tag"} + || $self->{'_tweak_*'} + || return $e + }(map $_, $e, $tag, $self); # make a list so the user can't clobber + } + + return $e; + } +} + +#========================================================================== + +{ + my $indent; + + sub end { + return if $_[0]{'_stunted'}; + + # Either: Acccept an end-tag signal from HTML::Parser + # Or: Method for closing currently open elements in some fairly complex + # way, as used by other methods in this class. + my($self, $tag, @stop) = @_; + if($tag eq 'x-html') { + print "Ignoring close-x-html tag.\n" if DEBUG; + # inserted by some lame code-generators. + return; + } + + unless(ref($tag) or $tag =~ m/^[-_a-zA-Z0-9:%]+$/s) { + DEBUG and print "End-tag name $tag is no good. Skipping.\n"; + return; + # This avoids having Element's new() throw an exception. + } + + # This method accepts two calling formats: + # 1) from Parser: $self->end('tag_name', 'origtext') + # in which case we shouldn't mistake origtext as a blocker tag + # 2) from myself: $self->end(\q{tagname1}, 'blk1', ... ) + # from myself: $self->end(['tagname1', 'tagname2'], 'blk1', ... ) + + # End the specified tag, but don't move above any of the blocker tags. + # The tag can also be a reference to an array. Terminate the first + # tag found. + + my $ptag = ( my $p = $self->{'_pos'} || $self )->{'_tag'}; + # $p and $ptag are sort-of stratch + + if(ref($tag)) { + # First param is a ref of one sort or another -- + # THE CALL IS COMING FROM INSIDE THE HOUSE! + $tag = $$tag if ref($tag) eq 'SCALAR'; + # otherwise it's an arrayref. + } else { + # the call came from Parser -- just ignore origtext + @stop = (); + } + + #my($indent); + if(DEBUG) { + # optimization -- don't figure out depth unless we're in debug mode + my @lineage_tags = $p->lineage_tag_names; + $indent = ' ' x (1 + @lineage_tags); + + # now announce ourselves + print $indent, "Ending ", + ref($tag) ? ('[', join(' ', @$tag ), ']') : "\U$tag\E", + scalar(@stop) ? (" no higher than [", join(' ', @stop), "]" ) + : (), ".\n" + ; + + print $indent, " (Current lineage: ", join('/', @lineage_tags), ".)\n" + if DEBUG > 1; + + if(DEBUG > 3) { + #my( + # $package, $filename, $line, $subroutine, + # $hasargs, $wantarray, $evaltext, $is_require) = caller; + print $indent, + " (Called from ", (caller(1))[3], ' line ', (caller(1))[2], + ")\n"; + } + + #} else { + # $indent = ' '; + } + # End of if DEBUG + + # Now actually do it + my @to_close; + if($tag eq '*') { + # Special -- close everything up to (but not including) the first + # limiting tag, or return if none found. Somewhat of a special case. + PARENT: + while (defined $p) { + $ptag = $p->{'_tag'}; + print $indent, " (Looking at $ptag.)\n" if DEBUG > 2; + for (@stop) { + if($ptag eq $_) { + print $indent, " (Hit a $_; closing everything up to here.)\n" + if DEBUG > 2; + last PARENT; + } + } + push @to_close, $p; + $p = $p->{'_parent'}; # no match so far? keep moving up + print + $indent, + " (Moving on up to ", $p ? $p->{'_tag'} : 'nil', ")\n" + if DEBUG > 1; + ; + } + unless(defined $p) { # We never found what we were looking for. + print $indent, " (We never found a limit.)\n" if DEBUG > 1; + return; + } + #print + # $indent, + # " (To close: ", join('/', map $_->tag, @to_close), ".)\n" + # if DEBUG > 4; + + # Otherwise update pos and fall thru. + $self->{'_pos'} = $p; + } elsif (ref $tag) { + # Close the first of any of the matching tags, giving up if you hit + # any of the stop-tags. + PARENT: + while (defined $p) { + $ptag = $p->{'_tag'}; + print $indent, " (Looking at $ptag.)\n" if DEBUG > 2; + for (@$tag) { + if($ptag eq $_) { + print $indent, " (Closing $_.)\n" if DEBUG > 2; + last PARENT; + } + } + for (@stop) { + if($ptag eq $_) { + print $indent, " (Hit a limiting $_ -- bailing out.)\n" + if DEBUG > 1; + return; # so it was all for naught + } + } + push @to_close, $p; + $p = $p->{'_parent'}; + } + return unless defined $p; # We went off the top of the tree. + # Otherwise specified element was found; set pos to its parent. + push @to_close, $p; + $self->{'_pos'} = $p->{'_parent'}; + } else { + # Close the first of the specified tag, giving up if you hit + # any of the stop-tags. + while (defined $p) { + $ptag = $p->{'_tag'}; + print $indent, " (Looking at $ptag.)\n" if DEBUG > 2; + if($ptag eq $tag) { + print $indent, " (Closing $tag.)\n" if DEBUG > 2; + last; + } + for (@stop) { + if($ptag eq $_) { + print $indent, " (Hit a limiting $_ -- bailing out.)\n" + if DEBUG > 1; + return; # so it was all for naught + } + } + push @to_close, $p; + $p = $p->{'_parent'}; + } + return unless defined $p; # We went off the top of the tree. + # Otherwise specified element was found; set pos to its parent. + push @to_close, $p; + $self->{'_pos'} = $p->{'_parent'}; + } + + $self->{'_pos'} = undef if $self eq ($self->{'_pos'} || ''); + print $indent, "(Pos now points to ", + $self->{'_pos'} ? $self->{'_pos'}{'_tag'} : '???', ".)\n" + if DEBUG > 1; + + ### EXPENSIVE, because has to check that it's not under a pre + ### or a CDATA-parent. That's one more method call per end()! + ### Might as well just do this at the end of the tree-parse, I guess, + ### at which point we'd be parsing top-down, and just not traversing + ### under pre's or CDATA-parents. + ## + ## Take this opportunity to nix any terminal whitespace nodes. + ## TODO: consider whether this (plus the logic in start(), above) + ## would ever leave any WS nodes in the tree. + ## If not, then there's no reason to have eof() call + ## delete_ignorable_whitespace on the tree, is there? + ## + #if(@to_close and $self->{'_tighten'} and !$self->{'_ignore_text'} and + # ! $to_close[-1]->is_inside('pre', keys %HTML::Tagset::isCDATA_Parent) + #) { # if tightenable + # my($children, $e_tag); + # foreach my $e (reverse @to_close) { # going top-down + # last if 'pre' eq ($e_tag = $e->{'_tag'}) or + # $HTML::Tagset::isCDATA_Parent{$e_tag}; + # + # if( + # $children = $e->{'_content'} + # and @$children # has children + # and !ref($children->[-1]) + # and $children->[-1] =~ m<^\s+$>s # last node is all-WS + # and + # ( + # # has a tightable parent: + # $HTML::TreeBuilder::canTighten{ $e_tag } + # or + # ( # has a tightenable left sibling: + # @$children > 1 and + # ref($children->[-2]) + # and $HTML::TreeBuilder::canTighten{ $children->[-2]{'_tag'} } + # ) + # ) + # ) { + # pop @$children; + # #print $indent, "Popping a terminal WS node from ", $e->{'_tag'}, + # # " (", $e->address, ") while exiting.\n" if DEBUG; + # } + # } + #} + + + foreach my $e (@to_close) { + # Call the applicable callback, if any + $ptag = $e->{'_tag'}; + &{ $self->{"_tweak_$ptag"} + || $self->{'_tweak_*'} + || next + }(map $_, $e, $ptag, $self); + print $indent, "Back from tweaking.\n" if DEBUG; + last if $self->{'_stunted'}; # in case one of the handlers called stunt + } + return @to_close; + } +} + +#========================================================================== +{ + my($indent, $nugget); + + sub text { + return if $_[0]{'_stunted'}; + + # Accept a "here's a text token" signal from HTML::Parser. + my($self, $text, $is_cdata) = @_; + # the >3.0 versions of Parser may pass a cdata node. + # Thanks to Gisle Aas for pointing this out. + + return unless length $text; # I guess that's always right + + my $ignore_text = $self->{'_ignore_text'}; + my $no_space_compacting = $self->{'_no_space_compacting'}; + + my $pos = $self->{'_pos'} || $self; + + HTML::Entities::decode($text) + unless $ignore_text || $is_cdata + || $HTML::Tagset::isCDATA_Parent{$pos->{'_tag'}}; + + #my($indent, $nugget); + if(DEBUG) { + # optimization -- don't figure out depth unless we're in debug mode + my @lineage_tags = $pos->lineage_tag_names; + $indent = ' ' x (1 + @lineage_tags); + + $nugget = (length($text) <= 25) ? $text : (substr($text,0,25) . '...'); + $nugget =~ s<([\x00-\x1F])> + <'\\x'.(unpack("H2",$1))>eg; + print + $indent, "Proposing a new text node ($nugget) under ", + join('/', reverse($pos->{'_tag'}, @lineage_tags)) || 'Root', + ".\n"; + + #} else { + # $indent = ' '; + } + + + my $ptag; + if ($HTML::Tagset::isCDATA_Parent{$ptag = $pos->{'_tag'}} + #or $pos->is_inside('pre') + or $pos->is_inside('pre', 'textarea') + ) { + return if $ignore_text; + $pos->push_content($text); + } else { + # return unless $text =~ /\S/; # This is sometimes wrong + + if (!$self->{'_implicit_tags'} || $text !~ /[^\n\r\f\t ]/) { + # don't change anything + } elsif ($ptag eq 'head' or $ptag eq 'noframes') { + if($self->{'_implicit_body_p_tag'}) { + print $indent, + " * Text node under \U$ptag\E closes \U$ptag\E, implicates BODY and P.\n" + if DEBUG > 1; + $self->end(\$ptag); + $pos = + $self->{'_body'} + ? ($self->{'_pos'} = $self->{'_body'}) # expected case + : $self->insert_element('body', 1); + $pos = $self->insert_element('p', 1); + } else { + print $indent, + " * Text node under \U$ptag\E closes, implicates BODY.\n" + if DEBUG > 1; + $self->end(\$ptag); + $pos = + $self->{'_body'} + ? ($self->{'_pos'} = $self->{'_body'}) # expected case + : $self->insert_element('body', 1); + } + } elsif ($ptag eq 'html') { + if($self->{'_implicit_body_p_tag'}) { + print $indent, + " * Text node under HTML implicates BODY and P.\n" + if DEBUG > 1; + $pos = + $self->{'_body'} + ? ($self->{'_pos'} = $self->{'_body'}) # expected case + : $self->insert_element('body', 1); + $pos = $self->insert_element('p', 1); + } else { + print $indent, + " * Text node under HTML implicates BODY.\n" + if DEBUG > 1; + $pos = + $self->{'_body'} + ? ($self->{'_pos'} = $self->{'_body'}) # expected case + : $self->insert_element('body', 1); + #print "POS is $pos, ", $pos->{'_tag'}, "\n"; + } + } elsif ($ptag eq 'body') { + if($self->{'_implicit_body_p_tag'}) { + print $indent, + " * Text node under BODY implicates P.\n" + if DEBUG > 1; + $pos = $self->insert_element('p', 1); + } + } elsif ($ptag eq 'table') { + print $indent, + " * Text node under TABLE implicates TR and TD.\n" + if DEBUG > 1; + $self->insert_element('tr', 1); + $pos = $self->insert_element('td', 1); + # double whammy! + } elsif ($ptag eq 'tr') { + print $indent, + " * Text node under TR implicates TD.\n" + if DEBUG > 1; + $pos = $self->insert_element('td', 1); + } + # elsif ( + # # $ptag eq 'li' || + # # $ptag eq 'dd' || + # $ptag eq 'form') { + # $pos = $self->insert_element('p', 1); + #} + + + # Whatever we've done above should have had the side + # effect of updating $self->{'_pos'} + + + #print "POS is now $pos, ", $pos->{'_tag'}, "\n"; + + return if $ignore_text; + $text =~ s/[\n\r\f\t ]+/ /g # canonical space + unless $no_space_compacting ; + + print + $indent, " (Attaching text node ($nugget) under ", + # was: $self->{'_pos'} ? $self->{'_pos'}{'_tag'} : $self->{'_tag'}, + $pos->{'_tag'}, + ").\n" + if DEBUG > 1; + + $pos->push_content($text); + } + + &{ $self->{'_tweak_~text'} || return }($text, $pos, $pos->{'_tag'} . ''); + # Note that this is very exceptional -- it doesn't fall back to + # _tweak_*, and it gives its tweak different arguments. + return; + } +} + +#========================================================================== + +# TODO: test whether comment(), declaration(), and process(), do the right +# thing as far as tightening and whatnot. +# Also, currently, doctypes and comments that appear before head or body +# show up in the tree in the wrong place. Something should be done about +# this. Tricky. Maybe this whole business of pre-making the body and +# whatnot is wrong. + +sub comment { + return if $_[0]{'_stunted'}; + # Accept a "here's a comment" signal from HTML::Parser. + + my($self, $text) = @_; + my $pos = $self->{'_pos'} || $self; + return unless $self->{'_store_comments'} + || $HTML::Tagset::isCDATA_Parent{ $pos->{'_tag'} }; + + if(DEBUG) { + my @lineage_tags = $pos->lineage_tag_names; + my $indent = ' ' x (1 + @lineage_tags); + + my $nugget = (length($text) <= 25) ? $text : (substr($text,0,25) . '...'); + $nugget =~ s<([\x00-\x1F])> + <'\\x'.(unpack("H2",$1))>eg; + print + $indent, "Proposing a Comment ($nugget) under ", + join('/', reverse($pos->{'_tag'}, @lineage_tags)) || 'Root', + ".\n"; + } + + (my $e = ( + $self->{'_element_class'} || 'HTML::Element' + )->new('~comment'))->{'text'} = $text; + $pos->push_content($e); + ++($self->{'_element_count'}); + + &{ $self->{'_tweak_~comment'} + || $self->{'_tweak_*'} + || return $e + }(map $_, $e, '~comment', $self); + + return $e; +} + +sub declaration { + return if $_[0]{'_stunted'}; + # Accept a "here's a markup declaration" signal from HTML::Parser. + + my($self, $text) = @_; + my $pos = $self->{'_pos'} || $self; + + if(DEBUG) { + my @lineage_tags = $pos->lineage_tag_names; + my $indent = ' ' x (1 + @lineage_tags); + + my $nugget = (length($text) <= 25) ? $text : (substr($text,0,25) . '...'); + $nugget =~ s<([\x00-\x1F])> + <'\\x'.(unpack("H2",$1))>eg; + print + $indent, "Proposing a Declaration ($nugget) under ", + join('/', reverse($pos->{'_tag'}, @lineage_tags)) || 'Root', + ".\n"; + } + (my $e = ( + $self->{'_element_class'} || 'HTML::Element' + )->new('~declaration'))->{'text'} = $text; + + $self->{_decl} = $e; + return $e; +} + +#========================================================================== + +sub process { + return if $_[0]{'_stunted'}; + # Accept a "here's a PI" signal from HTML::Parser. + + return unless $_[0]->{'_store_pis'}; + my($self, $text) = @_; + my $pos = $self->{'_pos'} || $self; + + if(DEBUG) { + my @lineage_tags = $pos->lineage_tag_names; + my $indent = ' ' x (1 + @lineage_tags); + + my $nugget = (length($text) <= 25) ? $text : (substr($text,0,25) . '...'); + $nugget =~ s<([\x00-\x1F])> + <'\\x'.(unpack("H2",$1))>eg; + print + $indent, "Proposing a PI ($nugget) under ", + join('/', reverse($pos->{'_tag'}, @lineage_tags)) || 'Root', + ".\n"; + } + (my $e = ( + $self->{'_element_class'} || 'HTML::Element' + )->new('~pi'))->{'text'} = $text; + $pos->push_content($e); + ++($self->{'_element_count'}); + + &{ $self->{'_tweak_~pi'} + || $self->{'_tweak_*'} + || return $e + }(map $_, $e, '~pi', $self); + + return $e; +} + + +#========================================================================== + +#When you call $tree->parse_file($filename), and the +#tree's ignore_ignorable_whitespace attribute is on (as it is +#by default), HTML::TreeBuilder's logic will manage to avoid +#creating some, but not all, nodes that represent ignorable +#whitespace. However, at the end of its parse, it traverses the +#tree and deletes any that it missed. (It does this with an +#around-method around HTML::Parser's eof method.) +# +#However, with $tree->parse($content), the cleanup-traversal step +#doesn't happen automatically -- so when you're done parsing all +#content for a document (regardless of whether $content is the only +#bit, or whether it's just another chunk of content you're parsing into +#the tree), call $tree->eof() to signal that you're at the end of the +#text you're inputting to the tree. Besides properly cleaning any bits +#of ignorable whitespace from the tree, this will also ensure that +#HTML::Parser's internal buffer is flushed. + +sub eof { + # Accept an "end-of-file" signal from HTML::Parser, or thrown by the user. + + return if $_[0]->{'_done'}; # we've already been here + + return $_[0]->SUPER::eof() if $_[0]->{'_stunted'}; + + my $x = $_[0]; + print "EOF received.\n" if DEBUG; + my(@rv); + if(wantarray) { + # I don't think this makes any difference for this particular + # method, but let's be scrupulous, for once. + @rv = $x->SUPER::eof(); + } else { + $rv[0] = $x->SUPER::eof(); + } + + $x->end('html') unless $x eq ($x->{'_pos'} || $x); + # That SHOULD close everything, and will run the appropriate tweaks. + # We /could/ be running under some insane mode such that there's more + # than one HTML element, but really, that's just insane to do anyhow. + + unless($x->{'_implicit_tags'}) { + # delete those silly implicit head and body in case we put + # them there in implicit tags mode + foreach my $node ($x->{'_head'}, $x->{'_body'}) { + $node->replace_with_content + if defined $node and ref $node + and $node->{'_implicit'} and $node->{'_parent'}; + # I think they should be empty anyhow, since the only + # logic that'd insert under them can apply only, I think, + # in the case where _implicit_tags is on + } + # this may still leave an implicit 'html' at the top, but there's + # nothing we can do about that, is there? + } + + $x->delete_ignorable_whitespace() + # this's why we trap this -- an after-method + if $x->{'_tighten'} and ! $x->{'_ignore_text'}; + $x->{'_done'} = 1; + + return @rv if wantarray; + return $rv[0]; +} + +#========================================================================== + +# TODO: document + +sub stunt { + my $self = $_[0]; + print "Stunting the tree.\n" if DEBUG; + $self->{'_done'} = 1; + + if($HTML::Parser::VERSION < 3) { + #This is a MEAN MEAN HACK. And it works most of the time! + $self->{'_buf'} = ''; + my $fh = *HTML::Parser::F{IO}; + # the local'd FH used by parse_file loop + if(defined $fh) { + print "Closing Parser's filehandle $fh\n" if DEBUG; + close($fh); + } + + # But if they called $tree->parse_file($filehandle) + # or $tree->parse_file(*IO), then there will be no *HTML::Parser::F{IO} + # to close. Ahwell. Not a problem for most users these days. + + } else { + $self->SUPER::eof(); + # Under 3+ versions, calling eof from inside a parse will abort the + # parse / parse_file + } + + # In the off chance that the above didn't work, we'll throw + # this flag to make any future events be no-ops. + $self->stunted(1); + return; +} + +# TODO: document +sub stunted { shift->_elem('_stunted', @_); } +sub done { shift->_elem('_done', @_); } + +#========================================================================== + +sub delete { + # Override Element's delete method. + # This does most, if not all, of what Element's delete does anyway. + # Deletes content, including content in some special attributes. + # But doesn't empty out the hash. + + $_[0]->{'_element_count'} = 1; # never hurts to be scrupulously correct + + delete @{$_[0]}{'_body', '_head', '_pos'}; + for (@{ delete($_[0]->{'_content'}) + || [] + }, # all/any content +# delete @{$_[0]}{'_body', '_head', '_pos'} + # ...and these, in case these elements don't appear in the + # content, which is possible. If they did appear (as they + # usually do), then calling $_->delete on them again is harmless. +# I don't think that's such a hot idea now. Thru creative reattachment, +# those could actually now point to elements in OTHER trees (which we do +# NOT want to delete!). +## Reasoned out: +# If these point to elements not in the content list of any element in this +# tree, but not in the content list of any element in any OTHER tree, then +# just deleting these will make their refcounts hit zero. +# If these point to elements in the content lists of elements in THIS tree, +# then we'll get to deleting them when we delete from the top. +# If these point to elements in the content lists of elements in SOME OTHER +# tree, then they're not to be deleted. + ) + { + $_->delete + if defined $_ and ref $_ # Make sure it's an object. + and $_ ne $_[0]; # And avoid hitting myself, just in case! + } + + $_[0]->detach if $_[0]->{'_parent'} and $_[0]->{'_parent'}{'_content'}; + # An 'html' element having a parent is quite unlikely. + + return undef; +} + +sub tighten_up { # legacy + shift->delete_ignorable_whitespace(@_); +} + +sub elementify { + # Rebless this object down into the normal element class. + my $self = $_[0]; + my $to_class = ($self->{'_element_class'} || 'HTML::Element'); + delete @{$self}{ grep {; + length $_ and substr($_,0,1) eq '_' + # The private attributes that we'll retain: + and $_ ne '_tag' and $_ ne '_parent' and $_ ne '_content' + and $_ ne '_implicit' and $_ ne '_pos' + and $_ ne '_element_class' + } keys %$self }; + bless $self, $to_class; # Returns the same object we were fed +} + +#-------------------------------------------------------------------------- + +sub guts { + my @out; + my @stack = ($_[0]); + my $destructive = $_[1]; + my $this; + while(@stack) { + $this = shift @stack; + if(!ref $this) { + push @out, $this; # yes, it can include text nodes + } elsif(! $this->{'_implicit'}) { + push @out, $this; + delete $this->{'_parent'} if $destructive; + } else { + # it's an implicit node. Delete it and recurse + delete $this->{'_parent'} if $destructive; + unshift @stack, @{ + ( $destructive ? + delete($this->{'_content'}) + : $this->{'_content'} + ) + || [] + }; + } + } + # Doesn't call a real $root->delete on the (when implicit) root, + # but I don't think it needs to. + + return @out if wantarray; # one simple normal case. + return undef unless @out; + return $out[0] if @out == 1 and ref($out[0]); + my $x = HTML::Element->new('div', '_implicit' => 1); + $x->push_content(@out); + return $x; +} + +sub disembowel { $_[0]->guts(1) } + +#-------------------------------------------------------------------------- +1; + +__END__ + +=head1 NAME + +HTML::TreeBuilder - Parser that builds a HTML syntax tree + +=head1 SYNOPSIS + + foreach my $file_name (@ARGV) { + my $tree = HTML::TreeBuilder->new; # empty tree + $tree->parse_file($file_name); + print "Hey, here's a dump of the parse tree of $file_name:\n"; + $tree->dump; # a method we inherit from HTML::Element + print "And here it is, bizarrely rerendered as HTML:\n", + $tree->as_HTML, "\n"; + + # Now that we're done with it, we must destroy it. + $tree = $tree->delete; + } + +=head1 DESCRIPTION + +(This class is part of the L dist.) + +This class is for HTML syntax trees that get built out of HTML +source. The way to use it is to: + +1. start a new (empty) HTML::TreeBuilder object, + +2. then use one of the methods from HTML::Parser (presumably with +$tree->parse_file($filename) for files, or with +$tree->parse($document_content) and $tree->eof if you've got +the content in a string) to parse the HTML +document into the tree $tree. + +(You can combine steps 1 and 2 with the "new_from_file" or +"new_from_content" methods.) + +2b. call $root-Eelementify() if you want. + +3. do whatever you need to do with the syntax tree, presumably +involving traversing it looking for some bit of information in it, + +4. and finally, when you're done with the tree, call $tree->delete() to +erase the contents of the tree from memory. This kind of thing +usually isn't necessary with most Perl objects, but it's necessary for +TreeBuilder objects. See L for a more verbose +explanation of why this is the case. + +=head1 METHODS AND ATTRIBUTES + +Objects of this class inherit the methods of both HTML::Parser and +HTML::Element. The methods inherited from HTML::Parser are used for +building the HTML tree, and the methods inherited from HTML::Element +are what you use to scrutinize the tree. Besides this +(HTML::TreeBuilder) documentation, you must also carefully read the +HTML::Element documentation, and also skim the HTML::Parser +documentation -- probably only its parse and parse_file methods are of +interest. + +Most of the following methods native to HTML::TreeBuilder control how +parsing takes place; they should be set I you try parsing into +the given object. You can set the attributes by passing a TRUE or +FALSE value as argument. E.g., $root->implicit_tags returns the current +setting for the implicit_tags option, $root->implicit_tags(1) turns that +option on, and $root->implicit_tags(0) turns it off. + +=over 4 + +=item $root = HTML::TreeBuilder->new_from_file(...) + +This "shortcut" constructor merely combines constructing a new object +(with the "new" method, below), and calling $new->parse_file(...) on +it. Returns the new object. Note that this provides no way of +setting any parse options like store_comments (for that, call new, and +then set options, before calling parse_file). See the notes (below) +on parameters to parse_file. + +=item $root = HTML::TreeBuilder->new_from_content(...) + +This "shortcut" constructor merely combines constructing a new object +(with the "new" method, below), and calling for(...){$new->parse($_)} +and $new->eof on it. Returns the new object. Note that this provides +no way of setting any parse options like store_comments (for that, +call new, and then set options, before calling parse_file). Example +usages: HTML::TreeBuilder->new_from_content(@lines), or +HTML::TreeBuilder->new_from_content($content) + +=item $root = HTML::TreeBuilder->new() + +This creates a new HTML::TreeBuilder object. This method takes no +attributes. + +=item $root->parse_file(...) + +[An important method inherited from L, which +see. Current versions of HTML::Parser can take a filespec, or a +filehandle object, like *FOO, or some object from class IO::Handle, +IO::File, IO::Socket) or the like. +I think you should check that a given file exists I calling +$root->parse_file($filespec).] + +=item $root->parse(...) + +[A important method inherited from L, which +see. See the note below for $root->eof().] + +=item $root->eof() + +This signals that you're finished parsing content into this tree; this +runs various kinds of crucial cleanup on the tree. This is called +I when you call $root->parse_file(...), but not when +you call $root->parse(...). So if you call +$root->parse(...), then you I call $root->eof() +once you've finished feeding all the chunks to parse(...), and +before you actually start doing anything else with the tree in C<$root>. + +=item C<< $root->parse_content(...) >> + +Basically a happly alias for C<< $root->parse(...); $root->eof >>. +Takes the exact same arguments as C<< $root->parse() >>. + +=item $root->delete() + +[An important method inherited from L, which +see.] + +=item $root->elementify() + +This changes the class of the object in $root from +HTML::TreeBuilder to the class used for all the rest of the elements +in that tree (generally HTML::Element). Returns $root. + +For most purposes, this is unnecessary, but if you call this after +(after!!) +you've finished building a tree, then it keeps you from accidentally +trying to call anything but HTML::Element methods on it. (I.e., if +you accidentally call C<$root-Eparse_file(...)> on the +already-complete and elementified tree, then instead of charging ahead +and I, it'll throw a fatal error -- since C<$root> is +now an object just of class HTML::Element which has no C +method. + +Note that elementify currently deletes all the private attributes of +$root except for "_tag", "_parent", "_content", "_pos", and +"_implicit". If anyone requests that I change this to leave in yet +more private attributes, I might do so, in future versions. + +=item @nodes = $root->guts() + +=item $parent_for_nodes = $root->guts() + +In list context (as in the first case), this method returns the topmost +non-implicit nodes in a tree. This is useful when you're parsing HTML +code that you know doesn't expect an HTML document, but instead just +a fragment of an HTML document. For example, if you wanted the parse +tree for a file consisting of just this: + +
    • I like pie! + +Then you would get that with C<< @nodes = $root->guts(); >>. +It so happens that in this case, C<@nodes> will contain just one +element object, representing the "li" node (with "I like pie!" being +its text child node). However, consider if you were parsing this: + +
      Hooboy!
      + +In that case, C<< $root->guts() >> would return three items: +an element object for the first "hr", a text string "Hooboy!", and +another "hr" element object. + +For cases where you want definitely one element (so you can treat it as +a "document fragment", roughly speaking), call C in scalar +context, as in C<< $parent_for_nodes = $root->guts() >>. That works like +C in list context; in fact, C in list context would +have returned exactly one value, and if it would have been an object (as +opposed to a text string), then that's what C in scalar context +will return. Otherwise, if C in list context would have returned +no values at all, then C in scalar context returns undef. In +all other cases, C in scalar context returns an implicit 'div' +element node, with children consisting of whatever nodes C +in list context would have returned. Note that that may detach those +nodes from C<$root>'s tree. + +=item @nodes = $root->disembowel() + +=item $parent_for_nodes = $root->disembowel() + +The C method works just like the C method, except +that disembowel definitively destroys the tree above the nodes that +are returned. Usually when you want the guts from a tree, you're just +going to toss out the rest of the tree anyway, so this saves you the +bother. (Remember, "disembowel" means "remove the guts from".) + +=item $root->implicit_tags(value) + +Setting this attribute to true will instruct the parser to try to +deduce implicit elements and implicit end tags. If it is false you +get a parse tree that just reflects the text as it stands, which is +unlikely to be useful for anything but quick and dirty parsing. +(In fact, I'd be curious to hear from anyone who finds it useful to +have implicit_tags set to false.) +Default is true. + +Implicit elements have the implicit() attribute set. + +=item $root->implicit_body_p_tag(value) + +This controls an aspect of implicit element behavior, if implicit_tags +is on: If a text element (PCDATA) or a phrasal element (such as +"EemE") is to be inserted under "EbodyE", two things +can happen: if implicit_body_p_tag is true, it's placed under a new, +implicit "EpE" tag. (Past DTDs suggested this was the only +correct behavior, and this is how past versions of this module +behaved.) But if implicit_body_p_tag is false, nothing is implicated +-- the PCDATA or phrasal element is simply placed under +"EbodyE". Default is false. + +=item $root->ignore_unknown(value) + +This attribute controls whether unknown tags should be represented as +elements in the parse tree, or whether they should be ignored. +Default is true (to ignore unknown tags.) + +=item $root->ignore_text(value) + +Do not represent the text content of elements. This saves space if +all you want is to examine the structure of the document. Default is +false. + +=item $root->ignore_ignorable_whitespace(value) + +If set to true, TreeBuilder will try to avoid +creating ignorable whitespace text nodes in the tree. Default is +true. (In fact, I'd be interested in hearing if there's ever a case +where you need this off, or where leaving it on leads to incorrect +behavior.) + +=item $root->no_space_compacting(value) + +This determines whether TreeBuilder compacts all whitespace strings +in the document (well, outside of PRE or TEXTAREA elements), or +leaves them alone. Normally (default, value of 0), each string of +contiguous whitespace in the document is turned into a single space. +But that's not done if no_space_compacting is set to 1. + +Setting no_space_compacting to 1 might be useful if you want +to read in a tree just to make some minor changes to it before +writing it back out. + +This method is experimental. If you use it, be sure to report +any problems you might have with it. + +=item $root->p_strict(value) + +If set to true (and it defaults to false), TreeBuilder will take a +narrower than normal view of what can be under a "p" element; if it sees +a non-phrasal element about to be inserted under a "p", it will close that +"p". Otherwise it will close p elements only for other "p"'s, headings, +and "form" (altho the latter may be removed in future versions). + +For example, when going thru this snippet of code, + +

      stuff +

        + +TreeBuilder will normally (with C false) put the "ul" element +under the "p" element. However, with C set to true, it will +close the "p" first. + +In theory, there should be strictness options like this for other/all +elements besides just "p"; but I treat this as a specal case simply +because of the fact that "p" occurs so frequently and its end-tag is +omitted so often; and also because application of strictness rules +at parse-time across all elements often makes tiny errors in HTML +coding produce drastically bad parse-trees, in my experience. + +If you find that you wish you had an option like this to enforce +content-models on all elements, then I suggest that what you want is +content-model checking as a stage after TreeBuilder has finished +parsing. + +=item $root->store_comments(value) + +This determines whether TreeBuilder will normally store comments found +while parsing content into C<$root>. Currently, this is off by default. + +=item $root->store_declarations(value) + +This determines whether TreeBuilder will normally store markup +declarations found while parsing content into C<$root>. This is on +by default. + +=item $root->store_pis(value) + +This determines whether TreeBuilder will normally store processing +instructions found while parsing content into C<$root> -- assuming a +recent version of HTML::Parser (old versions won't parse PIs +correctly). Currently, this is off (false) by default. + +It is somewhat of a known bug (to be fixed one of these days, if +anyone needs it?) that PIs in the preamble (before the "html" +start-tag) end up actually I the "html" element. + +=item $root->warn(value) + +This determines whether syntax errors during parsing should generate +warnings, emitted via Perl's C function. + +This is off (false) by default. + +=back + +=head1 HTML AND ITS DISCONTENTS + +HTML is rather harder to parse than people who write it generally +suspect. + +Here's the problem: HTML is a kind of SGML that permits "minimization" +and "implication". In short, this means that you don't have to close +every tag you open (because the opening of a subsequent tag may +implicitly close it), and if you use a tag that can't occur in the +context you seem to using it in, under certain conditions the parser +will be able to realize you mean to leave the current context and +enter the new one, that being the only one that your code could +correctly be interpreted in. + +Now, this would all work flawlessly and unproblematically if: 1) all +the rules that both prescribe and describe HTML were (and had been) +clearly set out, and 2) everyone was aware of these rules and wrote +their code in compliance to them. + +However, it didn't happen that way, and so most HTML pages are +difficult if not impossible to correctly parse with nearly any set of +straightforward SGML rules. That's why the internals of +HTML::TreeBuilder consist of lots and lots of special cases -- instead +of being just a generic SGML parser with HTML DTD rules plugged in. + +=head1 TRANSLATIONS? + +The techniques that HTML::TreeBuilder uses to perform what I consider +very robust parses on everyday code are not things that can work only +in Perl. To date, the algorithms at the center of HTML::TreeBuilder +have been implemented only in Perl, as far as I know; and I don't +foresee getting around to implementing them in any other language any +time soon. + +If, however, anyone is looking for a semester project for an applied +programming class (or if they merely enjoy I +masochism), they might do well to see about choosing as a topic the +implementation/adaptation of these routines to any other interesting +programming language that you feel currently suffers from a lack of +robust HTML-parsing. I welcome correspondence on this subject, and +point out that one can learn a great deal about languages by trying to +translate between them, and then comparing the result. + +The HTML::TreeBuilder source may seem long and complex, but it is +rather well commented, and symbol names are generally +self-explanatory. (You are encouraged to read the Mozilla HTML parser +source for comparison.) Some of the complexity comes from little-used +features, and some of it comes from having the HTML tokenizer +(HTML::Parser) being a separate module, requiring somewhat of a +different interface than you'd find in a combined tokenizer and +tree-builder. But most of the length of the source comes from the fact +that it's essentially a long list of special cases, with lots and lots +of sanity-checking, and sanity-recovery -- because, as Roseanne +Rosannadanna once said, "it's always I". + +Users looking to compare several HTML parsers should look at the +source for Raggett's Tidy +(Chttp://www.w3.org/People/Raggett/tidy/E>), +Mozilla +(Chttp://www.mozilla.org/E>), +and possibly root around the browsers section of Yahoo +to find the various open-source ones +(Chttp://dir.yahoo.com/Computers_and_Internet/Software/Internet/World_Wide_Web/Browsers/E>). + +=head1 BUGS + +* Framesets seem to work correctly now. Email me if you get a strange +parse from a document with framesets. + +* Really bad HTML code will, often as not, make for a somewhat +objectionable parse tree. Regrettable, but unavoidably true. + +* If you're running with implicit_tags off (God help you!), consider +that $tree->content_list probably contains the tree or grove from the +parse, and not $tree itself (which will, oddly enough, be an implicit +'html' element). This seems counter-intuitive and problematic; but +seeing as how almost no HTML ever parses correctly with implicit_tags +off, this interface oddity seems the least of your problems. + +=head1 BUG REPORTS + +When a document parses in a way different from how you think it +should, I ask that you report this to me as a bug. The first thing +you should do is copy the document, trim out as much of it as you can +while still producing the bug in question, and I email me that +mini-document I the code you're using to parse it, to the HTML::Tree +bug queue at C. + +Include a note as to how it +parses (presumably including its $tree->dump output), and then a +I explanation of where you think the parser is +going astray, and how you would prefer that it work instead. + +=head1 SEE ALSO + +L; L, L, L + +L + +=head1 COPYRIGHT + +Copyright 1995-1998 Gisle Aas, 1999-2004 Sean M. Burke, 2005 Andy Lester, +2006 Pete Krawczyk. + +This library is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +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. + +=head1 AUTHOR + +Currently maintained by Pete Krawczyk C<< >> + +Original authors: Gisle Aas, Sean Burke and Andy Lester. + +=cut diff --git a/SuperDateTime/lib/Plugins/SuperDateTime/PlayerSettings.pm b/SuperDateTime/lib/Plugins/SuperDateTime/PlayerSettings.pm new file mode 100644 index 0000000..5a26cb9 --- /dev/null +++ b/SuperDateTime/lib/Plugins/SuperDateTime/PlayerSettings.pm @@ -0,0 +1,123 @@ +package Plugins::SuperDateTime::PlayerSettings; + +# SqueezeCenter Copyright (c) 2001-2007 Logitech. +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License, +# version 2. + +use strict; +use base qw(Slim::Web::Settings); + +use Slim::Utils::Prefs; +use Slim::Utils::DateTime; + +my $prefs = preferences('plugin.superdatetime'); + +sub needsClient { + return 1; +} + +sub name { + return Slim::Web::HTTP::CSRF->protectName('PLUGIN_SUPERDATETIME_PLAYER_SETTINGS'); + +} + +sub page { + return Slim::Web::HTTP::CSRF->protectURI('plugins/SuperDateTime/settings/player.html'); +} + +sub prefs { + my ($class,$client) = @_; + return ($prefs->client($client), qw(scroll fdays)); +} + +sub handler { + my ($class, $client, $params) = @_; + + my @prefs2 = qw( + show1icon + show13line + v3line1t + v3line1m + v3line1b + v1period + weatherformat1t + weatherformat1b + weatherformat2t + weatherformat2b + ); + + for my $pref (@prefs2) { + if ($params->{'saveSettings'}) { + if ($pref eq 'v1period') { + #Remove hidden one that forces array saving- is there a better way to do this? + my @items = grep { $_ ne 'deleteme' } @{$params->{'v1period'}}; + $prefs->client($client)->set('v1period', \@items); + } + elsif ($pref eq 'weatherformat1t') { + #Remove hidden one that forces array saving- is there a better way to do this? + my @items = grep { $_ ne 'deleteme' } @{$params->{'weatherformat1t'}}; + $prefs->client($client)->set('weatherformat1t', \@items); + } + elsif ($pref eq 'weatherformat1b') { + #Remove hidden one that forces array saving- is there a better way to do this? + my @items = grep { $_ ne 'deleteme' } @{$params->{'weatherformat1b'}}; + $prefs->client($client)->set('weatherformat1b', \@items); + } + elsif ($pref eq 'v3line1t') { + #Remove hidden one that forces array saving- is there a better way to do this? + my @items = grep { $_ ne 'deleteme' } @{$params->{'v3line1t'}}; + $prefs->client($client)->set('v3line1t', \@items); + } + elsif ($pref eq 'v3line1m') { + #Remove hidden one that forces array saving- is there a better way to do this? + my @items = grep { $_ ne 'deleteme' } @{$params->{'v3line1m'}}; + $prefs->client($client)->set('v3line1m', \@items); + } + elsif ($pref eq 'v3line1b') { + #Remove hidden one that forces array saving- is there a better way to do this? + my @items = grep { $_ ne 'deleteme' } @{$params->{'v3line1b'}}; + $prefs->client($client)->set('v3line1b', \@items); + } + elsif ($pref eq 'weatherformat2t') { + #Remove hidden one that forces array saving- is there a better way to do this? + my @items = grep { $_ ne 'deleteme' } @{$params->{'weatherformat2t'}}; + $prefs->client($client)->set('weatherformat2t', \@items); + } + elsif ($pref eq 'weatherformat2b') { + #Remove hidden one that forces array saving- is there a better way to do this? + my @items = grep { $_ ne 'deleteme' } @{$params->{'weatherformat2b'}}; + $prefs->client($client)->set('weatherformat2b', \@items); + } + elsif ($pref eq 'show1icon') { + #Remove hidden one that forces array saving- is there a better way to do this? + my @items = grep { $_ ne 'deleteme' } @{$params->{'show1icon'}}; + $prefs->client($client)->set('show1icon', \@items); + } + elsif ($pref eq 'show13line') { + #Remove hidden one that forces array saving- is there a better way to do this? + my @items = grep { $_ ne 'deleteme' } @{$params->{'show13line'}}; + $prefs->client($client)->set('show13line', \@items); + } + else { + $prefs->set($pref, $params->{$pref}); + } + } + + $params->{'prefs'}->{$pref} = $prefs->client($client)->get($pref); + } + + if ($params->{'saveSettings'}) { + Plugins::SuperDateTime::Plugin::refreshSoon($client); + } + + return $class->SUPER::handler($client, $params); +} + +sub getPrefs { + return $prefs; +} + +1; + +__END__ diff --git a/SuperDateTime/lib/Plugins/SuperDateTime/Plugin.pm b/SuperDateTime/lib/Plugins/SuperDateTime/Plugin.pm new file mode 100644 index 0000000..9bc87ee --- /dev/null +++ b/SuperDateTime/lib/Plugins/SuperDateTime/Plugin.pm @@ -0,0 +1,7023 @@ +# SuperDateTime plugin.pm by Greg Brown Feb 2005 www.gregbrown.net/squeeze +# Copyright (c) 2005 +# All rights reserved. +# +# DESCRIPTION +# SlimServer plugin screensaver datetime replacement. Graphically displays current weather conditions and forecasts. +# Will also optionally display stock quotes and upcoming/current game information for MLB, NBA, NHL, NFL, and college +# football and basketball teams at user-configurable intervals. +# +# REMOTE CONTROL +# Pressing up or down cycles the information shown on line one during time display. It will also immediately +# display the time if it is not currently being shown. +# Pressing right or left cycles through the available games and long weather forecasts that normally cycle automatically. +# Pressing FWD or REW cycles through the long weather forecasts. +# Pressing '+' will force an immediate data refresh. +# +# This screen saver is based on the standard SlimServer DateTime screensaver written written by kdf. +# The graphical weather icons and the code to support them are based on the WeatherTime screensaver written by Martin Rehfeld. +# +# VERSION HISTORY +# 5.9.49 02/18/19 Fixed certain NCAA team ICONs that were not displaying correctly. +# Added handling for Postponed College Basketball games. +# Cleaned up "Extras" display on Touch/Radio/Controller. +# +# 5.9.48 11/27/18 NCAA updated url for college football. +# Improved ICON resolution for college basketball +# +# 5.9.47 11/07/18 Improved halftime and overtime detection in +# NCAA Basketball(CBB) games. +# +# 5.9.46 11/04/18 Fixed halftime detection in CFB games. +# Updated for 2018-2019 NCAA Basketball season (CBB). +# +# 5.9.45 10/08/18 Re-established upcoming game times for NFL. +# +# 5.9.44 10/06/18 Interim release to work around change in NFL.com HTML. +# Upcoming NFL game times are not currently available. Displayed as TBD. +# Some upcoming college football games are also shown as TBD. +# +# 5.9.43 07/02/18 Re-established support for quotes of multiple stocks or indices. +# Fix icons for graphical display players (Boom, Transporter, Classic) +# +# 5.9.42 06/26/18 Corrected bug introduced in 5.9.41 for display of celsius temps. +# Added support for $funcptr requested by barberousse(Guillaume) +# +# 5.9.41 06/12/18 Updated to new weather.com URLs and JSON file formats. +# Added language setting for weather.com URLs. Thanks barberousse(Guillaume). +# Added support for multiple OT periods in NBA games. +# Cleanup unused code for weather map support. +# +# 5.9.40 11/11/17 Corrected display of final CFB games that went into overtime. +# Added calculation for start of College Basketball (CBB) season. +# Fixed Stock quotes - Currently limited to one stock or index. +# +# 5.9.39 10/06/17 Updated NBA for change of URL and JSON file format. +# Improved detection of Overtime and Multiple Overtime CFB games. +# +# 5.9.38 09/12/17 No functional changes. To make user installation easier, a repository has been setup for +# the weather.com version of SDT. +# http://sourceforge.net/projects/sdt-weather-com/files/repo.xml +# +# 5.9.37 09/09/17 Fixed detection of College Football game status in gotCFB. +# Update NFL teams for Chargers move to Los Angeles. +# Also changed in Settings.pm +# +# 5.9.36 01/02/17 Improve post season game date matching for College Football. +# Force 2 digit day comparison. +# +# 5.9.35 12/27/16 Improve post season game date matching for College Football. +# +# 5.9.34 10/15/16 Account for NFL Los Angeles Rams move from St Louis. +# Improve game date matching for College Football. +# +# +# 5.9.33 07/28/16 Modified getCFB to automatically calculate season and week of season for use in URL. +# Modified getNBA to automatically calculate season used in the URL. +# Fixed bug where getMLB- would occassionly be displayed instead of the MLB team icon. +# +# 5.9.32 01/27/16 Cleanup of NFL and NBA html. +# Fixed CFB 2015 post season scores in 2016. +# Corrected code in sdtStocks that was using a hash as a reference. +# +# 5.9.31 12/06/15 Improved College Basketball clean-up of malformed JSON. +# Adjusted College Football to handle post season games. +# +# 5.9.30 11/15/15 Fixed College Basketball to better detect active games. +# Updates to correctly clear and not recreate games +# on Touch, Radio, Controller screens when team selections are +# cleared. +# Updated sub sdtCurrent to add 24 Precipitation totals to menus +# for Squeeze Commander, Touch, Controller, etc. +# Added Game ICON for NHL. +# +# 5.9.29 10/15/15 Fixed College Basketball (CBB) parsing. +# Fixed NBA parsing. +# Added upcoming game times to NFL games. +# Added TV Network to NFL games. +# Cleanup unused weather.com modules. +# +# 5.9.28 09/20/15 Fixed College Football (CFB) parsing. +# Improved handling of NFL games that go into Over Time. +# +# 5.9.27 09/13/15 Fixed NFL parsing. Scores are now pulled from NFL.com JSON +# data file. +# +# 5.9.26 08/02/15 Updated MLB parsing to handle All Star break and Post Season. +# i.e. - Days with no games or only a single game. +# Added MLB team logo png graphics for use with Custom Clock. +# Improved detection of Finished games in sub displayLines. +# Fixed bug introduced in 5.9.25 in sub doneDrawing. +# +# 5.9.25 04/25/15 MLB scores roll over to next day at 1AM Pacific instead of +# 12AM Eastern. +# Added checks for MLB games that are Postponed, Delayed, Suspended, +# and Completed Early. +# Updated function calls to decode JSON compatible with newer +# versions of JSON::XS. +# Abbreviated Diamondbacks to match MLB JSON data. +# +# 5.9.24 04/12/15 (Release Candidate 1) +# Fix for MLB scores +# Fixed Low temperature for tonight period during the day. +# Remove current period long weather text for non-US locations. +# +# 5.9.23 01/15/15 Fixed JSON parsing error caused by including an extra character +# at the beginning of the JSON text. +# +# 5.9.22 12/28/14 Fixed NBA parsing. Updated logos to current ESPN png format. +# Added team logos for NFL and NCAA basketball. +# Changed 24 hour snow total element selected +# from JSON data FROM: 'snwTot' TO: 'snwDep' +# +# 5.9.21 12/15/14 Fix for NCAA Basketball scores. +# Added American Conference (AAC) to NCAA +# basketball conference selections. +# +# 5.9.20 12/12/14 Corrected display of long weather text for +# Duet type displays so text is in correct +# forecast period. +# Tweaked forecast display for Duet and Squeeze +# Commander to display all 4 available forecast +# periods during the day. +# +# 5.9.19 12/08/14 Fixed count in sdt10day to 9. +# Fixed missing sunrise/sunset from current/today. +# Adjusted handling of current through tomorrow night intervals. +# Corrected the period that data is collected from for +# tomorrow/tomorrow night. +# Corrected scrolling of sports scores on Boom clients. +# +# 5.9.18 12/05/14 Added routine to check proper weather.com city format. +# Updated strings file to show proper format on settings page. +# Consolidated retrieval of elements from weather.com JSON file +# to gotWeatherToday routine. +# +# 5.9.17E 12/05/14 Added weekday info to 10day routine. Completed long weather text. +# 5.9.17D 12/04/14 Added sunrise & sunset to 10day routine. +# 5.9.17C 12/02/14 Replace JSON library with JSON::XS. Averages and 10day are now working. +# 5.9.17B 12/01/14 Adjusted to retrieve and parse weather.com elements from JSON data. +# NOTE: Zipcode/ city entry in settings requires full weather.com identifier. +# i.e. - Olathe KS = 66062:4:US London UK = UKXX0085:1:UK +# +# Started weather.com JSON rewrite with Greg Brown's 5.9.14 version. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +# 02111-1307 USA +# +# This code is derived from code with the following copyright message: +# +# SliMP3 Server Copyright (C) 2001 Sean Adams, Slim Devices Inc. +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License, +# version 2. + +package Plugins::SuperDateTime::Plugin; + +use strict; + +use base qw(Slim::Plugin::Base); +use Slim::Utils::Misc; +use Slim::Utils::Strings qw (string); +use Slim::Networking::SimpleAsyncHTTP; +use Slim::Utils::Prefs; +use Slim::Utils::Log; +use Plugins::SuperDateTime::Settings; +use Plugins::SuperDateTime::PlayerSettings; +use lib "plugins/SuperDateTime/lib"; +use HTML::TreeBuilder; +use Time::Local; +use HTML::Entities qw(decode_entities); +use JSON::XS::VersionOneAndTwo; + +my $prefs = preferences('plugin.superdatetime'); + +my $log = Slim::Utils::Log->addLogCategory({ + 'category' => 'plugin.superdatetime', + 'defaultLevel' => 'WARN', + 'description' => getDisplayName(), +}); + +use vars qw($VERSION); +$VERSION = substr(q$Revision: 5.9.49 $,10); + +$Plugins::SuperDateTime::Plugin::apiVersion = 2.0; + +sub getDisplayName { + return 'PLUGIN_SCREENSAVER_SUPERDATETIME'; +} + +sub enabled { + return ($::VERSION ge '7.0'); +} + +my %killTicker; #Flag used to exit out of ticker mode +my $status = ''; #Used for the status indicator +my %overlay; #Used to show alarm indicator +my $errorCount = 0; #Used to keep track of network errors +my $activeClients = 0; #Number of players currently displaying SuperDateTime +my $forecastNum; #Used to keep track of if today's forecast includes just today or today and tonight. There's probably a better way to do this but this will suffice for now... + +#These preferences are used often so they're locally cached. Preset to default values. +my $showtime = 7; #How long to show the time when no games are active +my $showgame = 3; #How long to show an upcoming/completed game +my $showactivetime = 5; #How long to show the time when games are active +my $showactivegame = 3; #How long to show an active game +my $activeGames = 0; #Flag set if any games are active +my $newActiveGames; #Flag set during a data refresh if any games are active +my %scrollType = (); #Type of display scrolling between games per player + +my %displayInfo; #Contains all the info shown when hitting up/down +my %displayInfoBuild; #Used while building display info in pieces + +my %nowshowing; #What's now showing, 0 for time, Negative for long forecasts, etc +my %weathershowing; #Used for when the user chooses to just view the long weather forecasts via remote +my %topNowShowing; #Which item is being shown on top line during time display +my %displayLine1; #What is currently being shown on the display line 1 while cycling +my %displayLine2; #What is currently being shown on the display line 2 while cycling +my %tickline1; #Used to store previous value of display line 1 during ticker display + +my %macroHash; #Used for custom macros that interfacing plugins may register + +my $lat = ''; # Used to store latitude of weather.com location +my $long = ''; # Used to store longitude of weather.com location +my $dayCount = ''; # Used to store number of days in the extended forecast +my $units = ''; # Used to store units of measure preference (metric or US) + # based on temperature preference (celsius or fahrenheit) +my $funcptr = undef; # Used for external macros passed in for display +my $stockCount = ''; # Used to store the number of stock tickers in preferences +my $stockCounter = ''; # Used to track the number of passes through getstocks and got stocks + +my %wetData = (); #Stores weather-related data +#my %wetMapURLs = (); #Stores available weather image URLs +my %NFLupTime = (); #Stores upcoming NFL game times + +my %miscData = (); #Stores misc data for use from jive interface (stocks) +my %sportsData = (); #Stores all sport info for use from jive interface + +#Track the average high/low for today/tomorrow +my %averages = ('last' => ''); #Used to store raw averages data and when they were last refreshed + +#Used to store pointers to the data providers +my %providers = ('1' => \&getWeatherToday, + '2' => \&getWunderground, + '3' => \&getMLB, + '4' => \&getNFL, + '5' => \&getNBA, + '6' => \&getNHL, + '7' => \&getCBB, + '8' => \&getCFB, + '9' => \&getStocks, + '10' => \&getLongWeather, + '11' => \&getAverages); + +my @WETdisplayItems1 = (); +my @WETdisplayItems2 = (); + +my @WETdisplayItems1temp = (); +my @WETdisplayItems2temp = (); + +my $drawEachPending = 0; +my $drawEachPendingDelay; + +my @refreshTracker = (); #Used to keep track of which fields to continue to refresh +my $lastRefresh = ''; #Date that pertains to @refreshTracker data + +#Arrays to contain the user selected teams to monitor for each sport and icon mappings +my @MLBteams = (); +my %MLBmap = ('Cubs' => 10, 'White Sox' => 11, 'Braves' => 12, 'Giants' => 13, 'Angels' => 14, 'Tigers' => 15, 'Astros' => 16, 'Reds' => 17, 'D-backs' => 18, 'Twins' => 19, 'Rays' => 20, 'Red Sox' => 21, 'Indians' => 22, 'Rangers' => 24, 'Yankees' => 25, 'Orioles' => 26, 'Blue Jays' => 27, 'Royals' => 28, 'Athletics' => 29, 'Mariners' => 30, 'Pirates' => 31, 'Mets' => 32, 'Phillies' => 33, 'Marlins' => 34, 'Nationals' => 35, 'Brewers' => 36, 'Cardinals' => 37, 'Dodgers' => 38, 'Padres' => 39, 'Rockies' => 40 ); #Graphical icon mapping +my %MLBICONmap = ('Cubs' => 'chc', 'White Sox' => 'chw', 'Braves' => 'atl', 'Giants' => 'sf', 'Angels' => 'laa', 'Tigers' => 'det', 'Astros' => 'hou', 'Reds' => 'cin', 'D-backs' => 'ari', 'Twins' => 'min', 'Rays' => 'tb', 'Red Sox' => 'bos', 'Indians' => 'cle', 'Rangers' => 'tex', 'Yankees' => 'nyy', 'Orioles' => 'bal', 'Blue Jays' => 'tor', 'Royals' => 'kc', 'Athletics' => 'oak', 'Mariners' => 'sea', 'Pirates' => 'pit', 'Mets' => 'nym', 'Phillies' => 'phi', 'Marlins' => 'mia', 'Nationals' => 'wsh', 'Brewers' => 'mil', 'Cardinals' => 'stl', 'Dodgers' => 'lad', 'Padres' => 'sd', 'Rockies' => 'col' ); #icon mapping for Touch, Controller etc. +my @NBAteams = (); +my %NBAteamMap = ( + 'PHI' => '76ers', + 'MIL' => 'Bucks', + 'CHI' => 'Bulls', + 'CLE' => 'Cavaliers', + 'BOS' => 'Celtics', + 'LAC' => 'Clippers', + 'MEM' => 'Grizzlies', + 'ATL' => 'Hawks', + 'MIA' => 'Heat', + 'CHA' => 'Hornets', + 'UTA' => 'Jazz', + 'SAC' => 'Kings', + 'NYK' => 'Knicks', + 'LAL' => 'Lakers', + 'ORL' => 'Magic', + 'DAL' => 'Mavericks', + 'BKN' => 'Nets', + 'DEN' => 'Nuggets', + 'IND' => 'Pacers', + 'NOP' => 'Pelicans', + 'DET' => 'Pistons', + 'TOR' => 'Raptors', + 'HOU' => 'Rockets', + 'SAS' => 'Spurs', + 'PHX' => 'Suns', + 'OKC' => 'Thunder', + 'MIN' => 'Timberwolves', + 'POR' => 'Trail Blazers', + 'GSW' => 'Warriors', + 'WAS' => 'Wizards', +); + +my @NHLteams = (); +my @NFLteams = (); +my %NFLmap = ('Bears' => 10, 'Lions' => 11, 'Packers' => 12); #Graphical icon mapping +my %NFLteamMap = ( + 'DAL' => 'Cowboys', + 'NYG' => 'Giants', + 'NYJ' => 'Jets', + 'PHI' => 'Eagles', + 'WAS' => 'Redskins', + 'CHI' => 'Bears', + 'GB' => 'Packers', + 'MIN' => 'Vikings', + 'DET' => 'Lions', + 'ATL' => 'Falcons', + 'NO' => 'Saints', + 'TB' => 'Buccaneers', + 'CAR' => 'Panthers', + 'LA' => 'Rams', + 'ARI' => 'Cardinals', + 'SF' => '49ers', + 'SEA' => 'Seahawks', + 'DEN' => 'Broncos', + 'BUF' => 'Bills', + 'NE' => 'Patriots', + 'MIA' => 'Dolphins', + 'CIN' => 'Bengals', + 'CLE' => 'Browns', + 'PIT' => 'Steelers', + 'BAL' => 'Ravens', + 'TEN' => 'Titans', + 'JAC' => 'Jaguars', + 'HOU' => 'Texans', + 'IND' => 'Colts', + 'KC' => 'Chiefs', + 'OAK' => 'Raiders', + 'LAC' => 'Chargers', + 'AFC' => 'AFC', + 'NFC' => 'NFC', +); +my $NFL_HTML = ""; # Store NFL HTML file +my @CBBteams = (); +my @CFBteams = (); + +#Graphical display stuff +my %xmax = (); +my %ymax = (); + +my %hashDisp; + +my $Gclient; + +# +# Map ASCII characters to custom @Charset elements +# +my %Codepage = ( ' ' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, + '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9, + '0' => 10, '-' => 11, '°' => 12, '.' => 13, '%' => 14, + 'A' => 15, 'B' => 16, 'C' => 17, 'D' => 18, 'E' => 19, + 'F' => 20, 'G' => 21, 'H' => 22, 'I' => 23, 'J' => 24, + 'K' => 25, 'L' => 26, 'M' => 27, 'N' => 28, 'O' => 29, + 'P' => 30, 'Q' => 31, 'R' => 32, 'S' => 33, 'T' => 34, + 'U' => 35, 'V' => 36, 'W' => 37, 'X' => 38, 'Y' => 39, + 'Z' => 40, '/' => 41, ':' => 42 ); + +# +# Custom 7x5 mono charset for 3-line forecast display on Squeezebox2 +# +my @Charset = (' + + + + + + + +',' + * + ** +* * + * + * + * +***** +',' + *** +* * + * + * + * + * +***** +',' + *** +* * + * + ** + * +* * + *** +',' + * + ** + * * +***** + * + * + * +',' +***** +* +* +**** + * +* * + *** +',' + *** +* +* +**** +* * +* * + *** +',' +***** + * + * + * + * + * +* +',' + *** +* * +* * + *** +* * +* * + *** +',' + *** +* * +* * + **** + * + * + *** +',' + *** +* * +* * +* * +* * +* * + *** +',' + + + +***** + + + +',' + ** +* * +* * + ** + + + +',' + + + + + + ** + ** +',' +** +** * + * + * + * +* ** + ** +',' + *** +* * +* * +***** +* * +* * +* * +',' +**** +* * +* * +**** +* * +* * +**** +',' + *** +* * +* +* +* +* * + *** +',' +**** +* * +* * +* * +* * +* * +**** +',' +***** +* +* +**** +* +* +***** +',' +***** +* +* +**** +* +* +* +',' + *** +* * +* +* *** +* * +* * + *** +',' +* * +* * +* * +***** +* * +* * +* * +',' + *** + * + * + * + * + * + *** +',' + * + * + * + * + * +* * + *** +',' +* * +* * +* * +** +* * +* * +* * +',' +* +* +* +* +* +* +***** +',' +* * +** ** +* * * +* * +* * +* * +* * +',' +* * +* * +** * +* * * +* ** +* * +* * +',' + *** +* * +* * +* * +* * +* * + *** +',' +**** +* * +* * +**** +* +* +* +',' + *** +* * +* * +* * +* * +* * * +* ** + ** * +',' +**** +* * +* * +**** +* * +* * +* * +',' + **** +* +* + *** + * + * +**** +',' +***** + * + * + * + * + * + * +',' +* * +* * +* * +* * +* * +* * + *** +',' +* * +* * +* * +* * +* * + * * + * +',' +* * +* * +* * +* * +* * * +** ** +* * +',' +* * +* * + * * + * + * * +* * +* * +',' +* * +* * + * * + * + * + * + * +',' +***** + * + * + * + * +* +***** +',' + + * + * + * + * +* + +',' + + ** + ** + + ** + ** + +'); + +# +# map standard weather.com icons to custom icons +# +my %Iconmap = ( '1' => 2, '2' => 2, '3' => 2, '4' => 2, '5' => 23, + '6' => 27,'7' => 24,'8' => 3, '9' => 1, '10' => 3, + '11' => 25,'12' => 1, '13' => 18,'14' => 3, '15' => 19, + '16' => 20,'17' => 2, '18' => 26,'19' => 32,'20' => 33, + '21' => 10,'22' => 9, '23' => 11,'24' => 11,'25' => 30, + '26' => 0, '27' => 14,'28' => 6, '29' => 13,'30' => 5, + '31' => 12,'32' => 4, '33' => 13,'34' => 5, '35' => 2, + '36' => 31,'37' => 8, '38' => 8, '39' => 7, '40' => 28, + '41' => 21,'42' => 22,'43' => 22,'44' => 9, '45' => 15, + '46' => 16,'47' => 17,'48' => 29, '0' => 2, 'na' => 9, + 'NA' => 9, 'N/A' => 9 ); + +# +# Custom weather condition icons (40x32 pixel) +# +#234567890123456789012345678901234567890 - icon 0 +my @Icons = (' + + + + + + **** + **** **** + **** ** + ** ** + ** ** + ** ** *** + * *** ** + **** * ** + ** * +** ** +* *** +* ** +* * +** ** + *** ** + ****************************** +', +#234567890123456789012345678901234567890 - icon 1 +' + + + + + + **** + **** **** + **** ** + ** ** + ** ** + ** ** *** + * *** ** + **** * ** + ** * +** ** +* *** +* ** +* * +** ** + *** ** + ****************************** + + * * * + * * * * + * * * * * + * * * * * * + * * * * * * + * * * * + * * * * +', +#234567890123456789012345678901234567890 - icon 2 +' + + + + + + **** + **** **** + **** ** + ** ** + ** ** + ** ** ** *** + * ** *** ** + **** ** * ** + ** ** * +** ** ** +* ** *** +* ** ** ** +* ****** * +** *** ** ** + *** ** ** + ****************************** + ** + ** + * ** * * + * * ** * * * + * **** * * * + * ***** * * * * + * ** * * * * + * * * * * + * * * * +', +#234567890123456789012345678901234567890 - icon 3 +' + + + + + + **** + **** **** + **** ** + ** ** + ** ** + ** ** *** + * *** ** + **** * ** + ** * +** ** +* *** +* ** +* * +** ** + *** ** + ****************************** + + * * + * * * * * + * * * * * * + * * * * * * *** * + * *** * * * * * * * + * * * * * * * * * + * * * * *** * * * + * * * * * + * * * + * * +', +#234567890123456789012345678901234567890 - icon 4 +' + * + * * + * * + * * + * * + * * * + * * * + ** + * + * ***** * + ** ********* + ** *********** + * ************* + ************* + *************** + *************** + *************** ******* + *************** + *************** + *** ************* +**** ************* + *********** + ********* + ***** * + * + * ** + * * * + * * * + * * + * * + * * + * +', +#234567890123456789012345678901234567890 - icon 5 +' + * + * * + * * + * * + * * + * * * + * * * + ** + * + * ***** * + ** ********* + ** *********** **** + * ********** ** * + ********* ** + ********* * ** + ******* * * + ****** ** + ***** ** + ***** * + *** ***** * +**** ************************* + *********** + ********* + ***** * + * + * ** + * * * + * * * + * * + * * + * * + * +', +#234567890123456789012345678901234567890 - icon 6 +' + * * * + * * * + * * * + * * * + * + **** ******* + **** **** ********* + **** ************ ** + ** ************ ** + ** *********** + ** ********** + * *** ***** + **** * **** + ** *** * +** *** ** +* *** ** +* ** +* * +** ** + *** ** + ****************************** +', +#234567890123456789012345678901234567890 - icon 7 +' + * * * + * * * + * * * + * * * + * + **** ******* + **** **** ********* + **** ************ ** + ** ************ ** + ** *********** + ** ********** + * *** ***** + **** * **** + ** *** * +** *** ** +* *** ** +* ** +* * +** ** + *** ** + ****************************** + + * * * + * * * * + * * * * * + * * * * * * + * * * * * * + * * * * + * * * * +', +#234567890123456789012345678901234567890 - icon 8 +' + * * * + * * * + * * * + * * * + * + **** ******* + **** **** ********* + **** ************ ** + ** ************ ** + ** *********** + ** ** ********** + * ** *** ***** + **** ** * **** + ** ** *** * +** ** *** ** +* ** *** ** +* ** ** ** +* ****** * +** *** ** ** + *** ** ** + ****************************** + ** + ** + * ** * * + * * ** * * * + * **** * * * + * ***** * * * * + * ** * * * * + * * * * * + * * * * +', +#234567890123456789012345678901234567890 - icon 9 +' + + + + + + + ***** + ********* + *** *** + * *** + *** + *** + **** + **** + **** + **** + *** + *** + *** + *** + *** + + + *** + *** + *** +', +#234567890123456789012345678901234567890 - icon 10 +' + + + + + + + +** ** * ****** ** ** +** ** *** ** ** ** +** ** * * ** ** ** +******* ** * ** *** +** ** ***** ** * +** ** * * ** * +** ** * * ** * +** ** * * ******** * + + * * * * * + * * * * * + * * * * * + * * * * + * * + * * * + + * * * * + + * * * + + * * +', +#234567890123456789012345678901234567890 - icon 11 - Windy - Thanks Yannzola +' + * + ***** ** + ** ** ** + ** * ****** + * **** ****** + * ** ****** + **** * ****** + ** ******* ********** + ** ********** + * ********** + * ********** ********** + ** ************** + *** ************** + ****************** ************** + ************** + **************** + ******* ***************** + ** ** ** + * ** ** + ** * * ** + * ** ** + * * ** + ***** ** ** + ** ** ** ************ + ** *** + * + * + * ************************ + * + ** + *** + ***************************** +', +#234567890123456789012345678901234567890 - icon 12 +' + + + + + + + + + + ***** + ** ** + * * * + * * ** * + * * + * * * + * * * + * ** * * + ** * *** * + *** * * + ** ** * + ** *** * + **** * * + ** ** ** + ***** + + + + + + + + +', +#234567890123456789012345678901234567890 - icon 13 +' + + + + + + + + + + ***** + ** ** + * ** **** + * * ** * + * * ** + * ** * ** + * * * * + * * ** + * * ** + * * * + * * * + * ********************* + * * + ** ** + ***** + + + + + + + + +', +#234567890123456789012345678901234567890 - icon 14 +' + + + + + ***** + **** ** ** + **** **** * * + **** ** * + ** ** * + ** ** * + ** ** *** * + * *** ** * + **** * * * + ** ** +** ** +* *** +* ** +* * +** ** + *** ** + ****************************** +', +#234567890123456789012345678901234567890 - icon 15 +' + + + + + ***** + **** ** ** + **** **** * * + **** ** * + ** ** * + ** ** * + ** ** *** * + * *** ** * + **** * * * + ** ** +** ** +* *** +* ** +* * +** ** + *** ** + ****************************** + + * * * + * * * * + * * * * * + * * * * * * + * * * * * * + * * * * + * * * * +', +#234567890123456789012345678901234567890 - icon 16 +' + + + + + ***** + **** ** ** + **** **** * * + **** ** * + ** ** * + ** ** * + ** ** *** * + * *** ** * + **** * * * + ** ** +** ** +* *** +* ** +* * +** ** + *** ** + ****************************** + + * * + * * * * * + * * * * * * + * * * * * * *** * + * *** * * * * * * * + * * * * * * * * * + * * * * *** * * * + * * * * * + * * * + * * +', +#234567890123456789012345678901234567890 - icon 17 +' + + + + + ***** + **** ** ** + **** **** * * + **** ** * + ** ** * + ** ** * + ** ** ** *** * + * ** *** ** * + **** ** * * * + ** ** ** +** ** ** +* ** *** +* ** ** ** +* ****** * +** *** ** ** + *** ** ** + ****************************** + ** + ** + * ** * * + * * ** * * * + * **** * * * + * ***** * * * * + * ** * * * * + * * * * * + * * * * +', +#234567890123456789012345678901234567890 - icon 18 +' + + + + + + **** + **** **** + **** ** + ** ** + ** ** + ** ** *** + * *** ** + **** * ** + ** * +** ** +* *** +* ** +* * +** ** + *** ** + ****************************** + + * * + * * * + * * * + * *** * + * * * + * * * + * * + + + +', +#234567890123456789012345678901234567890 - icon 19 +' + + + + + + + + + + + + + * * + * * * + * * * + * *** * + * * * + * * * + * * * * + * * * * * + * * * * * * + * * * * * * *** * + * *** * * * * * * * + * * * * * * * * * + * * * * *** * * * + * * * * * + * * * + * * + + + + +', +#234567890123456789012345678901234567890 - icon 20 +' + + + + + **** + **** **** + **** ** + ** ** + ** ** + ** ** *** + * *** ** + **** * ** + ** * +** ** +* *** +* ** +* * +** ** + *** ** + ****************************** + * * * * * * + * * * * * * + * *** * * * * * + * * * * * * * * + * * ** * * * * * + * * * * * * * * *** * + * *** * * * * * * * + * * * * * * * * * + * * * * *** * * * + * * * * * + * * * + * * +', +#234567890123456789012345678901234567890 - icon 21 +' + * * * + * * * + * * * + * * * + * + **** ******* + **** **** ********* + **** ************ ** + ** ************ ** + ** *********** + ** ********** + * *** ***** + **** * **** + ** *** * +** *** ** +* *** ** +* ** +* * +** ** + *** ** + ****************************** + + * * + * * * * * + * * * * * * + * * * * * * *** * + * *** * * * * * * * + * * * * * * * * * + * * * * *** * * * + * * * * * + * * * + * * +', +#234567890123456789012345678901234567890 - icon 22 +' + + **** + **** **** + **** ** + ** ** + ** ** + ** ** *** + * *** ** + **** * ** + ** * +** ** +* *** +* ** +* * +** ** + *** ** + ****************************** + * *** * * * * * * * + * * * * * * * * * + * * * * *** * * * + * * * * * * * * + * * * * * * + * *** * * * * * + * * * * * * * * + * * * * * * * * * + * * * * * * * * *** * + * *** * * * * * * * + * * * * * * * * * + * * * * *** * * * + * * * * * + * * * + * * +', +#234567890123456789012345678901234567890 - icon 23 +' + + **** + **** **** + **** ** + ** ** + ** ** + ** ** *** + * *** ** + **** * ** + ** * +** ** +* *** +* ** +* * +** ** + *** ** + ****************************** + * *** * * * * * + * * * * * * * * + * * * * * *** * * + * * * * * * * + * * * * * * + * * * * * + * * + * * * * + * * * * * * + * *** * * * * * * + * * * * * * * * + * * * * * *** * * + * * * * * * * * +* * * * * * +* * * * +', +#234567890123456789012345678901234567890 - icon 24 +' + + **** + **** **** + **** ** + ** ** + ** ** + ** ** *** + * *** ** + **** * ** + ** * +** ** +* *** +* ** +* * +** ** + *** ** + ****************************** + * * * + * * * * * * + * * * * * * * * * * + * * * * *** * * * + * * * * * * * * * +* * * * * * +* * * * * * * * + * * * + * * * * * * + * * * * * * * + * * * * * * * * * + * * * *** * * * +* * * * * * * * * + * * * * * + * * * * * * +', +#234567890123456789012345678901234567890 - icon 25 +' + + + + + + **** + **** **** + **** ** + ** ** + ** ** + ** ** *** + * *** ** + **** * ** + ** * +** ** +* *** +* ** +* * +** ** + *** ** + ****************************** + * * * * * + + * * * * * + + * * * * * + + * * * * * + + * * * + + +', +#234567890123456789012345678901234567890 - icon 26 +' + + + + + **** + **** **** + **** ** + ** ** + ** ** + ** ** *** + * *** ** + **** * ** + ** * +** ** +* *** +* ** +* * +** ** + *** ** + ****************************** + * * * * * + * * * * + * * * * * + * * * * + * * * * * + * * * * + * * * * * + * * * * + * * * * * + * * * * + + +', +#234567890123456789012345678901234567890 - icon 27 +' + + + + + + **** + **** **** + **** ** + ** ** + ** ** + ** ** *** + * *** ** + **** * ** + ** * +** ** +* *** +* ** +* * +** ** + *** ** + ****************************** + * * * * * * + * * * * * * + * * * * * * * * + * * * * * * * + * * * * * * * * * + * * * * * * * * + * * * * + * * * * * * * * * +', +#234567890123456789012345678901234567890 - icon 28 +' + + + + + + **** + **** **** + **** ** + ** ** + ** ** + ** ** *** + * *** ** + **** * ** + ** * +** ** +* *** +* ** +* * +** ** + *** ** + ****************************** + * * * * * + * * * * * * * + * * * * * * * * * + * * * * * * * * * * + * * * * * * * * * * * + * * * * * * * * * * * + * * * * * * * * * + * * * * * * +', +#234567890123456789012345678901234567890 - icon 29 +' + * * * + * * * + * * * + * * * + * + **** ******* + **** **** ********* + **** ************ ** + ** ************ ** + ** *********** + ** ********** + * *** ***** + **** * **** + ** *** * +** *** ** +* *** ** +* ** +* * +** ** + *** ** + ****************************** + * * * * * + * * * * * * * + * * * * * * * * * + * * * * * * * * * * + * * * * * * * * * * * + * * * * * * * * * * * + * * * * * * * * * + * * * * * * +', +#234567890123456789012345678901234567890 - icon 30 Frigid - Thanks Yannzola +' + + + ***** * + ** ** * + * * * * * + * *** * *** * *** + * * * * ***** * + * ** * * *** * + * * * * * * + * *** * *** * * * *** + * * * **** * **** + * ** * *** * ** + * * * *** *** * *** *** + * *** * *** *** * *** *** + * * * ***** + * ** * *** + * * * ***** + * *** * *** *** * *** *** + * * * *** *** * *** *** + * ** * *** * *** + * * * **** * **** + * *** * *** * * * *** + ** *** ** * * * + * ***** * * *** * + * ***** * * ***** * + * ***** * *** * *** + ** *** ** * * * + ** ** * + ***** * +', +#234567890123456789012345678901234567890 - icon 31 HOT - Thanks Yannzola +' + + * + ***** * + ** ** * + * * * * * + * *** * * * * + * * * * * * + * *** * * * + * *** * * ***** * + * *** * ********* + * *** * *********** + * *** * ************* + * *** * ************* + * *** * *************** + * *** * *************** + * *** * ****** *************** ****** + * *** * *************** + * *** * *************** + * *** * ************* + * *** * ************* + * *** * *********** + * *** * ********* + ** *** ** * ***** * + * ***** * * * + * ***** * * * * + * ***** * * * * + ** *** ** * * * + ** ** * + ***** * + * +', +#234567890123456789012345678901234567890 - icon 32 Dust - Thanks Yannzola +' + + ******* + ** ** + ** * * + * ** + ****** * * * + ** * * + ** * ***** + * * * * ** + * * * ** + ***** * * + ** * ****** * * + ** * * ** ** * + * ** ** * + * * * * * * ***** + * * * * **** ** + * **** * ** + ** * ** * * * * * + *** ** * * * + ****** * * **** + * * * * ** + ** * ** + *** * * * * + ****** * * + * * * ** + * * **** *** + ** * ** ****** + ** ** + ****** +', +#234567890123456789012345678901234567890 - icon 33 Fog - Thanks Yannzola +' + *********************************** + + + + *********************************** + + + + *********************************** + ********* + *********** + + *********************************** + *************** + *************** + + *********************************** + *************** + *********************************** + + *********************************** + ********* + *********************************** + + *********************************** + + *********************************** + + *********************************** + + *********************************** +'); + +my $TWClogo = ' + ************************ + ************************ + ************************ + ************************ + ************************ + ************************ + * ******************* + ** * *** ************** + ** * * * ************* + ** * * * *************** + ** * * ** ************* + ************************ + * * * ****** ** ******** + * * * * * * * ** * * + * * * ** ** * ** + ** * * ** ** * ** ** + ** * ** * * * ** + ************************ + ** **************** ** + * ** * * * * ** ** + * ** * ** * * * * ** + * ** * * * * *** ** + ** * * * * * ** * + ************************ + + + + * * +* * * * ** ***** * ** ** * ** * +* * **** * * * * *** * * * ** * * +** *** *** * * * * * * * ** * * + * * ***** *** * ** * ** ** * * * * +'; + +our %mapping = ('arrow_up' => 'up', + 'arrow_right' => 'right', + 'arrow_left' => 'left', + 'knob_right' => 'up', + 'knob_left' => 'down', + 'knob_right.repeat' => 'up', + 'knob_left.repeat' => 'down', + 'add.single' => 'refresh', + 'arrow_down' => 'down', + 'arrow_down.hold' => 'down.hold', + 'fwd' => 'wnext', + 'rew' => 'wprev', + 'knob' => 'done', + 'size.hold' => 'size.hold'); + +################################################## +### Super Functions ### +################################################## +sub initPlugin { + my $class = shift; + $class->SUPER::initPlugin(); + + $log->info("Initializing $VERSION."); + + Plugins::SuperDateTime::Settings->new; + Plugins::SuperDateTime::PlayerSettings->new; + + Slim::Buttons::Common::addSaver('SCREENSAVER.superdatetime', + getScreensaverSuperDatetime(), + \&setScreensaverSuperDateTimeMode, + \&leaveScreensaverSuperDateTimeMode, + getDisplayName() + ); + + Slim::Hardware::IR::addModeDefaultMapping('SCREENSAVER.superdatetime',\%mapping); + Slim::Hardware::IR::addModeDefaultMapping('OFF.superdatetime',\%mapping); + +# Get previous settings or set default + if ($prefs->get('city') !~ /.+\:\d\:\D\D/) { # Check for proper weather.com citycode format + $log->error("Check your Weather.com Identifier. Your entry = " . $prefs->get('city')); + $prefs->set('city','60614:4:US'); #Default to Chicago... cuz Chicago is where it's at! + $log->error("Defaulting identifier to Chicago: " . $prefs->get('city')); + } + &getLatLong; # Retrieve Latitude and Longitude for weather.com location + + if ($prefs->get('stock1format') eq '') { + $prefs->set('stock1format','%n'); + } + + if ($prefs->get('stock2format') eq '') { + $prefs->set('stock2format','%l %c %z %v'); + } + + if ($prefs->get('lang') eq '') { + $prefs->set('lang', 'en-US'); + } + + if ($prefs->get('refresh') eq '') { + $prefs->set('refresh','5'); + } + + if ($prefs->get('time') eq '') { + $prefs->set('time', $showtime); + } + + if ($prefs->get('score') eq '') { + $prefs->set('score', $showgame); + } + + if ($prefs->get('atime') eq '') { + $prefs->set('atime', $showactivetime); + } + + if ($prefs->get('ascore') eq '') { + $prefs->set('ascore', $showactivegame); + } + + if ($prefs->get('offset') eq '') { + $prefs->set('offset', '00'); + } + + if ($prefs->get('temperature') eq '') { + $prefs->set('temperature', 0); + } + + if ($prefs->get('windunit') eq '') { + $prefs->set('windunit', 0); + } + + if ($prefs->get('teamlogos') eq '') { + $prefs->set('teamlogos', 2); + } + + if ($prefs->get('lweather') eq '') { + $prefs->set('lweather', 1); + } + + if ($prefs->get('drawEachDelay') eq '') { + $prefs->set('drawEachDelay', .5); + } + + if ($prefs->get('cbballconf') eq '') { + $prefs->set('cbballconf', 0); + } + + if ($prefs->get('cfballconf') eq '') { + $prefs->set('cfballconf', 0); + } + + if ($prefs->get('errorCountMax') eq '') { + $prefs->set('errorCountMax', 10); + } + + $showtime = $prefs->get('time'); + $showactivetime = $prefs->get('atime'); + + $showgame = $prefs->get('score'); + $showactivegame = $prefs->get('ascore'); + + @MLBteams = @{ $prefs->get('mlb') || [] }; + if (scalar(@MLBteams) == 0) { + $prefs->set('mlb', \@MLBteams); + } + + @NBAteams = @{ $prefs->get('nba') || [] }; + if (scalar(@NBAteams) == 0) { + $prefs->set('nba', \@NBAteams); + } + + @NHLteams = @{ $prefs->get('nhl') || [] }; + if (scalar(@NHLteams) == 0) { + $prefs->set('nhl', \@NHLteams); + } + + @NFLteams = @{ $prefs->get('nfl') || [] }; + if (scalar(@NFLteams) == 0) { + $prefs->set('nfl', \@NFLteams); + } + + @CBBteams = @{ $prefs->get('cbb') || [] }; + if (scalar(@CBBteams) == 0) { + $prefs->set('cbb', \@CBBteams); + } + + @CFBteams = @{ $prefs->get('cfb') || []}; + if (scalar(@CFBteams) == 0) { + $prefs->set('cfb', \@CFBteams); + } + + # |requires Client + # | |is a Query + # | | |has Tags + # | | | |Function to call + # C Q T F + Slim::Control::Request::addDispatch(['SuperDateTime', '_mode'], + [1, 1, 1, \&cliQuery]); + + $funcptr = Slim::Control::Request::addDispatch(['sdtMacroString'], + [1, 1, 1, \¯oString]); + + Slim::Control::Request::addDispatch(['sdtVersion'], + [1, 1, 1, \&sdtVersion]); + + #Experimental + Slim::Control::Request::addDispatch(['SuperDateTimeState', 'dataRefreshState'],[0, 1, 0, undef]); + + Slim::Control::Request::addDispatch(['sdtTop'],[1, 1, 0, \&sdtTop]); + Slim::Control::Request::addDispatch(['sdtCurrent'],[1, 1, 0, \&sdtCurrent]); + Slim::Control::Request::addDispatch(['sdtForecast'],[1, 1, 0, \&sdtForecast]); + Slim::Control::Request::addDispatch(['sdtForecastDetail','_forecastNum'],[1, 1, 0, \&sdtForecastDetail]); + Slim::Control::Request::addDispatch(['sdt10day'],[1, 1, 0, \&sdt10day]); + Slim::Control::Request::addDispatch(['sdtScores'],[1, 1, 0, \&sdtScores]); + Slim::Control::Request::addDispatch(['sdtStocks'],[1, 1, 0, \&sdtStocks]); + Slim::Control::Request::addDispatch(['sdtStockDetail','_ticker'],[1, 1, 0, \&sdtStockDetail]); + Slim::Control::Request::addDispatch(['sdtGameList','_sport'],[1, 1, 0, \&sdtGameList]); + + my @menu = ({ + text => 'SuperDateTime', + 'icon-id' => 'plugins/SuperDateTime/html/images/32.png', + id => 'pluginSuperDateTime', + weight => 15, + actions => { + go => { + player => 0, + cmd => [ 'sdtTop' ], + } + }, + }); + + Slim::Utils::Timers::setTimer(undef, Time::HiRes::time() + 75, \&duetCheck); + + Slim::Control::Jive::registerPluginMenu(\@menu, 'extras'); + +} + +sub sdtTop { + my $request = shift; + my $client = $request->client(); + my @menu = (); + + duetCheck(); #If we're in here there must be a duet-like device connected... + + push @menu, { + text => 'Current Conditions', + window => { menuStyle => 'album' }, + actions => { + go => { + player => 0, + cmd => [ 'sdtCurrent' ], + params => { + menu => 'sdtCurrent', + }, + }, + }, + }; + + push @menu, { + text => 'Forecast', + window => { menuStyle => 'album' }, + actions => { + go => { + player => 0, + cmd => [ 'sdtForecast' ], + params => { + menu => 'stdForecast', + }, + }, + }, + }; + + push @menu, { + text => '15-Day Forecast', + window => { menuStyle => 'album' }, + actions => { + go => { + player => 0, + cmd => [ 'sdt10day' ], + params => { + menu => 'sdt10day', + }, + }, + }, + }; + + push @menu, { + text => 'Scores', + window => { menuStyle => 'album' }, + actions => { + go => { + player => 0, + cmd => [ 'sdtScores' ], + params => { + menu => 'sdtScores', + }, + }, + }, + }; + + push @menu, { + text => 'Stocks', + #window => { menuStyle => 'album' }, + actions => { + go => { + player => 0, + cmd => [ 'sdtStocks' ], + params => { + menu => 'sdtStocks', + }, + }, + }, + }; + + my $numitems = scalar(@menu); + + $request->addResult("count", $numitems); + $request->addResult("offset", 0); + my $cnt = 0; + for my $eachPreset (@menu[0..$#menu]) { + $request->setResultLoopHash('item_loop', $cnt, $eachPreset); + $cnt++; + } + + $request->setStatusDone(); +} + +sub duetCheck { + #Look for any players that don't have a screen. This implies they probably have a Duet that they want to utilize the plugin with + #Duets are always active, so update plugin accordingly + my @players = Slim::Player::Client::clients(); + if ($activeClients == 0) { + $log->info("No active SDT clients so checking for duet only configuration."); + for my $player (@players) { + if ($player->display->isa('Slim::Display::NoDisplay')) { + $activeClients++; + Slim::Utils::Timers::killTimers(undef, \&refreshData); #Paranoia check + Slim::Utils::Timers::setTimer(undef, Time::HiRes::time() + 5, \&refreshData, $player, -1); + $log->info("Non-display player found, configuring SDT to always refresh data."); + } + } + } +} + +sub sdt10day { + my $request = shift; + my $client = $request->client(); + + my @menu = (); + my $i=1; + $log->debug('sdt10day Count: ' . $dayCount); + my $ForC; + if ($prefs->get('temperature') == 1) { #Cel + $ForC = 'C'; + } + else { + $ForC = 'F'; + } + + while ($i < $dayCount) { + push @menu, { + 'icon-id' => 'plugins/SuperDateTime/html/images/'.$wetData{'d'.$i}{'forecastIcon'}.'.png', + text => $wetData{'d'.$i}{'day'}.' '.$wetData{'d'.$i}{'date'}. + $wetData{'d'.$i}{'condition'}.' '.$wetData{'d'.$i}{'high'.$ForC} . '°/' .$wetData{'d'.$i}{'low'.$ForC} . '° Precip. ' . $wetData{'d'.$i}{'precip'}.'%', + }; + + $i++; + } + + my $numitems = scalar(@menu); + + $request->addResult("base", {window => { titleStyle => 'album' }}); + $request->addResult("count", $numitems); + $request->addResult("offset", 0); + my $cnt = 0; + for my $eachPreset (@menu[0..$#menu]) { + $request->setResultLoopHash('item_loop', $cnt, $eachPreset); + $cnt++; + } + + $request->setStatusDone(); +} + +sub sdtStocks { + my $request = shift; + my $client = $request->client(); + + my @stocks = split (' ',$prefs->get('stocks')); + my $loopctr = 0; + + my @menu = (); + + while ($loopctr < $stockCount) { + push @menu, { + text => $miscData{'stocks'}{$stocks[$loopctr]}{'ticker'}. ' - '. + $miscData{'stocks'}{$stocks[$loopctr]}{'lasttrade'}. ' ('.$miscData{'stocks'}{$stocks[$loopctr]}{'change'}. ')', + actions => { + go => { + player => 0, + cmd => [ 'sdtStockDetail', $stocks[$loopctr] ], + params => { + menu => 'nowhere', + }, + }, + }, + }; + $loopctr ++; + } + + my $numitems = scalar(@menu); + + $request->addResult("count", $numitems); + $request->addResult("offset", 0); + my $cnt = 0; + for my $eachPreset (@menu[0..$#menu]) { + $request->setResultLoopHash('item_loop', $cnt, $eachPreset); + $cnt++; + } + + $request->setStatusDone(); +} + +sub sdtStockDetail { + my $request = shift; + my $client = $request->client(); + my $ticker = $request->getParam('_ticker'); + + my @menu = (); + + push @menu, { + text => $miscData{'stocks'}{$ticker}{'name'} + , + }; + + push @menu, { + text => 'Prev Close: '.$miscData{'stocks'}{$ticker}{'prevclose'} + , + }; + + push @menu, { + text => 'Open: '.$miscData{'stocks'}{$ticker}{'open'} + , + }; + + push @menu, { + text => 'Last: '.$miscData{'stocks'}{$ticker}{'lasttrade'} . ' ('.$miscData{'stocks'}{$ticker}{'change'}.')' + , + }; + + push @menu, { + text => 'Range: '.$miscData{'stocks'}{$ticker}{'low'}. ' - '.$miscData{'stocks'}{$ticker}{'high'} + , + }; + + push @menu, { + text => 'Volume: '.$miscData{'stocks'}{$ticker}{'volume'} + , + }; + + push @menu, { + text => $miscData{'stocks'}{$ticker}{'lasttime'}.' '.$miscData{'stocks'}{$ticker}{'lastdate'} + , + }; + + my $numitems = scalar(@menu); + + $request->addResult("count", $numitems); + $request->addResult("offset", 0); + my $cnt = 0; + for my $eachItem (@menu[0..$#menu]) { + $request->setResultLoopHash('item_loop', $cnt, $eachItem); + $cnt++; + } + $request->setStatusDone(); +} + +sub sdtForecast { + my $request = shift; + my $client = $request->client(); + + my @menu = (); + my $i = 0; + my $mxPer = 0; + + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); + + $mxPer = 4; + + $log->debug("Max periods = " . $mxPer . " at hour # " . $hour); + + my $ForC; + if ($prefs->get('temperature') == 1) { #Cel + $ForC = 'C'; + } + else { + $ForC = 'F'; + } + + while ($i < $mxPer) { + push @menu, { + 'icon-id' => 'plugins/SuperDateTime/html/images/'.$wetData{$i}{'forecastIcon'}.'.png', + text => $wetData{$i}{'forecastTOD'}.": ".$wetData{$i}{'skyCondition'}."\n". + $wetData{$i}{'forecastType'} .' '. $wetData{$i}{'forecastTemp'.$ForC} . '° Precip. '. $wetData{$i}{'forecastPrec'}.'%', + actions => { + go => { + player => 0, + cmd => [ 'sdtForecastDetail', $i ], + params => { + menu => 'nowhere', + }, + }, + }, + }; + + $i++; + } + + my $numitems = scalar(@menu); + + $request->addResult("base", {window => { titleStyle => 'album' }}); + $request->addResult("count", $numitems); + $request->addResult("offset", 0); + my $cnt = 0; + for my $eachPreset (@menu[0..$#menu]) { + $request->setResultLoopHash('item_loop', $cnt, $eachPreset); + $cnt++; + } + + $request->setStatusDone(); +} + +sub sdtForecastDetail { + my $request = shift; + my $client = $request->client(); + my $forecastNum = $request->getParam('_forecastNum'); + my @menu = (); + + push @menu, { + text => $WETdisplayItems2[$forecastNum], + }; + + my $numitems = scalar(@menu); + + $request->addResult("count", $numitems); + $request->addResult("offset", 0); + my $cnt = 0; + for my $eachItem (@menu[0..$#menu]) { + $request->setResultLoopHash('item_loop', $cnt, $eachItem); + $cnt++; + } + $request->setStatusDone(); +} + +sub sdtCurrent { + my $request = shift; + my $client = $request->client(); + + my @menu = (); + + my $ForC = ''; + if ($prefs->get('temperature') == 1) { #Cel + $ForC = 'C'; + } + else { + $ForC = 'F'; + } + + my $WindUnit = ''; + if ($prefs->get('windunit') == 0) { #mi/hr + $WindUnit = 'mh'; + } + elsif ($prefs->get('windunit') == 1) { #km/hr + $WindUnit = 'kh'; + } + elsif ($prefs->get('windunit') == 2) { #kt/hr + $WindUnit = 'kth'; + } + else { #m/s + $WindUnit = 'ms'; + } + + push @menu, { + 'icon-id' => 'plugins/SuperDateTime/html/images/'.$wetData{-1}{'forecastIcon'}.'.png', + text => $wetData{-1}{'skyCondition'}.' '.$wetData{'temperature'.$ForC}.'° ('.$wetData{'feelslike'.$ForC}.'°) '. $wetData{'windspeed_'.$WindUnit}."\n". + $wetData{-1}{'forecastType'}.' '. $wetData{-1}{'forecastTemp'.$ForC}.'° Precip. '.$wetData{-1}{'forecastPrec'}.'%', + actions => { + go => { + player => 0, + cmd => [ 'sdtForecastDetail', 0 ], + params => { + menu => 'nowhere', + }, + }, + }, + }; + push @menu, { + 'icon-id' => 'plugins/SuperDateTime/html/images/blank.png', + text => 'Pressure: '.$wetData{'pressureIN'}.' '.$wetData{'pressureT'}."\n". + 'Humidity: '.$wetData{'humidity'}.'° Dewpoint: '.$wetData{'dewpointF'}.'°', + }; + push @menu, { + 'icon-id' => 'plugins/SuperDateTime/html/images/blank.png', + text => "24 Hour Precipitation"."\n". + "Rain: ".$wetData{'rain'}."\" ". + "Snow: ".$wetData{'snow'}."\""."\n", + }; + + my $numitems = scalar(@menu); + + $request->addResult("base", {window => { titleStyle => 'album' }}); + $request->addResult("count", $numitems); + $request->addResult("offset", 0); + my $cnt = 0; + for my $eachItem (@menu[0..$#menu]) { + $request->setResultLoopHash('item_loop', $cnt, $eachItem); + $cnt++; + } + + $request->setStatusDone(); +} + +sub sdtScores { + my $request = shift; + my $client = $request->client(); + + my @menu = (); + for my $key ( sort keys %sportsData ) { + my $icon; + + $icon = $sportsData{$key}{'logoURL'}; + if (not defined $icon) { + $icon = 'plugins/SuperDateTime/html/images/blank.png'; + } + + push @menu, { + 'icon-id' => $icon, + text => $key, + window => { menuStyle => 'album' }, + actions => { + go => { + #7.3 menustyle=multiline to remove icons entirely + player => 0, + cmd => [ 'sdtGameList', $key ], + params => { + menu => 'nowhere', + }, + }, + }, + } + + } + + my $numitems = scalar(@menu); + + $request->addResult("base", {window => { titleStyle => 'album' }}); + $request->addResult("count", $numitems); + $request->addResult("offset", 0); + + my $cnt = 0; + for my $eachItem (@menu[0..$#menu]) { + $request->setResultLoopHash('item_loop', $cnt, $eachItem); + $cnt++; + } + + $request->setStatusDone(); +} + +sub sdtGameList { + my $request = shift; + my $client = $request->client(); + my $sport = $request->getParam('_sport'); + + my @menu = (); + my $hashRef = \%sportsData; + + for my $key (sort keys %{$hashRef->{$sport}} ) { + if ($key ne 'logoURL') { + my $logo = 'plugins/SuperDateTime/html/images/blank.png'; + if (defined $sportsData{$sport}{$key}{'gameLogoURL'}) { + $logo = $sportsData{$sport}{$key}{'gameLogoURL'}; + } + + push @menu, { + 'icon-id' => $logo, +# text => "$sportsData{$sport}{$key}{'awayTeam'} $sportsData{$sport}{$key}{'awayScore'} \n $sportsData{$sport}{$key}{'homeTeam'} $sportsData{$sport}{$key}{'homeScore'} \n $sportsData{$sport}{$key}{'gameTime'}", + text => $sportsData{$sport}{$key}{'awayTeam'}.' '.$sportsData{$sport}{$key}{'awayScore'}."\n".$sportsData{$sport}{$key}{'homeTeam'}.' '.$sportsData{$sport}{$key}{'homeScore'}.' ('.$sportsData{$sport}{$key}{'gameTime'}.')', + }; + } + } + + my $numitems = scalar(@menu); + + $request->addResult("count", $numitems); + $request->addResult("offset", 0); + my $cnt = 0; + for my $eachItem (@menu[0..$#menu]) { + $request->setResultLoopHash('item_loop', $cnt, $eachItem); + $cnt++; + } + $request->setStatusDone(); +} + +sub FtoC { + my $temp = shift; + + $temp = ($temp-32)*5/9; + $temp = int($temp + .5 * ($temp <=> 0)); #Funky round + + return $temp; +} + +sub CtoF { + my $temp = shift; + + $temp = ($temp*9/5)+32; + $temp = int($temp + .5 * ($temp <=> 0)); #Funky round + + return $temp; +} + +sub getLatLong { #Set up Async HTTP request to retrieve Latitude and Longitude + my $timerObj = shift; #Should be undef + my $client = shift; + my $refreshItem = shift; + + my $url = 'https://dsx.weather.com/wxd/v2/loc/en_US/' . $prefs->get('city') . '?apiKey=7bb1c920-7027-4289-9c96-ae5e263980bc&format=json'; + my $http = Slim::Networking::SimpleAsyncHTTP->new(\&gotLatLong, + \&gotErrorViaHTTP, + {caller => 'getLatLong', callerProc => \&getLatLong,}); + + $log->info("async request: $url"); + + $http->get($url, 'User-Agent' => 'Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0', + 'Accept-Language' => 'en-us,en;q=0.5', + 'Accept' => 'text/html', + 'Accept-Charset' => 'UTF-8'); +} + +sub gotLatLong { + my $http = shift; + + $log->info("got " . $http->url()); + + my $LatLong_json = $http->content(); + my $perldata = decode_json($LatLong_json); + + $lat = $perldata->{'lat'}; + $long = $perldata->{'long'}; + $log->debug("New Latitude: " . $lat); + $log->debug("New Longitude: " . $long); +} + + +sub getAverages { #Set up Async HTTP request for averages + my ($days_advance, $client, $refreshItem) = @_; + + if ($wetData{0}{'forecastTOD'} ne $averages{'last'}) { #See if the averages need to be refreshed due to a period change + my $url = 'http://dsx.weather.com/wxd/v2/FarmingAlmanac/0/(' . $prefs->get('city') . ')?api=7bb1c920-7027-4289-9c96-ae5e263980bc&format=json'; + + my $http = Slim::Networking::SimpleAsyncHTTP->new(\&gotAverages, + \&gotErrorViaHTTP, + {caller => 'getAverages', + dayNum => $days_advance, + client => $client, + refreshItem => $refreshItem}); + + $log->info("async request: $url"); + $http->get($url, 'User-Agent' => 'Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0', + 'Accept-Language' => 'en-us,en;q=0.5', + 'Accept' => 'text/html', + 'Accept-Charset' => 'UTF-8'); + } + else { + $log->info("Skipping averages..."); + refreshData(undef, $client, $refreshItem); + } +} + +sub gotAverages { #Average data was received + my $http = shift; + + my $params = $http->params(); + my $client = $params->{'client'}; + my $refreshItem = $params->{'refreshItem'}; + + $log->info("got " . $http->url()); + + my $json = $http->content(); + + # Convert JSON into a Perl data array + my $perldata = decode_json($json); + + # Dereference array and store historical elements - ie. Record Hi/Lo, Avg Hi/Lo Temperature + my $history = @$perldata[0]->{'doc'}->{'FarmingAlmanacRecordData'}->{'OneDayHistorical'} ; + + $averages{0}{'average_high_F'} = $history->{'avgHighF'}; + $averages{0}{'record_high_F'} = $history->{'recordHighF'}; + $averages{0}{'record_high_year'} = $history->{'yearOfRecordHighTemp'}; + + $averages{0}{'average_low_F'} = $history->{'avgLowF'}; + $averages{0}{'record_low_F'} = $history->{'recordLowF'}; + $averages{0}{'record_low_year'} = $history->{'yearOfRecordLowTemp'}; + + #Set CURRENTLY as high values + $wetData{-1}{'average_F'} = $averages{0}{'average_high_F'}; + $wetData{-1}{'average_C'} = FtoC($averages{0}{'average_high_F'}); + + $wetData{-1}{'record_F'} = $averages{0}{'record_high_F'}; + $wetData{-1}{'record_C'} = FtoC($averages{0}{'record_high_F'}); + + $wetData{-1}{'record_year'} = $averages{0}{'record_high_year'}; + + $averages{'last'} = $wetData{0}{'forecastTOD'}; #update last average update indicator + refreshData(undef, $client, $refreshItem); +} + + +sub drawEach { + $log->debug("Start"); + my ($timerObj, $client, $period, $formatLoc) = @_; + #^Should be undef + + my $destLoc = 0; + + if (defined $displayInfoBuild{$client}{'TOPdisplayItems1'}) { + $destLoc = scalar @{$displayInfoBuild{$client}{'TOPdisplayItems1'}}; + } + + $log->debug("Drawing scrn $destLoc $client $period"); + + my @show1icon = @{ $prefs->client($client)->get('show1icon') || [] }; + my @show13line = @{ $prefs->client($client)->get('show13line') || [] }; + my @d3line1t = @{ $prefs->client($client)->get('v3line1t') || [] }; + my @d3line1m = @{ $prefs->client($client)->get('v3line1m') || [] }; + my @d3line1b = @{ $prefs->client($client)->get('v3line1b') || [] }; + my @d1period = @{ $prefs->client($client)->get('v1period') || [] }; + my @weatherformat1t = @{ $prefs->client($client)->get('weatherformat1t') || [] }; + my @weatherformat1b = @{ $prefs->client($client)->get('weatherformat1b') || [] }; + my @weatherformat2t = @{ $prefs->client($client)->get('weatherformat2t') || [] }; + my @weatherformat2b = @{ $prefs->client($client)->get('weatherformat2b') || [] }; + + clearCanvas($client); + + #Draw icons + if ($show1icon[$formatLoc] == 1) { + drawIcon($client,0,$ymax{$client}-1, $Icons[$Iconmap{$wetData{$period}{'forecastIcon'}}]); + $displayInfoBuild{$client}{'hasIcon'}[$destLoc] = 1; + } + + #Draw 3line stuff + if ($show13line[$formatLoc] == 1) { + my $line1 = uc(replaceMacrosPer($d3line1t[$formatLoc], $period, $client)); + my $line2 = uc(replaceMacrosPer($d3line1m[$formatLoc], $period, $client)); + my $line3 = uc(replaceMacrosPer($d3line1b[$formatLoc], $period, $client)); + + #Shorten HI/HIGH/LOW/Lo to gain screen real estate on Booms + if($client->display->isa('Slim::Display::Boom')) { + $line1 =~ s/^ LOW/LO/; + $line1 =~ s/^HIGH/HI/; + $line1 =~ s/^RAIN/RN/; + $line1 =~ s/^PREC/PR/; + $line2 =~ s/^ LOW/LO/; + $line2 =~ s/^HIGH/HI/; + $line2 =~ s/^RAIN/RN/; + $line2 =~ s/^PREC/PR/; + $line3 =~ s/^ LOW/LO/; + $line3 =~ s/^RAIN/RN/; + $line3 =~ s/^PREC/PR/; + $line3 =~ s/^HIGH/HI/; + } + + if ($show1icon[$formatLoc] == 1) { + drawText($client,42,$ymax{$client}-25, $line3); + drawText($client,42,$ymax{$client}-13, $line2); + drawText($client,42,$ymax{$client}-1, $line1); + } + else { + drawText($client,0,$ymax{$client}-25, $line3); + drawText($client,0,$ymax{$client}-13, $line2); + drawText($client,0,$ymax{$client}-1, $line1); + } + + #Save the character lengths of each line + $displayInfoBuild{$client}{'CharLen1'}[$destLoc] = length($line1); + $displayInfoBuild{$client}{'CharLen2'}[$destLoc] = length($line2); + $displayInfoBuild{$client}{'CharLen3'}[$destLoc] = length($line3); + } + + #If necessary can make the width calculation based on max length of 3line text + $displayInfoBuild{$client}{'forecastG'}[$destLoc] = getFramebuf($client,$xmax{$client}); + + push(@{$displayInfoBuild{$client}{'TOPdisplayItems1'}}, replaceMacrosPer($weatherformat1t[$formatLoc], $period, $client)); + push(@{$displayInfoBuild{$client}{'BOTdisplayItems1'}}, replaceMacrosPer($weatherformat1b[$formatLoc], $period, $client)); + push(@{$displayInfoBuild{$client}{'TOPdisplayItems2'}}, replaceMacrosPer($weatherformat2t[$formatLoc], $period, $client)); + push(@{$displayInfoBuild{$client}{'BOTdisplayItems2'}}, replaceMacrosPer($weatherformat2b[$formatLoc], $period, $client)); + #$log->debug("Pending draw each timers: " . Slim::Utils::Timers::pendingTimers(undef, \&drawEach)); + + $drawEachPending--; + + if ($drawEachPending == 0) { + doneDrawing($client); + } + + $log->debug("Finish"); +} + +sub replaceMacros { + my $string = shift; + my $client = shift; + + for ($string) { + #Replace custom macros from other plugins. Do custom before default in case overriding + for my $key ( keys %macroHash ) { + $string =~ s/$key/$macroHash{$key}/; + } + + my $date = $client->longDateF(); + my $sdate = $client->shortDateF(); + s/%2/$date/; + s/%!2/$sdate/; + + s/%t/$wetData{'temperatureF'}°/; + s/%T/$wetData{'temperatureC'}°/; + s/%h/$wetData{'humidity'}/; + s/%p/$wetData{'pressureIN'}$wetData{'pressureT'}/; + s/%P/$wetData{'pressureMB'}$wetData{'pressureT'}/; + s/%d/$wetData{'dewpointF'}°/; + s/%D/$wetData{'dewpointC'}°/; + s/%f/$wetData{'feelslikeF'}°/; + s/%F/$wetData{'feelslikeC'}°/; + s/%w/$wetData{'windspeed_mh'}/; + s/%W/$wetData{'windspeed_kh'}/; + s/%q/$wetData{'windspeed_kth'}/; + s/%Q/$wetData{'windspeed_ms'}/; + s/%u/$wetData{'UVindexNum'}/; + s/%U/$wetData{'UVindexTxt'}/; + s/%b/$wetData{'rain'}/; + s/%B/$wetData{'snow'}/; + + #Wunderground + s/%e/$wetData{'wu_temperatureF'}°/; + s/%r/$wetData{'wu_temperatureFr'}°/; + s/%E/$wetData{'wu_temperatureC'}°/; + s/%R/$wetData{'wu_temperatureCr'}°/; + s/%H/$wetData{'wu_humidity'}/; + s/%l/$wetData{'wu_pressureIN'}/; + s/%L/$wetData{'wu_pressureMB'}/; + s/%m/$wetData{'wu_dewpointF'}°/; + s/%M/$wetData{'wu_dewpointC'}°/; + s/%j/$wetData{'wu_windspeed_mh'}/; + s/%J/$wetData{'wu_windspeed_kh'}/; + s/%k/$wetData{'wu_windspeed_kth'}/; + s/%K/$wetData{'wu_windspeed_ms'}/; + } + + return $string; +} + +sub replaceMacrosPer { + my $string = shift; + my $location = shift; + my $client = shift; + + $string = replaceMacros($string, $client); + + for ($string) { + s/%a/$wetData{$location}{'average_F'}°/; + s/%A/$wetData{$location}{'average_C'}°/; + s/%c/$wetData{$location}{'record_F'}°/; + s/%C/$wetData{$location}{'record_C'}°/; + s/%g/$wetData{$location}{'record_year'}/; + s/%s/$wetData{$location}{'sunrise'}/; + s/%S/$wetData{$location}{'sunset'}/; + + s/%z/$wetData{$location}{'forecastType'} $wetData{$location}{'forecastTempF'}°/; + s/%Z/$wetData{$location}{'forecastType'} $wetData{$location}{'forecastTempC'}°/; + s/%!z/$wetData{$location}{'forecastTempF'}/; + s/%!Z/$wetData{$location}{'forecastTempC'}/; + s/Low/ Low/; + + s/%x/$wetData{$location}{'forecastPrec'}/; + + s/%y/$wetData{$location}{'forecastTOD'}/; + s/%v/$wetData{$location}{'skyCondition'}/; + + #10day stuff + s/%_3/$wetData{$location}{'day'}/; + s/%!_3/$wetData{$location}{'shortday'}/; + s/%_4/$wetData{$location}{'date'}/; + s/%_5/$wetData{$location}{'highF'}°/; + s/%_6/$wetData{$location}{'highC'}°/; + s/%_7/$wetData{$location}{'lowF'}°/; + s/%_8/$wetData{$location}{'lowC'}°/; + s/%_9/$wetData{$location}{'precip'}/; + s/%_0/$wetData{$location}{'condition'}/; + } + + return $string; +} + +sub getWeatherToday { #Set up Async HTTP request for Weather + my $timerObj = shift; #Should be undef + my $client = shift; + my $refreshItem = shift; + + my $url = 'https://api.weather.com/v2/turbo/vt1dailyforecast?apiKey=d522aa97197fd864d36b418f39ebb323&format=json&language=' . $prefs->get('lang') . '&units=' . $units . '&geocode=' . $lat . ',' . $long; + my $http = Slim::Networking::SimpleAsyncHTTP->new(\&gotWeatherToday, + \&gotErrorViaHTTP, + {caller => 'getWeatherToday', + callerProc => \&getWeatherToday, + client => $client, + refreshItem => $refreshItem}); + $log->info("async request: $url"); + + $http->get($url, 'User-Agent' => 'Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0', + 'Accept-Language' => 'en-us,en;q=0.5', + 'Accept' => 'text/html', + 'Accept-Charset' => 'UTF-8'); +} + +sub gotWeatherToday { #Weather data for today was received + my $http = shift; + + my $params = $http->params(); + my $client = $params->{'client'}; + my $refreshItem = $params->{'refreshItem'}; + + $log->info("got " . $http->url()); + + my $json = $http->content(); + + my $perldata = decode_json($json); + + # Store arrays + my $dates = $perldata->{'vt1dailyforecast'}->{'validDate'} ; + my $sunrises = $perldata->{'vt1dailyforecast'}->{'sunrise'} ; + my $sunsets = $perldata->{'vt1dailyforecast'}->{'sunset'} ; + my $moonIcons = $perldata->{'vt1dailyforecast'}->{'moonIcon'} ; + my $moonPhrases = $perldata->{'vt1dailyforecast'}->{'moonPhrase'} ; + my $moonrises = $perldata->{'vt1dailyforecast'}->{'moonrise'} ; + my $moonsets = $perldata->{'vt1dailyforecast'}->{'moonset'} ; + my $days = $perldata->{'vt1dailyforecast'}->{'dayOfWeek'} ; + + my $dayParts = $perldata->{'vt1dailyforecast'}->{'day'}->{'dayPartName'} ; + my $dayPrecip = $perldata->{'vt1dailyforecast'}->{'day'}->{'precipPct'} ; + my $highs = $perldata->{'vt1dailyforecast'}->{'day'}->{'temperature'} ; + my $dayIcons = $perldata->{'vt1dailyforecast'}->{'day'}->{'icon'} ; + my $dayCond = $perldata->{'vt1dailyforecast'}->{'day'}->{'phrase'} ; + my $dayNarrative = $perldata->{'vt1dailyforecast'}->{'day'}->{'narrative'} ; + + my $nightParts = $perldata->{'vt1dailyforecast'}->{'night'}->{'dayPartName'} ; + my $nightPrecip = $perldata->{'vt1dailyforecast'}->{'night'}->{'precipPct'} ; + my $lows = $perldata->{'vt1dailyforecast'}->{'night'}->{'temperature'} ; + my $nightIcons = $perldata->{'vt1dailyforecast'}->{'night'}->{'icon'} ; + my $nightCond = $perldata->{'vt1dailyforecast'}->{'night'}->{'phrase'} ; + my $nightNarrative = $perldata->{'vt1dailyforecast'}->{'night'}->{'narrative'} ; + + $dayCount = scalar(@$dates); # Variable established at top of plugin so it is available in sdt10day + my $loopcnt = 0; + my $dayPart = @$dayParts[0]; + + $log->debug('# of Dates: ' . scalar(@$dates)); + + while ($loopcnt < 4) { + $log->debug('Date: ' . @$dates[$loopcnt]); + $log->debug('Sunrise: ' . @$sunrises[$loopcnt]); + $log->debug('Sunset: ' . @$sunsets[$loopcnt]); + $log->debug('moon Icon: ' . @$moonIcons[$loopcnt]); + $log->debug('moon Phrase: ' . @$moonPhrases[$loopcnt]); + $log->debug('moon rise: ' . @$moonrises[$loopcnt]); + $log->debug('moon set: ' . @$moonsets[$loopcnt]); + $log->debug('Day: ' . @$days[$loopcnt]); + + $log->debug('Day part: ' . @$dayParts[$loopcnt]); + $log->debug('Day precip %: ' . @$dayPrecip[$loopcnt]); + $log->debug('High: ' . @$highs[$loopcnt]); + $log->debug('Day Icon: ' . @$dayIcons[$loopcnt]); + $log->debug('Day Condition: ' . @$dayCond[$loopcnt]); + $log->debug('Day Narrative: ' . @$dayNarrative[$loopcnt]); + + $log->debug('night part: ' . @$nightParts[$loopcnt]); + $log->debug('night precip %: ' . @$nightPrecip[$loopcnt]); + $log->debug('Low: ' . @$lows[$loopcnt]); + $log->debug('night Icon: ' . @$nightIcons[$loopcnt]); + $log->debug('night Condition: ' . @$nightCond[$loopcnt]); + $log->debug('night Narrative: ' . @$nightNarrative[$loopcnt]); + $log->debug(' '); + +# Period defintions +# Period Day Night +# ------ ----------------- -------------- +# -1 Current Current +# 0 Today Tonight +# 1 Tonight Tomorrow +# 2 Tomorrow Tomorrow Night +# 3 Tomorrow Night N/A + + if ($loopcnt == 0) { + if (defined($dayPart)) { + $log->debug('dayPart: ' . $dayPart); + $log->debug('dayPart check Evaluated True' ); + $wetData{-1}{'forecastPrec'} = @$dayPrecip[$loopcnt]; + $wetData{0}{'forecastPrec'} = @$dayPrecip[$loopcnt]; + $wetData{-1}{'forecastType'} = 'High' ; #hi/low + $wetData{0}{'forecastType'} = 'High' ; + if ($units eq 'e') { + $wetData{-1}{'forecastTempF'} = @$highs[$loopcnt]; + $wetData{0}{'forecastTempF'} = @$highs[$loopcnt]; + $wetData{-1}{'forecastTempC'} = FtoC(@$highs[$loopcnt]); + $wetData{0}{'forecastTempC'} = FtoC(@$highs[$loopcnt]); + } + elsif ($units eq 'm') { + $wetData{-1}{'forecastTempF'} = CtoF(@$highs[$loopcnt]); + $wetData{0}{'forecastTempF'} = CtoF(@$highs[$loopcnt]); + $wetData{-1}{'forecastTempC'} = @$highs[$loopcnt]; + $wetData{0}{'forecastTempC'} = @$highs[$loopcnt]; + } + else { + $log->info('$units undefined'); + } + $wetData{0}{'forecastIcon'} = @$dayIcons[$loopcnt]; + $wetData{0}{'skyCondition'} = @$dayCond[$loopcnt]; + $wetData{0}{'forecastIconURLSmall'} = '/plugins/SuperDateTime/html/images/' . @$dayIcons[$loopcnt] . '.png'; + $wetData{0}{'forecastTOD'} = $dayPart ; + push(@WETdisplayItems1temp, $wetData{0}{'forecastTOD'}); + push(@WETdisplayItems2temp, @$dayNarrative[$loopcnt]); + } + else { + $log->debug('dayPart: ' . $dayPart); + $log->debug('dayPart check Evaluated False' ); + $wetData{-1}{'forecastPrec'} = @$nightPrecip[$loopcnt]; + $wetData{0}{'forecastPrec'} = @$nightPrecip[$loopcnt]; + $wetData{-1}{'forecastType'} = 'Low' ; #hi/low + $wetData{0}{'forecastType'} = 'Low' ; + if ($units eq 'e') { + $wetData{-1}{'forecastTempF'} = @$lows[$loopcnt]; + $wetData{0}{'forecastTempF'} = @$lows[$loopcnt]; + $wetData{-1}{'forecastTempC'} = FtoC(@$lows[$loopcnt]); + $wetData{0}{'forecastTempC'} = FtoC(@$lows[$loopcnt]); + } + else { + $wetData{-1}{'forecastTempF'} = CtoF(@$lows[$loopcnt]); + $wetData{0}{'forecastTempF'} = CtoF(@$lows[$loopcnt]); + $wetData{-1}{'forecastTempC'} = @$lows[$loopcnt]; + $wetData{0}{'forecastTempC'} = @$lows[$loopcnt]; + } + $wetData{0}{'forecastIcon'} = @$nightIcons[$loopcnt]; + $wetData{0}{'skyCondition'} = @$nightCond[$loopcnt]; + $wetData{0}{'forecastIconURLSmall'} = '/plugins/SuperDateTime/html/images/' . @$nightIcons[$loopcnt] . '.png'; + $wetData{0}{'forecastTOD'} = @$nightParts[$loopcnt] ; + push(@WETdisplayItems1temp, $wetData{0}{'forecastTOD'}); + push(@WETdisplayItems2temp, @$nightNarrative[$loopcnt]); + } + } + elsif ($loopcnt == 1) { + if (defined($dayPart)) { + $wetData{$loopcnt}{'forecastPrec'} = @$nightPrecip[$loopcnt-1]; + $wetData{$loopcnt}{'forecastType'} = 'Low' ; + if ($units eq 'e') { + $wetData{$loopcnt}{'forecastTempF'} = @$lows[$loopcnt-1]; + $wetData{$loopcnt}{'forecastTempC'} = FtoC(@$lows[$loopcnt-1]); + } + else { + $wetData{$loopcnt}{'forecastTempF'} = CtoF(@$lows[$loopcnt-1]); + $wetData{$loopcnt}{'forecastTempC'} = @$lows[$loopcnt-1]; + } + $wetData{$loopcnt}{'forecastIcon'} = @$nightIcons[$loopcnt-1]; + $wetData{$loopcnt}{'skyCondition'} = @$nightCond[$loopcnt-1]; + $wetData{$loopcnt}{'forecastIconURLSmall'} = '/plugins/SuperDateTime/html/images/' . @$nightIcons[$loopcnt-1] . '.png'; + $wetData{$loopcnt}{'forecastTOD'} = @$nightParts[$loopcnt-1] ; + push(@WETdisplayItems1temp, $wetData{$loopcnt}{'forecastTOD'}); + push(@WETdisplayItems2temp, @$nightNarrative[$loopcnt-1]); + } + else { + $wetData{$loopcnt}{'forecastPrec'} = @$dayPrecip[$loopcnt]; + $wetData{$loopcnt}{'forecastType'} = 'High' ; + if ($units eq 'e') { + $wetData{$loopcnt}{'forecastTempF'} = @$highs[$loopcnt]; + $wetData{$loopcnt}{'forecastTempC'} = FtoC(@$highs[$loopcnt]); + } + else { + $wetData{$loopcnt}{'forecastTempF'} = CtoF(@$highs[$loopcnt]); + $wetData{$loopcnt}{'forecastTempC'} = @$highs[$loopcnt]; + } + $wetData{$loopcnt}{'forecastIcon'} = @$dayIcons[$loopcnt]; + $wetData{$loopcnt}{'skyCondition'} = @$dayCond[$loopcnt]; + $wetData{$loopcnt}{'forecastIconURLSmall'} = '/plugins/SuperDateTime/html/images/' . @$dayIcons[$loopcnt] . '.png'; + $wetData{$loopcnt}{'forecastTOD'} = @$dayParts[$loopcnt]; + push(@WETdisplayItems1temp, $wetData{$loopcnt}{'forecastTOD'}); + push(@WETdisplayItems2temp, @$dayNarrative[$loopcnt]); + } + } + elsif ($loopcnt == 2) { + if (defined($dayPart)) { + $wetData{$loopcnt}{'forecastPrec'} = @$dayPrecip[$loopcnt-1]; + $wetData{$loopcnt}{'forecastType'} = 'High' ; + if ($units eq 'e') { + $wetData{$loopcnt}{'forecastTempF'} = @$highs[$loopcnt-1]; + $wetData{$loopcnt}{'forecastTempC'} = FtoC(@$highs[$loopcnt-1]); + } + else { + $wetData{$loopcnt}{'forecastTempF'} = CtoF(@$highs[$loopcnt-1]); + $wetData{$loopcnt}{'forecastTempC'} = @$highs[$loopcnt-1]; + } + $wetData{$loopcnt}{'forecastIcon'} = @$dayIcons[$loopcnt-1]; + $wetData{$loopcnt}{'skyCondition'} = @$dayCond[$loopcnt-1]; + $wetData{$loopcnt}{'forecastIconURLSmall'} = '/plugins/SuperDateTime/html/images/' . @$dayIcons[$loopcnt-1] . '.png'; + $wetData{$loopcnt}{'forecastTOD'} = @$dayParts[$loopcnt-1]; + push(@WETdisplayItems1temp, $wetData{$loopcnt}{'forecastTOD'}); + push(@WETdisplayItems2temp, @$dayNarrative[$loopcnt-1]); + } + else { + $wetData{$loopcnt}{'forecastPrec'} = @$nightPrecip[$loopcnt-1]; + $wetData{$loopcnt}{'forecastType'} = 'Low' ; + if ($units eq 'e') { + $wetData{$loopcnt}{'forecastTempF'} = @$lows[$loopcnt-1]; + $wetData{$loopcnt}{'forecastTempC'} = FtoC(@$lows[$loopcnt-1]); + } + else { + $wetData{$loopcnt}{'forecastTempF'} = CtoF(@$lows[$loopcnt-1]); + $wetData{$loopcnt}{'forecastTempC'} = @$lows[$loopcnt-1]; + } + $wetData{$loopcnt}{'forecastIcon'} = @$nightIcons[$loopcnt-1]; + $wetData{$loopcnt}{'skyCondition'} = @$nightCond[$loopcnt-1]; + $wetData{$loopcnt}{'forecastIconURLSmall'} = '/plugins/SuperDateTime/html/images/' . @$nightIcons[$loopcnt-1] . '.png'; + $wetData{$loopcnt}{'forecastTOD'} = @$nightParts[$loopcnt-1] ; + push(@WETdisplayItems1temp, $wetData{$loopcnt}{'forecastTOD'}); + push(@WETdisplayItems2temp, @$nightNarrative[$loopcnt-1]); + } + } + elsif ($loopcnt == 3) { + if (defined($dayPart)) { + $wetData{$loopcnt}{'forecastPrec'} = @$nightPrecip[$loopcnt-2]; + $wetData{$loopcnt}{'forecastType'} = 'Low' ; + if ($units eq 'e') { + $wetData{$loopcnt}{'forecastTempF'} = @$lows[$loopcnt-2]; + $wetData{$loopcnt}{'forecastTempC'} = FtoC(@$lows[$loopcnt-2]); + } + else { + $wetData{$loopcnt}{'forecastTempF'} = CtoF(@$lows[$loopcnt-2]); + $wetData{$loopcnt}{'forecastTempC'} = @$lows[$loopcnt-2]; + } + $wetData{$loopcnt}{'forecastIcon'} = @$nightIcons[$loopcnt-2]; + $wetData{$loopcnt}{'skyCondition'} = @$nightCond[$loopcnt-2]; + $wetData{$loopcnt}{'forecastIconURLSmall'} = '/plugins/SuperDateTime/html/images/' . @$nightIcons[$loopcnt-2] . '.png'; + $wetData{$loopcnt}{'forecastTOD'} = @$nightParts[$loopcnt-2] ; + push(@WETdisplayItems1temp, $wetData{$loopcnt}{'forecastTOD'}); + push(@WETdisplayItems2temp, @$nightNarrative[$loopcnt-2]); + } + else { + $wetData{$loopcnt}{'forecastPrec'} = @$dayPrecip[$loopcnt-1]; + $wetData{$loopcnt}{'forecastType'} = 'High' ; + if ($units eq 'e') { + $wetData{$loopcnt}{'forecastTempF'} = @$highs[$loopcnt-1]; + $wetData{$loopcnt}{'forecastTempC'} = FtoC(@$highs[$loopcnt-1]); + } + else { + $wetData{$loopcnt}{'forecastTempF'} = CtoF(@$highs[$loopcnt-1]); + $wetData{$loopcnt}{'forecastTempC'} = @$highs[$loopcnt-1]; + } + $wetData{$loopcnt}{'forecastIcon'} = @$dayIcons[$loopcnt-1]; + $wetData{$loopcnt}{'skyCondition'} = @$dayCond[$loopcnt-1]; + $wetData{$loopcnt}{'forecastIconURLSmall'} = '/plugins/SuperDateTime/html/images/' . @$dayIcons[$loopcnt-1] . '.png'; + $wetData{$loopcnt}{'forecastTOD'} = @$dayParts[$loopcnt-1]; + push(@WETdisplayItems1temp, $wetData{$loopcnt}{'forecastTOD'}); + push(@WETdisplayItems2temp, @$dayNarrative[$loopcnt-1]); + } + } + $loopcnt++ + } + + # Sunrise sunset for Today. Store in both current[-1] and today/tonight[0] periods. + my $sunrise = @$sunrises[0]; + my $timepos = index($sunrise, ":"); + $timepos = $timepos-2; + my $sr = substr($sunrise, $timepos, 5); + $wetData{-1}{'sunrise'} = $sr; + $wetData{0}{'sunrise'} = $sr; + + my $sunset = @$sunsets[0]; + my $timepos2 = index($sunset, ":"); + $timepos2 = $timepos2-2; + my $ss = substr($sunset, $timepos2, 5); + $wetData{-1}{'sunset'} = $ss; + $wetData{0}{'sunset'} = $ss; + + # Sunrise sunset for Tomorrow. Store in both tomorrow and tomorrow night periods. + my $sunrise = @$sunrises[1]; + my $timepos = index($sunrise, ":"); + $timepos = $timepos-2; + my $sr = substr($sunrise, $timepos, 5); + if (defined($dayPart)) { + $wetData{2}{'sunrise'} = $sr; + $wetData{3}{'sunrise'} = $sr; + } + else { + $wetData{1}{'sunrise'} = $sr; + $wetData{2}{'sunrise'} = $sr; + } + + my $sunset = @$sunsets[1]; + my $timepos2 = index($sunset, ":"); + $timepos2 = $timepos2-2; + my $ss = substr($sunset, $timepos2, 5); + if (defined($dayPart)) { + $wetData{2}{'sunset'} = $ss; + $wetData{3}{'sunset'} = $ss; + } + else { + $wetData{1}{'sunset'} = $ss; + $wetData{2}{'sunset'} = $ss; + } + +# 10 day stuff moved from got10day + my %mons=("01"=>"Jan","02"=>"Feb","03"=>"Mar","04"=>"Apr","05"=>"May","06"=>"Jun","07"=>"Jul","08"=>"Aug","09"=>"Sep","10"=>"Oct","11"=>"Nov","12"=>"Dec"); + my $dayval = "" ; + my $dv = "" ; + my $dayNum = 1; + + while ($dayNum < $dayCount) { # + $wetData{'d'.$dayNum}{'day'} = @$days[$dayNum]; + $wetData{'d'.$dayNum}{'shortday'} = substr @$days[$dayNum], 0, 3; + + $dayval = @$dates[$dayNum]; + + if ($dayval=~/([0-9]{4})\-([0-9]{2})\-([0-9]{2}).*/) { + $dv = "$mons{$2} $3\n"; + } + $wetData{'d'.$dayNum}{'date'} = $dv; + + $wetData{'d'.$dayNum}{'forecastIcon'} = @$dayIcons[$dayNum]; + $wetData{'d'.$dayNum}{'forecastIconURLSmall'} = '/plugins/SuperDateTime/html/images/' . @$dayIcons[$dayNum] . '.png'; + $wetData{'d'.$dayNum}{'condition'} = @$dayCond[$dayNum]; + + if ($units eq 'e') { + $wetData{'d'.$dayNum}{'highF'} = @$highs[$dayNum]; + $wetData{'d'.$dayNum}{'highC'} = FtoC(@$highs[$dayNum]); + $wetData{'d'.$dayNum}{'lowF'} = @$lows[$dayNum]; + $wetData{'d'.$dayNum}{'lowC'} = FtoC(@$lows[$dayNum]); + } + else { + $wetData{'d'.$dayNum}{'highF'} = CtoF(@$highs[$dayNum]); + $wetData{'d'.$dayNum}{'highC'} = @$highs[$dayNum]; + $wetData{'d'.$dayNum}{'lowF'} = CtoF(@$lows[$dayNum]); + $wetData{'d'.$dayNum}{'lowC'} = @$lows[$dayNum]; + } + $wetData{'d'.$dayNum}{'precip'} = @$dayPrecip[$dayNum]; + + my $sunrise = @$sunrises[$dayNum]; + my $timepos = index($sunrise, ":"); + $timepos = $timepos-2; + my $sr = substr($sunrise, $timepos, 5); + $averages{$dayNum}{'sunrise'} = $sr; + + my $sunset = @$sunsets[$dayNum]; + my $timepos2 = index($sunset, ":"); + $timepos2 = $timepos2-2; + my $ss = substr($sunset, $timepos2, 5); + $averages{$dayNum}{'sunset'} = $ss; + + $log->debug("Icon # for day " . $dayNum . " = " . $wetData{'d'.$dayNum}{'forecastIcon'}. "\n"); + $log->debug("Sunrise for day " . $dayNum . " = " . $averages{$dayNum}{'sunrise'}. "\n"); + $log->debug("Sunset for day " . $dayNum . " = " . $averages{$dayNum}{'sunset'}. "\n"); + $log->debug("Date Val for day" . $dayNum . " = " . $wetData{'d'.$dayNum}{'date'}. "\n"); + $dayNum++; + } + refreshData(undef, $client, $refreshItem); +} + +sub getWeatherNow { #Set up Async HTTP request for Weather + my $timerObj = shift; #Should be undef + my $client = shift; + my $refreshItem = shift; + + if ($prefs->get('temperature') eq 0) { # fahrenheit + $units = 'e'; + } + else { + $units = 'm'; + } + + my $url = 'https://api.weather.com/v2/turbo/vt1observation?apiKey=d522aa97197fd864d36b418f39ebb323&units=' . $units . '&language=' . $prefs->get('lang') . '&format=json&geocode=' . $lat .',' . $long; + my $http = Slim::Networking::SimpleAsyncHTTP->new(\&gotWeatherNow, + \&gotErrorViaHTTP, + {caller => 'getWeatherNow', + callerProc => \&getWeatherNow, + client => $client, + refreshItem => $refreshItem}); + $log->info("async request: $url"); + + $http->get($url, 'User-Agent' => 'Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0', + 'Accept-Language' => 'en-us,en;q=0.5', + 'Accept' => 'text/html', + 'Accept-Charset' => 'UTF-8'); +} + +sub gotWeatherNow { #Weather data was received + my $http = shift; + + my $params = $http->params(); + my $client = $params->{'client'}; + my $refreshItem = $params->{'refreshItem'}; + + $log->info("got " . $http->url()); + + my $json = $http->content(); + my $perldata = decode_json($json); + +# Store current weather observations + $wetData{-1}{'forecastTOD'} = 'Currently'; + if ($units eq 'e'){ + $wetData{'temperatureF'} = $perldata->{'vt1observation'}->{'temperature'}; + $wetData{'temperatureC'} = FtoC($perldata->{'vt1observation'}->{'temperature'}); + $wetData{'feelslikeF'} = $perldata->{'vt1observation'}->{'feelsLike'}; + $wetData{'feelslikeC'} = FtoC($perldata->{'vt1observation'}->{'feelsLike'}); + $wetData{'dewpointF'} = $perldata->{'vt1observation'}->{'dewPoint'}; + $wetData{'dewpointC'} = FtoC($perldata->{'vt1observation'}->{'dewPoint'}); + } + elsif ($units eq 'm') { + $wetData{'temperatureF'} = CtoF($perldata->{'vt1observation'}->{'temperature'}); + $wetData{'temperatureC'} = $perldata->{'vt1observation'}->{'temperature'}; + $wetData{'feelslikeF'} = CtoF($perldata->{'vt1observation'}->{'feelsLike'}); + $wetData{'feelslikeC'} = $perldata->{'vt1observation'}->{'feelsLike'}; + $wetData{'dewpointF'} = CtoF($perldata->{'vt1observation'}->{'dewPoint'}); + $wetData{'dewpointC'} = $perldata->{'vt1observation'}->{'dewPoint'}; + } + else { + $log->error('$units undefined'); + } + + $wetData{-1}{'forecastIcon'} = $perldata->{'vt1observation'}->{'icon'}; + $wetData{-1}{'forecastIconURLSmall'} = '/plugins/SuperDateTime/html/images/' . $perldata->{'vt1observation'}->{'icon'} . '.png'; + $wetData{'windspeed_mh'} = $perldata->{'vt1observation'}->{'windSpeed'}; + $wetData{'windspeed_kh'} = ($perldata->{'vt1observation'}->{'windSpeed'})*1.609344; + $wetData{'windspeed_kh'} = int($wetData{'windspeed_kh'} + .5 * ($wetData{'windspeed_kh'} <=> 0)); #Funky round + $wetData{'windspeed_kth'} = ($perldata->{'vt1observation'}->{'windSpeed'})/1.1515; + $wetData{'windspeed_kth'} = int($wetData{'windspeed_kth'} + .5 * ($wetData{'windspeed_kth'} <=> 0)); #Funky round + $wetData{'windspeed_ms'} = $perldata->{'vt1observation'}->{'windSpeed'}*16.09344/36; + $wetData{'windspeed_ms'} = int($wetData{'windspeed_ms'} + .5 * ($wetData{'windspeed_ms'} <=> 0)); #Funky round + my $WindDir = $perldata->{'vt1observation'}->{'windDirCompass'}; + $wetData{'windspeed_mh'} = $WindDir . $wetData{'windspeed_mh'}; + $wetData{'windspeed_kh'} = $WindDir . $wetData{'windspeed_kh'}; + $wetData{'windspeed_ms'} = $WindDir . $wetData{'windspeed_ms'}; + $wetData{'windspeed_kth'} = $WindDir . $wetData{'windspeed_kth'}; + $wetData{-1}{'skyCondition'} = $perldata->{'vt1observation'}->{'phrase'}; + $wetData{'humidity'} = $perldata->{'vt1observation'}->{'humidity'}; + $wetData{'pressureIN'} = $perldata->{'vt1observation'}->{'altimeter'}; + $wetData{'pressureMB'} = ($perldata->{'vt1observation'}->{'altimeter'})*33.8639; + $wetData{'pressureMB'} = int($wetData{'pressureMB'} + .5 * ($wetData{'pressureMB'} <=> 0)); #Funky round +# Baro Trend ### 0=steady, 1=rising, 2=dropping, 3=rising rapidly + my $BaroTrend = $perldata->{'vt1observation'}->{'barometerCode'}; + if ($BaroTrend eq '0') { + $wetData{'pressureT'} = '~'; #~ is not displayed in all player text locations + } + elsif ($BaroTrend eq '2') { + $wetData{'pressureT'} = '-'; + } + elsif ($BaroTrend eq '1') { + $wetData{'pressureT'} = '+'; # + is not displayed in all player text locations + } + elsif ($BaroTrend eq '3') { # Rising rapidly + $wetData{'pressureT'} = '++'; + $log->warn('BaroTrend Code = 3 Baro Trend Description: ' . $perldata->{'vt1observation'}->{'barometerTrend'}); + } + else { + $log->warn('Unknown Barometer Trend Status!!! Code = ' . $BaroTrend); + $log->warn('Barometer Trend Description = '.$perldata->{'vt1observation'}->{'barometerTrend'}); + } + +# UV index and 24hr precip/snow accumulations + $wetData{'UVindexNum'} = $perldata->{'vt1observation'}->{'uvIndex'}; + $wetData{'UVindexTxt'} = $perldata->{'vt1observation'}->{'uvDescription'}; + $wetData{'rain'} = $perldata->{'vt1observation'}->{'precip24Hour'}; + $wetData{'snow'} = $perldata->{'vt1observation'}->{'snowDepth'}; + +# Debug logs + $log->debug("Time of Day: " . $wetData{-1}{'forecastTOD'}); + $log->debug("Temperature F: " . $wetData{'temperatureF'}); + $log->debug("Temperature C: " . $wetData{'temperatureC'}); + $log->debug("ICON: " . $wetData{-1}{'forecastIcon'}); + $log->debug("ICON URL: " . $wetData{-1}{'forecastIconURLSmall'}); + $log->debug("Feels Like F: " . $wetData{'feelslikeF'}); + $log->debug("Feels Like C: " . $wetData{'feelslikeC'}); + $log->debug("Wind Speed MPH: " . $wetData{'windspeed_mh'}); + $log->debug("Wind Speed KM/H: " . $wetData{'windspeed_kh'}); + $log->debug("Wind Speed Knots/H: " . $wetData{'windspeed_kth'}); + $log->debug("Wind Speed Meters/S: " . $wetData{'windspeed_ms'}); + $log->debug("Sky Condition: " . $wetData{-1}{'skyCondition'}); + $log->debug("Humidity: " . $wetData{'humidity'}); + $log->debug("Dewpoint F: " . $wetData{'dewpointF'}); + $log->debug("Dewpoint C: " . $wetData{'dewpointC'}); + $log->debug("Barometer IN: " . $wetData{'pressureIN'}); + $log->debug("Barometer MB: " . $wetData{'pressureMB'}); + $log->debug("Trend Raw: " . $BaroTrend); + $log->debug("Trend: " . $wetData{'pressureT'}); + $log->debug("UV Index: " . $wetData{'UVindexNum'}); + $log->debug("UV Text: " . $wetData{'UVindexTxt'}); + $log->debug("24Hr Rain Total: " . $wetData{'rain'}); + $log->debug("Snow Depth: " . $wetData{'snow'}); + + refreshData(undef, $client, $refreshItem); +} + +sub getWunderground { #Set up Async HTTP request for Weather + my $timerObj = shift; #Should be undef + my $client = shift; + my $refreshItem = shift; + + if ($prefs->get('wunder') ne '') { #Make sure wunderground data is needed + my $url = 'http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=' . $prefs->get('wunder') . '&format=1'; + my $http = Slim::Networking::SimpleAsyncHTTP->new(\&gotWunderground, + \&gotErrorViaHTTP, + {caller => 'getWunderground', + callerProc => \&getWunderground, + client => $client, + refreshItem => $refreshItem}); + + $log->info("async request: $url"); + $http->get($url, 'User-Agent' => 'Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0'); + } + else { + $log->info("No wunderground.com value set. Skipping..."); + refreshData(undef, $client, $refreshItem); + } + +} + +sub gotWunderground { #Weather data was received + my $http = shift; + + my $params = $http->params(); + my $client = $params->{'client'}; + my $refreshItem = $params->{'refreshItem'}; + + $log->info("got " . $http->url()); + + my $content = $http->content(); + my $metric = ($content =~ m/TemperatureC/); + + my @ary=split /\n/,$content; #break large string into array + + if($ary[scalar(@ary)-2] =~ /^20\d\d-.*?,(.*?),(.*?),(.*?),(.*?),.*?,(.*?),.*?,(.*?),.*?,(.*?),(.*?),.*,/) { + if ($metric) { + $wetData{'wu_temperatureF'} = CtoF($1); + $wetData{'wu_temperatureFr'} = int($wetData{'wu_temperatureF'} + .5 * ($wetData{'wu_temperatureF'} <=> 0)); #Funky round + $wetData{'wu_temperatureC'} = $1; + $wetData{'wu_temperatureCr'} = int($wetData{'wu_temperatureC'} + .5 * ($wetData{'wu_temperatureC'} <=> 0)); #Funky round + $wetData{'wu_dewpointF'} = CtoF($2); + $wetData{'wu_dewpointC'} = $2; + } + else { + $wetData{'wu_temperatureF'} = $1; + $wetData{'wu_temperatureFr'} = int($wetData{'wu_temperatureF'} + .5 * ($wetData{'wu_temperatureF'} <=> 0)); #Funky round + $wetData{'wu_temperatureC'} = FtoC($1); + $wetData{'wu_temperatureCr'} = int($wetData{'wu_temperatureC'} + .5 * ($wetData{'wu_temperatureC'} <=> 0)); #Funky round + $wetData{'wu_dewpointF'} = $2; + $wetData{'wu_dewpointC'} = FtoC($2); + } + + $wetData{'wu_pressureIN'} = $3; + $wetData{'wu_pressureMB'} = $3 * 33.8639; + $wetData{'wu_pressureMB'} = int($wetData{'wu_pressureMB'} + .5 * ($wetData{'wu_pressureMB'} <=> 0)); #Funky round + + if ($5==0) { + $wetData{'wu_windspeed_mh'} = 'Calm'; + $wetData{'wu_windspeed_kh'} = 'Calm'; + $wetData{'wu_windspeed_kth'} = 'Calm'; + $wetData{'wu_windspeed_ms'} = 'Calm'; + } + else { + my $winddir = $4; + if ($winddir eq 'South') { + $winddir = 'S'; + } + elsif ($winddir eq 'North') { + $winddir = 'N'; + } + elsif ($winddir eq 'East') { + $winddir = 'E'; + } + elsif ($winddir eq 'West') { + $winddir = 'W'; + } + + $wetData{'wu_windspeed_mh'} = $winddir . $5; + + $wetData{'wu_windspeed_kh'} = $5*1.609344; + $wetData{'wu_windspeed_kh'} = $wetData{'wu_windspeed_kh'} . int($wetData{'wu_windspeed_kh'} + .5 * ($wetData{'wu_windspeed_kh'} <=> 0)); #Funky round + + $wetData{'wu_windspeed_ms'} = $5*16.09344/36; + $wetData{'wu_windspeed_ms'} = $wetData{'wu_windspeed_ms'} . int($wetData{'wu_windspeed_ms'} + .5 * ($wetData{'wu_windspeed_ms'} <=> 0)); #Funky round + + $wetData{'wu_windspeed_kth'} = $5/1.1515; + $wetData{'wu_windspeed_kth'} = $wetData{'wu_windspeed_kth'} . int($wetData{'wu_windspeed_kth'} + .5 * ($wetData{'wu_windspeed_kth'} <=> 0)); #Funky round + } + + $wetData{'wu_humidity'} = $6 . '%'; + } + refreshData(undef, $client, $refreshItem); +} + +sub getStocks { #Set up Async HTTP request for Stocks + my $timerObj = shift; #Should be undef + my $client = shift; + my $refreshItem = shift; + + my @stocks = split (' ',$prefs->get('stocks')); + + if ($refreshTracker[3] == 1) { # setup loop counter on each refresh cycle + $stockCount = scalar(@stocks); + $stockCounter = 0; + $refreshTracker[3] = 0; + } + + if (@stocks) { # Skip if no stock tickers entered in preferences + if ($stockCounter < $stockCount) { + my $url = 'https://query1.finance.yahoo.com/v10/finance/quoteSummary/' . $stocks[$stockCounter] . '?formatted=true&lang=en-US®ion=US&modules=price%2CsummaryDetail&corsDomain=finance.yahoo.com'; + my $http = Slim::Networking::SimpleAsyncHTTP->new(\&gotStocks, + \&gotErrorViaHTTP, + {caller => 'getStocks', + callerProc => \&getStocks, + client => $client, + refreshItem => $refreshItem}); + + $log->info("async request: $url"); + $http->get($url, 'User-Agent' => 'Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0'); + } + } + else { + $log->info("No stocks selected... Skipping"); + refreshData(undef, $client, $refreshItem); + } +} + +sub gotStocks { #Stock data was received + my $http = shift; + + my $params = $http->params(); + my $client = $params->{'client'}; + my $refreshItem = $params->{'refreshItem'}; + + $log->info("got " . $http->url()); + + if ($stockCounter eq 0) { + delete $miscData{'stocks'}; #Wipe out old stock values on first pass through on each refresh + } + my $Stock_json = $http->content(); + my $perldata = decode_json($Stock_json); + + + my $ticker_array = $perldata->{'quoteSummary'}->{'result'}; # store array from JSON file + my $ticker_detail = @$ticker_array[0]->{'price'}; # de-reference array + + my $ticker = $ticker_detail->{'symbol'}; + $miscData{'stocks'}{$ticker}{'ticker'} = $ticker; + + my $lasttrade = $ticker_detail->{'regularMarketPrice'}->{'fmt'}; + $miscData{'stocks'}{$ticker}{'lasttrade'} = $lasttrade; + + my $rawdate = $ticker_detail->{'regularMarketTime'}; + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($rawdate); + $mon = sprintf('%02d',$mon + 1); + $mday = sprintf('%02d',$mday); + $year = $year + 1900; + $hour = sprintf('%02d',$hour-5); + $min = sprintf('%02d',$min); + + my $lastdate = $mon.'/'.$mday.'/'.$year; + $miscData{'stocks'}{$ticker}{'lastdate'} = $lastdate; + + my $lasttime = $hour.':'.$min; + $miscData{'stocks'}{$ticker}{'lasttime'} = $lasttime; + + my $change = $ticker_detail->{'regularMarketChange'}->{'fmt'}; + $miscData{'stocks'}{$ticker}{'change'} = $change; + + my $open = $ticker_detail->{'regularMarketOpen'}->{'fmt'}; + $miscData{'stocks'}{$ticker}{'open'} = $open; + + my $high = $ticker_detail->{'regularMarketDayHigh'}->{'fmt'}; + $miscData{'stocks'}{$ticker}{'high'} = $high; + + my $low = $ticker_detail->{'regularMarketDayLow'}->{'fmt'}; + $miscData{'stocks'}{$ticker}{'low'} = $low; + + my $prev = $ticker_detail->{'regularMarketPreviousClose'}->{'fmt'}; + $miscData{'stocks'}{$ticker}{'prevclose'} = $prev; + + my $pchange = $ticker_detail->{'regularMarketChangePercent'}->{'fmt'}; + $miscData{'stocks'}{$ticker}{'pchange'} = $pchange; + + my $volume = $ticker_detail->{'regularMarketVolume'}->{'fmt'}; + $miscData{'stocks'}{$ticker}{'volume'} = $volume; + + my $name = $ticker_detail->{'shortName'}; + if ($ticker =~/\.L/) { # Long name is more suitable for stocks on the London exchange + $name = $ticker_detail->{'longName'}; + } + $miscData{'stocks'}{$ticker}{'name'} = $name; + + $log->debug("ticker: " . $ticker); + $log->debug("lasttrade: " . $lasttrade); + $log->debug("lastdate: " . $lastdate); + $log->debug("lasttime: " . $lasttime); + $log->debug("change: " . $change); + $log->debug("open: " . $open); + $log->debug("high: " . $high); + $log->debug("low: " . $low); + $log->debug("volume: " . $volume); + $log->debug("name: " . $name); + $log->debug("prev: " . $prev); + $log->debug("pchange: " . $pchange); + + my $line1 = $prefs->get('stock1format'); + my $line2 = $prefs->get('stock2format'); + + for ($line1) { + s/%s/$ticker/; + s/%l/$lasttrade/; + s/%d/$lastdate/; + s/%t/$lasttime/; + s/%c/$change/; + s/%o/$open/; + s/%h/$high/; + s/%w/$low/; + s/%v/$volume/; + s/%n/$name/; + s/%p/$prev/; + s/%z/$pchange/; + } + + for ($line2) { + s/%s/$ticker/; + s/%l/$lasttrade/; + s/%d/$lastdate/; + s/%t/$lasttime/; + s/%c/$change/; + s/%o/$open/; + s/%h/$high/; + s/%w/$low/; + s/%v/$volume/; + s/%n/$name/; + s/%p/$prev/; + s/%z/$pchange/; + } + + addDisplayItem('getStocks', $line1, $line2, $showgame); + + $stockCounter ++; + if ($stockCounter < $stockCount) { # are there more stock tickers? + getStocks(undef, $client, $refreshItem); + } + else { + refreshData(undef, $client, $refreshItem); # done + } +} + +sub refreshSoon { + my $client = shift; + + #Save top showing preference incase server is shut down + if (defined $topNowShowing{$client}) { + $prefs->client($client)->set('topNowShowing', $topNowShowing{$client}); + } + + #Clear previous display info + @WETdisplayItems1 =(); + @WETdisplayItems2 =(); + + $averages{'last'} = ''; #Make sure averages/10day will get refreshed too + for(my $i=-1; $i<2; $i++) { #Wipe individual averages just in case new weather identifier does not support them + $wetData{$i}{'average_F'} = ''; + $wetData{$i}{'average_C'} = ''; + + $wetData{$i}{'record_F'} = ''; + $wetData{$i}{'record_C'} = ''; + + $wetData{$i}{'record_year'} = ''; + + $wetData{$i}{'sunrise'} = ''; + $wetData{$i}{'sunset'} = ''; + } + + #Need to reload updated prefs + @MLBteams = @{ $prefs->get('mlb') || [] }; + $refreshTracker[0] = 1; #Need to refresh MLB again + @NBAteams = @{ $prefs->get('nba') || [] }; + $refreshTracker[1] = 1; #Need to refresh NBA again + @NHLteams = @{ $prefs->get('nhl') || [] }; + $refreshTracker[2] = 1; #Need to refresh NHL again + @NFLteams = @{ $prefs->get('nfl') || [] }; + @CBBteams = @{ $prefs->get('cbb') || [] }; + @CFBteams = @{ $prefs->get('cfb') || [] }; + $showtime = $prefs->get('time'); + $showgame = $prefs->get('score'); + $showactivetime = $prefs->get('atime'); + $showactivegame = $prefs->get('ascore'); + + #Update 10day forecasts for C or F based on preference + my @players = Slim::Player::Client::clients(); + for my $player (@players) { + my @weatherformat1b = @{ $prefs->client($player)->get('weatherformat1b') || [] }; + my @weatherformat2t = @{ $prefs->client($player)->get('weatherformat2t') || [] }; + if ($prefs->get('temperature') == 1) { #Cel + $weatherformat1b[1] =~ s/%_5\/%_7/%_6\/%_8/; + $prefs->client($player)->set('weatherformat1b', \@weatherformat1b); + $weatherformat2t[1] =~ s/%_5\/%_7/%_6\/%_8/; + $prefs->client($player)->set('weatherformat2t', \@weatherformat2t); + } + else { + $weatherformat1b[1] =~ s/%_6\/%_8/%_5\/%_7/; + $prefs->client($player)->set('weatherformat1b', \@weatherformat1b); + $weatherformat2t[1] =~ s/%_6\/%_8/%_5\/%_7/; + $prefs->client($player)->set('weatherformat2t', \@weatherformat2t); + } + } + + # If refreshing due to a setting change make sure weather.com identifier is still correct. + if ($prefs->get('city') !~ /.+\:\d\:\D\D/) { # Check for proper weather.com citycode format + $log->error("Check your Weather.com Identifier. Your entry = " . $prefs->get('city')); + $prefs->set('city','60614:4:US'); #Default to Chicago... cuz Chicago is where it's at! + $log->error("Defaulting identifier to Chicago: " . $prefs->get('city')); + } + getLatLong; # Retrieve Latitude and Longitude for weather.com location + + #No need to refresh data unless there are active clients + if ($activeClients >0) { + Slim::Utils::Timers::killTimers(undef, \&refreshData); + #Refresh in 8 seconds. In case user keeps changing settings so there are less refreshes maybe..... + Slim::Utils::Timers::setTimer(undef, Time::HiRes::time() + 8, \&refreshData, $client, -1); + } +} + +sub refreshPlayerSettings { + my $timerObj = shift; #Should be undef + my $client = shift; + + my $prefs = preferences('plugin.superdatetime'); + + my @show1icon = @{ $prefs->client($client)->get('show1icon') || [] }; + if (scalar(@show1icon) == 0) { + if(!$client->display->isa('Slim::Display::Boom')) { + $show1icon[0] = 1; + $show1icon[1] = 1; + } + else { + $show1icon[0] = 0; + $show1icon[1] = 1; + } + $prefs->client($client)->set('show1icon', \@show1icon); + } + + my @show13line = @{ $prefs->client($client)->get('show13line') || [] }; + if (scalar(@show13line) == 0) { + $show13line[0] = 1; + $show13line[1] = 1; + $prefs->client($client)->set('show13line', \@show13line); + } + + my @d3line1t = @{ $prefs->client($client)->get('v3line1t') || [] }; + if (scalar(@d3line1t) == 0) { + $d3line1t[0] = ''; + $d3line1t[1] = ''; + $prefs->client($client)->set('v3line1t', \@d3line1t); + } + + my @d3line1m = @{ $prefs->client($client)->get('v3line1m') || [] }; + if (scalar(@d3line1m) == 0) { + $d3line1m[0] = '%z'; + $d3line1m[1] = ' %_4'; + $prefs->client($client)->set('v3line1m', \@d3line1m); + } + + my @d3line1b = @{ $prefs->client($client)->get('v3line1b') || [] }; + if (scalar(@d3line1b) == 0) { + $d3line1b[0] = 'RAIN %x'; + $d3line1b[1] = 'RAIN %_9'; + $prefs->client($client)->set('v3line1b', \@d3line1b); + } + + my @weatherformat1b = @{ $prefs->client($client)->get('weatherformat1b') || [] }; + if (scalar(@weatherformat1b) == 0) { + if(!$client->display->isa('Slim::Display::Boom')) { + $weatherformat1b[0] = '%t/%h %1'; + } + else { + $weatherformat1b[0] = '%t %1'; + } + $weatherformat1b[1] = '%_5/%_7'; + $prefs->client($client)->set('weatherformat1b', \@weatherformat1b); + } + + my @weatherformat1t = @{ $prefs->client($client)->get('weatherformat1t') || [] }; + if (scalar(@weatherformat1t) == 0) { + $weatherformat1t[0] = '%y: %v'; + $weatherformat1t[1] = '%_3: %_0'; + $prefs->client($client)->set('weatherformat1t', \@weatherformat1t); + } + + my @weatherformat2b = @{ $prefs->client($client)->get('weatherformat2b') || [] }; + if (scalar(@weatherformat2b) == 0) { + $weatherformat2b[0] = '%f %a(%c %g)'; + $weatherformat2b[1] = '%_0'; + $prefs->client($client)->set('weatherformat2b', \@weatherformat2b); + } + + my @weatherformat2t = @{ $prefs->client($client)->get('weatherformat2t') || [] }; + if (scalar(@weatherformat2t) == 0) { + $weatherformat2t[0] = '%s - %S'; + $weatherformat2t[1] = '%_3: %_5/%_7'; + $prefs->client($client)->set('weatherformat2t', \@weatherformat2t); + } + + my @d1period = @{ $prefs->client($client)->get('v1period') || [] }; + if (scalar(@d1period) == 0) { + $d1period[0] = -1; + $d1period[1] = -1; + $prefs->client($client)->set('v1period', \@d1period); + } + + if ($prefs->client($client)->get('scroll') eq '') { + if(!$client->display->isa('Slim::Display::Boom')) { + $scrollType{$client} = 'Slide'; + } + else { + $scrollType{$client} = 'Ticker'; + } + $prefs->client($client)->set('scroll', $scrollType{$client}); + } + else { + $scrollType{$client} = $prefs->client($client)->get('scroll'); + } + + my $fdays = $prefs->client($client)->get('fdays'); + + if ($fdays eq '') { + $prefs->client($client)->set('fdays', 3); + } + + if ($topNowShowing{$client} <0 || $topNowShowing{$client} > $fdays +3 ) { + $topNowShowing{$client} = 1; + $prefs->client($client)->set('topNowShowing', 1); + } +} + +sub refreshData { + my $timerObj = shift; #Should be undef + my $client = shift; + my $refreshItem = shift; + $refreshItem = $refreshItem + 1; + + if ($refreshItem == 0) { #New data refresh, weather.com + $log->info("Data refresh in process..."); + + # If a graphical client was stored, use it when refreshing data. + # This makes sure the special fonts are used when drawing screens. + if (defined $Gclient) { + $client = $Gclient; + } + + Slim::Utils::Timers::killTimers(undef, \&stuckMonitor); #Paranoia check + Slim::Utils::Timers::setTimer(undef, Time::HiRes::time() + (($prefs->get('refresh') * 60)*2), \&stuckMonitor, $client); #Set up stuck monitor + + my $data = { + 'state' => 'Refreshing' + }; + Slim::Control::Request::notifyFromArray(undef,['SuperDateTimeState','dataRefreshState',$data]); + + $errorCount = 0; #Reset network error counter for new refresh + + refreshPlayerSettings(undef, $client); #Didnt seem to want to refresh elsewhere + + %displayInfoBuild = (); #Paranoia, should already be empty + %macroHash = (); #Wipe out any custom macros that have been set previously + + my ($mday,$mon,$year,$hour, $isdst) = (gmtime(time-(60*60*8)))[3,4,5,2,8]; #Figure out Pacific time based on GMT time to line up with MLB, NBA, & NFL day resets + if ($mday < 10) { + $mday = '0' . $mday; + } + + $mon++; #Starts at 0 + if ($mon < 10) { + $mon = '0' . $mon; + } + $year = $year + 1900; + + $log->debug("Pacific Hour/Date:$hour/$mday"); + + if ((($lastRefresh ne ($year . $mon . $mday)) && $hour >4) || $lastRefresh eq '') { #5AM EST start refreshing a new day + @refreshTracker = (); + #Should this be moved into their own subs.... would need separate $lastRefreshes then + $refreshTracker[0] = 1; #Need to refresh MLB again + $refreshTracker[1] = 1; #Need to refresh NBA again + $refreshTracker[2] = 1; #Need to refresh NHL again + $lastRefresh = $year.$mon.$mday; + } + + $refreshTracker[3] = 1; #Need to set Stock refresh tracker + + #Update status indicator to show that a data refresh is in progress + $status = '*'; + + #Is this okay since old data is still being displayed? + $newActiveGames = 0; #Reset active game flag for upcoming sports data refresh + + getWeatherNow(undef, $client, $refreshItem); + } + elsif (defined $providers{$refreshItem}) { #Dynamic provider + $providers{$refreshItem}->(undef, $client, $refreshItem); + } + else { #DONE + if ($newActiveGames == 1) { + $activeGames = 1; + } + + $log->info("Drawing screens..."); + $log->debug("Start time:" . Time::HiRes::time()); + + @WETdisplayItems1 = @WETdisplayItems1temp; + @WETdisplayItems2 = @WETdisplayItems2temp; + + #Clear the temps for the next update + @WETdisplayItems1temp = (); + @WETdisplayItems2temp = (); + + #Refresh complete so it's safe to draw/cache icons for each up/down mode + + my @players = Slim::Player::Client::clients(); + + #Determine time to wait between each screen drawing + $drawEachPendingDelay = $prefs->get('drawEachDelay'); + $log->debug("drawEachPendingDelay = $drawEachPendingDelay"); + + #Stagger the screen drawing timers so they're not blocking to other nonSDT processing + my $cumTime = Time::HiRes::time() + .03; + + for my $player (@players) { + + #Draw default modes + #Current 0 + $drawEachPending++; + Slim::Utils::Timers::setTimer(undef, $cumTime, \&drawEach, $player, -1, 0); + $cumTime = $cumTime + $drawEachPendingDelay; + #Default 1 + $drawEachPending++; + Slim::Utils::Timers::setTimer(undef, $cumTime, \&drawEach, $player, 0, 0); + $cumTime = $cumTime + $drawEachPendingDelay; + #Default 2 + $drawEachPending++; + Slim::Utils::Timers::setTimer(undef, $cumTime, \&drawEach, $player, 1, 0); + $cumTime = $cumTime + $drawEachPendingDelay; + #Default 3 + $drawEachPending++; + Slim::Utils::Timers::setTimer(undef, $cumTime, \&drawEach, $player, 2, 0); + $cumTime = $cumTime + $drawEachPendingDelay; + + #Draw custom modes + my @d1period = @{ $prefs->client($player)->get('v1period') || [] }; + + for(my $i=2; $i < scalar @d1period; $i++) { + $drawEachPending++; + Slim::Utils::Timers::setTimer(undef, $cumTime, \&drawEach, $player, $d1period[$i], $i); + $cumTime = $cumTime + $drawEachPendingDelay; + } + + #Draw 10 Day Forecasts for each player + #Make sure we have a value in case player settings have never been set + + if ($prefs->client($player)->get('fdays') eq '') { + $prefs->client($player)->set('fdays', 3); + } + + for (my $i=1; $i <= $prefs->client($player)->get('fdays')+1; $i++) { + $drawEachPending++; + Slim::Utils::Timers::setTimer(undef, $cumTime, \&drawEach, $player, 'd'.$i, 1); + $cumTime = $cumTime + $drawEachPendingDelay; + } + } + } +} + +#Called when no more icons need to be drawn +sub doneDrawing { + my $client = shift; + + $log->info("Done drawing screens."); + + $log->debug("Finish time:" . Time::HiRes::time()); + + #Icons have been drawn, replace old display data with fresh data + %displayInfo = %displayInfoBuild; + %displayInfoBuild = (); #Done building, no longer needed + + #Make non sports/stock line data available via external API + + my $total = 0; + + if ($displayInfo{'cycleOrigin'}) { + $total = scalar @{$displayInfo{'cycleOrigin'}}; + } + + for(my $counter=0 ; $counter < $total; $counter++) { + if (!($displayInfo{'cycleOrigin'}[$counter] =~ /getMLB|getNFL|getNBA|getNHL|getCBB|getCFB|getStocks|getLongWeather/)) { + $miscData{$displayInfo{'cycleOrigin'}[$counter]}{$counter}{'line1'} = $displayInfo{'cycleItems1'}[$counter]; + $miscData{$displayInfo{'cycleOrigin'}[$counter]}{$counter}{'line2'} = $displayInfo{'cycleItems2'}[$counter]; + + #Differentiate between long and short text + if ($displayInfo{'cycleInts'}[$counter] eq 'L') { + $miscData{$displayInfo{'cycleOrigin'}[$counter]}{$counter}{'type'} = 'long'; + } + else { + $miscData{$displayInfo{'cycleOrigin'}[$counter]}{$counter}{'type'} = 'short'; + } + } + } + + if ($status eq '*') { + $log->info("Data refresh completed."); + + my $data = { + 'state' => 'Success' + }; + Slim::Control::Request::notifyFromArray(undef,['SuperDateTimeState','dataRefreshState',$data]); + + $status = ''; + } + else { + $log->warn("Data refresh completed with errors."); + my $data = { + 'state' => 'Errors' + }; + Slim::Control::Request::notifyFromArray(undef,['SuperDateTimeState','dataRefreshState',$data]); + } + + $activeGames = $newActiveGames; + + Slim::Utils::Timers::killTimers(undef, \&stuckMonitor); #Kill stuck monitor as plugin made it through the refresh + Slim::Utils::Timers::killTimers(undef, \&refreshData); #Paranoia check + Slim::Utils::Timers::setTimer(undef, Time::HiRes::time() + ($prefs->get('refresh') * 60), \&refreshData, $client, -1); #Set up next refresh timer +} + +sub stuckMonitor { + my $timerObj = shift; #Should be undef + my $client = shift; + + $log->warn("Plugin appears to be stuck. Forcing refresh..."); + Slim::Utils::Timers::killTimers(undef, \&refreshData); #Paranoia check + Slim::Utils::Timers::setTimer(undef, Time::HiRes::time() + 3, \&refreshData, $client, -1); #Set up next refresh timer +} + +sub getMLB { #Set up Async HTTP request for MLB + my $timerObj = shift; #Should be undef + my $client = shift; + my $refreshItem = shift; + + my ($mday,$mon,$year,$hour, $isdst) = (gmtime(time-(60*60*8)))[3,4,5,2,8]; # Roll over date embedded in URL at 1AM Pacific instead of 12AM Eastern + $mday = sprintf("%02d",$mday); + $mon = sprintf("%02d",$mon+1); + $year = $year+1900; + + if (scalar(@MLBteams)>0 && $mon <12 && $mon >2 && $refreshTracker[0] !=0) { #Make sure a baseball team is chosen and it is baseball season + my $url = 'http://mlb.mlb.com/gdcross/components/game/mlb/year_'.$year.'/month_'.$mon.'/day_'.$mday.'/master_scoreboard.json' ; + + my $http = Slim::Networking::SimpleAsyncHTTP->new(\&gotMLB, + \&gotErrorViaHTTP, + {caller => 'getMLB', + callerProc => \&getMLB, + client => $client, + refreshItem => $refreshItem}); + + $log->info("aync request: $url"); + $http->get($url, 'User-Agent' => 'Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0'); + } + else { + $log->info("Skipping MLB..."); + if (scalar(@MLBteams)>0) { + saveCycles('getMLB'); + } + else { + delete $sportsData{'MLB'}; + } + refreshData(undef, $client, $refreshItem); + } +} + +sub gotMLB { + my $http = shift; + + my $params = $http->params(); + my $client = $params->{'client'}; + my $refreshItem = $params->{'refreshItem'}; + + delete $sportsData{'MLB'}; + $sportsData{'MLB'}{'logoURL'} = 'plugins/SuperDateTime/html/images/MLB.png'; + + $log->info("got " . $http->url()); + + my $MLB_json = $http->content(); + my $perldata = decode_json($MLB_json); + +# Check JSON text for '"game":' +# If it doesn't exist then no games today. +# If it does exist check $games_array for ref type. +# ARRAY = multiple games, handle with while loop. +# HASH = single game (i.e. All Star Game). +# Single game data is in HASH $game_array. + + if ($MLB_json =~ /\"game\"\:/) { # Check to see if there are any games. + $log->debug("One or more games today"); + my $games_array = $perldata->{'data'}->{'games'}->{'game'}; # Store the ARRAY of games or HASH for single game. + $log->debug("\$games_array is a: " . ref($games_array)); + if (ref($games_array) eq 'ARRAY') { # Multiple games today + $refreshTracker[0] = 0; + my $game_count = scalar(@$games_array); # How many games today? + my $game_num = 0; + $log->debug("Game count: " . $game_count); + while ($game_num < $game_count) { + my $game = @$games_array[$game_num]; #split array into individual games + my $game_stat = $game->{'status'}->{'status'}; #Pregame, Preview, In Progress, Game Over, Delayed?, Postponed? + my $game_time = $game->{'time'}; # Eastern time zone start time + my $ampm = $game->{'ampm'}; + my $inning = $game->{'status'}->{'inning'}; # Inning# + my $inning_st = $game->{'status'}->{'inning_state'}; # Top, Middle,Bottom, End + my $away_team = $game->{'away_team_name'}; + my $home_team = $game->{'home_team_name'}; + my $away_score = $game->{'linescore'}->{'r'}->{'away'}; + my $home_score = $game->{'linescore'}->{'r'}->{'home'}; + my $clock_time = $game_time . " " . $ampm ; + my $Cclock_time = convertTime($clock_time); + + if ($game_stat eq 'In Progress') { # active games + $clock_time = $inning_st." ".$inning; + } + elsif ($game_stat eq 'Game Over' or $game_stat eq 'Final' or $game_stat eq 'Completed Early'){ # completed games + if ($inning > 9 or $game_stat eq 'Completed Early') { + $clock_time = 'Final '. $inning; + } + else { + $clock_time = 'Final'; + } + } + elsif ($game_stat eq 'Delayed Start' or $game_stat eq 'Postponed') { + $clock_time = $game_stat; + $home_score = ''; + $away_score = ''; + } + elsif ($game_stat eq 'Delayed' or $game_stat eq 'Suspended') { # Delayed or suspended game + $clock_time = $game_stat.' '.$inning; + } + else { # upcoming games + $home_score = ''; + $away_score = ''; + } + + $Cclock_time = convertTime($clock_time); + + $log->debug("Game# " . $game_num); + $log->debug("Status: " . $game_stat); + $log->debug("Teams: " . $away_team . " @ " . $home_team); + $log->debug("Inning: " . $inning); + $log->debug("Inning Part: " . $inning_st); + $log->debug("Raw Clock: " . $clock_time); + $log->debug("Converted Clock: " . $Cclock_time); + $log->debug("Score: " . $away_score . " - " . $home_score); + $log->debug(" "); + + my $MLBICONmap = ''; + my $home_logo = $MLBICONmap{$home_team}; + my $away_logo = $MLBICONmap{$away_team}; + $home_logo = "http://a.espncdn.com/combiner/i?img=/i/teamlogos/mlb/500/scoreboard/".$home_logo.".png"; + $away_logo = "http://a.espncdn.com/combiner/i?img=/i/teamlogos/mlb/500/scoreboard/".$away_logo.".png"; + + $sportsData{'MLB'}{$home_team.$clock_time}{'gameTime'} = convertTime($clock_time); + $sportsData{'MLB'}{$home_team.$clock_time}{'homeTeam'} = $home_team; + $sportsData{'MLB'}{$home_team.$clock_time}{'awayTeam'} = $away_team; + $sportsData{'MLB'}{$home_team.$clock_time}{'homeScore'} = $home_score; + $sportsData{'MLB'}{$home_team.$clock_time}{'awayScore'} = $away_score; + $sportsData{'MLB'}{$home_team.$clock_time}{'homeLogoURL'} = $home_logo; + $sportsData{'MLB'}{$home_team.$clock_time}{'awayLogoURL'} = $away_logo; + $sportsData{'MLB'}{$home_team.$clock_time}{'gameLogoURL'} = $home_logo; + + if ((teamCheck($home_team,\@MLBteams)==1) || (teamCheck($away_team,\@MLBteams)==1)) { + displayLines($client, $clock_time, $away_team, $home_team, $away_score, $home_score, 'MLB', 'getMLB', \&shortenMLB, \%MLBmap); + } + $game_num++ ; + } + } + elsif (ref($games_array) eq 'HASH') { # Single game today. + $log->debug('Single game today'); + $refreshTracker[0] = 0; + my $game = $games_array; + my $game_stat = $game->{'status'}->{'status'}; #Pregame, Preview, In Progress, Game Over, Delayed?, Postponed? + my $game_time = $game->{'time'}; # Eastern time zone start time + my $ampm = $game->{'ampm'}; + my $inning = $game->{'status'}->{'inning'}; # Inning# + my $inning_st = $game->{'status'}->{'inning_state'}; # Top, Middle, Bottom, End + my $away_team = $game->{'away_team_name'}; + my $home_team = $game->{'home_team_name'}; + my $away_score = $game->{'linescore'}->{'r'}->{'away'}; + my $home_score = $game->{'linescore'}->{'r'}->{'home'}; + my $clock_time = $game_time . " " . $ampm ; + my $Cclock_time = convertTime($clock_time); + + if ($game_stat eq 'In Progress') { # active games + $clock_time = $inning_st." ".$inning; + } + elsif ($game_stat eq 'Game Over' or $game_stat eq 'Final' or $game_stat eq 'Completed Early'){ # completed games + if ($inning > 9 or $game_stat eq 'Completed Early') { + $clock_time = 'Final '. $inning; + } + else { + $clock_time = 'Final'; + } + } + elsif ($game_stat eq 'Delayed Start' or $game_stat eq 'Postponed') { + $clock_time = $game_stat; + $home_score = ''; + $away_score = ''; + } + elsif ($game_stat eq 'Delayed' or $game_stat eq 'Suspended') { # Delayed or suspended game + $clock_time = $game_stat.' '.$inning; + } + else { # upcoming games + $home_score = ''; + $away_score = ''; + } + + $Cclock_time = convertTime($clock_time); + + $log->debug("Status: " . $game_stat); + $log->debug("Teams: " . $away_team . " @ " . $home_team); + $log->debug("Inning: " . $inning); + $log->debug("Inning Part: " . $inning_st); + $log->debug("Raw Clock: " . $clock_time); + $log->debug("Converted Clock: " . $Cclock_time); + $log->debug("Score: " . $away_score . " - " . $home_score); + $log->debug(" "); + + my $MLBICONmap = ''; + my $home_logo = $MLBICONmap{$home_team}; + my $away_logo = $MLBICONmap{$away_team}; + $home_logo = "http://a.espncdn.com/combiner/i?img=/i/teamlogos/mlb/500/scoreboard/".$home_logo.".png"; + $away_logo = "http://a.espncdn.com/combiner/i?img=/i/teamlogos/mlb/500/scoreboard/".$away_logo.".png"; + + $sportsData{'MLB'}{$home_team.$clock_time}{'gameTime'} = convertTime($clock_time); + $sportsData{'MLB'}{$home_team.$clock_time}{'homeTeam'} = $home_team; + $sportsData{'MLB'}{$home_team.$clock_time}{'awayTeam'} = $away_team; + $sportsData{'MLB'}{$home_team.$clock_time}{'homeScore'} =$home_score; + $sportsData{'MLB'}{$home_team.$clock_time}{'awayScore'} =$away_score; + $sportsData{'MLB'}{$home_team.$clock_time}{'homeLogoURL'} = $home_logo; + $sportsData{'MLB'}{$home_team.$clock_time}{'awayLogoURL'} = $away_logo; + $sportsData{'MLB'}{$home_team.$clock_time}{'gameLogoURL'} = $home_logo; + + if ((teamCheck($home_team,\@MLBteams)==1) || (teamCheck($away_team,\@MLBteams)==1)) { + displayLines($client, $clock_time, $away_team, $home_team, $away_score, $home_score, 'MLB', 'getMLB', \&shortenMLB, \%MLBmap); + } + } + else { + $status = '-'; + $log->info("Error parsing MLB data."); + } + } + else { + $log->info("No games today"); + $refreshTracker[0] = 0; + } + refreshData(undef, $client, $refreshItem); +} + +sub registerProvider { + my $subRef = shift; + + my $size = (scalar keys %providers) + 1; + + $providers{$size} = $subRef; +} + +sub addDisplayItem { + my ($origin, $item1, $item2, $int, $expires, $time) = @_; + + if (!defined $expires) { + $expires = 0; + } + + if (!defined $time) { + $time = Time::HiRes::time(); + } + + push(@{$displayInfoBuild{'cycleOrigin'}}, $origin); + push(@{$displayInfoBuild{'cycleItems1'}}, $item1); + push(@{$displayInfoBuild{'cycleItems2'}}, $item2); + push(@{$displayInfoBuild{'cycleInts'}}, $int); + push(@{$displayInfoBuild{'cycleTimeAdded'}}, $time); + push(@{$displayInfoBuild{'cycleTimeExpires'}}, $expires); +} + +#Allows plugins to add their own % macro replacement value +sub addMacro { + my ($macro, $value) = @_; + $macroHash{$macro} = $value; +} + +#Preserves previous display info for a given source. Optionally a time can be specified which will be compared against the +#cycleTimeAdded value.either before (b) or after (a) based on $ba argument. +sub saveCycles { + my ($origin, $time, $ba) = @_; + + $log->debug("Preserving previous $origin info... $ba $time"); + + if (exists $displayInfo{'cycleOrigin'}) { + my $total = scalar @{$displayInfo{'cycleOrigin'}}; + for(my $counter=0 ; $counter < $total; $counter++) { + if ($displayInfo{'cycleOrigin'}[$counter] eq $origin) { + if (defined $time) { + if ($ba eq 'b' && $displayInfo{'cycleTimeAdded'}[$counter] < $time) { + addDisplayItem($origin, $displayInfo{'cycleItems1'}[$counter], $displayInfo{'cycleItems2'}[$counter], $displayInfo{'cycleInts'}[$counter], $displayInfo{'cycleTimeExpires'}[$counter], $displayInfo{'cycleTimeAdded'}[$counter]); + } + elsif ($ba eq 'a' && $displayInfo{'cycleTimeAdded'}[$counter] > $time) { + addDisplayItem($origin, $displayInfo{'cycleItems1'}[$counter], $displayInfo{'cycleItems2'}[$counter], $displayInfo{'cycleInts'}[$counter], $displayInfo{'cycleTimeExpires'}[$counter], $displayInfo{'cycleTimeAdded'}[$counter]); + } + } + else { + addDisplayItem($origin, $displayInfo{'cycleItems1'}[$counter], $displayInfo{'cycleItems2'}[$counter], $displayInfo{'cycleInts'}[$counter], $displayInfo{'cycleTimeExpires'}[$counter], $displayInfo{'cycleTimeAdded'}[$counter]); + } + } + } + } +} + +#Preserves non-expired display info for a given source +sub processExpired { + my $origin = shift; + + my $time = Time::HiRes::time(); + + $log->debug("Preserving non-expired $origin info..."); + + my $total = scalar @{$displayInfo{'cycleOrigin'}}; + for(my $counter=0 ; $counter < $total; $counter++) { + if (($displayInfo{'cycleOrigin'}[$counter] eq $origin) && $displayInfo{'cycleTimeExpires'}[$counter] > $time) { + addDisplayItem($origin, $displayInfo{'cycleItems1'}[$counter], $displayInfo{'cycleItems2'}[$counter], $displayInfo{'cycleInts'}[$counter], $displayInfo{'cycleTimeExpires'}[$counter], $displayInfo{'cycleTimeAdded'}[$counter]); + } + } +} + +sub teamCheck { + my $teamToCheck = shift; + my $teamArrayRef = shift; + + #Get rid of any ranking, if present (college). + if ($teamToCheck =~ /(\(\d+\)) (.+)/) { + $teamToCheck = $2; + } + + $log->debug("Made it to teamcheck"); + $log->debug($teamToCheck); + + my $endingValue = scalar(@$teamArrayRef); + + for(my $counter=0 ; $counter < $endingValue; $counter++) + { + $log->debug("Made it to teamcheck - team loop"); + $log->debug(@$teamArrayRef[$counter]); + if (($teamToCheck eq @$teamArrayRef[$counter]) || (@$teamArrayRef[$counter] eq '1') || (@$teamArrayRef[$counter] eq 'All') || (@$teamArrayRef[$counter] eq 'all')) { + $log->debug("Made it to teamcheck - return 1"); + return 1; + } + } + + return 0; +} + +sub displayLines { + #Figure out/Format display lines + my ($client, $gametime, $team1, $team2, $score1, $score2, $topline, $origin, $shortenRef, $iconHashRef) = @_; + + $gametime = convertTime($gametime); #Clean up time display and convert to local time zone + + my $logoteam1 = ''; + my $logoteam2 = ''; + + if ($prefs->get('teamlogos') == 0 || !defined $iconHashRef) { #No logos + $logoteam1 = $shortenRef->($team1); + $logoteam2 = $shortenRef->($team2) + } + elsif ($prefs->get('teamlogos') == 1) { #Logo no text + if (defined $iconHashRef->{$team1}) { #Are there logos for team1? + $logoteam1 = $client->symbols("$origin-".$iconHashRef->{$team1}); + } + else { #No logo available + $logoteam1 = $shortenRef->($team1); + } + + if (defined $iconHashRef->{$team2}) { #Are there logos for team2 + $logoteam2 = $client->symbols("$origin-".$iconHashRef->{$team2}); + } + else { #No logo available + $logoteam2 = $shortenRef->($team2); + } + } + else { #Logo and text + if (defined $iconHashRef->{$team1}) { #Are there logos for team1? + $logoteam1 = $client->symbols("$origin-".$iconHashRef->{$team1}); + } + + if (defined $iconHashRef->{$team2}) { #Are there logos for team2 + $logoteam2 = $client->symbols("$origin-".$iconHashRef->{$team2}); + } + + $logoteam1 = $logoteam1 . $shortenRef->($team1); + $logoteam2 = $logoteam2 . $shortenRef->($team2); + } + + if (($gametime =~ m/^F/ or $gametime =~ m/^P/ or $gametime =~ m/^S/) && $showgame>0) { #Finished game + $log->debug('This game is finished: '.$team1.' @ '.$team2); + addDisplayItem($origin, $topline, $logoteam1 . ' ' . $score1 . ' @ ' . $logoteam2 . ' ' . $score2 . ' - ' . $gametime, $showgame); + } + elsif ($score1 eq '' && $showgame>0) { #upcoming game + if ($origin eq 'getMLB') { + $refreshTracker[0] = 1; + } + elsif ($origin eq 'getNBA') { + $refreshTracker[1] = 1; + } + elsif ($origin eq 'getNHL') { + $refreshTracker[2] = 1; + } + $log->debug('This game is upcoming: '.$team1.' @ '.$team2); + addDisplayItem($origin, $topline, $logoteam1 . ' @ ' . $logoteam2 . '-' . $gametime, $showgame); + } + elsif ($gametime ne 'F' && $showactivegame >0 && $score1 ne '') { #active game + if ($origin eq 'getMLB') { + $refreshTracker[0] = 1; + } + elsif ($origin eq 'getNBA') { + $refreshTracker[1] = 1; + } + elsif ($origin eq 'getNHL') { + $refreshTracker[2] = 1; + } + $log->debug('This game is active: '.$team1.' @ '.$team2); + $newActiveGames = 1; + addDisplayItem($origin, $topline, $logoteam1 . ' ' . $score1 . ' @ ' . $logoteam2 . ' ' . $score2 . ' - ' . $gametime, $showactivegame); + } + else { + $log->error('UH OH! This game status is unknown: '.$team1.' @ '.$team2); + } +} + +sub getNBA { #Set up Async HTTP request for NBA + my $timerObj = shift; #Should be undef + my $client = shift; + my $refreshItem = shift; + + my ($mday,$mon,$year,$hour, $isdst) = (gmtime(time-(60*60*8)))[3,4,5,2,8]; # Roll over date embedded in URL at 1AM Pacific instead of 12AM Eastern + $mday = sprintf("%02d",$mday); + $mon = sprintf("%02d",$mon+1); + $year = $year+1900; + my $season = $year; + if ($mon < 07) { + $season-- + } + +################ Debug with other dates ##################### +# $year = 2017; +# $mon = 12; +# $mday = 15; +############################################################# + + if (scalar(@NBAteams)>0 && $refreshTracker[1] !=0) { #Make sure a basketball team is chosen + my $url = 'http://data.nba.net/prod/v2/' . $year . $mon . $mday . '/scoreboard.json'; + my $http = Slim::Networking::SimpleAsyncHTTP->new(\&gotNBA, + \&gotErrorViaHTTP, + {caller => 'getNBA', + callerProc => \&getNBA, + client => $client, + refreshItem => $refreshItem}); + + $log->info("async request: $url"); + $http->get($url, 'User-Agent' => 'Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0'); + } + else { + $log->info("Skipping NBA..."); + if (scalar(@NBAteams)>0) { + saveCycles('getNBA'); + } + else { + delete $sportsData{'NBA'}; + } + refreshData(undef, $client, $refreshItem); + } +} + +sub gotNBA { + my $http = shift; + + my $params = $http->params(); + my $client = $params->{'client'}; + my $refreshItem = $params->{'refreshItem'}; + + delete $sportsData{'NBA'}; + $sportsData{'NBA'}{'logoURL'} = 'plugins/SuperDateTime/html/images/nba.png'; + + $refreshTracker[1] = 0; + + $log->info("got " . $http->url()); + + # Retrieve and decode NBA JSON data file + my $NBA_json = $http->content(); + my $perldata = decode_json($NBA_json); + + my $games_array = $perldata->{'games'}; + my $game_count = scalar(@$games_array); + my $game_num = 0; + my $isDST = localtime[8]; + $log->debug("Number of games today: " . $game_count); + + while ($game_num < $game_count) { + my $gameID = @$games_array[$game_num]->{'gameId'}; + my $activeGame = @$games_array[$game_num]->{'isGameActivated'}; + my $GameStatus = @$games_array[$game_num]->{'statusNum'}; + my $StartTime = @$games_array[$game_num]->{'startTimeUTC'}; + my $away_team = @$games_array[$game_num]->{'vTeam'}->{'triCode'}; + my $home_team = @$games_array[$game_num]->{'hTeam'}->{'triCode'}; + my $away_score = @$games_array[$game_num]->{'vTeam'}->{'score'}; + my $home_score = @$games_array[$game_num]->{'hTeam'}->{'score'}; + my $game_clock = @$games_array[$game_num]->{'clock'}; + my $period = @$games_array[$game_num]->{'period'}->{'current'}; + my $isHalftime = @$games_array[$game_num]->{'period'}->{'isHalftime'}; + my $isEndOfPeriod = @$games_array[$game_num]->{'period'}->{'isEndOfPeriod'}; + my $tv_array = @$games_array[$game_num]->{'watch'}->{'broadcast'}->{'broadcasters'}->{'national'}; + my $tv_network = ''; + if (@$tv_array) { + $tv_network = @$tv_array[0]->{'shortName'}; + } + my $NBAteamMap = ''; + my $away_team_name = $NBAteamMap{$away_team}; # Look up long team names + my $home_team_name = $NBAteamMap{$home_team}; + + my $away_logo = 'http://a.espncdn.com/combiner/i?img=/i/teamlogos/nba/500/' . $away_team . '.png'; # Use ESPN.com logos instead. + my $home_logo = 'http://a.espncdn.com/combiner/i?img=/i/teamlogos/nba/500/' . $home_team . '.png'; + + my $period_time = ''; + $period_time = $game_clock; + + # Calculate Eastern Start Time + my $StartHr = ''; + my $StartMin = ''; + my $AmPm = 'AM'; + if ($StartTime =~ /.+T(\d+)\:(\d+).+/) { # Extract hours and minutes from UTC time + $StartHr = $1; + $StartMin = $2; + if ($isDST) { + $StartHr = $StartHr - 4;# convert to Eastern time + } + else { + $StartHr = $StartHr - 5; + } + if ($StartHr < 0) { # check for crossing to previous day + $StartHr = $StartHr + 24; + } + if ($StartHr > 12) { # convert to 12 Hr format + $StartHr = $StartHr - 12; + $AmPm = 'PM'; + } + elsif ($StartHr == 0) { # Midnight + $StartHr = $StartHr + 12 + } + $StartTime = $StartHr . ":" . $StartMin . ' ' . $AmPm; + } + + $log->debug("GameID = " . $gameID); + $log->debug("activeGame = " . $activeGame); + $log->debug("Game Status = " . $GameStatus); + $log->debug("Start Time: " . $StartTime); + $log->debug("Start Hour: " . $StartHr); + $log->debug("Start Minute: " . $StartMin); + $log->debug("Away Team: " . $away_team); + $log->debug("Away Score: " . $away_score); + $log->debug("Home Team: " . $home_team); + $log->debug("Home Score: " . $home_score); + $log->debug("Period: " . $period); + $log->debug("Game clock: " . $game_clock); + $log->debug("Period time: " . $period_time); + $log->debug("Half time? " . $isHalftime); + $log->debug("End Of Period? " . $isEndOfPeriod); + $log->debug("TV Network: " . $tv_network); + $log->debug("Away Logo: " . $away_logo); + $log->debug("Home Logo: " . $home_logo); + + + $log->debug("Away team name: " . $away_team_name); + if ($away_team_name eq "") { + $away_team_name = $away_team; # Deal with exhibition games with non-NBA team. + } + $log->debug("Away team name: " . $away_team_name); + + $log->debug("Home team name: " . $home_team_name); + if ($home_team_name eq "") { + $home_team_name = $home_team; # Deal with exhibition games with non-NBA team. + } + $log->debug("Home team name: " . $home_team_name); + + if ($period eq 0) { # upcoming game - blank out scores + $log->debug("Detected Upcoming Game"); + $away_score = ""; + $home_score = ""; + $game_clock = $StartTime; + } + elsif ($GameStatus == 3) { # finished game + $log->debug("Detected Finished Game"); + $game_clock = 'Final'; + if ($period > 4) { # Overtime + if ($period > 5) { # Multiple overtime + my $OTPeriod = $period - 4; + $game_clock = "Final " . $OTPeriod . "OT"; + $log->warn("Period: " . $period); + $log->warn("Detected Multiple Overtime"); + $log->warn("OT Period: " . $OTPeriod); + $log->warn($away_team_name.' '.$away_score.' @ '.$home_team_name.' '.$home_score.' - '.convertTime($game_clock)); + } + else { + $game_clock = "FINAL OT"; + $log->warn("Period: " . $period); + $log->warn("Detected Overtime"); + $log->warn($away_team_name.' '.$away_score.' @ '.$home_team_name.' '.$home_score.' - '.convertTime($game_clock)); + } + } + } + elsif ($isHalftime) { + $log->debug("Detected Game in Halftime"); + $game_clock = "Halftime"; + } + elsif ($isEndOfPeriod) { + $log->debug("Detected End of Period"); + $game_clock = "End " . $period; + } + else { # active game + $log->debug("Detected Active Game"); + $game_clock = $period_time . ' ' . $period; + if ($period > 4) { # Overtime + if ($period > 5) { # Multiple overtime + my $OTPeriod = $period - 4; + $game_clock = $period_time . ' ' . $OTPeriod . "OT"; + $log->warn("Period: " . $period); + $log->warn("Game clock: " . $game_clock); + $log->warn("Detected Multiple Overtime"); + $log->warn($away_team_name.' '.$away_score.' @ '.$home_team_name.' '.$home_score.' - '.convertTime($game_clock)); + } + else { + $game_clock = $period_time . ' ' . "OT"; + $log->warn("Period: " . $period); + $log->warn("Detected Overtime"); + $log->warn($away_team_name.' '.$away_score.' @ '.$home_team_name.' '.$home_score.' - '.convertTime($game_clock)); + } + } + } + + my $clock_time = $game_clock; + $log->debug("Game time: " . $clock_time); + $log->debug("Converted Game time: " . convertTime($clock_time)); + $log->debug($away_team_name.' '.$away_score.' @ '.$home_team_name.' '.$home_score.' - '.convertTime($clock_time)); + + $sportsData{'NBA'}{$home_team.$clock_time}{'homeTeamCK'} =$home_team; + $sportsData{'NBA'}{$home_team.$clock_time}{'awayTeamCK'} =$away_team; + $sportsData{'NBA'}{$home_team.$clock_time}{'homeTeam'} = $home_team_name; + $sportsData{'NBA'}{$home_team.$clock_time}{'awayTeam'} = $away_team_name; + $sportsData{'NBA'}{$home_team.$clock_time}{'awayScore'} = $away_score; + $sportsData{'NBA'}{$home_team.$clock_time}{'homeScore'} = $home_score; + $sportsData{'NBA'}{$home_team.$clock_time}{'gameTime'} = convertTime($clock_time); + $sportsData{'NBA'}{$home_team.$clock_time}{'homeLogoURL'} = $home_logo; + $sportsData{'NBA'}{$home_team.$clock_time}{'awayLogoURL'} = $away_logo; + $sportsData{'NBA'}{$home_team.$clock_time}{'gameLogoURL'} = $home_logo; + + if ((teamCheck($home_team,\@NBAteams)==1) || (teamCheck($away_team,\@NBAteams)==1)) { + if ($tv_network eq '') { + displayLines($client, $clock_time, $away_team_name, $home_team_name, $away_score, $home_score, 'NBA', 'getNBA', \&shortenNBA, undef); + } + else { + displayLines($client, $clock_time, $away_team_name, $home_team_name, $away_score, $home_score, 'NBA ('.$tv_network.')', 'getNBA', \&shortenNBA, undef); + } + } + + $log->debug(" "); #To improve log file readability - add line between games + $game_num++ ; + } + refreshData(undef, $client, $refreshItem); +} + +sub rtrim($) { + my $string = shift; + $string =~ s/\s+$//; + return $string; +} + +sub getCBB { #Set up Async HTTP request for CBB + my $timerObj = shift; #Should be undef + my $client = shift; + my $refreshItem = shift; + +# Extract year, month, day for JSON URL & day of the year for checking in season status + my ($mday,$mon,$year,$hour, $isdst, $yday) = (gmtime(time-(60*60*8)))[3,4,5,2,8,7]; # Roll over date embedded in URL at 1AM Pacific instead of 12AM Eastern + $year = $year+1900; + $mon = sprintf("%02d",$mon+1); + $mday = sprintf("%02d",$mday); + +######## Test other dates ######## +# $year = '2018'; #yyyy +# $mon = '11'; #mm +# $mday = '06'; #dd +# $yday = '309'; +################################## + +# Calculate the beginning of the season. i.e 2nd Friday of November +# Starting with the 2018-2019 season, the NCAA moved the start of the +# season to the Tuesday preceding the 2nd friday of November. + my $season = $year; + if ($mon < 5) { + $season-- + } + my $StartDate = timelocal(00,00,12,1,10,$season); #Start with the 1st of November in the season year. + my $dow = (localtime($StartDate))[6]; # Determine the Day of Week + my $AdjustDays = $dow-5; # Calculate the adjustment days needed to get to Friday + my $FirstFriday = ($StartDate - ($AdjustDays*86400)); # Find the first Friday. PS - 86400 seconds per day. + my ($ckDay, $ckMon, $ckYear, $cbbSDay) = (localtime($FirstFriday))[3,4,5,7]; + $ckYear = $ckYear+1900; + $ckMon = sprintf("%02d",$ckMon+1); + $ckDay = sprintf("%02d",$ckDay); + $cbbSDay = $cbbSDay + 4; # Start with the 1st Friday of November and add 4 to find the following Tuesday + + $log->debug("AdjustDays: " . $AdjustDays); + $log->debug("First Friday: " . $ckMon."-".$ckDay."-".$ckYear); + $log->debug("Start day: " . $cbbSDay); + + if (scalar(@CBBteams)>0 && ($yday >= $cbbSDay || $mon < 5)) { #Make sure a college basketball team is entered & we're in season + my $url = 'http://data.ncaa.com/casablanca/scoreboard/basketball-men/d1/'.$year.'/'.$mon.'/'.$mday.'/scoreboard.json'; + my $http = Slim::Networking::SimpleAsyncHTTP->new(\&gotCBB, + \&gotErrorViaHTTP, + {caller => 'getCBB', + callerProc => \&getCBB, + client => $client, + refreshItem => $refreshItem}); + + $log->info("async request: $url"); + $http->get($url, 'User-Agent' => 'Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0'); + } + else { + $log->info("Skipping CBB..."); + if (scalar(@CBBteams)>0) { + saveCycles('getCBB'); + } + else { + delete $sportsData{'College Basketball'}; + } + refreshData(undef, $client, $refreshItem); + } +} + +sub gotCBB { + my $http = shift; + + my $params = $http->params(); + my $client = $params->{'client'}; + my $refreshItem = $params->{'refreshItem'}; + + delete $sportsData{'College Basketball'}; + $sportsData{'College Basketball'}{'logoURL'} = 'plugins/SuperDateTime/html/images/NCAA.png'; + + $log->info("got " . $http->url()); + my $json = $http->content(); + + # Trim down to the body of the JSON data + my $size = length($json); + my $begin = index($json, "["); + my $end = rindex($json, "]"); + $end = $end-$size; + $end=$end+1; + my $CBB_json = substr $json, $begin, $end; + $CBB_json =~ s/\,\s*\,/\,/g; # Remove malformed JSON text. + + my $perldata = decode_json($CBB_json); + + my $PREiconURL = 'http://i.turner.ncaa.com/dr/ncaa/ncaa7/release/sites/default/files/images/logos/schools/' ; #The 1st part of the URL for team logos. + my $POSTiconURL = '.70.png' ; # Last part of URL for team logos + + my @games = @$perldata; # Number of games today + my $game_count = scalar(@games); + $log->debug("Number of games today: ". $game_count); + my $game_num = 0; + while ($game_num < $game_count) { + $log->debug("Game # ". $game_num); + my $away_team = $games[$game_num]->{'game'}->{'away'}->{'names'}->{'short'}; + my $home_team = $games[$game_num]->{'game'}->{'home'}->{'names'}->{'short'}; + my $away_score = $games[$game_num]->{'game'}->{'away'}->{'score'}; + my $home_score = $games[$game_num]->{'game'}->{'home'}->{'score'}; + my $startTime = $games[$game_num]->{'game'}->{'startTime'}; # Start time - Eastern timezone + my $gameStat = $games[$game_num]->{'game'}->{'gameState'}; # Final, possibly Inprogress? Undefined before start. + my $currPeriod = $games[$game_num]->{'game'}->{'currentPeriod'}; # Shows the current period. This is also where overtime is noted as "Final (OT)" on finished games. + my $finalMessage = $games[$game_num]->{'game'}->{'finalMessage'}; # New for 2018 - 2019 + my $clockTime = $games[$game_num]->{'game'}->{'contestClock'}; + my $away_icon = $games[$game_num]->{'game'}->{'away'}->{'names'}->{'seo'}; + my $away_FL = substr($away_icon,0,1); + my $home_icon = $games[$game_num]->{'game'}->{'home'}->{'names'}->{'seo'}; + my $home_FL = substr($home_icon,0,1); + $away_icon = $PREiconURL.$away_FL.'/'.$away_icon.$POSTiconURL; + $home_icon = $PREiconURL.$home_FL.'/'.$home_icon.$POSTiconURL; + + $log->debug('Away team: ' . $away_team); + $log->debug('Home team: ' . $home_team); + $log->debug('Away score: ' . $away_score); + $log->debug('Home score: ' . $home_score); + $log->debug('Start Time: ' . $startTime); + $log->debug('Game Status: ' . $gameStat); + $log->debug('Period: ' . $currPeriod); + $log->debug('Final message: ' . $finalMessage); + $log->debug('Clock Time: ' . $clockTime); + $log->debug('Away icon URL: ' . $away_icon); + $log->debug('Home icon URL: ' . $home_icon); + + my $clock_time; + +########### Sort out Active, Final, Overtime, Upcoming games ############## + + if (($gameStat eq "In-Progress") or ($gameStat eq "live")) { + $log->debug("Active game"); + if ($currPeriod =~/OT/i) { + $log->debug("Overtime"); + $clock_time = $clockTime.' OT'; + if ($currPeriod =~/(\d+)/) { # Double or Triple overtime + $log->debug("Multiple Overtime"); + $clock_time = $clockTime.' '.$1.'OT'; + } + } + elsif ($currPeriod =~ m/(\d)/) { #Active games - Gametime = timeclock/period + $log->debug("Period # Detected"); + my $Period = $1; + $clock_time = $clockTime.'/'.$Period; + if ($currPeriod =~ /end/i) { + $log->debug("End Detected"); + $clock_time = 'End '.$Period; + } + } + elsif ($currPeriod =~/half/i) { #Halftime - Gametime = Halftime + $log->debug("Halftime"); + $clock_time = "Halftime"; + } + } + elsif ($currPeriod =~/final/i || $gameStat =~/final/i) { #Finished + $log->debug("Finished game"); + $clock_time = "Final"; + if ($currPeriod =~/OT/i) { # Overtime + $log->debug("Overtime"); + if ($currPeriod =~/(\d+)/) { # Double or triple overtime + $log->debug("Multiple Overtime"); + $clock_time = "Final ".$1."OT"; + } + else { + $clock_time = "Final OT"; + } + } + } + elsif ($gameStat eq "postponed") { #Postponed games + $log->debug("Postponed game"); +# $away_score = ''; +# $home_score = ''; + $clock_time = "Postponed"; + } + else { #Upcoming games - Blank out scores, Gametime = Startime + $log->debug("Upcoming game"); + $away_score = ''; + $home_score = ''; + $clock_time = $startTime; + } + + $log->debug("Clock time: ".$clock_time); + $log->debug($away_team. " ". $away_score. " @ ". $home_team. " ". $home_score. " - ". convertTime($clock_time)); + + $sportsData{'College Basketball'}{$home_team.$clock_time}{'homeTeam'} =$home_team; + $sportsData{'College Basketball'}{$home_team.$clock_time}{'awayTeam'} =$away_team; + $sportsData{'College Basketball'}{$home_team.$clock_time}{'homeLogoURL'} = $home_icon; + $sportsData{'College Basketball'}{$home_team.$clock_time}{'awayLogoURL'} = $away_icon; + $sportsData{'College Basketball'}{$home_team.$clock_time}{'gameLogoURL'} = $home_icon; + $sportsData{'College Basketball'}{$home_team.$clock_time}{'homeScore'} = $home_score; + $sportsData{'College Basketball'}{$home_team.$clock_time}{'awayScore'} = $away_score; + $sportsData{'College Basketball'}{$home_team.$clock_time}{'gameTime'} =convertTime($clock_time); + + if ((teamCheck($home_team,\@CBBteams)==1) || (teamCheck($away_team,\@CBBteams)==1)) { + displayLines($client, $clock_time, $away_team, $home_team, $away_score, $home_score, 'NCAA Basketball', 'getCBB', \&shortenCBB, undef); + } + + $game_num++ + } + + refreshData(undef, $client, $refreshItem); +} + + +sub getCFB { #Set up Async HTTP request for college football + my $timerObj = shift; #Should be undef + my $client = shift; + my $refreshItem = shift; + + my @dateArray = gmtime(time-(60*60*8)); #Use 1AM Pacific when determining date. This allows late games to finish before rolling to new date. + + my $mon = $dateArray[4]; + my $year = $dateArray[5]; + my $mday =$dateArray[3]; + $year = $year + 1900; + $mon = sprintf("%02d",$mon+1); + $mday = sprintf("%02d",$mday); + + # Calculate Season + my $season = $year; + if ($mon < 3) { + $season-- + } + + # Calculate start of season + # Starting day of the season. Each week of the CFB season runs from Tuesday through Monday. Starting with the Tuesday preceding the first Monday of September. + my $AdjustDays; # Used to store the number of days to subtract from the 7th to find the 1st Monday. + my $StartDate = timelocal(00,00,12,7,8,$season); #Start with the 7th of September in the season year. + my $dow = (localtime($StartDate))[6]; # Figure out which day of the week it is. + if ($dow>0) { + $AdjustDays = $dow-1; + } + else { + $AdjustDays = 6; + } + my $FirstMonday = ($StartDate - ($AdjustDays*86400)); # Find the first Monday by subtracting the correct number of days. PS - 86400 seconds per day. + + my ($ckDay, $ckMon, $ckYear, $cfbSDay) = (localtime($FirstMonday))[3,4,5,7]; + $ckYear = $ckYear+1900; + $ckMon = sprintf("%02d",$ckMon+1); + $ckDay = sprintf("%02d",$ckDay); + + $cfbSDay = $cfbSDay - 6; # Start with the 1st Monday of September and subtract 6 to find the prior Tuesday + + # Calculate week of season + my $currYDay = $dateArray[7]; + my $cfbWeek = int((($currYDay-$cfbSDay)/7)+1); # Calculate which week of the season we are in. + $cfbWeek = sprintf("%02d",$cfbWeek); + if ($cfbWeek > 15 or $cfbWeek < -10) { # Account for post season play. + $cfbWeek = 'P'; + } + elsif ($cfbWeek < 1) { # Some seasons start games prior to the calculated start of the season, but include them in the 1st week's JSON file. For example 2016. + $cfbWeek = '01'; + } + + if (scalar(@CFBteams)>0) { #Make sure at least one team is entered + my $url = 'https://data.ncaa.com/casablanca/scoreboard/football/fbs/' . $season . '/' . $cfbWeek . '/scoreboard.json'; + + my $http = Slim::Networking::SimpleAsyncHTTP->new(\&gotCFB, + \&gotErrorViaHTTP, + {caller => 'getCFB', + callerProc => \&getCFB, + client => $client, + refreshItem => $refreshItem}); + + $log->info("aync request: $url"); + $http->get($url, 'User-Agent' => 'Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0'); + } + else { + $log->info("Skipping CFB..."); + delete $sportsData{'College Football'}; + refreshData(undef, $client, $refreshItem); + } +} + +sub gotCFB { + my $http = shift; + + my $params = $http->params(); + my $client = $params->{'client'}; + my $refreshItem = $params->{'refreshItem'}; + + delete $sportsData{'College Football'}; + $sportsData{'College Football'}{'logoURL'} = 'plugins/SuperDateTime/html/images/NCAA.png'; + + $log->info("got " . $http->url()); + + my $json = $http->content(); + + # Trim down to the body of the JSON data + my $size = length($json); + my $begin = index($json, "["); + my $end = rindex($json, "]"); + $end = $end-$size; + $end=$end+1; + my $CFB_json = substr $json, $begin, $end; + + my $perldata = decode_json($CFB_json); + + # Preparation for comparison to game date. + my @dateArray = gmtime(time-(60*60*8)); # Use 1AM Pacific for determining date so late games can finish before rolling over to new date. + + my $mday = $dateArray[3]; + $mday = sprintf("%02d",$mday); + my $year = $dateArray[5]+1900; + my $mon = $dateArray[4]+1; + $mon = sprintf("%02d",$mon); + + my $currDate = $mon . "-" . $mday . "-" . $year; + +##################################################### +# $currDate = '12-01-2018'; # Check other dates +##################################################### + + my $PREiconURL = 'http://i.turner.ncaa.com/dr/ncaa/ncaa7/release/sites/default/files/images/logos/schools/' ; #The 1st part of the URL for team logos. + my $POSTiconURL = '.70.png' ; # Last part of URL for team logos + + my @games = @$perldata; + my $game_count = scalar(@games); #How many games this week + $log->info("Games this week: " . $game_count); + + my $game_num = 0; + + while ($game_num < $game_count) { + $log->info("Game#: " . $game_num); + my $gameDate = $games[$game_num]->{'game'}->{'startDate'}; + my $away_team = $games[$game_num]->{'game'}->{'away'}->{'names'}->{'short'}; + my $home_team = $games[$game_num]->{'game'}->{'home'}->{'names'}->{'short'}; + my $away_score = $games[$game_num]->{'game'}->{'away'}->{'score'}; + my $home_score = $games[$game_num]->{'game'}->{'home'}->{'score'}; + my $startTime = $games[$game_num]->{'game'}->{'startTime'}; # Start time - Eastern timezone + my $gameStat = $games[$game_num]->{'game'}->{'gameState'}; # pre, live, final, cancelled # + my $currPeriod = $games[$game_num]->{'game'}->{'currentPeriod'}; # Shows the current qtr. This is also where overtime is noted as "Final (OT)" on finished games. + my $clockTime = $games[$game_num]->{'game'}->{'contestClock'}; + my $finalMess = $games[$game_num]->{'game'}->{'finalMessage'}; + my $away_icon = $games[$game_num]->{'game'}->{'away'}->{'names'}->{'seo'}; + my $away_FL = substr($away_icon,0,1); + my $home_icon = $games[$game_num]->{'game'}->{'home'}->{'names'}->{'seo'}; + my $home_FL = substr($home_icon,0,1); + $away_icon = $PREiconURL.$away_FL.'/'.$away_icon.$POSTiconURL; + $home_icon = $PREiconURL.$home_FL.'/'.$home_icon.$POSTiconURL; + + $log->info('Game #: ' . $game_num); + $log->info('Away team: ' . $away_team); + $log->info('Home team: ' . $home_team); + $log->info('Date Today: ' . $currDate); + $log->info('Game Date: ' . $gameDate); + $log->info('Start Time: ' . $startTime); + $log->info('Game Status: ' . $gameStat); + $log->info('Period: ' . $currPeriod); + $log->info('Clock Time: ' . $clockTime); + $log->info('Final Message: ' . $finalMess); + + if ($gameDate eq $currDate) { + + my $clock_time; + + if ($gameStat eq "live") { + $log->info("Active game"); + if ($currPeriod =~/OT/i) { + $log->info("Overtime"); + $log->info('Game Status: ' . $gameStat); + $log->info('Period: ' . $currPeriod); + $log->info('Clock Time: ' . $clockTime); + $log->info('Final Message: ' . $finalMess); + $clock_time = "OT"; + $log->info($startTime. "- ". $away_team. " ". $away_score. " @ ". $home_team. " ". $home_score. " - ". convertTime($clock_time)); + if ($currPeriod =~/(\d+)/) { + $log->info("Multiple Overtime"); + $clock_time = $1."OT"; + $log->info($startTime. "- ". $away_team. " ". $away_score. " @ ". $home_team. " ". $home_score. " - ". convertTime($clock_time)); + } + } + elsif ($currPeriod =~ m/(\d)/) { #Active games - Gametime = timeclock/period + $log->info("Period # Detected"); + my $Period = $1; + $clock_time = $clockTime.'/'.$Period; + if ($currPeriod =~ /end/i) { + $log->info("End Detected"); + $clock_time = 'End '.$Period; + } + } + elsif ($currPeriod =~/half/i) { #Halftime - Gametime = Halftime + $log->info("Halftime"); + $clock_time = "Halftime"; + } + } + elsif (($currPeriod =~/final/i) or ($gameStat =~/final/i)) { #Finished + $log->info("Finished game"); + $clock_time = "Final"; + if ($finalMess =~/\d+/i or $finalMess =~/OT/i) { # Either OT or number in Final Message = Overtime + my $OTPeriod = ''; + $log->info('Game Status: ' . $gameStat); + $log->info('Period: ' . $currPeriod); + $log->info('Clock Time: ' . $clockTime); + $log->info('Final Message: ' . $finalMess); + if ($finalMess =~/OT/) { + if ($finalMess =~/(\d+)/) { # OT with number = number of OT periods + $OTPeriod = $1; + $log->info('Final Message Displaying # of OT Periods: '.$1); + } + else { # OT without number = single overtime + $clock_time = "Final OT"; + } + } + elsif ($finalMess =~/(\d+)/) { # Number without OT = number of total periods + $OTPeriod = $1 - 4; # Total periods - Regular game periods = Overtime periods + $log->info('Final Message Displaying Total Periods: '.$1); + } + if ($OTPeriod > 1) { + $log->info("Multiple Overtime"); + $clock_time = "Final ".$OTPeriod."OT"; + $log->info($startTime. "- ". $away_team. " ". $away_score. " @ ". $home_team. " ". $home_score. " - ". convertTime($clock_time)); + } + else { # OT without number = single overtime + $clock_time = "Final OT"; + $log->info($startTime. "- ". $away_team. " ". $away_score. " @ ". $home_team. " ". $home_score. " - ". convertTime($clock_time)); + } + } + } + elsif ($gameStat =~/pre/i) { # Upcoming games - Blank out scores, Gametime = Startime + $log->info("Upcoming game"); + $away_score = ''; + $home_score = ''; + $clock_time = $startTime; + } + elsif ($gameStat =~/cancel/i) { + $log->info("Canceled game"); + $away_score = ''; + $home_score = ''; + $clock_time = 'Canceled'; + } + elsif ($gameStat =~/delayed/i) { + $log->info("Game delayed"); + $clock_time = 'Delayed'; + } + else { # Not sure... Setup as upcoming game - Blank out scores, Gametime = Startime + $log->warn("Uncertain CFB game status"); + $away_score = ''; + $home_score = ''; + $clock_time = $startTime; + $log->warn('Start Time: ' . $startTime); + $log->warn('Game Status: ' . $gameStat); + $log->warn('Period: ' . $currPeriod); + $log->warn('Clock Time: ' . $clockTime); + $log->warn($startTime. "- ". $away_team. " ". $away_score. " @ ". $home_team. " ". $home_score. " - ". convertTime($clock_time)); + $log->warn($away_team. " iconURL = ". $away_icon); + $log->warn($home_team. " iconURL = ". $home_icon); + } + + $log->info("Clock time: ".$clock_time); + + $sportsData{'College Football'}{$home_team.$clock_time}{'homeTeam'} =$home_team; + $sportsData{'College Football'}{$home_team.$clock_time}{'awayTeam'} =$away_team; + $sportsData{'College Football'}{$home_team.$clock_time}{'homeScore'} =$home_score; + $sportsData{'College Football'}{$home_team.$clock_time}{'awayScore'} =$away_score; + $sportsData{'College Football'}{$home_team.$clock_time}{'gameTime'} =convertTime($clock_time); + $sportsData{'College Football'}{$home_team.$clock_time}{'homeLogoURL'} = $home_icon; + $sportsData{'College Football'}{$home_team.$clock_time}{'awayLogoURL'} = $away_icon; + $sportsData{'College Football'}{$home_team.$clock_time}{'gameLogoURL'} = $home_icon; + + if ((teamCheck($home_team,\@CFBteams)==1) || (teamCheck($away_team,\@CFBteams)==1)) { + displayLines($client, $clock_time, $away_team, $home_team, $away_score, $home_score, 'NCAA Football', 'getCFB', \&shortenCFB); + } + + $log->info($startTime. "- ". $away_team. " ". $away_score. " @ ". $home_team. " ". $home_score. " - ". convertTime($clock_time)); + $log->info($away_team. " iconURL = ". $away_icon); + $log->info($home_team. " iconURL = ". $home_icon); + $log->info(" "); + } + $game_num++ + } + refreshData(undef, $client, $refreshItem); +} + +sub getNHL { #Set up Async HTTP request for NHL + my $timerObj = shift; #Should be undef + my $client = shift; + my $refreshItem = shift; + + if (scalar(@NHLteams)>0 && $refreshTracker[2] !=0) { #Make sure a hockey team is chosen + my $url = 'http://sports.espn.go.com/nhl/scoreboard?date=' . $lastRefresh; + my $http = Slim::Networking::SimpleAsyncHTTP->new(\&gotNHL, + \&gotErrorViaHTTP, + {caller => 'getNHL', + callerProc => \&getNHL, + client => $client, + refreshItem => $refreshItem}); + $log->info("aync request: $url"); + $http->get($url, 'User-Agent' => 'Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0'); + } + else { + $log->info("Skipping NHL..."); + if (scalar(@NHLteams)>0) { + saveCycles('getNHL'); + } + else { + delete $sportsData{'NHL'}; + } + refreshData(undef, $client, $refreshItem); + } +} + +sub gotNHL { + my $http = shift; + + my $params = $http->params(); + my $client = $params->{'client'}; + my $refreshItem = $params->{'refreshItem'}; + + delete $sportsData{'NHL'}; + $sportsData{'NHL'}{'logoURL'} = 'plugins/SuperDateTime/html/images/NHL.png'; + + $refreshTracker[2] = 0; + + $log->info("got " . $http->url()); + + my $content = $http->content(); + + my $tree = HTML::TreeBuilder->new; # empty tree + + $tree->parse($content); + $tree->eof(); + + my @game_divs = $tree->look_down( "_tag", "div", "class", "mod-content" ); + + for my $game_div ( @game_divs ) { + + next unless $game_div->look_down( "_tag", "div", "id", qr{gameHeader} ); + + my @outcome = $game_div->look_down( "_tag", "li", "id", qr{statusLine1} ); + my @qtr = $game_div->look_down( "_tag", "span", "id", qr{statusLine2Left} ); + my @clock = $game_div->look_down( "_tag", "span", "id", qr{statusLine2Right} ); + my @teams = $game_div->look_down( "_tag", "a", "href", qr{/nhl/team/_/name/} ); + my @scores = $game_div->look_down( "_tag", "span", "id", qr{(home|away)HeaderScore} ); + + my( $outcome_txt ) = $outcome[ 0 ]->content_list; + my( $qtr_txt ) = $qtr[ 0 ]->content_list; + my( $clock_time ) = $clock[ 0 ]->content_list; + my( $away_team ) = $teams[ 0 ]->content_list; + my( $home_team ) = $teams[ 1 ]->content_list; + my( $away_score ) = $scores[ 0 ]->content_list; + my( $home_score ) = $scores[ 1 ]->content_list; + + my $home_logo = $teams[1]->as_HTML; + my $away_logo = $teams[0]->as_HTML; + + $home_logo =~ m/name\/(\w+)\//; + $home_logo = 'http://a.espncdn.com/combiner/i?img=/i/teamlogos/nhl/500/' . $1 . '.png'; + $away_logo =~ m/name\/(\w+)\//; + $away_logo = 'http://a.espncdn.com/combiner/i?img=/i/teamlogos/nhl/500/' . $1 . '.png'; + + $outcome_txt = '' + unless defined $outcome_txt && $outcome_txt =~ /\w/; + $qtr_txt = '' + unless defined $qtr_txt && $qtr_txt =~ /\w/; + $clock_time = '' + unless defined $clock_time && $clock_time =~ /\d/; + + if( $clock_time ne '' ) { + $clock_time = "$clock_time $qtr_txt"; + } elsif( $outcome_txt =~ /final/i ) { + $clock_time = $outcome_txt; + } else { + $clock_time = $qtr_txt; + } + + $sportsData{'NHL'}{$home_team.$clock_time}{'homeTeam'} = $home_team; + $sportsData{'NHL'}{$home_team.$clock_time}{'awayTeam'} = $away_team; + $sportsData{'NHL'}{$home_team.$clock_time}{'homeLogoURL'} = $home_logo; + $sportsData{'NHL'}{$home_team.$clock_time}{'awayLogoURL'} = $away_logo; + $sportsData{'NHL'}{$home_team.$clock_time}{'gameLogoURL'} = $home_logo; + + #Check to see if home score is a numeric, otherwise there isn't a score yet and set to blanks + if( $home_score =~ /^\d/ ) { + $sportsData{'NHL'}{$home_team.$clock_time}{'homeScore'} =$home_score; + $sportsData{'NHL'}{$home_team.$clock_time}{'awayScore'} =$away_score; + } + else { + $sportsData{'NHL'}{$home_team.$clock_time}{'homeScore'} = ''; + $sportsData{'NHL'}{$home_team.$clock_time}{'awayScore'} = ''; + $home_score = ''; + $away_score = ''; + } + + $sportsData{'NHL'}{$home_team.$clock_time}{'gameTime'} =convertTime($clock_time); + + if ((teamCheck($home_team,\@NHLteams)==1) || (teamCheck($away_team,\@NHLteams)==1)) { + displayLines($client, $clock_time, $away_team, $home_team, $away_score, $home_score, 'NHL', 'getNHL', \&shortenNHL, undef); + } + } + + $tree = $tree->delete; + + refreshData(undef, $client, $refreshItem); +} + +sub getLongWeather { + my $timerObj = shift; #Should be undef + my $client = shift; + my $refreshItem = shift; + + my $weatherInterval = currentWeatherInterval(); + + for (my $i = 0; $i < scalar @WETdisplayItems1; $i++) { + #Check to see if they care to see the weather right now + if ($weatherInterval >0) { + if ($weatherInterval <5) { + addDisplayItem('getLongWeather', $WETdisplayItems1[$i], $WETdisplayItems2[$i], 'L'); + } + #Add to external API + $miscData{'getLongWeather'}{$i}{'line1'} = $WETdisplayItems1[$i]; + $miscData{'getLongWeather'}{$i}{'line2'} = $WETdisplayItems2[$i]; + $miscData{'getLongWeather'}{$i}{'type'} = 'long'; + } + } + refreshData(undef, $client, $refreshItem); +} + +sub getNFL { #Set up Async HTTP request for NFL + my $timerObj = shift; #Should be undef + my $client = shift; + my $refreshItem = shift; + + if (scalar(@NFLteams)>0 && $NFL_HTML eq '') { #Make sure a NFL team is chosen and $NFL_HTML is empty + my $url2 = 'http://www.nfl.com/scores'; + my $http = Slim::Networking::SimpleAsyncHTTP->new(\&gotNFL_HTML, + \&gotErrorViaHTTP, + {caller => 'getNFL', + callerProc => \&getNFL, + client => $client, + refreshItem => $refreshItem}); + $log->info("async request: $url2"); + $http->get($url2, 'User-Agent' => 'Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0'); + } + elsif (scalar(@NFLteams)>0) { #Make sure a NFL team is chosen + my $url = 'http://www.nfl.com/liveupdate/scores/scores.json' ; + + my $http = Slim::Networking::SimpleAsyncHTTP->new(\&gotNFL, + \&gotErrorViaHTTP, + {caller => 'getNFL', + callerProc => \&getNFL, + client => $client, + refreshItem => $refreshItem}); + + $log->info("async request: $url"); + $http->get($url, 'User-Agent' => 'Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0'); + } + else { + $log->info("Skipping NFL..."); + delete $sportsData{'NFL'}; + $NFL_HTML = ''; + refreshData(undef, $client, $refreshItem); + } +} + +sub gotNFL_HTML { + my $http = shift; + my $params = $http->params(); + my $client = $params->{'client'}; + my $refreshItem = $params->{'refreshItem'}; + + $log->info("got " . $http->url()); + + $NFL_HTML = $http->content(); + + my $tree = HTML::TreeBuilder->new; + $tree->parse($NFL_HTML); + $tree->eof(); + + my $gamedata = $tree->look_down( "_tag", "body"); + my @gamedata1 = $gamedata->look_down("_tag","script"); + my $scr_count = scalar(@gamedata1); + my $NFL_time_json = ''; + for (my $i = 0; $i < $scr_count; $i++){ + if (@gamedata1[$i]->as_HTML =~ /_INITIAL_DATA__\s\=\s(.*)\;\n/) { + $log->debug($1); + $NFL_time_json = decode_json($1); + } + } + + my $NFL_games = $NFL_time_json->{'uiState'}->{'scoreStripGames'}; # Store array of games + my $gamecnt = scalar(@$NFL_games); + my $NFLgameID = ''; + my $upcomingTime = ''; + for (my $i = 0; $i < $gamecnt; $i++) { + my $games = @$NFL_games[$i]; #split array into individual games + $NFLgameID = $games->{'id'}; + $upcomingTime = $games->{'status'}->{'upcomingGameTimeEastern'}; + if ($upcomingTime =~ /(\d+:\d+ \w\w)/) { + $upcomingTime = $1; + } + $NFLupTime{$NFLgameID} = $upcomingTime; + $log->debug($NFLgameID.' = '.$upcomingTime); + } + + $tree->delete; + + # Now go back to getNFL to retrieve JSON and proceed to gotNFL + getNFL(undef, $client, $refreshItem); +} + +sub gotNFL { + my $http = shift; + + my $params = $http->params(); + my $client = $params->{'client'}; + my $refreshItem = $params->{'refreshItem'}; + + delete $sportsData{'NFL'}; + $sportsData{'NFL'}{'logoURL'} = 'plugins/SuperDateTime/html/images/nfl.png'; + + $log->info("got " . $http->url()); + + # Get NFL JSON data and decode it + my $NFL_json = $http->content(); + my $perldata = decode_json($NFL_json); + + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)= (gmtime(time-(60*60*8))); #Change date at 1AM Pacific to allow late games to complete before changeover. + $year = $year+1900; + $mon = sprintf("%02d",$mon+1); # month starts at 0 + $mday = sprintf("%02d",$mday); + + my $today = $year.$mon.$mday; +# $today = '20181007'; # Use this line to test other dates + $log->debug("Today's date = ", $today); + + my @games = keys %$perldata; #extract game keys and store in array + my $game_count = scalar(@games); + $log->debug("Game count: ", $game_count); + my $game_num = 0; + + while ($game_num < $game_count) { + my $game = $games[$game_num]; #store individual game key + my $gamedate = substr($game,0,8); #extract date of game + my $game_stat = $perldata->{$game}->{'qtr'}; #If defined = Pregame, qtr #, or Final. Undefined = Upcoming game. + my $game_time = $perldata->{$game}->{'clock'}; # + my $clock_time = $game_time; + my $away_team = $perldata->{$game}->{'away'}->{'abbr'}; + my $home_team = $perldata->{$game}->{'home'}->{'abbr'}; + my $away_score = $perldata->{$game}->{'away'}->{'score'}->{'T'}; + my $home_score = $perldata->{$game}->{'home'}->{'score'}->{'T'}; + my $NFLteamMap = ''; + my $away_team_name = $NFLteamMap{$away_team}; + my $home_team_name = $NFLteamMap{$home_team}; + my $tv_network = $perldata->{$game}->{'media'}->{'tv'}; + $log->debug("Game#: ", $game_num); + $log->debug("GameID: ", $game); + $log->debug("Gamedate: ", $gamedate); + if ($game_stat) { + $log->debug("Status: ", $game_stat); + } + $log->debug($away_team, " @ ", $home_team); + + if ($gamedate eq $today) { # Only display games occuring today + + if ($game_stat =~ m/\d/) { # Active game -- Consider checking for "Pregame" ??? + $log->debug("Active game"); + $clock_time = $game_time." ".$game_stat; + } + elsif ($game_stat eq "Halftime") { + $log->debug("Active game - Halftime"); + $clock_time = $game_stat; + } + elsif ($game_stat eq 'Game Over' or $game_stat =~ /Final/i){ #Finished game + $log->debug("Finished game"); + $clock_time = 'Final'; + if ($game_stat =~ /overtime/i) { + $log->debug("Overtime"); + $clock_time = 'Final OT'; + } + } + else { # upcoming games + $log->debug("Upcoming game"); + $away_score = ''; + $home_score = ''; + $clock_time = $NFLupTime{$game}; + $log->debug($clock_time); + } + + my $home_logo = lc($home_team); + my $away_logo = lc($away_team); + $home_logo = 'http://a.espncdn.com/combiner/i?img=/i/teamlogos/nfl/500/' . $home_logo . '.png'; + $away_logo = 'http://a.espncdn.com/combiner/i?img=/i/teamlogos/nfl/500/' . $away_logo . '.png'; + + $log->debug("Status: " . $game_stat . " "); + $log->debug("Game time: " . $game_time . " "); + $log->debug("Clock: ", $clock_time); + $log->debug("CClock: ", convertTime($clock_time)); + $log->debug("Away team & score: ", $away_team, " " , $away_score); + $log->debug("Home team & score: ", $home_team, " ", $home_score); + $log->debug("Home logo URL = " . $home_logo); + $log->debug("Away logo URL = " . $away_logo); + + $sportsData{'NFL'}{$home_team.$clock_time}{'homeTeamCK'} =$home_team; + $sportsData{'NFL'}{$home_team.$clock_time}{'awayTeamCK'} =$away_team; + $sportsData{'NFL'}{$home_team.$clock_time}{'homeTeam'} =$home_team_name; + $sportsData{'NFL'}{$home_team.$clock_time}{'awayTeam'} =$away_team_name; + $sportsData{'NFL'}{$home_team.$clock_time}{'awayScore'} =$away_score; + $sportsData{'NFL'}{$home_team.$clock_time}{'homeScore'} =$home_score; + $sportsData{'NFL'}{$home_team.$clock_time}{'gameTime'} =convertTime($clock_time); + $sportsData{'NFL'}{$home_team.$clock_time}{'homeLogoURL'} = $home_logo; + $sportsData{'NFL'}{$home_team.$clock_time}{'awayLogoURL'} = $away_logo; + $sportsData{'NFL'}{$home_team.$clock_time}{'gameLogoURL'} = $home_logo; + + if ((teamCheck($home_team,\@NFLteams)==1) || (teamCheck($away_team,\@NFLteams)==1)) { + displayLines($client, $clock_time, $away_team_name, $home_team_name, $away_score, $home_score, 'NFL ('.$tv_network.')', 'getNFL', \&shortenNFL, \%NFLmap); + } + } + $log->debug(" "); #To improve log file readability - add line between games + $game_num++ ; + } + $NFL_HTML = ''; + refreshData(undef, $client, $refreshItem); +} + +sub convertTime { + my $gametime = shift; + $log->debug("Incoming time = $gametime"); + my $hour = 0; + my $minute = 0; + my $ampm = ''; + my $offset = $prefs->get('offset'); + + if ($gametime =~ /(\d+:\d+), (\d+).*Period/) { #Active NHL game + $gametime = $1 . '/' . $2; + } + elsif (($gametime =~ /(\d+).*End/)||($gametime =~ /End (\d+)/)) { #NHL/NFL/CFB game, end of qtr/per + $gametime = 'E'.$1; + } + elsif ($gametime =~ /(\d+):(\d+)\s*(\d*ot)/i) { #Time remaining in OT + $hour = $1; + $minute = $2; + my $ot = uc($3); + $gametime = $hour . ':' . $minute . "/" . $ot; + } + elsif ($gametime =~ /Final.(\d+)OT/i) { #CFB Multiple OT Final + $gametime = 'F/' . $1.'OT'; + } + elsif ($gametime =~ /(\d+)OT/i) { #CFB Multiple OT Active + $gametime = $1.'OT'; + } + elsif ($gametime =~ /Final.*(SO|OT)/i) { #OT Final or NHL Sudden OT Final + $gametime = 'F/' . $1; + } + elsif ($gametime =~ /(\D)\D+(\d+)/) { #Active MLB game, shorten inning info + $gametime = $1 . $2; + } + elsif ($gametime =~ /(\d*\d+:\d\d) (\d)/) { #Active NFL game + $gametime = $1 . '/' . $2; + } + elsif ($gametime =~ /(\d*\d+\.\d) (\d)/) { #Last seconds of NBA period + $gametime = $1 . '/' . $2; + } + elsif ($gametime =~ /(\d+):(\d+)\s*(\d*ot)/i) { #Time remaining in OT + $hour = $1; + $minute = $2; + my $ot = uc($3); + $gametime = $hour . ':' . $minute . "/" . $ot; + } + elsif ($gametime =~ /OT/) { #CFB OT Active + $gametime = 'OT'; + } + elsif ($gametime =~ /(\d+):(\d+)\s*(\w\w)/) { #Future game, convert timezone + $hour = $1; + $minute = $2; + $ampm = lc($3); + while ($offset != 0) { + if ($offset >0) { + $offset = $offset -1; + $hour = $hour +1; + if ($hour == 13) { + $hour = 1; + } + elsif ($hour == 12) { + if ($ampm eq 'am') { + $ampm = 'pm'; + } + else { + $ampm = 'am'; + } + } + } + else { + $offset = $offset +1; + $hour = $hour -1; + if ($hour == 0) { + $hour = 12; + } + elsif ($hour == 11) { + if ($ampm eq 'am') { + $ampm = 'pm'; + } + else { + $ampm = 'am'; + } + } + } + } + #$gametime = $hour . ':' . $minute . $ampm; + if ($ampm eq 'pm' && $hour != 12) { + $hour = $hour + 12; + } + elsif ($ampm eq 'am' && $hour == 12) { #Midnight + $hour = 0; + } + $gametime = Slim::Utils::DateTime::timeF(timelocal(0,$minute,$hour,1,1,2010)); + } + elsif ($gametime =~ /TBA/i) { + $gametime = 'TBA'; + } + elsif ($gametime =~ /(\D)\D.*/) { #Final or Delayed MLB game + $gametime = $1; + } + $log->debug("Converted Gametime = $gametime"); + return $gametime; +} + +sub shortenMLB { + #No MLB teams need shortening? + my $long = shift; + + return $long; +} + +sub shortenNBA { + my $long = shift; + + if( $long eq "Timberwolves" ) { + $long = "TWolves"; + } elsif( $long eq "Trail Blazers" ) { + $long = "TBlazers"; + } + + return $long; +} + +sub shortenCBB { + my $long = shift; + +# YOU CAN MODIFY THIS LIKE THE EXAMPLE BELOW TO SHORTEN YOUR TEAM NAMES... + if ($long =~ m/^Illinois$/) { $long = 'Illini';} + elsif ($long=~ m/^Notre Dame/) { $long = 'ND';} + elsif ($long=~ m/^Southern Methodist/) { $long = 'SMU';} + elsif ($long=~ m/^Ohio State/) { $long = 'OSU';} + elsif ($long=~ m/^Washington State/) { $long = 'WSU';} + elsif ($long=~ m/^Boston College/) { $long = 'BC';} + elsif ($long=~ m/^Wisconsin$/) { $long = 'Wisc.';} + elsif ($long=~ m/^Bowling Green$/) { $long = 'BGSU';} + elsif ($long=~ m/^Brigham Young/) { $long = 'BYU';} + elsif ($long=~ m/^Northwestern/) { $long = 'NW';} + elsif ($long=~ m/^San Diego State/) { $long = 'SDSU';} + elsif ($long=~ m/^San Jose State/) { $long = 'SJSU';} + + return $long; +} + +sub shortenCFB { + my $long = shift; + +# YOU CAN MODIFY THIS LIKE THE EXAMPLES BELOW TO SHORTEN YOUR TEAM NAMES... + if ($long =~ m/^Illinois$/) { $long = 'Illini';} + elsif ($long=~ m/^Notre Dame/) { $long = 'ND';} + elsif ($long=~ m/^Southern Methodist/) { $long = 'SMU';} + elsif ($long=~ m/^Ohio State/) { $long = 'OSU';} + elsif ($long=~ m/^Washington State/) { $long = 'WSU';} + elsif ($long=~ m/^Boston College/) { $long = 'BC';} + elsif ($long=~ m/^Wisconsin$/) { $long = 'Wisc.';} + elsif ($long=~ m/^Bowling Green$/) { $long = 'BGSU';} + elsif ($long=~ m/^Brigham Young/) { $long = 'BYU';} + elsif ($long=~ m/^Northwestern/) { $long = 'NW';} + elsif ($long=~ m/^San Diego State/) { $long = 'SDSU';} + elsif ($long=~ m/^San Jose State/) { $long = 'SJSU';} + + return $long; +} + +sub shortenNHL { + my $long = shift; + + if ($long =~ m/^Vancouver/) { $long = 'Canucks';} + elsif ($long=~ m/^Edmonton/) { $long = 'Oilers';} + elsif ($long =~ m/^New Jersey/) { $long = 'Devils';} + elsif ($long =~ m/^NY Rangers/) { $long = 'Rangers';} + elsif ($long =~ m/^Philadelphia/) { $long = 'Flyers';} + elsif ($long =~ m/^NY Islanders/) { $long = 'Islanders';} + elsif ($long =~ m/^Pittsburgh/) { $long = 'Penguins';} + #elsif ($long =~ m/^Montreal/) { $long = 'Canadiens';} + #elsif ($long =~ m/^Ottawa/) { $long = 'Senators';} + elsif ($long =~ m/^Buffalo/) { $long = 'Sabres';} + elsif ($long =~ m/^Boston/) { $long = 'Bruins';} + #elsif ($long =~ m/^Toronto/) { $long = 'Maple Leafs';} + #elsif ($long =~ m/^Florida/) { $long = 'Panthers';} + #elsif ($long =~ m/^Atlanta/) { $long = 'Thrashers';} + #elsif ($long =~ m/^Tampa Bay/) { $long = 'Lightning';} + elsif ($long =~ m/^Washington/) { $long = 'Capitals';} + #elsif ($long =~ m/^Carolina/) { $long = 'Hurricanes';} + #elsif ($long =~ m/^Detroit/) { $long = 'Red Wings';} + #elsif ($long =~ m/^Nashville/) { $long = 'Predators';} + #elsif ($long =~ m/^Chicago/) { $long = 'Black Hawks';} + #elsif ($long =~ m/^Columbus/) { $long = 'Blue Jackets';} + elsif ($long =~ m/^St. Louis/) { $long = 'Blues';} + elsif ($long =~ m/^Minnesota/) { $long = 'Wild';} + #elsif ($long =~ m/^Colorado/) { $long = 'Avalanche';} + elsif ($long =~ m/^Calgary/) { $long = 'Flames';} + elsif ($long =~ m/^Anaheim/) { $long = 'Ducks';} + elsif ($long =~ m/^Dallas/) { $long = 'Stars';} + elsif ($long =~ m/^Los Angeles/) { $long = 'Kings';} + elsif ($long =~ m/^San Jose/) { $long = 'Sharks';} + #elsif ($long =~ m/^Phoenix/) { $long = 'Coyotes';} + + return $long; +} + +sub shortenNFL { + my $long = shift; + + if ($long =~ m/^Chicago/) { $long = 'Bears';} + elsif ($long=~ m/^Green Bay/) { $long = 'Packers';} + elsif ($long=~ m/^Indianapolis/) { $long = 'Colts';} + elsif ($long=~ m/^Philadelphia/) { $long = 'Eagles';} + elsif ($long=~ m/^Pittsburgh/) { $long = 'Steelers';} + elsif ($long=~ m/^New Orleans/) { $long = 'Saints';} + elsif ($long=~ m/^New England/) { $long = 'Patriots';} + elsif ($long=~ m/^San Francisco/) { $long = '49ers';} + elsif ($long=~ m/^Jacksonville/) { $long = 'Jaguars';} + elsif ($long=~ m/^Tennessee/) { $long = 'Titans';} + #elsif ($long=~ m/^Tampa Bay/) { $long = 'Buccaneers';} + elsif ($long=~ m/^Washington/) { $long = 'Redskins';} + elsif ($long=~ m/^New York Jets/) { $long = 'Jets';} + elsif ($long=~ m/^New York Giants/) { $long = 'Giants';} + elsif ($long=~ m/^Cleveland/) { $long = 'Browns';} + elsif ($long=~ m/^St. Louis/) { $long = 'Rams';} + elsif ($long=~ m/^Kansas City/) { $long = 'Chiefs';} + elsif ($long=~ m/^Minnesota/) { $long = 'Vikings';} + elsif ($long=~ m/^Baltimore/) { $long = 'Ravens';} + elsif ($long=~ m/^Buffalo/) { $long = 'Bills';} + elsif ($long=~ m/^Houston/) { $long = 'Texans';} + + + return $long; +} + +sub setMode() { + my $class = shift; + my $client = shift; + + $client->lines(\&lines); + + # setting this param will call client->update() frequently + $client->modeParam('modeUpdateInterval', 1); # seconds + +} + +sub getFunctions { + return { + 'up' => sub { + my $client = shift; + my $button = shift; + $client->bumpUp() if ($button !~ /repeat/); + }, + 'down' => sub { + my $client = shift; + my $button = shift; + $client->bumpDown() if ($button !~ /repeat/);; + }, + 'left' => sub { + my $client = shift; + Slim::Buttons::Common::popModeRight($client); + }, + 'right' => sub { + my $client = shift; + + my $saver = Slim::Player::Source::playmode($client) eq 'play' ? 'screensaver' : 'idlesaver'; + + if ($prefs->client($client)->get($saver) ne 'SCREENSAVER.superdatetime') { + $prefs->client($client)->set($saver,'SCREENSAVER.superdatetime'); + } else { + $prefs->client($client)->set($saver, $Slim::Player::Player::defaultPrefs->{$saver}); + } + }, + 'stop' => sub { + my $client = shift; + Slim::Buttons::Common::pushMode($client, 'SCREENSAVER.superdatetime'); + }, + 'showme' => sub { #Function to force screensaver into screensaver mode + my $client = shift; + Slim::Buttons::Common::pushMode($client, 'SCREENSAVER.superdatetime'); + } + }; +} + +sub lines { + my $client = shift; + + my $saver = Slim::Player::Source::playmode($client) eq 'play' ? 'screensaver' : 'idlesaver'; + my $line2 = $client->string('SETUP_SCREENSAVER_USE'); + my $overlay2 = Slim::Buttons::Common::checkBoxOverlay($client, $prefs->client($client)->get($saver) eq 'SCREENSAVER.superdatetime'); + + return { + 'line' => [ $client->string('PLUGIN_SCREENSAVER_SUPERDATETIME'), $line2 ], + 'overlay' => [ undef, $overlay2 ] + }; +} + +our %screensaverSuperDateTimeFunctions = ( + 'done' => sub { + my ($client, $funct, $functarg) = @_; + Slim::Buttons::Common::popMode($client); + $client->update(); + #pass along ir code to new mode if requested + if (defined $functarg && $functarg eq 'passback') { + Slim::Hardware::IR::resendButton($client); + } + }, + 'up' => sub { + my $client = shift; + + $weathershowing{$client} = (); #Reset weather showing in case up was hit while displaying weather + + if ($scrollType{$client} eq 'Ticker') { #Set flag to reset out of ticker mode + $killTicker{$client} = 1; + } + + if ($nowshowing{$client}{'itemNum'} == 0) { #Is the time currently showing? + if($topNowShowing{$client} == (scalar @{$displayInfo{$client}{'TOPdisplayItems1'}}-1)) { + $topNowShowing{$client} = 0; + } + else { + $topNowShowing{$client}++; + } + } + else { + $nowshowing{$client}{'itemNum'} = 0; #Show the time + } + + killClientTimers($client); + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + 10, \&nextDisplayItem); + + $client->update(); #Refresh the display + }, + 'down' => sub { + my $client = shift; + + $weathershowing{$client} = (); #Reset weather showing in case down was hit while displaying weather + + if ($scrollType{$client} eq 'Ticker') { #Set flag to reset out of ticker mode + $killTicker{$client} = 1; + } + + if ($nowshowing{$client}{'itemNum'} == 0) { #Is the time currently showing? + if($topNowShowing{$client} == 0) { + $topNowShowing{$client} = scalar @{$displayInfo{$client}{'TOPdisplayItems1'}}-1; + } + else { + $topNowShowing{$client}--; + } + } + else { + $nowshowing{$client}{'itemNum'} = 0; #Show the time + } + + killClientTimers($client); + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + 10, \&nextDisplayItem); + + $client->update(); #Refresh the display + }, + 'down.hold' => sub { + my $client = shift; + + $weathershowing{$client} = 1; #Reset weather showing in case up was hit while displaying weather + + if ($scrollType{$client} eq 'Ticker') { #Set flag to reset out of ticker mode + $killTicker{$client} = 1; + } + + if ($nowshowing{$client}{'itemNum'} == 0) { #Is the time currently showing? + $topNowShowing{$client} = 0; + } + else { + $nowshowing{$client}{'itemNum'} = 0; #Show the time + } + + killClientTimers($client); + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + 10, \&nextDisplayItem); + + $client->update(); #Refresh the display + }, + 'refresh' => sub { + my $client = shift; + + $client->showBriefly( { + line => ['Refreshing data...'] + }, + { + scroll => 1, + block => 1, + } ); + + Slim::Utils::Timers::killTimers(undef, \&refreshData); + $averages{'last'} = ''; #Make sure averages/10day will get refreshed too + refreshData(undef, $client, -1); + }, + 'wnext' => sub { + my $client = shift; + + if (scalar @WETdisplayItems2 >0) { #Make sure there are some long forecasts to show + killClientTimers($client); + nextWeatherItem($client,1); + } + else { + $client->bumpLeft(); + } + }, + 'wprev' => sub { + my $client = shift; + + if (scalar @WETdisplayItems2 >0) { #Make sure there are some long forecasts to show + killClientTimers($client); + nextWeatherItem($client,-1); + } + else { + $client->bumpRight(); + } + }, + 'right' => sub { + my $client = shift; + + if (totalGames() >0) { #Are there display items? + killClientTimers($client); + nextDisplayItem($client); + } + else { + $client->bumpLeft(); + } + + }, + 'left' => sub { + my $client = shift; + + if (totalGames() >0) { #Are there display items? + killClientTimers($client); + prevDisplayItem($client); + } + else { + $client->bumpRight(); + } + }, + 'size.hold' => sub { + my $client = shift; + if ($client->power()) { #Client power is on + Slim::Buttons::Common::popModeRight($client); #Bring client back to where they were b4 screensaver + } + }, + +); + +sub currentWeatherInterval { + if (scalar @WETdisplayItems2 > 0) { + my $lweather = $prefs->get('lweather'); + if ($lweather == 4) { + return 1; + } + elsif ($lweather == 5) { + return 5; + } + elsif ($activeGames == 1 && $lweather == 2) { + return 1; + } + elsif ($activeGames == 0 && $lweather == 3) { + return 1; + } + else { + return 0; + } + } + else { + return 0; + } +} + +sub totalGames { + my $total = 0; + + if (defined $displayInfo{'cycleItems1'}) { + $total = scalar @{$displayInfo{'cycleItems1'}}; + } + + return $total; +} + +sub getScreensaverSuperDatetime { + + return \%screensaverSuperDateTimeFunctions; +} + +sub setScreensaverSuperDateTimeMode() { + my $client = shift; + + my $key; + my $value; + $killTicker{$client} = 0; + + if( $client && $client->isa( "Slim::Player::Squeezebox2")) { + while (($key, $value) = each(%NFLmap)){ #Store NFL team icons as a special font. + Slim::Display::Graphics::setCustomChar( 'getNFL-'.$value, chr(hex $value), 'nfl.2' ); + } + + while (($key, $value) = each(%MLBmap)){ #Store MLB team icons as a special font. + Slim::Display::Graphics::setCustomChar( 'getMLB-'.$value, chr(hex $value), 'mlb.2' ); + $log->debug("Setting the graphic MLB icon: ". $key . " " . $value); + } + + #Add 'special' character for spacing + Slim::Display::Graphics::setCustomChar( 'getMLB-41', chr(hex 41), 'mlb.2' ); + + $Gclient = $client; #capture the graphical client for use in the refreshData routine. + } + + $activeClients++; + + #Set default for top line per client + if ($prefs->client($client)->get('topNowShowing') ne '') { + $topNowShowing{$client} = $prefs->client($client)->get('topNowShowing'); + } + else { + $topNowShowing{$client} = 1; + $prefs->client($client)->set('topNowShowing', 1); + } + + refreshPlayerSettings(undef, $client); + + if ($activeClients == 1) { + Slim::Utils::Timers::killTimers(undef, \&refreshData); #Just in case there's a rogue timer + Slim::Utils::Timers::setTimer(undef, Time::HiRes::time() + 6, \&refreshData, $client, -1); + } + + $nowshowing{$client}{'itemNum'} = 0; #Start on time display + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + 10, \&nextDisplayItem); + + $client->lines(\&screensaverSuperDateTimelines); + + #Slim::Utils::Timers::listTimers(); + # setting this param will call client->update() frequently + $client->modeParam('modeUpdateInterval', 1); # seconds #7.0 + + #Graphical forecasts code... + # get display size for player if at least Squeezebox2 + if( $client && $client->isa( "Slim::Player::Squeezebox2")) { + $xmax{$client} = $client->display()->displayWidth(); + $ymax{$client} = $client->display()->bytesPerColumn() * 8; + + $log->debug("Found graphic display $xmax{$client} x $ymax{$client} ($client)"); + } + # only use text on SqueezeboxG and SLIMP3 + else { + $xmax{$client} = 0; + $ymax{$client} = 0; + } + + if (scalar $displayInfo{$client}{'forecastG'}==0 && ($client->display->vfdmodel() eq Slim::Display::Squeezebox2->vfdmodel())) { #Only set the weather channel logo the first time + clearCanvas($client); #Show weatherchannel logo at startup + drawIcon($client,29,$ymax{$client}-1,$TWClogo);; + $displayInfo{$client}{'forecastG'}[0] = getFramebuf($client,75); #75 gfx width + $displayInfo{$client}{'forecastG'}[1] = $displayInfo{$client}{'forecastG'}[0]; + $displayInfo{$client}{'forecastG'}[2] = $displayInfo{$client}{'forecastG'}[0]; + $displayInfo{$client}{'forecastG'}[3] = $displayInfo{$client}{'forecastG'}[0]; + } +} + +sub leaveScreensaverSuperDateTimeMode { + my $client = shift; + + #Save top showing preference incase server is shut down + $prefs->client($client)->set('topNowShowing', $topNowShowing{$client}); + + $activeClients--; + + if ($activeClients == 0) { + Slim::Utils::Timers::killTimers(undef, \&refreshData); + } + + killClientTimers($client); + Slim::Utils::Timers::killTimers($client, \&_flashAlarm); +} + +sub gotErrorViaHTTP { + my $http = shift; + my $params = $http->params(); + my $caller = $params->{'caller'}; + my $callerProc = $params->{'callerProc'}; + my $client = $params->{'client'}; + my $refreshItem = $params->{'refreshItem'}; + + $log->warn("error getting " . $http->url()); + $log->warn($http->error()); + $errorCount++; + + if ($errorCount >10) { + $log->warn("Network error count reached during $caller."); + $status = '?'; + saveCycles($caller); + refreshData(undef, $client, $refreshItem); + } + elsif ($caller eq "getAverages") {#Special case + $log->info("Trying getAverages again."); + getAverages($params->{'dayNum'}, $client, $refreshItem); + } + elsif (defined $callerProc) { + $log->info("Trying $caller again."); + Slim::Utils::Timers::setTimer(undef, Time::HiRes::time() + 3, $callerProc, $client, $refreshItem); + } +} + +sub nextWeatherItem { + my $client = shift; + my $caller = shift; + + $killTicker{$client} = 3; + + if (defined $weathershowing{$client}) { + if ($caller == -1) { + if ($weathershowing{$client} == 1) { + $weathershowing{$client} = scalar @WETdisplayItems1; + } + else { + $weathershowing{$client}--; + } + } + else { + if ($weathershowing{$client} == scalar @WETdisplayItems1) { + $weathershowing{$client} = 1; + } + else { + $weathershowing{$client}++; + } + } + } + else { + if ($caller == -1) { + $weathershowing{$client} = scalar @WETdisplayItems1; + } + else { + $weathershowing{$client} = 1; + } + } + $displayLine1{$client} = $WETdisplayItems1[$weathershowing{$client}-1]; + $displayLine2{$client} = $WETdisplayItems2[$weathershowing{$client}-1]; + $nowshowing{$client}{'itemNum'} = -1; #Don't display the time... + + if ($weathershowing{$client} == scalar @WETdisplayItems1) { + #Need to give time for display lines to be called (+2) + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + 2, \&setWeatherTimer,2); + } + else { + #Need to give time for display lines to be called (+2) + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + 2, \&setWeatherTimer,1); + } + + #Update display + if ($scrollType{$client} eq 'Basic') { + $client->update(); #Refresh the display + } + else { + if ($caller == -1) { + if ($client->display->hasScreen2()) { + my $prevHash = $client->curDisplay(); + delete $prevHash->{'screen1'}; + + my $hash = $client->curLines(); + delete $hash->{'screen1'}; + $client->pushRight($prevHash, $hash); + } + else { + $client->pushRight(); + } + } + else { + if ($client->display->hasScreen2()) { + my $prevHash = $client->curDisplay(); + delete $prevHash->{'screen1'}; + + my $hash = $client->curLines(); + delete $hash->{'screen1'}; + $client->pushLeft($prevHash, $hash); + } + else { + $client->pushLeft(); + } + } + } +} + +sub nextDisplayItem { + my $client = shift; + my $timerInterval = 0; + $nowshowing{$client}{'justify'} = 'center'; #Default + + if ($nowshowing{$client}{'itemNum'} < 0) {#Showing weather + $nowshowing{$client}{'itemNum'} = 0; + $timerInterval = $showtime; + } + elsif (defined($displayInfo{'cycleItems1'}[$nowshowing{$client}{'itemNum'}])) { + $displayLine1{$client} = $displayInfo{'cycleItems1'}[$nowshowing{$client}{'itemNum'}]; + $displayLine2{$client} = $displayInfo{'cycleItems2'}[$nowshowing{$client}{'itemNum'}]; + $timerInterval = $displayInfo{'cycleInts'}[$nowshowing{$client}{'itemNum'}]; + + #Special logic to left justify text so that it scrolls + if ($timerInterval eq 'L') { + $timerInterval = 5; #Set a min to show in case it's less than a full line of text, make this configurable or L5 (left 5sec minimum)Make sure at least 3seconds??? + $nowshowing{$client}{'justify'} = 'line'; + } + + $nowshowing{$client}{'itemNum'}++; + } + else { #TIME + $nowshowing{$client}{'itemNum'} = 0; + + if (($activeGames == 1) && ($showactivetime == 0)) { #Don't show time when active games + return nextDisplayItem($client); + } + #This probably needs to be re-evaluated... + elsif ((($activeGames == 0) && ($showtime == 0)) && #Don't show time when no active games + ((totalGames() + scalar @WETdisplayItems2) >0)) #make sure there are some games to show + { + return nextDisplayItem($client); + } + else { #Show the time + if ($activeGames == 0) { + $timerInterval = $showtime; + } + else { + $timerInterval = $showactivetime; + } + } + } + + if ($scrollType{$client} eq 'Ticker' && $killTicker{$client} == 0) { + my $tickerScreen; + if ($client->display->hasScreen2()) { + $tickerScreen = 2; + } + else { + $tickerScreen = 1; + } + + my ($complete, $queue) = $client->scrollTickerTimeLeft($tickerScreen); + if ($nowshowing{$client}{'itemNum'} == 0) { #NEED TO ONLY OCCUR IF TICKER MODE + #Why do we include timerinterval in this??? + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + $timerInterval + $complete, \&nextDisplayItem); + } + } + else { + #Make sure there are items besides the time showing + if (totalGames() >0) { + #Update display + if ($scrollType{$client} eq 'Basic') { + $client->update(); #Refresh the display + } + else { + if ($client->display->hasScreen2()) { + my $prevHash = $client->curDisplay(); + delete $prevHash->{'screen1'}; + + my $hash = $client->curLines(); + delete $hash->{'screen1'}; + $client->pushLeft($prevHash, $hash); + } + else { + $client->pushLeft(); + } + } + } + + if ($nowshowing{$client}{'itemNum'} < 0) { #Weather forecast + #Need to give time for display lines to be called (+2) + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + 2.5, \&setWeatherTimer); + } + elsif ($nowshowing{$client}{'justify'} eq 'line'){ + #Want to give enough time to text to scroll, but have to set a timer to wait for it to actually start scrolling + #Should we add a min check for anything or just pass in what they specify as the minimum??? + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + 2.5, \&setLongTextTimer); + } + else { + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + $timerInterval, \&nextDisplayItem); + } + } + + $killTicker{$client} = 0; +} + +sub setWeatherTimer { + #This creates a timer to set the nextDisplayItem timer for a weather forecast. + #This is necessary because display length is based on how long it takes to scroll... + my $client = shift; + my $caller = shift; + + my $tickerScreen; + if ($client->display->hasScreen2()) { + $tickerScreen = 2; + } + else { + $tickerScreen = 1; + } + my ($complete, $queue) = $client->scrollTickerTimeLeft($tickerScreen); + + if ($caller == 1) { #User viewing weather via fast forward/reverse buttons + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + $complete + preferences('server')->client($client)->get('scrollPause'), \&nextWeatherItem); + } + elsif ($caller == 2) { #User viewing weather via fast forward/reverse buttons and at last item + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + $complete + preferences('server')->client($client)->get('scrollPause'), \&nextDisplayItem); + } + else { #Viewing weather forecast via left/right buttons or regular display intervals + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + $complete + preferences('server')->client($client)->get('scrollPause'), \&nextDisplayItem); + } +} + +sub setLongTextTimer { + #This creates a timer to set the nextDisplayItem timer for a long text item + #This is necessary because display length is based on how long it takes to scroll... + my $client = shift; + + my $tickerScreen; + if ($client->display->hasScreen2()) { + $tickerScreen = 2; + } + else { + $tickerScreen = 1; + } + + my ($complete, $queue) = $client->scrollTickerTimeLeft($tickerScreen); + #Need to add some logic for min length + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + $complete + preferences('server')->client($client)->get('scrollPause'), \&nextDisplayItem); +} + +#Used during ticker display mode to set the top display line to the text at halfway point +sub topLineSet { + + my $client = shift; + my $topLine = shift; + + $tickline1{$client} = $topLine; +} + +sub prevDisplayItem { + my $client = shift; + my $timerInterval; + + $nowshowing{$client}{'justify'} = 'center'; #Default + + if ($nowshowing{$client}{'itemNum'} == 0) { + if (defined($displayInfo{'cycleItems1'})) { + $nowshowing{$client}{'itemNum'} = scalar @{$displayInfo{'cycleOrigin'}}; + $displayLine1{$client} = $displayInfo{'cycleItems1'}[$nowshowing{$client}{'itemNum'}-1]; + $displayLine2{$client} = $displayInfo{'cycleItems2'}[$nowshowing{$client}{'itemNum'}-1]; + $timerInterval = $displayInfo{'cycleInts'}[$nowshowing{$client}{'itemNum'}-1]; + + #Special logic to left justify text so that it scrolls + if ($timerInterval eq 'L') { + $timerInterval = 5; #Set a min to show in case it's less than a full line of text, make this configurable or L5 (left 5sec minimum)Make sure at least 3seconds??? + $nowshowing{$client}{'justify'} = 'line'; + } + } + else { + $timerInterval = 10; + } + } + elsif ($nowshowing{$client}{'itemNum'} <= 1) { + $nowshowing{$client}{'itemNum'} = 0; + + if ($activeGames == 0) { + $timerInterval = $showtime; + } + else { + $timerInterval = $showactivetime; + } + } + else { + $nowshowing{$client}{'itemNum'}--; + $displayLine1{$client} = $displayInfo{'cycleItems1'}[$nowshowing{$client}{'itemNum'}-1]; + $displayLine2{$client} = $displayInfo{'cycleItems2'}[$nowshowing{$client}{'itemNum'}-1]; + $timerInterval = $displayInfo{'cycleInts'}[$nowshowing{$client}{'itemNum'}-1]; + + #Special logic to left justify text so that it scrolls + if ($timerInterval eq 'L') { + $timerInterval = 5; #Set a min to show in case it's less than a full line of text, make this configurable or L5 (left 5sec minimum)Make sure at least 3seconds??? + $nowshowing{$client}{'justify'} = 'line'; + } + } + + #Update display + if ($scrollType{$client} eq 'Basic') { + $client->update(); #Refresh the display + } + else { + if ($client->display->hasScreen2()) { + my $hash = screensaverSuperDateTimelines($client); + delete $hash->{'screen1'}; + #my $curHash = $client->curDisplay(); + #delete $curHash->{'screen2'}; + $client->pushRight(undef, $hash); + } + else { + $client->pushRight(); + } + } + + if ($nowshowing{$client}{'itemNum'} < 0) { #Weather forecast + #Need to give time for display lines to be called (+2) + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + 2, \&setWeatherTimer); + } + elsif ($nowshowing{$client}{'justify'} eq 'line'){ + #Want to give enough time to text to scroll, but have to set a timer to wait for it to actually start scrolling + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + 2.5, \&setLongTextTimer); + } + else { + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + $timerInterval, \&nextDisplayItem); + } +} + +sub killClientTimers { + my $client = shift; + + Slim::Utils::Timers::killTimers($client, \&nextWeatherItem); + Slim::Utils::Timers::killTimers($client, \&setWeatherTimer); + Slim::Utils::Timers::killTimers($client, \&nextDisplayItem); + Slim::Utils::Timers::killTimers($client, \&setLongTextTimer); + Slim::Utils::Timers::killTimers($client, \&topLineSet); +} + +sub clearCanvas { + my $client = shift; + + for( my $xi = 0; $xi < $xmax{$client}; $xi++) { + for( my $yi = 0; $yi < $ymax{$client}; $yi++) { + $hashDisp{$client}[$xi][$yi] = 0; + } + } +} + +sub drawIcon { + my $client = shift; + my $xpos = shift; + my $ypos = shift; + my $icon = shift; + + if ($xmax{$client} && $ymax{$client}) { + my $firstline = 1; + my $xs = $xpos < 0 ? 0 : $xpos; + my $yi = $ypos > $ymax{$client} ? $ymax{$client} : $ypos; + for my $line (split('\n',$icon)) { + # first line must be skipped (empty) + if ($firstline) { + $firstline = 0; + next; + } + chomp $line; + for( my $xi = $xs; $xi < length($line)+$xs && $xi < $xmax{$client} && $yi >= 0; $xi++) { + if (substr($line,$xi-$xs,1) eq "*") { + $hashDisp{$client}[$xi][$yi] = 1; + } + } + $yi--; + } + } +} + +sub drawText { + my $client = shift; + my $xpos = shift; + my $ypos = shift; + my $text = shift; + + if ($xmax{$client} && $ymax{$client}) { + for (my $ci = 0; $ci < length($text); $ci++) { + my $c = substr($text,$ci,1); + my $firstline = 1; + my $xs = $xpos < 0 ? 0 : $xpos + $ci*6; + my $yi = $ypos > $ymax{$client} ? $ymax{$client} : $ypos; + for my $line (split('\n',$Charset[$Codepage{$c}])) { + # first line must be skipped (empty) + if ($firstline) { + $firstline = 0; + next; + } + chomp $line; + for( my $xi = $xs; $xi < length($line)+$xs && $xi < $xmax{$client} && $yi >= 0; $xi++) { + if (substr($line,$xi-$xs,1) eq "*") { + $hashDisp{$client}[$xi][$yi] = 1; + } + } + $yi--; + } + } + } +} + +# convert %hashDisp into line framebuffer format +sub getFramebuf { + my $client = shift; + my $width = shift; + my $line1 = ""; + + for( my $x = 0; $x < $width && $x < $xmax{$client}; $x++) { + my $byte; + for( my $y = $ymax{$client}; $y > 0; $y -= 8) { + $byte = ($hashDisp{$client}[$x][$y-1] << 7) + + ($hashDisp{$client}[$x][$y-2] << 6) + + ($hashDisp{$client}[$x][$y-3] << 5) + + ($hashDisp{$client}[$x][$y-4] << 4) + + ($hashDisp{$client}[$x][$y-5] << 3) + + ($hashDisp{$client}[$x][$y-6] << 2) + + ($hashDisp{$client}[$x][$y-7] << 1) + + $hashDisp{$client}[$x][$y-8]; + $line1 .= pack("C", $byte); + } + } + return $line1; +} + +sub screensaverSuperDateTimelines { + my $client = shift; + my $args = shift; + + my $bottomPad = ''; + + my $flash = $args->{'flash'}; # set when called from animation callback + + my $narrow = $client->display->isa('Slim::Display::Boom'); + my $currentAlarm = Slim::Utils::Alarm->getCurrentAlarm($client); + my $nextAlarm = Slim::Utils::Alarm->getNextAlarm($client); + # show alarm symbol if active or set for next 24 hours + my $alarmOn = defined $currentAlarm || ( defined $nextAlarm && ($nextAlarm->nextDue - time < 86400) ); + $overlay{$client} = undef; + if ($alarmOn && !$flash) { + if (defined $currentAlarm && $currentAlarm->snoozeActive) { + $overlay{$client} = $client->symbols('sleep'); + } else { + $overlay{$client} = $client->symbols('bell'); + # Include the next alarm time in the overlay if there's room + if (!$narrow && !defined $currentAlarm) { + # Remove seconds from alarm time + my $timeStr = Slim::Utils::DateTime::timeF($nextAlarm->time % 86400, $prefs->client($client)->timeformat, 1); + $timeStr =~ s/(\d?\d\D\d\d)\D\d\d/$1/; + $overlay{$client} .= " $timeStr"; + } + } + } + + my $s2line1; + my $s2line2; + + my $lastTicker = 0; #Flag set to indicate showing last ticker item + my $hash; + + if ($nowshowing{$client}{'itemNum'} == 0 || ($client->display->hasScreen2())) { #Show time and temperature + my $time; + if (defined($Plugins::FuzzyTime::Plugin::apiVersion)) { + $time = Plugins::FuzzyTime::Public::timeF($client,undef,preferences('plugin.datetime')->get('timeformat')); + } + else { + $time = $client->timeF(); + } + + if (defined($displayInfo{$client}{'TOPdisplayItems1'}[$topNowShowing{$client}])) { #Show next forecast + #Figure out how much extra spacing is necessary from the 3line text to the lower line + my $max; + if ($displayInfo{$client}{'CharLen2'}[$topNowShowing{$client}] > $displayInfo{$client}{'CharLen3'}[$topNowShowing{$client}]) { + $max = $displayInfo{$client}{'CharLen2'}[$topNowShowing{$client}]; + } + else { + $max = $displayInfo{$client}{'CharLen3'}[$topNowShowing{$client}]; + } + + #If they're using a large font, include top line in maximum for spacing + if ($client->textSize() == 2) { #Large text + if ($displayInfo{$client}{'CharLen1'}[$topNowShowing{$client}] > $max) { + $max = $displayInfo{$client}{'CharLen1'}[$topNowShowing{$client}]; + } + } + + if ($max >2) { + $max = $max - 1; + } + + #Create a text string with the proper number of blank spaces + for (my $count=1; $count< $max; $count++) + { + $bottomPad = $bottomPad . $client->symbols("getMLB-41"); + } + + if ($displayInfo{$client}{'hasIcon'}[$topNowShowing{$client}] == 1) { + $bottomPad = ' ' . $bottomPad . $client->symbols("getMLB-41"). $client->symbols("getMLB-41") . $client->symbols("getMLB-41") . $client->symbols("getMLB-41") . $client->symbols("getMLB-41"); + } + + $s2line1 = $displayInfo{$client}{'TOPdisplayItems1'}[$topNowShowing{$client}]; + $s2line1 =~ s/%1/$time/; + $s2line2 = $bottomPad . $displayInfo{$client}{'BOTdisplayItems1'}[$topNowShowing{$client}]; + $s2line2 =~ s/%1/$time/; + + if ($nowshowing{$client}{'itemNum'} == 0) { + $displayLine1{$client} = $s2line1; + $displayLine2{$client} = $s2line2; + } + } + else { #Show the time/date + $displayLine1{$client} = $client->longDateF(); + $displayLine2{$client} = $time; + $s2line1 = $displayLine1{$client}; + $s2line2 = $displayLine2{$client}; + } + } + + if ($scrollType{$client} eq 'Ticker' && $killTicker{$client} !=3) { #TICKERS + my $tickerScreen; + if ($client->display->hasScreen2()) { + $tickerScreen = 2; + } + else { + $tickerScreen = 1; + } + my ($complete, $queue) = $client->scrollTickerTimeLeft($tickerScreen); + + if ($nowshowing{$client}{'itemNum'} == 0) { #Time + if ($complete == 0 || $killTicker{$client} == 1) { #Show the time + $killTicker{$client} = 0; #Reset kill ticker in case it's toggeled + if ($bottomPad ne '') { + $hash = { + 'overlay' => [$overlay{$client} . $status, undef], + 'center' => [$displayLine1{$client}, $displayLine2{$client}], + # It's incorrect to center the bottom line, but if I don't and the text is larger than what will fit + # on the screen SC will start to scroll it, which totally messes the ticker logic up because it will + # think there's an active ticker when it's actually just the time display. + #'center' => [$displayLine1{$client}, undef], + #'line' => [ undef, $displayLine2{$client} ], + }; + } + else { + $hash = { #No icon or 3line so center everything + 'overlay' => [ $overlay{$client} . $status, undef ], + 'center' => [ $displayLine1{$client}, $displayLine2{$client} ], + }; + } + } + else { #Last ticker item still displaying + $lastTicker = 1; + $hash = { + 'overlay' => [ $overlay{$client} . $status, undef], + 'center' => [ $tickline1{$client}, undef ], + 'ticker' => [ undef, undef ], + }; + } + } + elsif ($queue <1 && $complete >0) { #Queue empty, item is still showing + nextDisplayItem($client); + if ($nowshowing{$client}{'itemNum'} != 0) { #Add item to ticker + + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + ($complete*.5), \&topLineSet, $displayLine1{$client}); + + $hash = { + 'overlay' => [ $overlay{$client} . $status, undef ], + 'center' => [ $tickline1{$client}, undef ], + 'ticker' => [ undef, $displayLine2{$client} ], + }; + } + else { #Last ticker item about to show time + $lastTicker = 1; + $hash = { + 'overlay' => [ $overlay{$client} . $status, undef ], + 'center' => [ $tickline1{$client}, undef ], + 'ticker' => [ undef, undef ], + }; + } + } + elsif ($complete > 0) { #Showing a ticker item + $hash = { + 'overlay' => [ $overlay{$client} . $status, undef ], + 'center' => [ $tickline1{$client}, undef ], + 'ticker' => [ undef, undef ], + }; + } + else { #Add first ticker item + $tickline1{$client} = $displayLine1{$client}; + $hash = { + 'overlay' => [ $overlay{$client} . $status, undef ], + 'center' => [ $tickline1{$client}, undef ], + 'ticker' => [ undef, $displayLine2{$client} ], + }; + } + } + else { #BASIC OR SLIDE + if ($client->textSize() != 2) { #Not large text + if ($nowshowing{$client}{'itemNum'} == 0 && $bottomPad ne '') { #Time with special spacing + $hash = { + 'overlay' => [ $overlay{$client} . $status, undef ], + 'center' => [ $displayLine1{$client}, undef ], + 'line' => [ undef, $displayLine2{$client} ], + }; + } + elsif ($nowshowing{$client}{'itemNum'} == 0) { #Time without special spacing + $hash = { + 'overlay' => [ $overlay{$client} . $status, undef ], + 'center' => [ $displayLine1{$client}, $displayLine2{$client} ], + }; + } + elsif ($nowshowing{$client}{'itemNum'} < 0) { #Weather with scrolling + $hash = { + 'overlay' => [ $overlay{$client} . $status ], + 'center' => [ $displayLine1{$client} ], + 'line' => [ undef, $displayLine2{$client} ], + }; + } + else { + if ($nowshowing{$client}{'justify'} eq 'line') { + $hash = { #Game left justify text to allow for scrolling + 'overlay' => [ $overlay{$client} . $status, undef ], + 'center' => [ $displayLine1{$client}, undef ], + 'line' => [ undef, $displayLine2{$client} ], + }; + } + else { + $hash = { #Game center text # Changed these lines to make game text scroll correctly on Boom. + 'overlay' => [ $overlay{$client} . $status, undef ], +# 'center' => [ $displayLine1{$client}, $displayLine2{$client} ], + 'center' => [ $displayLine1{$client}, undef ], + 'line' => [ undef, $displayLine2{$client} ], + }; + } + } + } #End of not large text + else { #Large text + if ($nowshowing{$client}{'itemNum'} == 0) { #Time + $hash = { + 'overlay' => [ undef, $overlay{$client} . $status ], + 'center' => [ undef, $displayLine2{$client}], + }; + } + else { #Sport scores/stocks in large text + $hash = { + 'overlay' => [ undef, $overlay{$client} . $status ], + $nowshowing{$client}{'justify'} => [ undef, $displayLine2{$client}], + }; + } + } + } + + my $dispHash; + if ($client->display->hasScreen2()) { #Dual screens + my $time; + if (defined($Plugins::FuzzyTime::Plugin::apiVersion)) { + $time = Plugins::FuzzyTime::Public::timeF($client,undef,preferences('plugin.datetime')->get('timeformat')); + } + else { + $time = $client->timeF(); + } + + my $timeHash; + if ($bottomPad ne '') { #Time with special spacing + $timeHash = { + 'center' => [ $s2line1, undef ], + 'line' => [ undef, $s2line2 ], + }; + } + else { + $timeHash = { + 'center' => [ $s2line1, $s2line2 ], + }; + } + + if ($nowshowing{$client}{'itemNum'} != 0 || $lastTicker == 1) { #Not time + $dispHash->{'screen2'} = $hash; + } + else { + my $line1 = $displayInfo{$client}{'TOPdisplayItems2'}[$topNowShowing{$client}]; + $line1 =~ s/%1/$time/; #Add the time if its included + + my $line2 = $displayInfo{$client}{'BOTdisplayItems2'}[$topNowShowing{$client}]; + $line2 =~ s/%1/$time/; #Add the time if its included + + my $screen2; + if ($client->textSize() != 2) { #Not large text + $screen2 = { + 'overlay' => [ $overlay{$client} . $status, undef ], + 'center' => [ $line1, $line2 ], + }; + } + else { + $screen2 = { + 'overlay' => [ undef, $overlay{$client} . $status ], + 'center' => [ $line1, $line2 ], + }; + } + + $dispHash->{'screen2'} = $screen2; + } + + if ($xmax{$client} && $ymax{$client}) { + $timeHash->{'bits'} = $displayInfo{$client}{'forecastG'}[$topNowShowing{$client}]; + } + $dispHash->{'screen1'} = $timeHash; + } + else { #Single screen + $hash->{'fonts'} = { 'graphic-280x16' => { 'overlay' => [ 'small.1' ]}, + 'graphic-320x32' => { 'overlay' => [ 'standard.1' ]}, + 'text' => { 'displayoverlays' => 1 }, + }; + + if ($xmax{$client} && $ymax{$client} && $nowshowing{$client}{'itemNum'} == 0 && $lastTicker == 0) { + $hash->{'bits'} = $displayInfo{$client}{'forecastG'}[$topNowShowing{$client}]; + } + $dispHash->{'screen1'} = $hash; + } + + if ($currentAlarm && !$flash) { + # schedule another update to remove the alarm symbol during alarm + Slim::Utils::Timers::setTimer($client, Time::HiRes::time + 0.5, \&_flashAlarm); + } + + return $dispHash; +} + +sub _flashAlarm { + my $client = shift; + + $client->update( screensaverSuperDateTimelines($client, { flash => 1 }) ); +} + +sub cliQuery { + my $request = shift; + my $client = $request->client(); + + #Get mode param + my $mode = $request->getParam('_mode'); + + $log->debug("Inside CLI request: $mode"); + + if ($mode eq 'all') { + $request->addResult( "wetData", \%wetData ); + $request->addResult( "sportsData", \%sportsData ); + $request->addResult( "miscData", \%miscData ); + } + elsif ($mode eq 'sports') { + $request->addResult( "sportsData", \%sportsData ); + } + elsif ($mode eq 'selsports') { + my %selSportsData = (); + + for my $sport ( keys %sportsData ) { + for my $game ( keys %{ $sportsData{$sport} } ) { + #Skip the sport logos as they're not actually games + if($game eq 'logoURL') { + $selSportsData{$sport}{$game} = $sportsData{$sport}{$game}; + next; + } + + #Use dynamic var names instead? + if ($sport eq 'MLB') { + if (scalar @MLBteams >0) { + if ((teamCheck($sportsData{$sport}{$game}{'homeTeam'},\@MLBteams)==1) || (teamCheck($sportsData{$sport}{$game}{'awayTeam'},\@MLBteams)==1)) { + $selSportsData{$sport}{$game} = $sportsData{$sport}{$game}; + } + } + } + elsif ($sport eq 'NBA') { + if (scalar @NBAteams >0) { + if ((teamCheck($sportsData{$sport}{$game}{'homeTeamCK'},\@NBAteams)==1) || (teamCheck($sportsData{$sport}{$game}{'awayTeamCK'},\@NBAteams)==1)) { + $selSportsData{$sport}{$game} = $sportsData{$sport}{$game}; + } + } + } + elsif ($sport eq 'NFL') { + if (scalar @NFLteams >0) { + if ((teamCheck($sportsData{$sport}{$game}{'homeTeamCK'},\@NFLteams)==1) || (teamCheck($sportsData{$sport}{$game}{'awayTeamCK'},\@NFLteams)==1)) { + $selSportsData{$sport}{$game} = $sportsData{$sport}{$game}; + } + } + } + elsif ($sport eq 'NHL') { + if (scalar @NHLteams >0) { + if ((teamCheck($sportsData{$sport}{$game}{'homeTeam'},\@NHLteams)==1) || (teamCheck($sportsData{$sport}{$game}{'awayTeam'},\@NHLteams)==1)) { + $selSportsData{$sport}{$game} = $sportsData{$sport}{$game}; + } + } + } + elsif ($sport eq 'College Basketball') { + if (scalar @CBBteams >0) { + if ((teamCheck($sportsData{$sport}{$game}{'homeTeam'},\@CBBteams)==1) || (teamCheck($sportsData{$sport}{$game}{'awayTeam'},\@CBBteams)==1)) { + $selSportsData{$sport}{$game} = $sportsData{$sport}{$game}; + } + } + } + elsif ($sport eq 'College Football') { + if (scalar @CFBteams >0) { + if ((teamCheck($sportsData{$sport}{$game}{'homeTeam'},\@CFBteams)==1) || (teamCheck($sportsData{$sport}{$game}{'awayTeam'},\@CFBteams)==1)) { + $selSportsData{$sport}{$game} = $sportsData{$sport}{$game}; + } + } + } + else { #Custom sport + $log->info('Why am I here? Sport = ' . $sport); + $selSportsData{$sport}{$game} = $sportsData{$sport}{$game}; + } + } + } + + $request->addResult( "selsports", \%selSportsData ); + } + elsif ($mode eq 'weather') { + $request->addResult( "wetData", \%wetData ); + } + elsif ($mode eq 'misc') { + $request->addResult( "miscData", \%miscData ); + } + else { + $log->warn("Unknown CLI request: $mode"); + } + + $request->setStatusDone(); +} + +sub macroString { + my $request = shift; + my $client = $request->client(); + + $log->debug("Inside CLI request macroString"); + + my $format = $request->getParam('format'); + my $period = $request->getParam('period'); + + #Default period to 0 if not provided + if (!defined $period) {$period = -1;} + $log->debug("Incoming string: $format Period: $period"); + my $macroString = replaceMacrosPer($format, $period, $client); + + $log->debug("Outgoing string: $macroString"); + $request->addResult( "macroString", $macroString ); + + if (defined $funcptr && ref($funcptr) eq 'CODE') { + $log->debug('Calling next function'); + $request->addParam('format', $macroString); + eval { &{$funcptr}($request) }; + + # arrange for some useful logging if we fail + if ($@) { + $log->error('Error while trying to run function coderef: [' . $@ . ']'); + $request->setStatusBadDispatch(); + $request->dump('Request'); + } + } + else { + $log->debug('Done'); + $request->setStatusDone(); + } +} + +sub sdtVersion { + my $request = shift; + my $client = $request->client(); + + $log->debug("Inside CLI request sdtVersion"); + + $request->addResult( "sdtVersion", $VERSION ); + + $request->setStatusDone(); +} + +#External API to add a custom sport score +#Should only be called during a dataRefresh +sub addCustomSportScore(\%) { + my $params = shift; + + $sportsData{$params->{'sport'}}{$params->{'gameID'}}{'gameTime'} = $params->{'gameTime'}; + $sportsData{$params->{'sport'}}{$params->{'gameID'}}{'homeTeam'} = $params->{'homeTeam'}; + $sportsData{$params->{'sport'}}{$params->{'gameID'}}{'homeScore'} = $params->{'homeScore'}; + $sportsData{$params->{'sport'}}{$params->{'gameID'}}{'awayTeam'} = $params->{'awayTeam'}; + $sportsData{$params->{'sport'}}{$params->{'gameID'}}{'awayScore'} = $params->{'awayScore'}; + + if (defined $params->{'gameLogoURL'}) { + $sportsData{$params->{'sport'}}{$params->{'gameID'}}{'gameLogoURL'} = $params->{'gameLogoURL'}; + } + + if (defined $params->{'homeLogoURL'}) { + $sportsData{$params->{'sport'}}{$params->{'gameID'}}{'homeLogoURL'} = $params->{'homeLogoURL'}; + } + + if (defined $params->{'awayLogoURL'}) { + $sportsData{$params->{'sport'}}{$params->{'gameID'}}{'awayLogoURL'} = $params->{'awayLogoURL'}; + } +} + +#External API to add an icon for a custom sport +sub addCustomSportLogo { + my $sport = shift; + my $imgURL = shift; + + $sportsData{$sport}{'logoURL'} = $imgURL; +} + +#External API to remove all sports scores and icon for a particular custom sport +#Should only be called during a dataRefresh +sub delCustomSport { + my $sport = shift; + + delete $sportsData{$sport}; +} + +#External API to remove sports scores for a particular custom sport +#Should only be called during a dataRefresh +sub delCustomSportScore { + my $sport = shift; + my $gameID = shift; + + delete $sportsData{$sport}{$gameID}; +} + +#External API to add a custom display text by hash ref +#Should only be called during a dataRefresh +sub addCustomDisplayItemHash { + my $group = shift; + my $itemID = shift; + my $itemHash_ref = shift; + + #Copy item hash into a new hash + my %hash = %$itemHash_ref; + + $miscData{$group}{$itemID} = \%hash; +} + +#External API to remove all display items for a custom group +#Should only be called during a dataRefresh +sub delCustomDisplayGroup { + my $group = shift; + + delete $miscData{$group}; +} + +#External API to remove display items for a particular custom group +#Should only be called during a dataRefresh +sub delCustomDisplayGroupItem { + my $group = shift; + my $itemID = shift; + + delete $miscData{$group}{$itemID}; +} + + + +1; + +__END__ + +# Local Variables: +# tab-width:4 +# indent-tabs-mode:t +# End: diff --git a/SuperDateTime/lib/Plugins/SuperDateTime/Settings.pm b/SuperDateTime/lib/Plugins/SuperDateTime/Settings.pm new file mode 100644 index 0000000..372ff91 --- /dev/null +++ b/SuperDateTime/lib/Plugins/SuperDateTime/Settings.pm @@ -0,0 +1,350 @@ +package Plugins::SuperDateTime::Settings; + +# SlimServer Copyright (C) 2001-2006 Slim Devices Inc. +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License, +# version 2. + +use strict; +use base qw(Slim::Web::Settings); + +use Slim::Utils::Log; +use Slim::Utils::Prefs; + +my $prefs = preferences('plugin.superdatetime'); + +my $log = Slim::Utils::Log->addLogCategory({ + 'category' => 'plugin.superdatetime', + 'defaultLevel' => 'WARN', +# 'defaultLevel' => 'DEBUG', + 'description' => 'SuperDateTime blah blah blah', +}); + +my %mlbTeams = ( + 'Angels' => 'Angels', + 'Astros' => 'Astros', + 'Athletics' => 'Athletics', + 'Blue Jays' => 'Blue Jays', + 'Braves' => 'Braves', + 'Brewers' => 'Brewers', + 'Cardinals' => 'Cardinals', + 'Cubs' => 'Cubs', + 'D-backs' => 'Diamondbacks', + 'Dodgers' => 'Dodgers', + 'Giants' => 'Giants', + 'Indians' => 'Indians', + 'Mariners' => 'Mariners', + 'Marlins' => 'Marlins', + 'Mets' => 'Mets', + 'Nationals' => 'Nationals', + 'Orioles' => 'Orioles', + 'Padres' => 'Padres', + 'Phillies' => 'Phillies', + 'Pirates' => 'Pirates', + 'Rangers' => 'Rangers', + 'Rays' => 'Rays', + 'Red Sox' => 'Red Sox', + 'Reds' => 'Reds', + 'Rockies' => 'Rockies', + 'Royals' => 'Royals', + 'Tigers' => 'Tigers', + 'Twins' => 'Twins', + 'White Sox' => 'White Sox', + 'Yankees' => 'Yankees', + '0' => 'None', + '1' => 'All' +); + +my %nbaTeams = ( + 'PHI' => '76ers', + 'MIL' => 'Bucks', + 'CHI' => 'Bulls', + 'CLE' => 'Cavaliers', + 'BOS' => 'Celtics', + 'LAC' => 'Clippers', + 'MEM' => 'Grizzlies', + 'ATL' => 'Hawks', + 'MIA' => 'Heat', + 'CHA' => 'Hornets', + 'UTA' => 'Jazz', + 'SAC' => 'Kings', + 'NYK' => 'Knicks', + 'LAL' => 'Lakers', + 'ORL' => 'Magic', + 'DAL' => 'Mavericks', + 'BKN' => 'Nets', + 'DEN' => 'Nuggets', + 'IND' => 'Pacers', + 'NOP' => 'Pelicans', + 'DET' => 'Pistons', + 'TOR' => 'Raptors', + 'HOU' => 'Rockets', + 'SAS' => 'Spurs', + 'PHX' => 'Suns', + 'OKC' => 'Thunder', + 'MIN' => 'Timberwolves', + 'POR' => 'Trail Blazers', + 'GSW' => 'Warriors', + 'WAS' => 'Wizards', + '0' => 'None', + '1' => 'All' +); + +my %nflTeams = ( + 'SF' => '49ers', + 'CHI' => 'Bears', + 'CIN' => 'Bengals', + 'BUF' => 'Bills', + 'DEN' => 'Broncos', + 'CLE' => 'Browns', + 'TB' => 'Buccaneers', + 'ARI' => 'Cardinals', + 'LAC' => 'Chargers', + 'KC' => 'Chiefs', + 'IND' => 'Colts', + 'DAL' => 'Cowboys', + 'MIA' => 'Dolphins', + 'PHI' => 'Eagles', + 'ATL' => 'Falcons', + 'NYG' => 'Giants', + 'JAC' => 'Jaguars', + 'NYJ' => 'Jets', + 'DET' => 'Lions', + 'GB' => 'Packers', + 'CAR' => 'Panthers', + 'NE' => 'Patriots', + 'OAK' => 'Raiders', + 'LA' => 'Rams', + 'BAL' => 'Ravens', + 'WAS' => 'Redskins', + 'NO' => 'Saints', + 'SEA' => 'Seahawks', + 'PIT' => 'Steelers', + 'HOU' => 'Texans', + 'TEN' => 'Titans', + 'MIN' => 'Vikings', + '0' => 'None', + '1' => 'All' +); + +my %nhlTeams = ( + 'Avalanche' => 'Avalanche', + 'Blackhawks' => 'Blackhawks', + 'Blue Jackets' => 'Blue Jackets', + 'Blues' => 'Blues', + 'Bruins' => 'Bruins', + 'Canadiens' => 'Canadiens', + 'Canucks' => 'Canucks', + 'Capitals' => 'Capitals', + 'Coyotes' => 'Coyotes', + 'Devils' => 'Devils', + 'Ducks' => 'Ducks', + 'Flames' => 'Flames', + 'Flyers' => 'Flyers', + 'Hurricanes' => 'Hurricanes', + 'Islanders' => 'Islanders', + 'Jets' => 'Jets', + 'Kings' => 'Kings', + 'Lightning' => 'Lightning', + 'Maple Leafs' => 'Maple Leafs', + 'Oilers' => 'Oilers', + 'Panthers' => 'Panthers', + 'Penguins' => 'Penguins', + 'Predators' => 'Predators', + 'Rangers' => 'Rangers', + 'Red Wings' => 'Red Wings', + 'Sabres' => 'Sabres', + 'Senators' => 'Senators', + 'Sharks' => 'Sharks', + 'Stars' => 'Stars', + 'Wild' => 'Wild', + '0' => 'None', + '1' => 'All' +); + +my %cfballconf = ( + '0' => 'None', + '80' => 'All Div I-A', + '1' => 'ACC', + '4' => 'Big 12', + '10' => 'Big East', + '5' => 'Big Ten', + '12' => 'C-USA', + '46' => 'A-Sun', + '18' => 'IA Indep.', + '15' => 'MAC', + '17' => 'MWC', + '9' => 'Pac-10', + '37' => 'S. Belt', + '8' => 'SEC', + '16' => 'WAC', + '81' => 'All Div I-AA', + '19' => 'A 10', + '20' => 'Big Sky', + '40' => 'Big South', + '21' => 'Gateway', + '43' => 'Great West', + '32' => 'IAA Indep.', + '22' => 'Ivy', + '23' => 'MAAC', + '24' => 'MEAC', + '25' => 'NEC', + '26' => 'OVC', + '27' => 'Patriot', + '28' => 'Pioneer', + '29' => 'Southern', + '30' => 'Southland', + '31' => 'SWAC', + '1000' => 'Top-25' +); + +my %cbballconf = ( + '0' => 'None', + '50' => 'All', + '1' => 'Am. East', + '2' => 'ACC', + '62' => 'American', + '3' => 'A Ten', + '4' => 'Big East', + '7' => 'Big Ten', + '46' => 'A-Sun', + '8' => 'Big 12', + '5' => 'Big Sky', + '6' => 'B. South', + '9' => 'B. West', + '10' => 'CAA', + '11' => 'C-USA', + '43' => 'Indep.', + '45' => 'HOR', + '12' => 'Ivy', + '13' => 'MAAC', + '15' => 'Mid-Con', + '14' => 'MAC', + '16' => 'MEAC', + '18' => 'MVC', + '44' => 'MWC', + '19' => 'NEC', + '20' => 'OVC', + '21' => 'Pac-10', + '22' => 'Patriot', + '23' => 'SEC', + '24' => 'Southern', + '25' => 'Southland', + '26' => 'SWAC', + '27' => 'S. Belt', + '29' => 'WCC', + '30' => 'WAC', + '1000' => 'Top-25' +); + +sub name { + return 'PLUGIN_SCREENSAVER_SUPERDATETIME'; +} + +sub page { + return 'plugins/SuperDateTime/settings/basic.html'; +} + +sub handler { + my ($class, $client, $params) = @_; + + my @prefs2 = qw( + city + wunder + temperature + windunit + offset + stocks + stock1format + stock2format + teamlogos + mlb + nba + nhl + nfl + cbballconf + cbb + cfballconf + cfb + refresh + lang + time + atime + score + ascore + lweather +# lalerts + drawEachDelay +# getWeatherImgs + ); + + my $cityChanged = 0; + + for my $pref (@prefs2) { + if ($params->{'saveSettings'}) { + if ($pref eq 'cfb') { + # Remove empties. + my @teams = grep { $_ ne '' } @{$params->{'cfb'}}; + $prefs->set('cfb', \@teams); + } + elsif ($pref eq 'cbb') { + # Remove empties. + my @teams = grep { $_ ne '' } @{$params->{'cbb'}}; + $prefs->set('cbb', \@teams); + } + elsif ($pref eq 'mlb') { + # Remove empties. + my @teams = grep { $_ ne '0' } @{$params->{'mlb'}}; + $prefs->set('mlb', \@teams); + } + elsif ($pref eq 'nfl') { + # Remove empties. + my @teams = grep { $_ ne '0' } @{$params->{'nfl'}}; + $prefs->set('nfl', \@teams); + } + elsif ($pref eq 'nba') { + # Remove empties. + my @teams = grep { $_ ne '0' } @{$params->{'nba'}}; + $prefs->set('nba', \@teams); + } + elsif ($pref eq 'nhl') { + # Remove empties. + my @teams = grep { $_ ne '0' } @{$params->{'nhl'}}; + $prefs->set('nhl', \@teams); + } + elsif ($pref eq 'v1period') { + #Remove hidden one that forces array saving- is there a better way to do this? + my @items = grep { $_ ne 'deleteme' } @{$params->{'v1period'}}; + $prefs->set('v1period', \@items); + } + elsif ($pref eq 'city') { + if ($prefs->get($pref) ne $params->{$pref}) { + $prefs->set($pref, $params->{$pref}); + $cityChanged = 1; + + } + } + else { + $prefs->set($pref, $params->{$pref}); + } + } + $params->{'prefs'}->{$pref} = $prefs->get($pref); + } + + if ($params->{'saveSettings'}) { + Plugins::SuperDateTime::Plugin::refreshSoon($client); + } + + $params->{'mlbTeams'} = \%mlbTeams; + $params->{'nflTeams'} = \%nflTeams; + $params->{'nbaTeams'} = \%nbaTeams; + $params->{'nhlTeams'} = \%nhlTeams; + $params->{'cfballconf'} = \%cfballconf; + $params->{'cbballconf'} = \%cbballconf; + + return $class->SUPER::handler($client, $params); +} + +1; + +__END__ diff --git a/SuperDateTime/mlb.2.font.bmp b/SuperDateTime/mlb.2.font.bmp new file mode 100644 index 0000000000000000000000000000000000000000..75ed8fe5c550b92d3b9727fbec7a94d765659306 GIT binary patch literal 13132 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: Die Einstellungen können sowohl auf Serverebene als auch für jede Squeezebox getrennt durchgeführt werden. + EN Displays local time, date, weather, sports, and stocks information. This version uses weather.com data.
        NOTE: Settings are done at both the server and individual player levels. + ES Muestra información sobre hora local, fecha, clima, y deportes. + NL Toont lokale tijd, datum, weer, sport en beursinformatie.
        NOTE: Instellingen moet je zowel op server- als op spelerniveau instellen. + +PLUGIN_SCREENSAVER_SUPERDATETIME_CITY + DE weather.com-Kennzeichen + EN weather.com identifier + NL weather.com identificatie + +PLUGIN_SCREENSAVER_SUPERDATETIME_CITY_DESC + DE Ihre Postleitzahl oder ihr weather.com-Kennzeichen (z.B. Berlin = GMXX0007:1:GM oder Neuss = GMXX0090:1:GM) + EN Your US Zip Code or Weather.com identifier (ie Chicago = 60614:4:US or London = UKXX0085:1:UK) + ES Tu código Zip (en EEUU) o identificador en Weather.com (ie Buenos Aires = ARBA0009:1:AR) + NL De Verinigde staten postcode of weather.com identificatie (bijvoorbeeld Haarlem = NLXX0010:1:NL) + +PLUGIN_SCREENSAVER_SUPERDATETIME_CHOOSE + DE Postleitzahl oder weather.com-Kennzeichen: + EN Zip code or identifier: + ES Código Zip o identificador: + NL Postcode of identificatie: + +PLUGIN_SCREENSAVER_SUPERDATETIME_WUNDER + DE Underground-Wetter + EN Weather Underground + +PLUGIN_SCREENSAVER_SUPERDATETIME_WUNDER_DESC + DE Die Kennung einer Undergroud-Wetterstation (www.wunderground.com) deren Daten die aktuell von weather.com zur Verfügung gestellten Informationen überschreiben soll (z.B. Prenzlauer Berg, Berlin = IBERLIN15).
        Achtung: Die Datenfelder von Wetterstationen können sich ändern. Wetterdaten von weather.com werden jedoch weiter zur Verfügung gestellt. + EN You have the option to supply a wunderground.com weather station to receive readings from a particular weather station (ie Lincoln Park, Chicago = KILCHICA52).
        Note: Data fields supplied by weather stations will vary. + NL Je hebt de mogelijkheid om een wunderground.com weerstation op te geven om de gegevens van een weerstation te ontvangen (bijvoorbeeld AHAM voor Amsterdam).
        NB: De informatie die geleverd wordt kan verschillen van weerstation tot weerstation. + +PLUGIN_SCREENSAVER_SUPERDATETIME_WUNDER_CHOOSE + DE Kennzeichen der Underground-Wetterstation: + EN Weather station identifier: + NL Weerstation identificatie: + +PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT1T + DE Zeit-/Wetterformat Zeile 1 + EN Time/Weather Format Strings + NL Tijd/weer formaat strings + +PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT1T_DESC + DE Sie können die Informationen, die in jeder Zeile angezeigt werden sollen, mittels Makrovariablen festlegen:
        Aktuelle Konditionen:Informationszeitraum:wunderground.com:
        Zeit = %1 (nur Zeile 1 und 2)Zeitraum (z.B. heute) = %yTemperatur (°F) = %e (%r = gerundet)
        Datum = %2%Kurzvorhersage (z.B. sonnig) = %vTemperatur %(°C) = %E (%R = gerundet)
        Temperatur (°F) = %tHöchst-/Tiefsttemperatur (°F) = %zLuftfeuchtigkeit = %H
        Temperatur (°C) %= %THöchchst-/Tiefsttemperatur (°C) %=%ZWindgeschwindigkeit (mi/hr) = %j
        Gefühlte Temperatur = (°F) = %fNiederschlag = %xWindgeschwindigkeit (km/hr) = %J
        Gefühlte Temperatur = (°C) = %FDurchschnittliche Höchst-/Tiefsttemperatur (°F) = %aWindgeschwindigkeit (kt/hr) = %k
        Luftfeuchtigkeit = %hDurchschnittliche %Höchst-/Tiefsttemperatur (°C) = %AWindgeschwindigkeit %(m/s) = %K
        Windgeschwindigkeit (mi/hr) = %wAufgezeichnete Höchst-/Tiefsttemperatur (°F) = %cLuftdruck (inHg) = %l
        Windgeschwindigkeit (km/hr) = %WAufgezeichnete Höchst-/Tiefsttemperatur (°C) = %CLuftdruck (hPa) = %L
        Windgeschwindigkeit (kt/hr) = %qJahreshöchst-/Tiefsttemperatur = %gTaupunkt %(°F) = %m
        Windgeschwindigkeit (m/s) = %QSonnenaufgang = %sTaupunkt (°C) = %M
        Luftdruck (inHg) = %pSonnenuntergang = %S
        Luftdruck (hPa) = %P
        Taupunkt (°F) = %d
        Taupunkt (°C) = %D
        Past 24-hr Precip = %b
        Past 24-hr Snowfall = %B

        Achtung: Durch Drücken der hoch- und runter-Pfeiltasten auf der Fernbedienung schaltet man die Informationensanzeige zwischen vordefinierten und eigenen Modi um. Die Einstellungen für die Anzeige 2 treffen nur auf Squeezeboxen mit mehreren Anzeigen zu.
        + EN You can customize the display of information shown on each line using macro variables:
        Current Condtions:Period Information:wunderground.com:
        Time = %1 (Line 1&2 Only)Period Covered (ie Today) = %yTemperature (°F) = %e (%r - rounded)
        Date = %2Brief Forecast (ie Sunny) = %vTemperature (°C) = %E (%R = rounded)
        Temperature (°F) = %tHigh/Low (°F) = %zHumidity = %H
        Temperature (°C) = %THigh/Low (°C) = %ZWind Speed (mi/hr) = %j
        Feels-Like Temperature (°F) = %fPrecipitation = %xWind Speed (km/hr) = %J
        Feels-Like Temperature (°C) = %FAverage High/Low (°F) = %aWind Speed (kt/hr) = %k
        Humidity = %hAverage High/Low (°C) = %AWind Speed (m/s) = %K
        Wind Speed (mi/hr) = %wRecord High/Low (°F) = %cBarometric Pressure (inHg) = %l
        Wind Speed (km/hr) = %WRecord High/Low (°C) = %CBarometric Pressure (hPa) = %L
        Wind Speed (kt/hr) = %qRecord High/Low Year = %gDew Point (°F) = %m
        Wind Speed (m/s) = %QSunrise = %sDew Point (°C) = %M
        Barometric Pressure (inHg) = %pSunset = %S
        Barometric Pressure (hPa) = %PMoonrise = %n
        Dew Point (°F) = %dMoonset = %N
        Dew Point (°C) = %D
        UV Index (Value) = %u
        UV Index (Text) = %U
        Past 24-hr Precip = %b
        Past 24-hr Snowfall = %B

        Note: Pressing the up and down remote control buttons will cycle display of pre-defined and custom modes. Display 2 settings only apply to Squeeze Boxes with multiple displays. Date and time formatting is controlled via their format settings on the standard DateTime screensaver included with SqueezeCenter.
        + NL Je kunt de informatie die getoond wordt op de regels instellen met macrovariabelen:
        Huidige conditie:Periode informatie:wunderground.com:
        Tijd = %1 (Alleen regel 1&2)Periode (bijv. Vandaag) = %yTemperatuur (°F) = %e
        Datum = %2Korte weersvoorspelling (bijv. Zonnig) = %vTemperatuur (°C) = %E
        Temperatuur (°F) = %tHoog/Laag (°F) = %zVochtigheid = %H
        Temperatuur (°C) = %THoog/Laag (°C) = %ZWindsnelheid (mph) = %j
        Gevoelstemperatuur (°F) = %fNeerslag = %xWindsnelheid (kmh) = %J
        Gevoelstemperatuur (°C) = %FGemiddeld hoog/laag (°F) = %aWind snelheid (knoop/uur) = %k
        Vochtigheid = %hGemiddeld hoog/laag (°C) = %AWindsnelheid (m/s) = %K
        Windsnelheid (mph) = %wRecord hoog/laag (°F) = %cBarometerdruk (inHg) = %l
        Windsnelheid (km/uur) = %WRecord hoog/laag (°C) = %CBarometerdruk (hPa) = %L
        Windsnelheid (knoop/uur) = %qRecord hoog/laag = %gDauwpunt (°F) = %m
        Windsnelheid (m/s) = %QZonsopgang = %sDauwpunt (°C) = %M
        Barometerdruk (inHg) = %pZonsondergang = %S
        Barometerdruk (hPa) = %P
        Dauwpunt (°F) = %d
        Dauwpunt (°C) = %D
        UV Index (Waarde) = %u
        UV Index (Tekst) = %U
        Past 24-hr Precip = %b
        Past 24-hr Snowfall = %B

        NB: Door het drukken op de op- of neertoetsen toon je de voorgedefinieerde aangepaste scherm modes. Scherm 2 instellingen zijn alleen mogelijk bij Squeezeboxes met twee schermen. Datum en tijd formaat wordt overgenomen van de standaard datumtijd schermbeveiliger in Squeezecenter server.
        + +PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT1T_CHOOSE + DE Zeilenformat Zeile 1 (Anzeige 1): + EN Line 1 format string (display 1): + NL Regel 2 formaat string (scherm 1): + +PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT1B + DE Zeit-/Wetterformat Zeile 2 + EN Line 2 Time/Weather Format String + NL Regel 2 tijd/weer formaat string + +PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT1B_DESC + DE Sie können hier die in Zeile 2 anzuzeigenden Informationen anpassen. Dies wird durch die Verwendung der gleichen Platzhaltern wie bei Zeile 1 ermöglicht.

        Standardformat: %t/%h %1 + EN You can customize the display of information shown on line two. This is accomplished using the same macro variables used on line one.

        The default format string is: %t/%h %1 + NL Je kunt de informatie die getoond wordt op regel één instellen. Dit stel je in met dezelfde macrovariabelen als bij regel één.

        De standaard formaat string is: %t/%h %1 + +PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT1B_CHOOSE + DE Zeilenformat Zeile 2 (Anzeige 1): + EN Line 2 format string (display 1): + NL Regel 2 formaat string (scherm 1): + +PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT2T + DE Zeit-/Wetterformat + EN Time/Weather Format Strings + NL Tijd/weer formaat strings + +PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT2T_DESC + DE Bei SqueezeBoxen mit mehreren Anzeigen können Sie hier die auf der zweiten Anzeige in Zeile 1 anzuzeigenden Informationen anpassen. Dies wird durch die Verwendung der gleichen Platzhalter wie bei der ersten Anzeige ermöglicht. + EN For Squeeze Boxes with multiple displays, you can customize the display of information shown on line one of the second display. This is accomplished using the same macro variables used in display one. + NL Voor Squeezeboxen met meerdere schermen kun je instellen welke informatie getoond wordt op regel één van het tweede scherm. Dit stel je in met dezelfde macrovariabelen als bij scherm één. + +PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT2T_CHOOSE + DE Zeilenformat Zeile 1 (Anzeige 2): + EN Line 1 format string (display 2): + NL Regel 1 formaat string (scherm 2): + +PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT2B + DE Zeit-/Wetterformat Zeile 2 + EN Line 2 Time/Weather Format String + NL Regel 2 tijd/weer formaat string + +PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT2B_DESC + DE Bei SqueezeBoxen mit mehreren Anzeigen können Sie hier die auf der zweiten Anzeige in Zeile 2 anzuzeigenden Informationen anpassen. Dies wird durch die Verwendung der gleichen Platzhalter wie bei der ersten Anzeige ermöglicht. + EN For Squeeze Boxes with multiple displays, you can customize the display of information shown on line two of the second display. This is accomplished using the same macro variables used in display one. + NL Voor SqueezeBoxen met meerdere schermen kun je instellen welke informatie getoond wordt op regel 2 van het tweede scherm. Dit stel je in met dezelfde macrovariabelen als bij scherm één. + +PLUGIN_SCREENSAVER_SUPERDATETIME_WEATHERFORMAT2B_CHOOSE + DE Zeilenformat Zeile 2 (Anzeige 2): + EN Line 2 format string (display 2): + NL Regel 2 formaat string (display 2): + +PLUGIN_SCREENSAVER_SUPERDATETIME_OFFSET_CHOOSE + DE Zeitzonenoffset: + EN Time zone offset: + ES Diferencia de huso horario: + NL Tijdzone verschil: + +PLUGIN_SCREENSAVER_SUPERDATETIME_OFFSET + DE Zeitzonenoffset + EN Time Zone Offset + ES Diferencia de Huso Horario + NL Tijdzone verschil + +PLUGIN_SCREENSAVER_SUPERDATETIME_OFFSET_DESC + DE Zeitdifferenz zwischen der lokalen Zeit und der US Eastern-Zeitzone festlegen. Diese Einstellung wird nur für die Spielzeitanzeige verwendet. + EN The number of hours different your local time zone is from the US Eastern time zone. This setting is only used for gametime display. + ES El número de horas que separan tu huso horario con el huso horario Este de EEUU. Esta configuración se utiliza solo para mostrar el horario de los partidos. + NL Het aantal uren verschil van de lokale tijd met de VS EST tijdzone. Deze instelling wordt alleen voor gametijd tonen gebruikt. + +PLUGIN_SCREENSAVER_SUPERDATETIME_SCROLL + DE Textrollen + EN Text Scrolling + ES Desplazamiento de Texto + NL Tekst scrollen + +PLUGIN_SCREENSAVER_SUPERDATETIME_SCROLL_DESC + DE Sie können entscheiden wie der Anzeigeübergang zwischen zwei Spielen aussehen soll.
        Basic: Änderungen werden umgehend angezeigt ohne den Text rollen zu lassen.
        Slide: Änderungen werden in bzw. aus der Anzeige geschoben.
        Ticker: Änderungen werden in bzw. aus der Anzeige gerollt wie ein Aktienticker. + EN You have a choice as to how the display transitions from one game to the next.
        Basic: Changes are immediately displayed with no scrolling.
        Slide: Changes slide onto and off of the screen.
        Ticker: Changes scroll onto and off of the screen like a stock ticker. + ES Se puede elegir cómo mostrar las transiciones de un partido a otro.
        Básico: Los cambios se muestran en forma inmediata sin desplazamiento.
        Desplazar: Los cambios se desplazan hacia y afuera de la pantalla. + NL Je hebt een keuze hoe de schermovergangen van de ene game naar de volgende verlopen.
        Simpel:Nieuwe informatie wordt direct getoond zonder scrollen.
        Schuiven: Nieuwe informatie loopt over het scherm heen.
        Ticker:Informatie rol het scherm op en af zoals een beursticker. + +PLUGIN_SCREENSAVER_SUPERDATETIME_FDAYS + DE Vorhersagetage + EN Forecast Days + NL Dagen voorspelling + +PLUGIN_SCREENSAVER_SUPERDATETIME_FDAYS_DESC + DE Sie haben die Möglichkeit die Anzahl der Tage für die eine Wettervorhersage angezeigt werden soll mittels der Hoch- und Runtertaste an der Fernbedienung einzustellen.
        Achtung: Wird eine große Anzahl von Tagen ausgewählt, so verlängert sich die Zeit des Datenabrufs. Weiterhin kann während eines Datenabrufs die SqueezeCenter-Performance negativ beeinflusst werden. + EN You have a choice as to how many days worth of upcoming weather forecasts are available via the Up and Down remote keys.
        Note: A larger number selected will cause data refreshes to take longer to complete. Data refreshes tend to impact SqueezeCenter performance while they are taking place. + NL Je kunt het aantal dagen instellen waarvoor de weersvoorspelling moet worden opgehaald. Dit is beschikbaar op de afstandsbediening met de op- en neertoetsen.
        NB:Met een groot aantal dagen duurt het verversen van de gegevens langer. Het informatie verversen heeft invloed op de performance van SqueezeCenter server tijdens het verversen. + +PLUGIN_SCREENSAVER_SUPERDATETIME_SCROLL_CHOOSE + DE Rolltyp: + EN Scroll type: + ES Tipo de desplazamiento: + NL Scrolltype: + +PLUGIN_SCREENSAVER_SUPERDATETIME_STOCKS + DE Aktien + EN Stocks + NL Beurs + +PLUGIN_SCREENSAVER_SUPERDATETIME_STOCKS_DESC + DE Sie können eine oder mehrere Aktien oder Indizes angeben (zum Beispiel: ^ DJI, ^ SPC, ^ IXIC), um Informationen zu erhalten. Einträge mit Leerzeichen trennen. Kurse werden von finance.yahoo.com zur Verfügung gestellt und Einzelkurse werden um 20 Minuten verschoben. Es wird nicht garantiert, dass die Kurse korrekt sind. + EN You can specify one or more stocks or index (for example: ^DJI, ^SPC, ^IXIC) to retrieve information about. Separate entries with space. Quotes are supplied by finance.yahoo.com and individual stocks quotes are delayed 20 minutes. Quotes are not guaranteed to be accurate. + NL U kunt een of meer aandelen of een index opgeven (bijvoorbeeld: ^ DJI, ^ SPC, ^ IXIC) om informatie over op te halen. Afzonderlijke items met spatie. Citaten worden geleverd door finance.yahoo.com en individuele aandelenkoersen zijn 20 minuten vertraagd. Citaten zijn niet gegarandeerd nauwkeurig. + +PLUGIN_SCREENSAVER_SUPERDATETIME_STOCKS_CHOOSE + DE Aktien: + EN Stocks: + NL Beurs: + +PLUGIN_SCREENSAVER_SUPERDATETIME_STOCK1FORMAT + DE Aktienanzeigeformat Zeile 1 + EN Stock Line 1 Format + NL Beursinfo regel 1 formaat + +PLUGIN_SCREENSAVER_SUPERDATETIME_STOCK1FORMAT_DESC + DE Sie können die Aktieninformationen, die in jeder Zeile angezeigt werden sollen, mittels Makrovariablen festlegen:

        Tickersymbol = %s
        Name = %n
        Letzter Kurs =%l
        Letztes Kursdatum (EST) = %d
        Letzte Kurszeit (EST) = %t
        Vorheriger Schlusskurs = %p
        Änderung = %c
        Prozentuale Änderung = %z
        Eröffnungskurs = %o
        Höchster Kurs = %h
        Niedrigster Kurs = %w
        Volumen = %v

        Das Standardformat für Zeile 1 ist: %n
        Das Standardformat für Zeile 2 ist: %l %c %z %v + EN You can customize the stock information shown on each line by using macro variables:
        Ticker Symbol = %s
        Name = %n
        Last Trade = %l
        Last Trade Date (EST) = %d
        Last Trade Time (EST) = %t
        Previous Close = %p
        Change = %c
        Percent Change = %z
        Open = %o
        High = %h
        Low = %w
        Volume = %v

        The default line 1 format string is: %n
        The default line 2 format string is: %l %c %z %v + NL Je kunt de beurs info die getoond wordt op elke regel instellen met macrovariabelen:
        Ticker symbool = %s
        Naam = %n
        Laatste handel = %l
        Laatste handel datum (EST) = %d
        Laatste handel tijd (EST) = %t
        Vorige sluiting = %p
        Wijziging = %c
        Procentuele wijziging = %z
        Open = %o
        Hoogste = %h
        Laagste = %w
        Volume = %v

        De standaard string voor regel 1 is: %n
        De standaard string voor regel 2 is: %l %c %z %v + +PLUGIN_SCREENSAVER_SUPERDATETIME_STOCK1FORMAT_CHOOSE + DE Aktienformat Zeile 1: + EN Stock line 1 format string: + NL Beursinfo regel 1 formaat string: + +PLUGIN_SCREENSAVER_SUPERDATETIME_STOCK2FORMAT + DE Aktienformat Zeile 2 + EN Stock Line 2 Format + NL Beursinfo regel 2 formaat + +PLUGIN_SCREENSAVER_SUPERDATETIME_STOCK2FORMAT_DESC + DE Sie können hier die in Zeile 2 anzuzeigenden Aktieninformationen anpassen. Dies wird durch die Verwendung der gleichen Platzhaltern wie bei Zeile 1 ermöglicht.

        Standardformat: %l %c %z %v + EN You can customize the display of stock information shown on line two. This is accomplished using the same macro variables used in line one.

        The default format string is: %l %c %z %v + NL Je kunt het tonen van beursinformatie op regel twee instellen. Dit gaat met dezelfde macrovariabelen als in regel één.

        De standaard string is: %l %c %z %v + +PLUGIN_SCREENSAVER_SUPERDATETIME_STOCK2FORMAT_CHOOSE + DE Aktienanzeigeformat Zeile 2: + EN Stock line 2 format string: + NL Beursinfo regel 2 formaat string: + +PLUGIN_SCREENSAVER_SUPERDATETIME_TEAMLOGOS + DE Mannschaftslogos + EN Team Logos + NL Team logo's + +PLUGIN_SCREENSAVER_SUPERDATETIME_TEAMLOGOS_DESC + DE Sie können hier festlegen wann Mannschaftslogos angezeigt werden sollen.
        Anmerkung: Aktuell werden alle MLB und einige NFL Mannschaften unterstützt. Im Zweizeilenmodus sieht die Anzeige am besten aus. Falls ein Logo nicht verfügbar ist wird der Mannschaftsnahme angezeigt. + EN You have the option on when to display graphical team logos.
        Note: Currently all MLB and some NFL teams are supported and look best in two line mode. If an icon is not available the team name will be shown in text. + NL Je hebt de mogelijkheid om in te stellen waneer een grafische team logo getoond moet worden.
        NB: Op dit moment zien de alle MLB en sommige NFL teams het beste eruit in de twee-regel mode. Als een logo niet beschikbaar is dan wordt de tekst getoond. + +PLUGIN_SCREENSAVER_SUPERDATETIME_ADVANCED + DE Erweiterte Einstellungen + EN Advanced Settings + +PLUGIN_SCREENSAVER_SUPERDATETIME_ADVANCED_DESC + DE Die folgenden Einstellungen sind nur für erfahrene Anwender bestimmt. Die Standartwerte zu verändern kann einen Einfluss auf die SqueezeServer-Leistung oder die SuperDateTime-Funktionalität haben. Änderungen erfolgen auf eigenes Risiko! + EN The following settings are for advanced users only. Changing their default values may impact SqueezeServer performance or SuperDateTime functionality. Change at your own risk! + +PLUGIN_SCREENSAVER_SUPERDATETIME_DRWEACHDLY + DE Verzögerung der Symbolaktualisierung + EN Icon Draw Each Delay + +PLUGIN_SCREENSAVER_SUPERDATETIME_DRWEACHDLY_DESC + DE Bei jeder Datenaktualisierung zeichnet und puffert SuperDateTime für jede Squeezebox die Wettersymbole Pixel für Pixel. Die Aktualisierung wird abwechselnd für jedes Symbol durchgeführt um dem Blockieren von Resourcen vorzubeugen. Sie können konfigurieren wie viele Sekunden zwischen jeder Symbolaktualsierung gewartet werden soll. Ein niefriger Wert für zu einer schnelleren Datenaktualisierung, erhöht aber das Risiko Resourcen zu blockieren.
        Standartwert=0.5 + EN With each data refresh SuperDateTime draws and caches each weather icon pixel by pixel for each slim player. Drawing of each icon is staggered by time to prevent resource blocking. You can configure how many seconds to stagger inbetween each icon draw. A lower value will result in faster data refreshes but an increased risk in blocking.
        DEFAULT=0.5 + +PLUGIN_SCREENSAVER_SUPERDATETIME_TEAMLOGOS_CHOOSE + DE Mannschaftslogos: + EN Team Logos: + NL Team logo's: + +PLUGIN_SCREENSAVER_SUPERDATETIME_PRO + DE Profisport + EN Professional Sports + NL professionele sporten + +PLUGIN_SCREENSAVER_SUPERDATETIME_PRO_DESC + DE Wählen Sie die Profisport-Mannschaften aus über die Informationen empfangen werden sollen. Wählen sie "None" um eine Mannschaft zu entfernen oder "All" um alle Manschaften zu beobachten. Um mehrere Mannschaften einer Liga auszuwählen müssen diese eine nach der anderen hinzugefügt werden. + EN The professional sports team(s) you would like to retrieve game data about. Select "None" to remove a team, or "All" to monitor all teams. Multiple teams can be selected for a sport by adding them one at a time. + NL De professionele sportteams waarvoor je wedstrijdinformatie wilt ophalen. Selecteer "None" om een team te verwijderen of "ALL" om alle teams te monitoren. Meerdere teams kunnen geselecteerd worden voor een sport door ze één voor één toe te voegen. + +PLUGIN_SCREENSAVER_SUPERDATETIME_MLB_DESC + DE Die MLB Baseball-Mannschaft(en) über die sie Informationen empfangen möchten. Wählen sie "None" um eine Mannschaft zu entfernen oder "All" um alle Manschaften zu beobachten. + EN The MLB baseball team(s) you would like to retrieve game data about. Select "None" to remove a team, or "All" to monitor all teams. + ES El/los equipo/s de baseball de los que se quiere mostrar información. Elegir "Ninguno" para eliminar un equipo, o "Todos" para monitorear todos los equipos. + NL De MLB basketbalteams waarvoor je de wedstrijdinformatie wilt ophalen. Selecteer "None" om een team te verwijderen of "ALL" om alle teams te monitoren. + +PLUGIN_SCREENSAVER_SUPERDATETIME_MLB + DE MLB Baseball-Mannschaften + EN MLB Baseball Teams + ES Equipo de Baseball MLB + NL MLB baseball teams + +PLUGIN_SCREENSAVER_SUPERDATETIME_MLB_CHOOSE + DE Baseball-Mannschaft: + EN Baseball team: + ES Equipo de baseball: + NL Baseball team: + +PLUGIN_SCREENSAVER_SUPERDATETIME_NBA_DESC + DE Die NBA Basketball-Mannschaft(en) über die sie Informationen emfangen möchten. Wählen sie "None" um eine Mannschaft zu entfernen oder "All" um alle Manschaften zu beobachten. + EN The NBA basketball team(s) you would like to retrieve game data about. Select "None" to remove a team, or "All" to monitor all teams. + ES El/los equipo/s de basketball de los que se quiere mostrar información. Elegir "Ninguno" para eliminar un equipo, o "Todos" para monitorear todos los equipos. + NL De NBA basketball team(s) waarvoor je wedstrijdinformatie wilt ophalen. Selecteer "None" om een team te verwijderen of "ALL" om alle teams te monitoren. + +PLUGIN_SCREENSAVER_SUPERDATETIME_NBA + DE NBA Basketball-Mannschaften + EN NBA Basketball Teams + ES Equipo de Basketball NBA + NL NBA basketball teams + +PLUGIN_SCREENSAVER_SUPERDATETIME_NBA_CHOOSE + DE Basketball-Mannschaft: + EN Basketball team: + ES Equipo de basketball: + NL Basketball team: + +PLUGIN_SCREENSAVER_SUPERDATETIME_NHL_DESC + DE Die NHL Eishockey-Mannschaft(en) über die sie Informationen emfangen möchten. Wählen sie "None" um eine Mannschaft zu entfernen oder "All" um alle Manschaften zu beobachten. + EN The NHL hockey team(s) you would like to retrieve game data about. Select "None" to remove a team, or "All" to monitor all teams. + ES El/los equipo/s de hockey de los que se quiere mostrar información. Elegir "Ninguno" para eliminar un equipo, o "Todos" para monitorear todos los equipos. + NL De NHL hockeyteams waarvoor je wedstrijdinformatie wilt ophalen. Selecteer "None" om een team te verwijderen of "ALL" om alle teams te monitoren. + +PLUGIN_SCREENSAVER_SUPERDATETIME_NHL + DE NHL Eishockey-Mannschaften + EN NHL Hockey Teams + ES Equipos de Hockey NHL + NL NHL hockeyteams + +PLUGIN_SCREENSAVER_SUPERDATETIME_NHL_CHOOSE + DE Eishockey-Mannschaft: + EN Hockey team: + ES Equipo de hockey: + NL Hockeyteam: + +PLUGIN_SCREENSAVER_SUPERDATETIME_NFL_DESC + DE Die NHL Eishockey-Mannschaft(en) über die sie Informationen emfangen möchten. Wählen sie "None" um eine Mannschaft zu entfernen oder "All" um alle Manschaften zu beobachten. + EN The NFL football team(s) you would like to retrieve game data about. Select "None" to remove a team, or "All" to monitor all teams. + ES El/los equipo/s de football americano de los que se quiere mostrar información. Elegir "Ninguno" para eliminar un equipo, o "Todos" para monitorear todos los equipos. + NL De NFL footballteams waarvoor je wedstrijdinformatie wilt ophalen. Selecteer "None" om een team te verwijderen of "ALL" om alle teams te monitoren. + +PLUGIN_SCREENSAVER_SUPERDATETIME_NFL + DE NFL American Football-Mannschaften + EN NFL Football Teams + ES Equipo de Football americano NFL + NL NFL Footballteams + +PLUGIN_SCREENSAVER_SUPERDATETIME_NFL_CHOOSE + DE American Football-Mannschaft: + EN Football team: + ES Equipo de football americano: + NL Footballteam: + +PLUGIN_SCREENSAVER_SUPERDATETIME_CBBALLCONF + DE College-Basketball-Konferenz + EN College Basketball Conference + NL College Basketball conference + +PLUGIN_SCREENSAVER_SUPERDATETIME_CBBALLCONF_DESC + DE Sie können wählen zu welcher College-Basketball-Konferenz Datendateien abgerufen werden sollen.
        Anmerkung:Die Auswahl von "all" kann zum Abruf von sehr großen Dateien führen und Serverabstürze bei der Datenverarbeitung verursachen. + EN You have a choice as to which college basketball conference data file is retrieved.
        Note: Selecting "all" can result in a large download which may cause brief server hangs while data is being processed. + NL Je hebt de keuze welke college basketball conference data bestand opgehaald wordt.
        NB: Het selecteren van "all" kan resulteren in een grote download waardoor de server kort kan stoppen terwijl de informatie wordt verwerkt. + +PLUGIN_SCREENSAVER_SUPERDATETIME_CBBALLCONF_CHOOSE + DE Konferenz: + EN Conference: + +PLUGIN_SCREENSAVER_SUPERDATETIME_CBB + DE College-Basketball-Mannschaften + EN College Basketball + +PLUGIN_SCREENSAVER_SUPERDATETIME_CBB_DESC + DE Geben Sie die ESPN Mannschaftsnamen ein deren Spieldaten sie empfangen möchten. Geben Sie eine Mannschaft pro Zeile ein oder "All" um alle Mannschaften anzuzeigen. + EN Enter the ESPN team name of the team(s) you would like to retrieve game data about. Enter one team per line or "All" to display all teams. + NL Voer de ESPN team naam van de team(s) waarvoor je wedstrijdinformatie wilt ophalen. Voer één team per regel of "ALL" om alle teams te tonen. + +PLUGIN_SCREENSAVER_SUPERDATETIME_CFBALLCONF + DE College-American Football-Konferenz + EN College Football Conference + +PLUGIN_SCREENSAVER_SUPERDATETIME_CFBALLCONF_DESC + DE Sie können wählen zu welcher College-American Football-Konferenz Datendateien abgerufen werden sollen.
        Anmerkung: Die Auswahl von "All Div I-A" oder "All Div I-AA" kann zum Abruf von sehr großen Dateien führen und Serverabstürze bei der Datenverarbeitung verursachen. + EN You have a choice as to which college football conference data file is retrieved.
        Note: Selecting "All Div I-A" or "All Div I-AA" can result in a large download which may cause brief server hangs while data is being processed. + NL Je hebt de keuze welke college football conference data bestand opgehaald wordt.
        NB: Het selecteren van "All Div I-A" of "All Div I-AA" kan resulteren in een grote download waardoor de server kort kan stoppen terwijl de informatie wordt verwerkt. + +PLUGIN_SCREENSAVER_SUPERDATETIME_CFBALLCONF_CHOOSE + DE Konferenz: + EN Conference: + +PLUGIN_SCREENSAVER_SUPERDATETIME_CFB + DE College-American Football-Mannschaften + EN College Football + +PLUGIN_SCREENSAVER_SUPERDATETIME_CFB_DESC + DE Geben Sie die ESPN Mannschaftsnamen ein deren Spieldaten sie empfangen möchten. Geben Sie eine Mannschaft pro Zeile ein oder "All" um alle Mannschaften anzuzeigen. + EN Enter the ESPN team name of the team(s) you would like to retrieve game data about. Enter one team per line or "All" to display all teams. + NL Voer de ESPN team naam van de teams waarvoor je game informatie wilt ophalen. Voer één team per regel in of "ALL" om alle teams te tonen. + +PLUGIN_SCREENSAVER_SUPERDATETIME_TIME + DE Zeitintervall + EN Time Interval + ES Intervalo de Tiempo + NL Tijd interval + +PLUGIN_SCREENSAVER_SUPERDATETIME_TIME_DESC + DE Anzahl Sekunden nach denen zur Zeitanzeige gewechselt werden soll wenn kein Spiel aktiv ist. + EN You can configure how many seconds the time is shown before cycling display information for when games are active or upcoming/complete. + NL Je kunt configureren hoeveel seconden de tijd getoond wordt voor het tonen van games die actief of aankomend/compleet zijn. + +PLUGIN_SCREENSAVER_SUPERDATETIME_TIME_CHOOSE + DE Anstehender/Abgeschlossender Intervall: + EN Upcoming/Complete Interval: + NL Aankomend/Complete interval: + +PLUGIN_SCREENSAVER_SUPERDATETIME_ATIME + DE Zeitintervall (aktives Spiel) + EN Time Interval (Active Game) + ES Intervalo de Tiempo (Partido Disputándose) + NL Tijdinterval (Actieve game) + +PLUGIN_SCREENSAVER_SUPERDATETIME_ATIME_DESC + DE Anzahl Sekunden nach denen zur Zeitanzeige gewechselt werden soll wenn ein Spiel aktiv ist. + EN Number of seconds to display time information before cycling when a game is active. + ES Número de segundos durante los cuales mostrar la información antes de ciclar cuando hay algún partido disputándose. + NL Aantal seconden dat de tijd getoond wordt voor het tonen van actieve game informatie. + +PLUGIN_SCREENSAVER_SUPERDATETIME_ATIME_CHOOSE + DE Intervall des aktiven Spiels: + EN Active Game Interval: + NL Actieve game interval: + +PLUGIN_SCREENSAVER_SUPERDATETIME_SCORE + DE Spielintervall + EN Game Interval + NL Game interval + +PLUGIN_SCREENSAVER_SUPERDATETIME_SCORE_DESC + DE Anzahl Sekunden während denen Informationen über zukünftige oder bereits beendete Spiele angezeigt werden sollen bevor die Anzeige gewechselt wird. + EN You can configure how many seconds an individual game's information is shown before cycling display information for when games are active or upcoming/complete. + NL Je kunt instellen hoeveel seconden individuele game informatie getoond wordt voordat de volgende informatie wordt getoond wanneer games actief of nog niet gestart/compleet zijn. + +PLUGIN_SCREENSAVER_SUPERDATETIME_SCORE_CHOOSE + DE Anstehender/Abgeschlossender Intervall: + EN Upcoming/Complete Interval: + NL Aankomend/complete interval: + +PLUGIN_SCREENSAVER_SUPERDATETIME_ASCORE + DE Intervall der Ergebnisanzeige bei aktiven Spielen + EN Active Game Score Interval + ES Intervalo para Tanteador de Partido en Juego + NL Actieve game score interval + +PLUGIN_SCREENSAVER_SUPERDATETIME_ASCORE_DESC + DE Anzahl Sekunden während denen das Ergebnis eines aktiven Spiels angezeigt werden soll bevor die Anzeige gewechselt wird. + EN Number of seconds to display an active game's score information before cycling. + ES Número de segundos durante los cuales mostrar la información del tanteador del partido en juego, antes de ciclar. + NL Aantal seconden dat een actieve game score te zien is voor het wisselen. + +PLUGIN_SCREENSAVER_SUPERDATETIME_ASCORE_CHOOSE + DE Intervall des aktiven Spiels: + EN Active Game Interval: + NL Actieve game interval: + +PLUGIN_SCREENSAVER_SUPERDATETIME_REFRESH + DE Datenaktualisierungsintervall + EN Data Refresh Interval + ES Intervalo de Refresco de Datos + NL Data verversinterval + +PLUGIN_SCREENSAVER_SUPERDATETIME_REFRESH_DESC + DE Anzahl der Minuten bevor externe Daten aktualisiert werden. + EN Number of minutes before external data is refreshed. + ES Número de minutos antes que se refresque la información del clima y deportiva. + NL Aantal minuten voor de externe data is ververst. + +PLUGIN_SCREENSAVER_SUPERDATETIME_REFRESH_CHOOSE + DE Aktualisierungsintervall in Minuten: + EN Refresh interval in minutes: + ES Intervalo de refresco en minutos: + NL Verversfrequentie in minuten: + +PLUGIN_SCREENSAVER_SUPERDATETIME_LANG + EN Language + FR Langue + +PLUGIN_SCREENSAVER_SUPERDATETIME_LANG_DESC + EN Set interface language (en-US (default), fr-FR, etc.) + FR Défini la langue de l'interface (en-US (par défaut), fr-FR, etc.) + +PLUGIN_SCREENSAVER_SUPERDATETIME_LWEATHER + DE Anzeige der ausführlichen Wettervorhersage + EN Default Units and Long Weather Forecast Display + NL Standaard eenheid en uitgebreide weersvoorspelling scherm + +PLUGIN_SCREENSAVER_SUPERDATETIME_LWEATHER_DESC + DE Wählen Sie aus wann die ausführliche Wettervorhersage angezeigt werden soll.
        Anmerkung: Ungeachtet dieser Einstellung kann die ausführliche Wettervorhersage jederzeit durch Drücken des FWD und REW Knopfes auf der Fernbedienung angezeigt werden. + EN You have a choice as to if long textual weather forecasts and alerts are automatically displayed and the preferred units of measure for display locations that are not configurable via format strings (10day forecasts, Extras menu, etc.).
        Note: Regardless of frequency setting, long weather forecasts are always viewable via the FWD and REW remote control buttons. + NL Kies of je de uitgebreide weersvoorspelling automatisch wilt zien met de voorkeurs eenheid voor temperatuur en windsnelheid voor schermposities die niet configureerbaar zijn met de formaat strings (10dage voorspelling, Duet, etc.).
        Let op:Onafhankelijk van de instelling kun je de uitgebreide weersvoorspelling altijd zien met de FWD en REQ toetsen op de afstandsbediening. + +PLUGIN_SCREENSAVER_SUPERDATETIME_LWEATHER_CHOOSE + DE Ausführliche Wettervorhersage: + EN Long Weather Forecasts: + ES Intervalo de Tiempo en segundos: + NL Lange termijn weersvoorspelling: + +SETUP_SCREENSAVER_USE + DE Bildschirmschoner verwenden + EN Use as current screensaver + ES Usar como protector de pantalla actual + NL Als huidige schermbeveiliger gebruiken