From 02322d6ed19c78a3d60a2c3b9d6b5fc3ec70d86c Mon Sep 17 00:00:00 2001 From: Nick Bebout Date: Sat, 12 Mar 2011 02:45:06 +0000 Subject: [PATCH] 1.404 --- CREDITS | 15 +- ChangeLog | 36 +- FAQ | 20 +- Mail-IMAPClient-3.25/COPYRIGHT | 401 - Mail-IMAPClient-3.25/INSTALL | 82 - Mail-IMAPClient-3.25/README | 111 - Mail-IMAPClient-3.25/TODO | 68 - .../Mail/IMAPClient/BodyStructure/Parse.pm | 16425 --------------- .../lib/Mail/IMAPClient/Thread.pm | 1014 - Mail-IMAPClient-3.25/prepare_dist | 41 - Mail-IMAPClient-3.25/sample.perldb | 1 - .../Changes | 68 + .../MANIFEST | 4 - .../META.yml | 3 +- .../Makefile.PL | 17 +- Mail-IMAPClient-3.27/README | 76 + .../examples/build_dist.pl | 4 +- .../examples/build_ldif.pl | 4 +- .../examples/cleanTest.pl | 0 .../examples/copy_folder.pl | 2 +- .../examples/cyrus_expire.pl | 0 .../examples/cyrus_expunge.pl | 2 +- .../examples/find_dup_msgs.pl | 2 +- .../examples/idle.pl | 0 .../examples/imap_to_mbox.pl | 2 +- .../examples/imtestExample.pl | 0 .../examples/migrate_mail2.pl | 2 +- .../examples/migrate_mbox.pl | 2 +- .../examples/populate_mailbox.pl | 4 +- .../examples/sharedFolder.pl | 2 +- .../lib/Mail/IMAPClient.pm | 717 +- .../lib/Mail/IMAPClient.pod | 534 +- .../lib/Mail/IMAPClient/BodyStructure.pm | 0 .../IMAPClient/BodyStructure/Parse.grammar | 3 +- .../Mail/IMAPClient/BodyStructure/Parse.pm | 16801 ++++++++++++++++ .../Mail/IMAPClient/BodyStructure/Parse.pod | 0 .../lib/Mail/IMAPClient/MessageSet.pm | 0 .../lib/Mail/IMAPClient/Thread.grammar | 0 .../lib/Mail/IMAPClient/Thread.pm | 1024 + .../lib/Mail/IMAPClient/Thread.pod | 0 Mail-IMAPClient-3.27/prepare_dist | 43 + .../t/basic.t | 47 +- .../t/body_string.t | 0 .../t/bodystructure.t | 19 +- .../t/fetch_hash.t | 19 +- .../t/messageset.t | 0 .../t/pod.t | 0 .../t/simple.t | 0 .../t/thread.t | 0 .../test_template.txt | 0 Makefile | 42 +- README | 6 +- TIME | 4 + VERSION | 2 +- VERSION_EXE | 2 +- i3 | 2 +- imapsync | 689 +- imapsync.exe | Bin 5700340 -> 5868421 bytes imapsync_1.383 | 4383 ---- index.shtml | 75 +- paypal_reply/paypal_bilan | 81 + paypal_reply/paypal_build_reply | 61 +- paypal_reply/paypal_functions | 45 +- test.bat | 8 +- test2.bat | 7 + tests.sh | 257 +- "tmp/cache/rr\\uee/142_242" | 0 "tmp/cache/rr\\uee/143_243" | 0 "tmp/cache/rr\\uee/177_777" | 0 "tmp/tests/\\y" | 0 tmp/tests/lala | 0 tmp/tests/lili | 0 tmp/tests/lolo | 0 73 files changed, 19532 insertions(+), 23747 deletions(-) delete mode 100644 Mail-IMAPClient-3.25/COPYRIGHT delete mode 100644 Mail-IMAPClient-3.25/INSTALL delete mode 100644 Mail-IMAPClient-3.25/README delete mode 100644 Mail-IMAPClient-3.25/TODO delete mode 100644 Mail-IMAPClient-3.25/lib/Mail/IMAPClient/BodyStructure/Parse.pm delete mode 100644 Mail-IMAPClient-3.25/lib/Mail/IMAPClient/Thread.pm delete mode 100755 Mail-IMAPClient-3.25/prepare_dist delete mode 100644 Mail-IMAPClient-3.25/sample.perldb rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/Changes (96%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/MANIFEST (96%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/META.yml (93%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/Makefile.PL (93%) create mode 100644 Mail-IMAPClient-3.27/README rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/examples/build_dist.pl (96%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/examples/build_ldif.pl (97%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/examples/cleanTest.pl (100%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/examples/copy_folder.pl (98%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/examples/cyrus_expire.pl (100%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/examples/cyrus_expunge.pl (96%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/examples/find_dup_msgs.pl (98%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/examples/idle.pl (100%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/examples/imap_to_mbox.pl (98%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/examples/imtestExample.pl (100%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/examples/migrate_mail2.pl (99%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/examples/migrate_mbox.pl (97%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/examples/populate_mailbox.pl (98%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/examples/sharedFolder.pl (96%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/lib/Mail/IMAPClient.pm (83%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/lib/Mail/IMAPClient.pod (95%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/lib/Mail/IMAPClient/BodyStructure.pm (100%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/lib/Mail/IMAPClient/BodyStructure/Parse.grammar (98%) create mode 100644 Mail-IMAPClient-3.27/lib/Mail/IMAPClient/BodyStructure/Parse.pm rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/lib/Mail/IMAPClient/BodyStructure/Parse.pod (100%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/lib/Mail/IMAPClient/MessageSet.pm (100%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/lib/Mail/IMAPClient/Thread.grammar (100%) create mode 100644 Mail-IMAPClient-3.27/lib/Mail/IMAPClient/Thread.pm rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/lib/Mail/IMAPClient/Thread.pod (100%) create mode 100755 Mail-IMAPClient-3.27/prepare_dist rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/t/basic.t (88%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/t/body_string.t (100%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/t/bodystructure.t (95%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/t/fetch_hash.t (87%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/t/messageset.t (100%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/t/pod.t (100%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/t/simple.t (100%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/t/thread.t (100%) rename {Mail-IMAPClient-3.25 => Mail-IMAPClient-3.27}/test_template.txt (100%) delete mode 100755 imapsync_1.383 create mode 100755 paypal_reply/paypal_bilan create mode 100755 test2.bat create mode 100644 "tmp/cache/rr\\uee/142_242" create mode 100644 "tmp/cache/rr\\uee/143_243" create mode 100644 "tmp/cache/rr\\uee/177_777" create mode 100644 "tmp/tests/\\y" create mode 100644 tmp/tests/lala create mode 100644 tmp/tests/lili create mode 100644 tmp/tests/lolo diff --git a/CREDITS b/CREDITS index a59cece..3275cb3 100644 --- a/CREDITS +++ b/CREDITS @@ -1,5 +1,5 @@ #!/bin/cat -# $Id: CREDITS,v 1.154 2011/01/18 01:52:25 gilles Exp gilles $ +# $Id: CREDITS,v 1.155 2011/01/23 23:39:54 gilles Exp gilles $ If you want to make a donation to the author, Gilles LAMIRAL, use any of the following ways: @@ -30,6 +30,14 @@ I thank very much all of these people. I thank also very much all people who bought imapsync from the homepage but I don't cite them here. +Timothy Jay Chambers +Contributed by giving the book +27.32 "Mathematics and Plausible Reasoning: Volume II Patterns of Plausible Inference" + +D.R. Crane +Contributed by giving the book +40.90 "Working Effectively with Legacy Code" + Daniel Melnechuk Contributed by giving the book 10.02 "The Design of Everyday Things" @@ -973,6 +981,9 @@ Eric Yung Total amount of book prices : c \ +27.32+\ +40.90+\ +\ 10.02+\ \ 17.95+\ @@ -1091,4 +1102,4 @@ c \ 31.20+\ 40.00 = -2710.81 +2779.03 diff --git a/ChangeLog b/ChangeLog index 925f1dc..3021928 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,17 +1,45 @@ RCS file: RCS/imapsync,v Working file: imapsync -head: 1.398 +head: 1.404 branch: locks: strict - gilles: 1.398 + gilles: 1.404 access list: symbolic names: keyword substitution: kv -total revisions: 398; selected revisions: 398 +total revisions: 404; selected revisions: 404 description: ---------------------------- -revision 1.398 locked by: gilles; +revision 1.404 locked by: gilles; +date: 2011/02/21 03:35:39; author: gilles; state: Exp; lines: +7 -7 +typo +---------------------------- +revision 1.403 +date: 2011/02/21 00:52:16; author: gilles; state: Exp; lines: +47 -7 +Added uid guessing with APPEND to improve --usecache for Exchange or Zarafa imap servers. +---------------------------- +revision 1.402 +date: 2011/01/25 05:17:05; author: gilles; state: Exp; lines: +47 -174 +Removed all the $imapX->IsUnconnected() since reconnect can be done. +Overrided append_file() for 2.2.9, copy from 3.25 +---------------------------- +revision 1.401 +date: 2011/01/25 02:22:37; author: gilles; state: Exp; lines: +195 -151 +Added --useuid to speed up or deal with problems using headers. +Added --notakebody to avoid getting first 2Ko body when got "no header" +Replaced --debug_cache by --debugcache +---------------------------- +revision 1.400 +date: 2011/01/22 04:46:04; author: gilles; state: Exp; lines: +94 -22 +Fixed cache (chose only the greatest uid with dupplicate 11_21+11_201 or 11_21+101_21) +Fixed cache, dealing with filenames containing \ characters. +---------------------------- +revision 1.399 +date: 2011/01/21 00:04:09; author: gilles; state: Exp; lines: +29 -21 +Added --debug_cache option to alow cache dfebugging only. +---------------------------- +revision 1.398 date: 2011/01/18 03:03:24; author: gilles; state: Exp; lines: +7 -6 Fix. Removed too much about buffersize. ---------------------------- diff --git a/FAQ b/FAQ index 32a8f69..8914cc1 100644 --- a/FAQ +++ b/FAQ @@ -1,5 +1,5 @@ #!/bin/cat -# $Id: FAQ,v 1.82 2011/01/15 06:32:12 gilles Exp gilles $ +# $Id: FAQ,v 1.83 2011/01/28 05:14:12 gilles Exp gilles $ +------------------+ | FAQ for imapsync | @@ -447,6 +447,24 @@ R. try to transfer the mails without SSL connection. SSL code outside (Written by Stefan Schmidt) +====================================================================== +Q. What are --subscribe and --subscribed for, and how can they be used? + +R. In the IMAP protocol each user can subscribe to one or more folders. + Then he can configure its email software to just see his subscribed + folders list. That's an IMAP feature. + + Knowing that, the imapsync help says: + + imapsync --help + ... + --subscribed : transfers subscribed folders. + --subscribe : subscribe to the folders transferred on the + host2 that are subscribed on host1. + --subscribe_all : subscribe to the folders transferred on the + host2 even if they are not subscribed on host1. + + ====================================================================== Q. I want to exclude a folder hierarchy like "public" diff --git a/Mail-IMAPClient-3.25/COPYRIGHT b/Mail-IMAPClient-3.25/COPYRIGHT deleted file mode 100644 index ebc36eb..0000000 --- a/Mail-IMAPClient-3.25/COPYRIGHT +++ /dev/null @@ -1,401 +0,0 @@ -COPYRIGHT - - Copyright 1999, 2000, 2001, 2002 , 2003 The Kernen Group, Inc. - All rights reserved. - -This program is free software; you can redistribute it and/or modify it -under the terms of either: - - -a) the "Artistic License" which comes with this Kit, or - -b) the GNU General Public License as published by the Free Software -Foundation; either version 1, 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 either the GNU -General Public License or the Artistic License for more details. All your -base are belong to us. - -============= - - The "Artistic License" - - Preamble - -The intent of this document is to state the conditions under which a -Package may be copied, such that the Copyright Holder maintains some -semblance of artistic control over the development of the package, -while giving the users of the package the right to use and distribute -the Package in a more-or-less customary fashion, plus the right to make -reasonable modifications. - -Definitions: - - "Package" refers to the collection of files distributed by the - Copyright Holder, and derivatives of that collection of files - created through textual modification. - - "Standard Version" refers to such a Package if it has not been - modified, or has been modified in accordance with the wishes - of the Copyright Holder as specified below. - - "Copyright Holder" is whoever is named in the copyright or - copyrights for the package. - - "You" is you, if you're thinking about copying or distributing - this Package. - - "Reasonable copying fee" is whatever you can justify on the - basis of media cost, duplication charges, time of people involved, - and so on. (You will not be required to justify it to the - Copyright Holder, but only to the computing community at large - as a market that must bear the fee.) - - "Freely Available" means that no fee is charged for the item - itself, though there may be fees involved in handling the item. - It also means that recipients of the item may redistribute it - under the same conditions they received it. - -1. You may make and give away verbatim copies of the source form of the -Standard Version of this Package without restriction, provided that you -duplicate all of the original copyright notices and associated disclaimers. - -2. You may apply bug fixes, portability fixes and other modifications -derived from the Public Domain or from the Copyright Holder. A Package -modified in such a way shall still be considered the Standard Version. - -3. You may otherwise modify your copy of this Package in any way, provided -that you insert a prominent notice in each changed file stating how and -when you changed that file, and provided that you do at least ONE of the -following: - - a) place your modifications in the Public Domain or otherwise make them - Freely Available, such as by posting said modifications to Usenet or - an equivalent medium, or placing the modifications on a major archive - site such as uunet.uu.net, or by allowing the Copyright Holder to include - your modifications in the Standard Version of the Package. - - b) use the modified Package only within your corporation or organization. - - c) rename any non-standard executables so the names do not conflict - with standard executables, which must also be provided, and provide - a separate manual page for each non-standard executable that clearly - documents how it differs from the Standard Version. - - d) make other distribution arrangements with the Copyright Holder. - -4. You may distribute the programs of this Package in object code or -executable form, provided that you do at least ONE of the following: - - a) distribute a Standard Version of the executables and library files, - together with instructions (in the manual page or equivalent) on where - to get the Standard Version. - - b) accompany the distribution with the machine-readable source of - the Package with your modifications. - - c) give non-standard executables non-standard names, and clearly - document the differences in manual pages (or equivalent), together - with instructions on where to get the Standard Version. - - d) make other distribution arrangements with the Copyright Holder. - -5. You may charge a reasonable copying fee for any distribution of this -Package. You may charge any fee you choose for support of this -Package. You may not charge a fee for this Package itself. However, -you may distribute this Package in aggregate with other (possibly -commercial) programs as part of a larger (possibly commercial) software -distribution provided that you do not advertise this Package as a -product of your own. You may embed this Package's interpreter within -an executable of yours (by linking); this shall be construed as a mere -form of aggregation, provided that the complete Standard Version of the -interpreter is so embedded. - -6. The scripts and library files supplied as input to or produced as -output from the programs of this Package do not automatically fall -under the copyright of this Package, but belong to whoever generated -them, and may be sold commercially, and may be aggregated with this -Package. If such scripts or library files are aggregated with this -Package via the so-called "undump" or "unexec" methods of producing a -binary executable image, then distribution of such an image shall -neither be construed as a distribution of this Package nor shall it -fall under the restrictions of Paragraphs 3 and 4, provided that you do -not represent such an executable image as a Standard Version of this -Package. - -7. C subroutines (or comparably compiled subroutines in other -languages) supplied by you and linked into this Package in order to -emulate subroutines and variables of the language defined by this -Package shall not be considered part of this Package, but are the -equivalent of input as in Paragraph 6, provided these subroutines do -not change the language in any way that would cause it to fail the -regression tests for the language. - -8. Aggregation of this Package with a commercial distribution is always -permitted provided that the use of this Package is embedded; that is, -when no overt attempt is made to make this Package's interfaces visible -to the end user of the commercial distribution. Such use shall not be -construed as a distribution of this Package. - -9. The name of the Copyright Holder may not be used to endorse or promote -products derived from this software without specific prior written permission. - -10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - The End - -============= - - GNU GENERAL PUBLIC LICENSE - Version 1, February 1989 - - Copyright (C) 1989 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The license agreements of most software companies try to keep users -at the mercy of those companies. By contrast, our 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. The -General Public License applies to the Free Software Foundation's -software and to any other program whose authors commit to using it. -You can use it for your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Specifically, the General Public License is designed to make -sure that you have the freedom to give away or sell copies of free -software, 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 a 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 tell them 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. - - 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 Agreement 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 work containing the -Program or a portion of it, either verbatim or with modifications. Each -licensee is addressed as "you". - - 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 -General Public License and to the absence of any warranty; and give any -other recipients of the Program a copy of this General Public License -along with the Program. You may charge a fee for the physical act of -transferring a copy. - - 2. You may modify your copy or copies of the Program or any portion of -it, and copy and distribute such modifications under the terms of Paragraph -1 above, provided that you also do the following: - - a) cause the modified files to carry prominent notices stating that - you changed the files and the date of any change; and - - b) cause the whole of any work that you distribute or publish, that - in whole or in part contains the Program or any part thereof, either - with or without modifications, to be licensed at no charge to all - third parties under the terms of this General Public License (except - that you may choose to grant warranty protection to some or all - third parties, at your option). - - c) If the modified program normally reads commands interactively when - run, you must cause it, when started running for such interactive use - in the simplest and most usual 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 General - Public License. - - d) 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. - -Mere aggregation of another independent work with the Program (or its -derivative) on a volume of a storage or distribution medium does not bring -the other work under the scope of these terms. - - 3. You may copy and distribute the Program (or a portion or derivative of -it, under Paragraph 2) in object code or executable form under the terms of -Paragraphs 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 - Paragraphs 1 and 2 above; or, - - b) accompany it with a written offer, valid for at least three - years, to give any third party free (except for a nominal charge - for the cost of distribution) a complete machine-readable copy of the - corresponding source code, to be distributed under the terms of - Paragraphs 1 and 2 above; or, - - c) accompany it with the information you received as to where the - corresponding source code may be obtained. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form alone.) - -Source code for a work means the preferred form of the work for making -modifications to it. For an executable file, complete source code means -all the source code for all modules it contains; but, as a special -exception, it need not include source code for modules which are standard -libraries that accompany the operating system on which the executable -file runs, or for standard header files or definitions files that -accompany that operating system. - - 4. You may not copy, modify, sublicense, distribute or transfer the -Program except as expressly provided under this General Public License. -Any attempt otherwise to copy, modify, sublicense, distribute or transfer -the Program is void, and will automatically terminate your rights to use -the Program under this License. However, parties who have received -copies, or rights to use copies, from you under this General Public -License will not have their licenses terminated so long as such parties -remain in full compliance. - - 5. By copying, distributing or modifying 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. - - 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. - - 7. 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 the 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 -the license, you may choose any version ever published by the Free Software -Foundation. - - 8. 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 - - 9. 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. - - 10. 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 - - Appendix: 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 humanity, 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) 19yy - - 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 1, 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. - -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) 19xx 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 a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - program `Gnomovision' (a program to direct compilers to make passes - at assemblers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/Mail-IMAPClient-3.25/INSTALL b/Mail-IMAPClient-3.25/INSTALL deleted file mode 100644 index 1b74934..0000000 --- a/Mail-IMAPClient-3.25/INSTALL +++ /dev/null @@ -1,82 +0,0 @@ -Mail::IMAPClient Installation - -The Mail::IMAPClient is written entirely in Perl, so it should install -on any reasonably recent version of Perl. See the README file for a perl -one-liner that you can run to verify that your perl has what it takes -to run Mail::IMAPClient. - -The installation is standard: - - 0) cd to installation directory - 1) perl Makefile.PL (and reply to the prompts) - 2) make (optional) - 3) make test (optional) - 4) make install - -The 'make install' and 'make test' will both do step 2 ('make') if you -haven't done it already. Currently the test script is lame (although -not as lame as in the last release!) but I hope to incorporate more -thorough testing in a future version. You should at least try it and -let me know if your tests fail. - -Version 1.0 changed the installation script so that it reuses the -parameter file for the tests if it finds one. Installation can be run in -the background if the test.txt file exists. Touching it is good enough -to prevent prompts; having a correctly formatted version (as shown in -test_template.txt) is even better, as it will allow you to do a thorough -'make test'. Invalid data in test.txt (either from precreating it or from -responding inaccurately to prompts) will cause 'make test' to report 'not -ok' results but won't break anything important (like the IMAPClient.pm -file, or your car). - -If you have tests that fail it may be more illuminating to run the -tests by hand. IE: perl -I./blib/lib t/basic.t from the installation -dir will pinpoint the failing test. Better yet, supply an argument to -basic/t (any 'true' argument will do; I use '1') to turn on debugging, -which will be placed in your installation directory in 'imap1.debug' -and 'imap2.debug'. E-mail me the results. - -If you don't have a test.txt file in your installation directory then you -will have to answer at least one prompt. If you do have a test.txt file, -and you run 'make clean', then you won't have a test.txt file anymore, -so take precautions. - -If you do have a test.txt file and you don't run 'make clean' then -a text file will be sitting around containing logon credentials, so, -again, take precautions. (It's just a test account anyway, right?) - -If, when replying to the "perl Makefile.PL" prompts, you supply server, -id, and password credentials for an id that has a ridiculously huge number -of folders and subfolders then the 'make test' may run approximately -forever. Next time try an id with less stuff. - -For examples on using Mail::IMAPClient, check out the examples -subdirectory. If you have better examples, then why haven't you e-mailed -them to me? Also, I totally recommend that you have a copy of RFC2060 -handy when using this module, since the documentation for this module is -meant to compliment, not replace, RFC2060. In fact, I am so convinced that -you'll need the RFC that I've included a copy of it in the distribution, -under the "docs/" subdirectory. It's a smashing good read so have at -it. Other IMAP related rfcs are there as well. - -One of the examples in the examples/ subdirectory is called -cleanTest.pl. If you find your 'make test' has had trouble and left some -folders named "IMAPClient_*" in your test account, you can run this -example to clean up the account. But probably only after you've fixed -any problems encountered with 'make test'! - -This module uses Damian Conway's excellent Parse::RecDescent module -for some advanced features. If you don't have that module installed -then you can still install Mail::IMAPClient but you won't have the -full functionality. If you have Parse::RecDescent installed and then -upgrade it, you may find that some features in Mail::IMAPClient suddenly -start throwing compile-time errors. Just 'make clean' and then 'make', -'make test', and 'make install'. This happens because grammers compiled -under older releases of Parse::RecDescent are sometimes incompatible -with newer Parse::RecDescent runtime engines. This would never be a -problem if Mail::IMAPClient recompiled grammers at run time, but for -performance reasons it precompiles them at install time. TANSTAAFL. - -Now go and write IMAP clients. - -Dave Kernen diff --git a/Mail-IMAPClient-3.25/README b/Mail-IMAPClient-3.25/README deleted file mode 100644 index 45de3fb..0000000 --- a/Mail-IMAPClient-3.25/README +++ /dev/null @@ -1,111 +0,0 @@ - Mail::IMAPClient - -Copyright 1999-2003 The Kernen Group, Inc. -Copyright 2007 Mark Overmeer -All rights reserved. - -This program is free software; you can redistribute it and/or modify -it under the terms of either: - - a) the "Artistic License" which comes with this Kit, or - - b) the GNU General Public License as published by the Free Software - Foundation; either version 1, 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 either -the GNU General Public License or the Artistic License for more details. - -DESCRIPTION - -This module provides perl routines that simplify a sockets connection -to and an IMAP conversation with an IMAP server. - -COMPATIBILITY - -[This paragraph has not been updated for many years] -This module was developed on Solaris 2.5.1 and 2.6 against Netscape IMAP -servers versions 3.6 and 4.1. However, since it is written in perl and -designed for flexibility, it should run on any OS with a TCP/IP stack and -a version of perl that includes the Socket and IO::Socket modules. It also -should be able to talk to any IMAP server, even those that have, um, -proprietary features (assuming that the programmer knows what those features -are). - -To date, I know that the test suite runs successfully with the following IMAP -servers: - --Netscape Messenging Server v4.x --Netscape Messenging Server v3.x --UW-IMAP (I think it was 4.5) --Cyrus IMAP4 v1.5.19 --Mirapoint Message Server Appliances (OS versions 1.6.1, 1.7.1, and 2.0.2) - -Version 2.0.3 has been tested with the mdaemon server with mixed -results. It seems that mdaemon does not comply strictly with RFC2060 and -so you may have problems using this module with mdaemon, especially with -folder names with embedded spaces or embedded double quotes. You may be -able to get some simple tasks to work but you won't be able to run the -test suite successfully. Use with caution. - -If your server requires the use of the AUTHENTICATE IMAP client command -(say, for strong authentication) then you can still use this module, -provided you can come up with the appropriate responses to any challenges -offered by your server. Mark Bush's Authen::NTLM module can assist with -this if you specifically are interested in NTLM authentication. - -REPORING BUGS - -See http://rt.cpan.org/Public/Dist/Display.html?Name=Mail-IMAPClient - -INSTALLATION - -Generally, gunzipping and untarring the source file, running 'perl -Makefile.PL' and 'make install' are all it takes to install this -module. And if that's too much work you can always use the CPAN module! - -OVERVIEW OF FUNCTIONALITY - -Mail::IMAPClient.pm provides methods to simplify the connection to and -the conversation between a perl script and an IMAP server. Virtually -all IMAP Client commands (as defined in rfc2060) are supported, either -through IMAPClient object methods or the 'default method', which is an -AUTOLOAD hack that assumes a default syntax for IMAP Client commands of: - - tagvalue COMMAND [Arg1 [Arg2 [... Arg3]]]" - -By remarkable coincidence, AUTOLOAD's default syntax mimics the -general syntax of IMAP Client commands. This means that if a script -tries to use any undefined method then that method will be interpreted -as an unimplemented IMAP command, and the default syntax will be used -to create the command string. I did this as a short cut to writing a -bunch of methods that were practically the same. There are inheritance -implications because of this approach but as far as I can tell this is -not a serious limitation. However, if you decide to write modules that -inherit from this class that require AUTOLOAD logic of their own then you -will have to take the Mail::IMAPClient's AUTOLOAD strategy into account. - -Where methods are defined, they usually exist to add functionality, -perhaps by massaging output or by supplying default arguments. An example -is the search method, which accepts the same arguments as the SEARCH -IMAP Client command (as documented in RFC2060) but which massages the -results so that the return value is an array of message sequence numbers -matching the search criteria, rather than a line of text listing the -sequence numbers. - -Some methods exists solely to add functionality, such as the folders -method, which invokes the list method but then massages the results to -produce an array containing all folder names. The message_count and -delete_messsage methods are similarly examples of methods that add -function to "raw" IMAP Client commands. - -Further information is provided in the module's documentation, which you are -encouraged to read and enjoy. - -Good Luck! - -Dave Kernen -The Kernen Group, Inc. -DJKERNEN@cpan.org - diff --git a/Mail-IMAPClient-3.25/TODO b/Mail-IMAPClient-3.25/TODO deleted file mode 100644 index 47ff39a..0000000 --- a/Mail-IMAPClient-3.25/TODO +++ /dev/null @@ -1,68 +0,0 @@ - -=== README - -Starting with release 2.99_01, I (Mark Overmeer) try to revive the -module. The original author David Kernen cannot be reached and didn't -release any fixes in four years. That is far too long. - -The code and installation procedure has been cleaned-up radically, - - and some minimal improvements in the code are made to -fix things people reported. - -=== wishlist: - -- A start was made in cleanup of the code in Mail/IMAPClient.pm - The file Mail/IMAPClient-cleanup shows the progress (30%) - But I lack the time (a weeks work at least) to complete this - task. There is a lot of code replication to be stripped. - If anyone buys me time, I will complete that task. - -=== wishlist from the original author: - -The following is a list of some items that I hope to include in a future -release: - -- Support for threaded perl programs (still pending as of version 2.2.0.). - -- Support for imaps (Imap via SSL). I don't have any way to test this - right now but if you get this to work or know someone who has I'd be - really interested in hearing from you. - -- Support for more authentication mechanisms. Currently plain - authentication and cram-md5 authentication are supported. I have - DIGEST-MD5 working at the AUTH qop, but haven't incorporated it into - a released version because I'm still trying to get at least the - integrity qop working, and maybe even privacy, but considering how - much trouble I'm having with just the integrity level I wouldn't - hold my breath if I were you ;-). - -- Currently a number of IMAP Client commands are implemented using the - 'default method', which is an AUTOLOAD hack. I'd like to reduce that - if possible to a bare minimum. (Some are still pending as of version 2.2.7.) - -- I'd like to see this module certified for more OS's and more IMAP servers. - This is (hopefully) just a matter of testing; the code should already - be compatible with the IMAP servers that are out there and with any OS - that allows the IO::Socket module to work. ** A number of platforms - have been added to the list of tested platforms since this was first - written. Please contact DJKernen@cpan.org if you have any to add. - -- Support for newer/older/other versions of IMAP. Currently only RFC2060 is - explicitly supported, although thanks to the 'default method' - (implemented via an AUTOLOAD hack) virtually any IMAP command is - supported, even proprietary commands, X- extensions, and so forth. But - not necessarily other authentication mechanisms... :-( (NOTE: the - AUTHENTICATE method partially addresses this issue.) - -- Support for piping output from (some?) imap commands directly to a - thingy of some sort (perhaps a coderef, a filehandle, or both). - -- Your thingy here!!! Send me your request, and I'll do it in the order of - ($popularity/$difficulty ). - -- Support for perl version 6. This will probably involve a rewrite that - will make portions of the Mail::IMAPClient module look more like the - Mail::IMAPClient::BodyStructure module. (Perl 6 will have built-in - support for semantics that look remarkably like Damian Conway's - Parse::RecDescent module, which will solve a lot of problems for me.) diff --git a/Mail-IMAPClient-3.25/lib/Mail/IMAPClient/BodyStructure/Parse.pm b/Mail-IMAPClient-3.25/lib/Mail/IMAPClient/BodyStructure/Parse.pm deleted file mode 100644 index c710d9b..0000000 --- a/Mail-IMAPClient-3.25/lib/Mail/IMAPClient/BodyStructure/Parse.pm +++ /dev/null @@ -1,16425 +0,0 @@ -package Mail::IMAPClient::BodyStructure::Parse; -use Parse::RecDescent; - -{ my $ERRORS; - - -package Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse; -use strict; -use vars qw($skip $AUTOLOAD ); -$skip = '\s*'; - - my $mibs = "Mail::IMAPClient::BodyStructure"; - my $subpartCount = 0; - my $partCount = 0; - - sub take_optional_items($$@) - { my ($r, $items) = (shift, shift); - foreach (@_) - { my $opt = $_ .'(?)'; - exists $items->{$opt} or next; - $r->{$_} = UNIVERSAL::isa($items->{$opt}, 'ARRAY') - ? $items->{$opt}[0] : $items->{$opt}; - } - } - - sub merge_hash($$) - { my $to = shift; - my $from = shift or return; - while( my($k,$v) = each %$from) { $to->{$k} = $v } - } -; - - -{ -local $SIG{__WARN__} = sub {0}; -# PRETEND TO BE IN Parse::RecDescent NAMESPACE -*Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::AUTOLOAD = sub -{ - no strict 'refs'; - $AUTOLOAD =~ s/^Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse/Parse::RecDescent/; - goto &{$AUTOLOAD}; -} -} - -push @Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ISA, 'Parse::RecDescent'; -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyparms -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"bodyparms"}; - - Parse::RecDescent::_trace(q{Trying rule: [bodyparms]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyparms}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyparms}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{bodyparms}); - %item = (__RULE__ => q{bodyparms}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{bodyparms}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodyparms}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodyparms}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodyparms}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [KVPAIRS]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyparms}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{bodyparms}); - %item = (__RULE__ => q{bodyparms}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [KVPAIRS]}, - Parse::RecDescent::_tracefirst($text), - q{bodyparms}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodyparms}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [KVPAIRS]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodyparms}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{KVPAIRS}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [KVPAIRS]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodyparms}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyparms}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{bodyparms}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{bodyparms}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{bodyparms}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::date -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"date"}; - - Parse::RecDescent::_trace(q{Trying rule: [date]}, - Parse::RecDescent::_tracefirst($_[1]), - q{date}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{date}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{date}); - %item = (__RULE__ => q{date}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{date}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{date}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{date}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{date}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{date}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{date}); - %item = (__RULE__ => q{date}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{date}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{date}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{date}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{date}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{date}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{date}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{date}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{date}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysubtype -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"bodysubtype"}; - - Parse::RecDescent::_trace(q{Trying rule: [bodysubtype]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [PLAIN]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{bodysubtype}); - %item = (__RULE__ => q{bodysubtype}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [PLAIN]}, - Parse::RecDescent::_tracefirst($text), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::PLAIN($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [PLAIN]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{PLAIN}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [PLAIN]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [HTML]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{bodysubtype}); - %item = (__RULE__ => q{bodysubtype}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [HTML]}, - Parse::RecDescent::_tracefirst($text), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::HTML($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [HTML]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{HTML}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [HTML]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[2]; - $text = $_[1]; - my $_savetext; - @item = (q{bodysubtype}); - %item = (__RULE__ => q{bodysubtype}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[3]; - $text = $_[1]; - my $_savetext; - @item = (q{bodysubtype}); - %item = (__RULE__ => q{bodysubtype}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{bodysubtype}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{bodysubtype}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{bodysubtype}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::hostname -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"hostname"}; - - Parse::RecDescent::_trace(q{Trying rule: [hostname]}, - Parse::RecDescent::_tracefirst($_[1]), - q{hostname}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{hostname}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{hostname}); - %item = (__RULE__ => q{hostname}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{hostname}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{hostname}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{hostname}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{hostname}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{hostname}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{hostname}); - %item = (__RULE__ => q{hostname}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{hostname}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{hostname}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{hostname}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{hostname}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{hostname}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{hostname}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{hostname}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{hostname}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::basicfields -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"basicfields"}; - - Parse::RecDescent::_trace(q{Trying rule: [basicfields]}, - Parse::RecDescent::_tracefirst($_[1]), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [bodysubtype bodyparms bodyid bodydesc bodyenc bodysize]}, - Parse::RecDescent::_tracefirst($_[1]), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{basicfields}); - %item = (__RULE__ => q{basicfields}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [bodysubtype]}, - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysubtype($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [bodysubtype]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodysubtype}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyparms]}, - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodyparms})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyparms, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyparms]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodyparms(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyid]}, - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodyid})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyid, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyid]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodyid(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodydesc]}, - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodydesc})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydesc, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodydesc]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodydesc(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyenc]}, - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodyenc})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyenc, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyenc]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodyenc(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodysize]}, - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodysize})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysize, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodysize]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodysize(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = { bodysubtype => $item{bodysubtype} }; - take_optional_items($return, \%item, - qw/bodyparms bodyid bodydesc bodyenc bodysize/); - 1; - }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [bodysubtype bodyparms bodyid bodydesc bodyenc bodysize]<<}, - Parse::RecDescent::_tracefirst($text), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{basicfields}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{basicfields}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{basicfields}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::personalname -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"personalname"}; - - Parse::RecDescent::_trace(q{Trying rule: [personalname]}, - Parse::RecDescent::_tracefirst($_[1]), - q{personalname}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{personalname}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{personalname}); - %item = (__RULE__ => q{personalname}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{personalname}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{personalname}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{personalname}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{personalname}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{personalname}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{personalname}); - %item = (__RULE__ => q{personalname}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{personalname}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{personalname}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{personalname}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{personalname}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{personalname}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{personalname}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{personalname}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{personalname}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::key -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"key"}; - - Parse::RecDescent::_trace(q{Trying rule: [key]}, - Parse::RecDescent::_tracefirst($_[1]), - q{key}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{key}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{key}); - %item = (__RULE__ => q{key}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{key}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{key}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{key}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{key}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{key}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{key}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{key}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{key}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::cc -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"cc"}; - - Parse::RecDescent::_trace(q{Trying rule: [cc]}, - Parse::RecDescent::_tracefirst($_[1]), - q{cc}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]}, - Parse::RecDescent::_tracefirst($_[1]), - q{cc}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{cc}); - %item = (__RULE__ => q{cc}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]}, - Parse::RecDescent::_tracefirst($text), - q{cc}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{cc}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{cc}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{ADDRESSES}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<}, - Parse::RecDescent::_tracefirst($text), - q{cc}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{cc}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{cc}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{cc}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{cc}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyMD5 -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"bodyMD5"}; - - Parse::RecDescent::_trace(q{Trying rule: [bodyMD5]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyMD5}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyMD5}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{bodyMD5}); - %item = (__RULE__ => q{bodyMD5}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{bodyMD5}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodyMD5}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodyMD5}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodyMD5}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyMD5}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{bodyMD5}); - %item = (__RULE__ => q{bodyMD5}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{bodyMD5}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodyMD5}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodyMD5}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodyMD5}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyMD5}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{bodyMD5}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{bodyMD5}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{bodyMD5}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::envelope -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"envelope"}; - - Parse::RecDescent::_trace(q{Trying rule: [envelope]}, - Parse::RecDescent::_tracefirst($_[1]), - q{envelope}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [/.*?\\(.*?ENVELOPE/ envelopestruct /.*\\)/]}, - Parse::RecDescent::_tracefirst($_[1]), - q{envelope}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{envelope}); - %item = (__RULE__ => q{envelope}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: [/.*?\\(.*?ENVELOPE/]}, Parse::RecDescent::_tracefirst($text), - q{envelope}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:.*?\(.*?ENVELOPE)//) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN1__}=$&; - - - Parse::RecDescent::_trace(q{Trying subrule: [envelopestruct]}, - Parse::RecDescent::_tracefirst($text), - q{envelope}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{envelopestruct})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::envelopestruct($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{envelope}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [envelopestruct]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{envelope}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{envelopestruct}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying terminal: [/.*\\)/]}, Parse::RecDescent::_tracefirst($text), - q{envelope}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{/.*\\)/})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:.*\))//) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN2__}=$&; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{envelope}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = $item{envelopestruct} }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [/.*?\\(.*?ENVELOPE/ envelopestruct /.*\\)/]<<}, - Parse::RecDescent::_tracefirst($text), - q{envelope}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{envelope}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{envelope}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{envelope}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{envelope}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::MESSAGE -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"MESSAGE"}; - - Parse::RecDescent::_trace(q{Trying rule: [MESSAGE]}, - Parse::RecDescent::_tracefirst($_[1]), - q{MESSAGE}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [/^"MESSAGE"|^MESSAGE/i]}, - Parse::RecDescent::_tracefirst($_[1]), - q{MESSAGE}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{MESSAGE}); - %item = (__RULE__ => q{MESSAGE}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: [/^"MESSAGE"|^MESSAGE/i]}, Parse::RecDescent::_tracefirst($text), - q{MESSAGE}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:^"MESSAGE"|^MESSAGE)//i) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN1__}=$&; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{MESSAGE}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = "MESSAGE"}; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [/^"MESSAGE"|^MESSAGE/i]<<}, - Parse::RecDescent::_tracefirst($text), - q{MESSAGE}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{MESSAGE}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{MESSAGE}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{MESSAGE}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{MESSAGE}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::DOUBLE_QUOTED_STRING -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"DOUBLE_QUOTED_STRING"}; - - Parse::RecDescent::_trace(q{Trying rule: [DOUBLE_QUOTED_STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{DOUBLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: ['"' /(?:\\\\"|[^"])*/ '"']}, - Parse::RecDescent::_tracefirst($_[1]), - q{DOUBLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{DOUBLE_QUOTED_STRING}); - %item = (__RULE__ => q{DOUBLE_QUOTED_STRING}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: ['"']}, - Parse::RecDescent::_tracefirst($text), - q{DOUBLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\"//) - { - - $expectation->failed(); - Parse::RecDescent::_trace(qq{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING1__}=$&; - - - Parse::RecDescent::_trace(q{Trying terminal: [/(?:\\\\"|[^"])*/]}, Parse::RecDescent::_tracefirst($text), - q{DOUBLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{/(?:\\\\"|[^"])*/})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:(?:\\"|[^"])*)//) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN1__}=$&; - - - Parse::RecDescent::_trace(q{Trying terminal: ['"']}, - Parse::RecDescent::_tracefirst($text), - q{DOUBLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{'"'})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\"//) - { - - $expectation->failed(); - Parse::RecDescent::_trace(qq{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING2__}=$&; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{DOUBLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = $item{__PATTERN1__} }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: ['"' /(?:\\\\"|[^"])*/ '"']<<}, - Parse::RecDescent::_tracefirst($text), - q{DOUBLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{DOUBLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{DOUBLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{DOUBLE_QUOTED_STRING}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{DOUBLE_QUOTED_STRING}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::subject -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"subject"}; - - Parse::RecDescent::_trace(q{Trying rule: [subject]}, - Parse::RecDescent::_tracefirst($_[1]), - q{subject}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{subject}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{subject}); - %item = (__RULE__ => q{subject}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{subject}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{subject}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{subject}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{subject}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{subject}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{subject}); - %item = (__RULE__ => q{subject}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{subject}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{subject}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{subject}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{subject}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{subject}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{subject}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{subject}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{subject}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::value -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"value"}; - - Parse::RecDescent::_trace(q{Trying rule: [value]}, - Parse::RecDescent::_tracefirst($_[1]), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{value}); - %item = (__RULE__ => q{value}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NUMBER]}, - Parse::RecDescent::_tracefirst($_[1]), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{value}); - %item = (__RULE__ => q{value}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NUMBER]}, - Parse::RecDescent::_tracefirst($text), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NUMBER($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NUMBER]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NUMBER}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NUMBER]<<}, - Parse::RecDescent::_tracefirst($text), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[2]; - $text = $_[1]; - my $_savetext; - @item = (q{value}); - %item = (__RULE__ => q{value}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [KVPAIRS]}, - Parse::RecDescent::_tracefirst($_[1]), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[3]; - $text = $_[1]; - my $_savetext; - @item = (q{value}); - %item = (__RULE__ => q{value}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [KVPAIRS]}, - Parse::RecDescent::_tracefirst($text), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [KVPAIRS]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{KVPAIRS}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [KVPAIRS]<<}, - Parse::RecDescent::_tracefirst($text), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{value}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{value}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{value}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{value}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::inreplyto -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"inreplyto"}; - - Parse::RecDescent::_trace(q{Trying rule: [inreplyto]}, - Parse::RecDescent::_tracefirst($_[1]), - q{inreplyto}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{inreplyto}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{inreplyto}); - %item = (__RULE__ => q{inreplyto}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{inreplyto}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{inreplyto}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{inreplyto}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{inreplyto}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{inreplyto}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{inreplyto}); - %item = (__RULE__ => q{inreplyto}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{inreplyto}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{inreplyto}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{inreplyto}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{inreplyto}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{inreplyto}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{inreplyto}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{inreplyto}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{inreplyto}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::messageid -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"messageid"}; - - Parse::RecDescent::_trace(q{Trying rule: [messageid]}, - Parse::RecDescent::_tracefirst($_[1]), - q{messageid}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{messageid}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{messageid}); - %item = (__RULE__ => q{messageid}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{messageid}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{messageid}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{messageid}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{messageid}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{messageid}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{messageid}); - %item = (__RULE__ => q{messageid}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{messageid}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{messageid}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{messageid}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{messageid}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{messageid}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{messageid}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{messageid}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{messageid}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::sender -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"sender"}; - - Parse::RecDescent::_trace(q{Trying rule: [sender]}, - Parse::RecDescent::_tracefirst($_[1]), - q{sender}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]}, - Parse::RecDescent::_tracefirst($_[1]), - q{sender}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{sender}); - %item = (__RULE__ => q{sender}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]}, - Parse::RecDescent::_tracefirst($text), - q{sender}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{sender}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{sender}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{ADDRESSES}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<}, - Parse::RecDescent::_tracefirst($text), - q{sender}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{sender}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{sender}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{sender}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{sender}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::multipart -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"multipart"}; - - Parse::RecDescent::_trace(q{Trying rule: [multipart]}, - Parse::RecDescent::_tracefirst($_[1]), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [subpart bodysubtype bodyparms bodydisp bodylang bodyloc bodyextra ]}, - Parse::RecDescent::_tracefirst($_[1]), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{multipart}); - %item = (__RULE__ => q{multipart}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [subpart]}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::subpart, 1, 100000000, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [subpart]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{subpart(s)}} = $_tok; - push @item, $_tok; - - - - - - Parse::RecDescent::_trace(q{Trying directive: []}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $_tok = do { $commit = 1 }; - if (defined($_tok)) - { - Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - } - else - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - } - - last unless defined $_tok; - push @item, $item{__DIRECTIVE1__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying subrule: [bodysubtype]}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{bodysubtype})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysubtype($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [bodysubtype]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodysubtype}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyparms]}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodyparms})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyparms, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyparms]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodyparms(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodydisp]}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodydisp})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodydisp]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodydisp(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodylang]}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodylang})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodylang]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodylang(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyloc]}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodyloc})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyloc, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyloc]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodyloc(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyextra]}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodyextra})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyextra]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodyextra(?)}} = $_tok; - push @item, $_tok; - - - - - - Parse::RecDescent::_trace(q{Trying directive: []}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $_tok = do { push @{$thisparser->{deferred}}, sub { $subpartCount = 0 }; }; - if (defined($_tok)) - { - Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - } - else - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - } - - last unless defined $_tok; - push @item, $item{__DIRECTIVE2__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = - { bodysubtype => $item{bodysubtype} - , bodytype => 'MULTIPART' - , bodystructure => $item{'subpart(s)'} - }; - take_optional_items($return, \%item - , qw/bodyparms bodydisp bodylang bodyloc bodyextra/); - 1; - }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [subpart bodysubtype bodyparms bodydisp bodylang bodyloc bodyextra ]<<}, - Parse::RecDescent::_tracefirst($text), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{multipart}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{multipart}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{multipart}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyenc -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"bodyenc"}; - - Parse::RecDescent::_trace(q{Trying rule: [bodyenc]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{bodyenc}); - %item = (__RULE__ => q{bodyenc}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{bodyenc}); - %item = (__RULE__ => q{bodyenc}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [KVPAIRS]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[2]; - $text = $_[1]; - my $_savetext; - @item = (q{bodyenc}); - %item = (__RULE__ => q{bodyenc}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [KVPAIRS]}, - Parse::RecDescent::_tracefirst($text), - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [KVPAIRS]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{KVPAIRS}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [KVPAIRS]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{bodyenc}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{bodyenc}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{bodyenc}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydesc -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"bodydesc"}; - - Parse::RecDescent::_trace(q{Trying rule: [bodydesc]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodydesc}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [/[()]/ NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodydesc}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{bodydesc}); - %item = (__RULE__ => q{bodydesc}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: [/[()]/]}, Parse::RecDescent::_tracefirst($text), - q{bodydesc}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - $_savetext = $text; - - if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:[()])//) - { - $text = $_savetext; - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN1__}=$&; - $text = $_savetext; - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{bodydesc}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{NIL})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodydesc}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodydesc}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [/[()]/ NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodydesc}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodydesc}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{bodydesc}); - %item = (__RULE__ => q{bodydesc}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{bodydesc}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodydesc}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodydesc}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodydesc}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodydesc}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{bodydesc}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{bodydesc}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{bodydesc}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::start -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"start"}; - - Parse::RecDescent::_trace(q{Trying rule: [start]}, - Parse::RecDescent::_tracefirst($_[1]), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [/.*?\\(.*?BODYSTRUCTURE \\(/i part /\\).*\\)\\r?\\n?/]}, - Parse::RecDescent::_tracefirst($_[1]), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{start}); - %item = (__RULE__ => q{start}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: [/.*?\\(.*?BODYSTRUCTURE \\(/i]}, Parse::RecDescent::_tracefirst($text), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:.*?\(.*?BODYSTRUCTURE \()//i) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN1__}=$&; - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [part]}, - Parse::RecDescent::_tracefirst($text), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{part})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::part, 1, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [part]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{part(1)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying terminal: [/\\).*\\)\\r?\\n?/]}, Parse::RecDescent::_tracefirst($text), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{/\\).*\\)\\r?\\n?/})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:\).*\)\r?\n?)//) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN2__}=$&; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = $item{'part(1)'}[0] }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [/.*?\\(.*?BODYSTRUCTURE \\(/i part /\\).*\\)\\r?\\n?/]<<}, - Parse::RecDescent::_tracefirst($text), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{start}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{start}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{start}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::RFC822 -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"RFC822"}; - - Parse::RecDescent::_trace(q{Trying rule: [RFC822]}, - Parse::RecDescent::_tracefirst($_[1]), - q{RFC822}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [/^"RFC822"|^RFC822/i]}, - Parse::RecDescent::_tracefirst($_[1]), - q{RFC822}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{RFC822}); - %item = (__RULE__ => q{RFC822}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: [/^"RFC822"|^RFC822/i]}, Parse::RecDescent::_tracefirst($text), - q{RFC822}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:^"RFC822"|^RFC822)//i) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN1__}=$&; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{RFC822}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = "RFC822" }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [/^"RFC822"|^RFC822/i]<<}, - Parse::RecDescent::_tracefirst($text), - q{RFC822}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{RFC822}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{RFC822}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{RFC822}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{RFC822}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textmessage -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"textmessage"}; - - Parse::RecDescent::_trace(q{Trying rule: [textmessage]}, - Parse::RecDescent::_tracefirst($_[1]), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [TEXT basicfields textlines bodyMD5 bodydisp bodylang bodyextra]}, - Parse::RecDescent::_tracefirst($_[1]), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{textmessage}); - %item = (__RULE__ => q{textmessage}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [TEXT]}, - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::TEXT($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [TEXT]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{TEXT}} = $_tok; - push @item, $_tok; - - } - - - - Parse::RecDescent::_trace(q{Trying directive: []}, - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - $_tok = do { $commit = 1 }; - if (defined($_tok)) - { - Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - } - else - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - } - - last unless defined $_tok; - push @item, $item{__DIRECTIVE1__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying subrule: [basicfields]}, - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{basicfields})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::basicfields($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [basicfields]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{basicfields}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying repeated subrule: [textlines]}, - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{textlines})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textlines, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [textlines]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{textlines(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyMD5]}, - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodyMD5})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyMD5, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyMD5]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodyMD5(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodydisp]}, - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodydisp})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodydisp]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodydisp(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodylang]}, - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodylang})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodylang]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodylang(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyextra]}, - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodyextra})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyextra]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodyextra(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { - $return = $item{basicfields} || {}; - $return->{bodytype} = 'TEXT'; - take_optional_items($return, \%item - , qw/textlines bodyMD5 bodydisp bodylang bodyextra/); - 1; - }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [TEXT basicfields textlines bodyMD5 bodydisp bodylang bodyextra]<<}, - Parse::RecDescent::_tracefirst($text), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{textmessage}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{textmessage}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{textmessage}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyid -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"bodyid"}; - - Parse::RecDescent::_trace(q{Trying rule: [bodyid]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyid}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [/[()]/ NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyid}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{bodyid}); - %item = (__RULE__ => q{bodyid}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: [/[()]/]}, Parse::RecDescent::_tracefirst($text), - q{bodyid}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - $_savetext = $text; - - if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:[()])//) - { - $text = $_savetext; - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN1__}=$&; - $text = $_savetext; - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{bodyid}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{NIL})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodyid}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodyid}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [/[()]/ NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodyid}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyid}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{bodyid}); - %item = (__RULE__ => q{bodyid}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{bodyid}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodyid}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodyid}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodyid}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyid}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{bodyid}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{bodyid}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{bodyid}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"bodyextra"}; - - Parse::RecDescent::_trace(q{Trying rule: [bodyextra]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{bodyextra}); - %item = (__RULE__ => q{bodyextra}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{bodyextra}); - %item = (__RULE__ => q{bodyextra}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRINGS]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[2]; - $text = $_[1]; - my $_savetext; - @item = (q{bodyextra}); - %item = (__RULE__ => q{bodyextra}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRINGS]}, - Parse::RecDescent::_tracefirst($text), - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRINGS($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRINGS]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRINGS}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRINGS]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{bodyextra}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{bodyextra}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{bodyextra}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::othertypemessage -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"othertypemessage"}; - - Parse::RecDescent::_trace(q{Trying rule: [othertypemessage]}, - Parse::RecDescent::_tracefirst($_[1]), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [bodytype basicfields bodyMD5 bodydisp bodylang bodyextra]}, - Parse::RecDescent::_tracefirst($_[1]), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{othertypemessage}); - %item = (__RULE__ => q{othertypemessage}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [bodytype]}, - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodytype($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [bodytype]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodytype}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [basicfields]}, - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{basicfields})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::basicfields($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [basicfields]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{basicfields}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyMD5]}, - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodyMD5})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyMD5, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyMD5]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodyMD5(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodydisp]}, - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodydisp})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodydisp]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodydisp(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodylang]}, - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodylang})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodylang]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodylang(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyextra]}, - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodyextra})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyextra]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodyextra(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = { bodytype => $item{bodytype} }; - take_optional_items($return, \%item - , qw/bodyMD5 bodydisp bodylang bodyextra/ ); - merge_hash($return, $item{basicfields}); - 1; - }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [bodytype basicfields bodyMD5 bodydisp bodylang bodyextra]<<}, - Parse::RecDescent::_tracefirst($text), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{othertypemessage}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{othertypemessage}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{othertypemessage}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::kvpair -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"kvpair"}; - - Parse::RecDescent::_trace(q{Trying rule: [kvpair]}, - Parse::RecDescent::_tracefirst($_[1]), - q{kvpair}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [')' key value]}, - Parse::RecDescent::_tracefirst($_[1]), - q{kvpair}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{kvpair}); - %item = (__RULE__ => q{kvpair}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: [')']}, - Parse::RecDescent::_tracefirst($text), - q{kvpair}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - $_savetext = $text; - - if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - $text = $_savetext; - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING1__}=$_tok; - $text = $_savetext; - - Parse::RecDescent::_trace(q{Trying subrule: [key]}, - Parse::RecDescent::_tracefirst($text), - q{kvpair}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{key})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::key($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{kvpair}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [key]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{kvpair}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{key}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [value]}, - Parse::RecDescent::_tracefirst($text), - q{kvpair}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{value})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::value($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{kvpair}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [value]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{kvpair}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{value}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{kvpair}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = { $item{key} => $item{value} } }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [')' key value]<<}, - Parse::RecDescent::_tracefirst($text), - q{kvpair}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{kvpair}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{kvpair}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{kvpair}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{kvpair}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysize -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"bodysize"}; - - Parse::RecDescent::_trace(q{Trying rule: [bodysize]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodysize}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [/[()]/ NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodysize}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{bodysize}); - %item = (__RULE__ => q{bodysize}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: [/[()]/]}, Parse::RecDescent::_tracefirst($text), - q{bodysize}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - $_savetext = $text; - - if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:[()])//) - { - $text = $_savetext; - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN1__}=$&; - $text = $_savetext; - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{bodysize}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{NIL})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodysize}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodysize}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [/[()]/ NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodysize}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NUMBER]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodysize}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{bodysize}); - %item = (__RULE__ => q{bodysize}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NUMBER]}, - Parse::RecDescent::_tracefirst($text), - q{bodysize}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NUMBER($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodysize}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NUMBER]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodysize}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NUMBER}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NUMBER]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodysize}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodysize}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{bodysize}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{bodysize}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{bodysize}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"STRING"}; - - Parse::RecDescent::_trace(q{Trying rule: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [DOUBLE_QUOTED_STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{STRING}); - %item = (__RULE__ => q{STRING}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [DOUBLE_QUOTED_STRING]}, - Parse::RecDescent::_tracefirst($text), - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::DOUBLE_QUOTED_STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [DOUBLE_QUOTED_STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{DOUBLE_QUOTED_STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [DOUBLE_QUOTED_STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [SINGLE_QUOTED_STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{STRING}); - %item = (__RULE__ => q{STRING}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [SINGLE_QUOTED_STRING]}, - Parse::RecDescent::_tracefirst($text), - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::SINGLE_QUOTED_STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [SINGLE_QUOTED_STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{SINGLE_QUOTED_STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [SINGLE_QUOTED_STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [BARESTRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[2]; - $text = $_[1]; - my $_savetext; - @item = (q{STRING}); - %item = (__RULE__ => q{STRING}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [BARESTRING]}, - Parse::RecDescent::_tracefirst($text), - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::BARESTRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [BARESTRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{BARESTRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [BARESTRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{STRING}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{STRING}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{STRING}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodytype -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"bodytype"}; - - Parse::RecDescent::_trace(q{Trying rule: [bodytype]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodytype}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodytype}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{bodytype}); - %item = (__RULE__ => q{bodytype}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{bodytype}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodytype}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodytype}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodytype}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodytype}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{bodytype}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{bodytype}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{bodytype}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::TEXT -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"TEXT"}; - - Parse::RecDescent::_trace(q{Trying rule: [TEXT]}, - Parse::RecDescent::_tracefirst($_[1]), - q{TEXT}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [/^"TEXT"|^TEXT/i]}, - Parse::RecDescent::_tracefirst($_[1]), - q{TEXT}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{TEXT}); - %item = (__RULE__ => q{TEXT}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: [/^"TEXT"|^TEXT/i]}, Parse::RecDescent::_tracefirst($text), - q{TEXT}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:^"TEXT"|^TEXT)//i) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN1__}=$&; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{TEXT}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = "TEXT" }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [/^"TEXT"|^TEXT/i]<<}, - Parse::RecDescent::_tracefirst($text), - q{TEXT}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{TEXT}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{TEXT}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{TEXT}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{TEXT}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::to -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"to"}; - - Parse::RecDescent::_trace(q{Trying rule: [to]}, - Parse::RecDescent::_tracefirst($_[1]), - q{to}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]}, - Parse::RecDescent::_tracefirst($_[1]), - q{to}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{to}); - %item = (__RULE__ => q{to}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]}, - Parse::RecDescent::_tracefirst($text), - q{to}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{to}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{to}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{ADDRESSES}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<}, - Parse::RecDescent::_tracefirst($text), - q{to}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{to}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{to}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{to}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{to}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"NIL"}; - - Parse::RecDescent::_trace(q{Trying rule: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{NIL}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [/^NIL/i]}, - Parse::RecDescent::_tracefirst($_[1]), - q{NIL}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{NIL}); - %item = (__RULE__ => q{NIL}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: [/^NIL/i]}, Parse::RecDescent::_tracefirst($text), - q{NIL}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:^NIL)//i) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN1__}=$&; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{NIL}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = "NIL" }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [/^NIL/i]<<}, - Parse::RecDescent::_tracefirst($text), - q{NIL}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{NIL}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{NIL}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{NIL}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{NIL}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"KVPAIRS"}; - - Parse::RecDescent::_trace(q{Trying rule: [KVPAIRS]}, - Parse::RecDescent::_tracefirst($_[1]), - q{KVPAIRS}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: ['(' kvpair ')']}, - Parse::RecDescent::_tracefirst($_[1]), - q{KVPAIRS}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{KVPAIRS}); - %item = (__RULE__ => q{KVPAIRS}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: ['(']}, - Parse::RecDescent::_tracefirst($text), - q{KVPAIRS}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING1__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [kvpair]}, - Parse::RecDescent::_tracefirst($text), - q{KVPAIRS}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{kvpair})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::kvpair, 1, 100000000, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{KVPAIRS}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [kvpair]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{KVPAIRS}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{kvpair(s)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying terminal: [')']}, - Parse::RecDescent::_tracefirst($text), - q{KVPAIRS}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{')'})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING2__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{KVPAIRS}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = { map { (%$_) } @{$item{'kvpair(s)'}} } }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: ['(' kvpair ')']<<}, - Parse::RecDescent::_tracefirst($text), - q{KVPAIRS}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{KVPAIRS}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{KVPAIRS}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{KVPAIRS}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{KVPAIRS}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::from -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"from"}; - - Parse::RecDescent::_trace(q{Trying rule: [from]}, - Parse::RecDescent::_tracefirst($_[1]), - q{from}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]}, - Parse::RecDescent::_tracefirst($_[1]), - q{from}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{from}); - %item = (__RULE__ => q{from}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]}, - Parse::RecDescent::_tracefirst($text), - q{from}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{from}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{from}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{ADDRESSES}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<}, - Parse::RecDescent::_tracefirst($text), - q{from}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{from}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{from}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{from}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{from}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodystructure -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"bodystructure"}; - - Parse::RecDescent::_trace(q{Trying rule: [bodystructure]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodystructure}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: ['(' part ')']}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodystructure}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{bodystructure}); - %item = (__RULE__ => q{bodystructure}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: ['(']}, - Parse::RecDescent::_tracefirst($text), - q{bodystructure}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING1__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [part]}, - Parse::RecDescent::_tracefirst($text), - q{bodystructure}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{part})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::part, 1, 100000000, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodystructure}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [part]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{bodystructure}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{part(s)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying terminal: [')']}, - Parse::RecDescent::_tracefirst($text), - q{bodystructure}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{')'})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING2__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{bodystructure}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = $item{'part(s)'} }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: ['(' part ')']<<}, - Parse::RecDescent::_tracefirst($text), - q{bodystructure}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodystructure}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{bodystructure}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{bodystructure}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{bodystructure}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::PLAIN -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"PLAIN"}; - - Parse::RecDescent::_trace(q{Trying rule: [PLAIN]}, - Parse::RecDescent::_tracefirst($_[1]), - q{PLAIN}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [/^"PLAIN"|^PLAIN/i]}, - Parse::RecDescent::_tracefirst($_[1]), - q{PLAIN}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{PLAIN}); - %item = (__RULE__ => q{PLAIN}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: [/^"PLAIN"|^PLAIN/i]}, Parse::RecDescent::_tracefirst($text), - q{PLAIN}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:^"PLAIN"|^PLAIN)//i) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN1__}=$&; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{PLAIN}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = "PLAIN" }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [/^"PLAIN"|^PLAIN/i]<<}, - Parse::RecDescent::_tracefirst($text), - q{PLAIN}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{PLAIN}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{PLAIN}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{PLAIN}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{PLAIN}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NUMBER -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"NUMBER"}; - - Parse::RecDescent::_trace(q{Trying rule: [NUMBER]}, - Parse::RecDescent::_tracefirst($_[1]), - q{NUMBER}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [/^(\\d+)/]}, - Parse::RecDescent::_tracefirst($_[1]), - q{NUMBER}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{NUMBER}); - %item = (__RULE__ => q{NUMBER}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: [/^(\\d+)/]}, Parse::RecDescent::_tracefirst($text), - q{NUMBER}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:^(\d+))//) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN1__}=$&; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{NUMBER}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = $item[1] }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [/^(\\d+)/]<<}, - Parse::RecDescent::_tracefirst($text), - q{NUMBER}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{NUMBER}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{NUMBER}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{NUMBER}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{NUMBER}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRINGS -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"STRINGS"}; - - Parse::RecDescent::_trace(q{Trying rule: [STRINGS]}, - Parse::RecDescent::_tracefirst($_[1]), - q{STRINGS}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: ['(' STRING ')']}, - Parse::RecDescent::_tracefirst($_[1]), - q{STRINGS}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{STRINGS}); - %item = (__RULE__ => q{STRINGS}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: ['(']}, - Parse::RecDescent::_tracefirst($text), - q{STRINGS}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING1__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{STRINGS}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{STRING})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING, 1, 100000000, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{STRINGS}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [STRING]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{STRINGS}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING(s)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying terminal: [')']}, - Parse::RecDescent::_tracefirst($text), - q{STRINGS}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{')'})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING2__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{STRINGS}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = $item{'STRING(s)'} }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: ['(' STRING ')']<<}, - Parse::RecDescent::_tracefirst($text), - q{STRINGS}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{STRINGS}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{STRINGS}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{STRINGS}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{STRINGS}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::HTML -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"HTML"}; - - Parse::RecDescent::_trace(q{Trying rule: [HTML]}, - Parse::RecDescent::_tracefirst($_[1]), - q{HTML}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [/"HTML"|HTML/i]}, - Parse::RecDescent::_tracefirst($_[1]), - q{HTML}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{HTML}); - %item = (__RULE__ => q{HTML}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: [/"HTML"|HTML/i]}, Parse::RecDescent::_tracefirst($text), - q{HTML}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:"HTML"|HTML)//i) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN1__}=$&; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{HTML}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = "HTML" }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [/"HTML"|HTML/i]<<}, - Parse::RecDescent::_tracefirst($text), - q{HTML}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{HTML}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{HTML}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{HTML}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{HTML}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"bodydisp"}; - - Parse::RecDescent::_trace(q{Trying rule: [bodydisp]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodydisp}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodydisp}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{bodydisp}); - %item = (__RULE__ => q{bodydisp}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{bodydisp}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodydisp}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodydisp}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodydisp}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [KVPAIRS]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodydisp}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{bodydisp}); - %item = (__RULE__ => q{bodydisp}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [KVPAIRS]}, - Parse::RecDescent::_tracefirst($text), - q{bodydisp}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodydisp}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [KVPAIRS]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodydisp}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{KVPAIRS}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [KVPAIRS]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodydisp}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodydisp}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{bodydisp}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{bodydisp}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{bodydisp}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::part -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"part"}; - - Parse::RecDescent::_trace(q{Trying rule: [part]}, - Parse::RecDescent::_tracefirst($_[1]), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [multipart]}, - Parse::RecDescent::_tracefirst($_[1]), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{part}); - %item = (__RULE__ => q{part}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [multipart]}, - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::multipart($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [multipart]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{multipart}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = bless $item{multipart}, $mibs }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [multipart]<<}, - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [textmessage]}, - Parse::RecDescent::_tracefirst($_[1]), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{part}); - %item = (__RULE__ => q{part}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [textmessage]}, - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textmessage($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [textmessage]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{textmessage}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = bless $item{textmessage}, $mibs }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [textmessage]<<}, - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [nestedmessage]}, - Parse::RecDescent::_tracefirst($_[1]), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[2]; - $text = $_[1]; - my $_savetext; - @item = (q{part}); - %item = (__RULE__ => q{part}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [nestedmessage]}, - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::nestedmessage($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [nestedmessage]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{nestedmessage}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = bless $item{nestedmessage}, $mibs }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [nestedmessage]<<}, - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [othertypemessage]}, - Parse::RecDescent::_tracefirst($_[1]), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[3]; - $text = $_[1]; - my $_savetext; - @item = (q{part}); - %item = (__RULE__ => q{part}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [othertypemessage]}, - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::othertypemessage($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [othertypemessage]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{othertypemessage}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = bless $item{othertypemessage}, $mibs }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [othertypemessage]<<}, - Parse::RecDescent::_tracefirst($text), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{part}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{part}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{part}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{part}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::nestedmessage -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"nestedmessage"}; - - Parse::RecDescent::_trace(q{Trying rule: [nestedmessage]}, - Parse::RecDescent::_tracefirst($_[1]), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [rfc822message bodyparms bodyid bodydesc bodyenc bodysize envelopestruct bodystructure textlines bodyMD5 bodydisp bodylang bodyextra]}, - Parse::RecDescent::_tracefirst($_[1]), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{nestedmessage}); - %item = (__RULE__ => q{nestedmessage}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [rfc822message]}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::rfc822message($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [rfc822message]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{rfc822message}} = $_tok; - push @item, $_tok; - - } - - - - Parse::RecDescent::_trace(q{Trying directive: []}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $_tok = do { $commit = 1 }; - if (defined($_tok)) - { - Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - } - else - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - } - - last unless defined $_tok; - push @item, $item{__DIRECTIVE1__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying subrule: [bodyparms]}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{bodyparms})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyparms($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [bodyparms]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodyparms}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [bodyid]}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{bodyid})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyid($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [bodyid]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodyid}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [bodydesc]}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{bodydesc})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydesc($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [bodydesc]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodydesc}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [bodyenc]}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{bodyenc})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyenc($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [bodyenc]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodyenc}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [bodysize]}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{bodysize})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysize($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [bodysize]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodysize}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying repeated subrule: [envelopestruct]}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{envelopestruct})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::envelopestruct, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [envelopestruct]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{envelopestruct(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodystructure]}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodystructure})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodystructure, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodystructure]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodystructure(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [textlines]}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{textlines})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textlines, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [textlines]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{textlines(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyMD5]}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodyMD5})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyMD5, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyMD5]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodyMD5(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodydisp]}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodydisp})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodydisp]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodydisp(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodylang]}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodylang})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodylang]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodylang(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyextra]}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{bodyextra})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra, 0, 1, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyextra]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bodyextra(?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { - $return = {}; - $return->{$_} = $item{$_} - for qw/bodyparms bodyid bodydesc bodyenc bodysize/; -# envelopestruct bodystructure textlines/; - - take_optional_items($return, \%item - , qw/envelopestruct bodystructure textlines/ - , qw/bodyMD5 bodydisp bodylang bodyextra/); - - merge_hash($return, $item{bodystructure}[0]); - merge_hash($return, $item{basicfields}); - $return->{bodytype} = "MESSAGE" ; - $return->{bodysubtype} = "RFC822" ; - 1; - }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [rfc822message bodyparms bodyid bodydesc bodyenc bodysize envelopestruct bodystructure textlines bodyMD5 bodydisp bodylang bodyextra]<<}, - Parse::RecDescent::_tracefirst($text), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{nestedmessage}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{nestedmessage}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{nestedmessage}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::SINGLE_QUOTED_STRING -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"SINGLE_QUOTED_STRING"}; - - Parse::RecDescent::_trace(q{Trying rule: [SINGLE_QUOTED_STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{SINGLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [''' /(?:\\\\'|[^'])*/ ''']}, - Parse::RecDescent::_tracefirst($_[1]), - q{SINGLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{SINGLE_QUOTED_STRING}); - %item = (__RULE__ => q{SINGLE_QUOTED_STRING}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: [''']}, - Parse::RecDescent::_tracefirst($text), - q{SINGLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "'"; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING1__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying terminal: [/(?:\\\\'|[^'])*/]}, Parse::RecDescent::_tracefirst($text), - q{SINGLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{/(?:\\\\'|[^'])*/})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:(?:\\'|[^'])*)//) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN1__}=$&; - - - Parse::RecDescent::_trace(q{Trying terminal: [''']}, - Parse::RecDescent::_tracefirst($text), - q{SINGLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{'''})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "'"; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING2__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{SINGLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = $item{__PATTERN1__} }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [''' /(?:\\\\'|[^'])*/ ''']<<}, - Parse::RecDescent::_tracefirst($text), - q{SINGLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{SINGLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{SINGLE_QUOTED_STRING}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{SINGLE_QUOTED_STRING}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{SINGLE_QUOTED_STRING}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"ADDRESSES"}; - - Parse::RecDescent::_trace(q{Trying rule: [ADDRESSES]}, - Parse::RecDescent::_tracefirst($_[1]), - q{ADDRESSES}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{ADDRESSES}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{ADDRESSES}); - %item = (__RULE__ => q{ADDRESSES}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{ADDRESSES}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{ADDRESSES}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{ADDRESSES}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{ADDRESSES}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: ['(' addressstruct ')']}, - Parse::RecDescent::_tracefirst($_[1]), - q{ADDRESSES}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{ADDRESSES}); - %item = (__RULE__ => q{ADDRESSES}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: ['(']}, - Parse::RecDescent::_tracefirst($text), - q{ADDRESSES}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING1__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [addressstruct]}, - Parse::RecDescent::_tracefirst($text), - q{ADDRESSES}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{addressstruct})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::addressstruct, 1, 100000000, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{ADDRESSES}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [addressstruct]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{ADDRESSES}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{addressstruct(s)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying terminal: [')']}, - Parse::RecDescent::_tracefirst($text), - q{ADDRESSES}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{')'})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING2__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{ADDRESSES}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = $item{'addressstruct(s)'} }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: ['(' addressstruct ')']<<}, - Parse::RecDescent::_tracefirst($text), - q{ADDRESSES}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{ADDRESSES}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{ADDRESSES}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{ADDRESSES}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{ADDRESSES}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bcc -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"bcc"}; - - Parse::RecDescent::_trace(q{Trying rule: [bcc]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bcc}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bcc}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{bcc}); - %item = (__RULE__ => q{bcc}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]}, - Parse::RecDescent::_tracefirst($text), - q{bcc}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bcc}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bcc}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{ADDRESSES}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<}, - Parse::RecDescent::_tracefirst($text), - q{bcc}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{bcc}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{bcc}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{bcc}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{bcc}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::rfc822message -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"rfc822message"}; - - Parse::RecDescent::_trace(q{Trying rule: [rfc822message]}, - Parse::RecDescent::_tracefirst($_[1]), - q{rfc822message}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [MESSAGE RFC822]}, - Parse::RecDescent::_tracefirst($_[1]), - q{rfc822message}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{rfc822message}); - %item = (__RULE__ => q{rfc822message}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [MESSAGE]}, - Parse::RecDescent::_tracefirst($text), - q{rfc822message}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::MESSAGE($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{rfc822message}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [MESSAGE]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{rfc822message}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{MESSAGE}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [RFC822]}, - Parse::RecDescent::_tracefirst($text), - q{rfc822message}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{RFC822})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::RFC822($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{rfc822message}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [RFC822]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{rfc822message}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{RFC822}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{rfc822message}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = "MESSAGE RFC822" }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [MESSAGE RFC822]<<}, - Parse::RecDescent::_tracefirst($text), - q{rfc822message}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{rfc822message}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{rfc822message}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{rfc822message}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{rfc822message}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::addressstruct -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"addressstruct"}; - - Parse::RecDescent::_trace(q{Trying rule: [addressstruct]}, - Parse::RecDescent::_tracefirst($_[1]), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: ['(' personalname sourceroute mailboxname hostname ')']}, - Parse::RecDescent::_tracefirst($_[1]), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{addressstruct}); - %item = (__RULE__ => q{addressstruct}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: ['(']}, - Parse::RecDescent::_tracefirst($text), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING1__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying subrule: [personalname]}, - Parse::RecDescent::_tracefirst($text), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{personalname})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::personalname($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [personalname]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{personalname}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [sourceroute]}, - Parse::RecDescent::_tracefirst($text), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{sourceroute})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::sourceroute($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [sourceroute]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{sourceroute}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [mailboxname]}, - Parse::RecDescent::_tracefirst($text), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{mailboxname})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::mailboxname($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [mailboxname]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{mailboxname}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [hostname]}, - Parse::RecDescent::_tracefirst($text), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{hostname})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::hostname($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [hostname]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{hostname}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying terminal: [')']}, - Parse::RecDescent::_tracefirst($text), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{')'})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING2__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { bless { personalname => $item{personalname} - , sourceroute => $item{sourceroute} - , mailboxname => $item{mailboxname} - , hostname => $item{hostname} - }, 'Mail::IMAPClient::BodyStructure::Address'; - }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: ['(' personalname sourceroute mailboxname hostname ')']<<}, - Parse::RecDescent::_tracefirst($text), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{addressstruct}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{addressstruct}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{addressstruct}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::sourceroute -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"sourceroute"}; - - Parse::RecDescent::_trace(q{Trying rule: [sourceroute]}, - Parse::RecDescent::_tracefirst($_[1]), - q{sourceroute}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{sourceroute}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{sourceroute}); - %item = (__RULE__ => q{sourceroute}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{sourceroute}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{sourceroute}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{sourceroute}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{sourceroute}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{sourceroute}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{sourceroute}); - %item = (__RULE__ => q{sourceroute}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{sourceroute}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{sourceroute}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{sourceroute}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{sourceroute}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{sourceroute}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{sourceroute}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{sourceroute}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{sourceroute}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::subpart -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"subpart"}; - - Parse::RecDescent::_trace(q{Trying rule: [subpart]}, - Parse::RecDescent::_tracefirst($_[1]), - q{subpart}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: ['(' part ')' ]}, - Parse::RecDescent::_tracefirst($_[1]), - q{subpart}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{subpart}); - %item = (__RULE__ => q{subpart}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: ['(']}, - Parse::RecDescent::_tracefirst($text), - q{subpart}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING1__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying subrule: [part]}, - Parse::RecDescent::_tracefirst($text), - q{subpart}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{part})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::part($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{subpart}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [part]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{subpart}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{part}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying terminal: [')']}, - Parse::RecDescent::_tracefirst($text), - q{subpart}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{')'})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING2__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{subpart}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do {$return = $item{part}}; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - - Parse::RecDescent::_trace(q{Trying directive: []}, - Parse::RecDescent::_tracefirst($text), - q{subpart}, - $tracelevel) - if defined $::RD_TRACE; - $_tok = do { push @{$thisparser->{deferred}}, sub { ++$subpartCount; }; }; - if (defined($_tok)) - { - Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - } - else - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - } - - last unless defined $_tok; - push @item, $item{__DIRECTIVE1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: ['(' part ')' ]<<}, - Parse::RecDescent::_tracefirst($text), - q{subpart}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{subpart}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{subpart}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{subpart}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{subpart}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textlines -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"textlines"}; - - Parse::RecDescent::_trace(q{Trying rule: [textlines]}, - Parse::RecDescent::_tracefirst($_[1]), - q{textlines}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{textlines}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{textlines}); - %item = (__RULE__ => q{textlines}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{textlines}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{textlines}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{textlines}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{textlines}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NUMBER]}, - Parse::RecDescent::_tracefirst($_[1]), - q{textlines}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{textlines}); - %item = (__RULE__ => q{textlines}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NUMBER]}, - Parse::RecDescent::_tracefirst($text), - q{textlines}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NUMBER($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{textlines}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NUMBER]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{textlines}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NUMBER}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NUMBER]<<}, - Parse::RecDescent::_tracefirst($text), - q{textlines}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{textlines}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{textlines}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{textlines}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{textlines}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::BARESTRING -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"BARESTRING"}; - - Parse::RecDescent::_trace(q{Trying rule: [BARESTRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{BARESTRING}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [/^[)('"]/ /^(?!\\(|\\))(?:\\\\ |\\S)+/]}, - Parse::RecDescent::_tracefirst($_[1]), - q{BARESTRING}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{BARESTRING}); - %item = (__RULE__ => q{BARESTRING}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: [/^[)('"]/]}, Parse::RecDescent::_tracefirst($text), - q{BARESTRING}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - $_savetext = $text; - - if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:^[)('"])//) - { - $text = $_savetext; - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN1__}=$&; - $text = $_savetext; - - Parse::RecDescent::_trace(q{Trying terminal: [/^(?!\\(|\\))(?:\\\\ |\\S)+/]}, Parse::RecDescent::_tracefirst($text), - q{BARESTRING}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{/^(?!\\(|\\))(?:\\\\ |\\S)+/})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:^(?!\(|\))(?:\\ |\S)+)//) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN2__}=$&; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{BARESTRING}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = $item{__PATTERN1__} }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [/^[)('"]/ /^(?!\\(|\\))(?:\\\\ |\\S)+/]<<}, - Parse::RecDescent::_tracefirst($text), - q{BARESTRING}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{BARESTRING}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{BARESTRING}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{BARESTRING}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{BARESTRING}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyloc -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"bodyloc"}; - - Parse::RecDescent::_trace(q{Trying rule: [bodyloc]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyloc}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyloc}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{bodyloc}); - %item = (__RULE__ => q{bodyloc}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{bodyloc}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodyloc}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodyloc}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodyloc}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyloc}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{bodyloc}); - %item = (__RULE__ => q{bodyloc}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{bodyloc}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodyloc}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodyloc}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodyloc}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodyloc}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{bodyloc}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{bodyloc}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{bodyloc}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"bodylang"}; - - Parse::RecDescent::_trace(q{Trying rule: [bodylang]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{bodylang}); - %item = (__RULE__ => q{bodylang}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{bodylang}); - %item = (__RULE__ => q{bodylang}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRINGS]}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[2]; - $text = $_[1]; - my $_savetext; - @item = (q{bodylang}); - %item = (__RULE__ => q{bodylang}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRINGS]}, - Parse::RecDescent::_tracefirst($text), - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRINGS($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRINGS]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRINGS}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRINGS]<<}, - Parse::RecDescent::_tracefirst($text), - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{bodylang}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{bodylang}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{bodylang}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::envelopestruct -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"envelopestruct"}; - - Parse::RecDescent::_trace(q{Trying rule: [envelopestruct]}, - Parse::RecDescent::_tracefirst($_[1]), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: ['(' date subject from sender replyto to cc bcc inreplyto messageid ')']}, - Parse::RecDescent::_tracefirst($_[1]), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{envelopestruct}); - %item = (__RULE__ => q{envelopestruct}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: ['(']}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING1__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying subrule: [date]}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{date})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::date($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [date]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{date}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [subject]}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{subject})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::subject($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [subject]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{subject}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [from]}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{from})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::from($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [from]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{from}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [sender]}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{sender})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::sender($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [sender]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{sender}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [replyto]}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{replyto})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::replyto($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [replyto]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{replyto}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [to]}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{to})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::to($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [to]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{to}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [cc]}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{cc})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::cc($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [cc]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{cc}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [bcc]}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{bcc})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bcc($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [bcc]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{bcc}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [inreplyto]}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{inreplyto})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::inreplyto($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [inreplyto]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{inreplyto}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying subrule: [messageid]}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{messageid})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::messageid($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [messageid]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{messageid}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying terminal: [')']}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{')'})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING2__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = bless {}, "Mail::IMAPClient::BodyStructure::Envelope"; - $return->{$_} = $item{$_} - for qw/date subject from sender replyto to cc/ - , qw/bcc inreplyto messageid/; - 1; - }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: ['(' date subject from sender replyto to cc bcc inreplyto messageid ')']<<}, - Parse::RecDescent::_tracefirst($text), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{envelopestruct}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{envelopestruct}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{envelopestruct}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::replyto -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"replyto"}; - - Parse::RecDescent::_trace(q{Trying rule: [replyto]}, - Parse::RecDescent::_tracefirst($_[1]), - q{replyto}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]}, - Parse::RecDescent::_tracefirst($_[1]), - q{replyto}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{replyto}); - %item = (__RULE__ => q{replyto}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]}, - Parse::RecDescent::_tracefirst($text), - q{replyto}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{replyto}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{replyto}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{ADDRESSES}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<}, - Parse::RecDescent::_tracefirst($text), - q{replyto}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{replyto}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{replyto}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{replyto}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{replyto}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::mailboxname -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"mailboxname"}; - - Parse::RecDescent::_trace(q{Trying rule: [mailboxname]}, - Parse::RecDescent::_tracefirst($_[1]), - q{mailboxname}, - $tracelevel) - if defined $::RD_TRACE; - - my $def_at = @{$thisparser->{deferred}}; - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NIL]}, - Parse::RecDescent::_tracefirst($_[1]), - q{mailboxname}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{mailboxname}); - %item = (__RULE__ => q{mailboxname}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, - Parse::RecDescent::_tracefirst($text), - q{mailboxname}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{mailboxname}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{mailboxname}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NIL}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, - Parse::RecDescent::_tracefirst($text), - q{mailboxname}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [STRING]}, - Parse::RecDescent::_tracefirst($_[1]), - q{mailboxname}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{mailboxname}); - %item = (__RULE__ => q{mailboxname}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, - Parse::RecDescent::_tracefirst($text), - q{mailboxname}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{mailboxname}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{mailboxname}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{STRING}} = $_tok; - push @item, $_tok; - - } - - - Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, - Parse::RecDescent::_tracefirst($text), - q{mailboxname}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - - unless ( $_matched || defined($return) || defined($score) ) - { - splice @{$thisparser->{deferred}}, $def_at; - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{mailboxname}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{mailboxname}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{mailboxname}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{mailboxname}, - $tracelevel) - } - $_[1] = $text; - return $return; -} -} -package Mail::IMAPClient::BodyStructure::Parse; sub new { my $self = bless( { - '_AUTOTREE' => undef, - 'localvars' => '', - 'startcode' => '', - '_check' => { - 'thisoffset' => '', - 'itempos' => '', - 'prevoffset' => '', - 'prevline' => '', - 'prevcolumn' => '', - 'thiscolumn' => '' - }, - 'namespace' => 'Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse', - 'deferrable' => 1, - '_AUTOACTION' => undef, - 'rules' => { - 'bodyparms' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'KVPAIRS' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 65 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'KVPAIRS', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 65 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 65 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'bodyparms', - 'vars' => '', - 'line' => 65 - }, 'Parse::RecDescent::Rule' ), - 'date' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'STRING' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 92 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 92 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 92 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'date', - 'vars' => '', - 'line' => 92 - }, 'Parse::RecDescent::Rule' ), - 'bodysubtype' => bless( { - 'impcount' => 0, - 'calls' => [ - 'PLAIN', - 'HTML', - 'NIL', - 'STRING' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'PLAIN', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 53 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'HTML', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 53 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 53 - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '2', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 53 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 53 - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '3', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 53 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 53 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'bodysubtype', - 'vars' => '', - 'line' => 53 - }, 'Parse::RecDescent::Rule' ), - 'hostname' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'STRING' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 79 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 79 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 79 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'hostname', - 'vars' => '', - 'line' => 79 - }, 'Parse::RecDescent::Rule' ), - 'basicfields' => bless( { - 'impcount' => 0, - 'calls' => [ - 'bodysubtype', - 'bodyparms', - 'bodyid', - 'bodydesc', - 'bodyenc', - 'bodysize' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'subrule' => 'bodysubtype', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 113 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'bodyparms', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 113 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodyid', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 113 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodydesc', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 114 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodyenc', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 114 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodysize', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 114 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 115, - 'code' => '{ $return = { bodysubtype => $item{bodysubtype} }; - take_optional_items($return, \\%item, - qw/bodyparms bodyid bodydesc bodyenc bodysize/); - 1; - }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'basicfields', - 'vars' => '', - 'line' => 113 - }, 'Parse::RecDescent::Rule' ), - 'personalname' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'STRING' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 76 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 76 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 76 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'personalname', - 'vars' => '', - 'line' => 76 - }, 'Parse::RecDescent::Rule' ), - 'key' => bless( { - 'impcount' => 0, - 'calls' => [ - 'STRING' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 55 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'key', - 'vars' => '', - 'line' => 55 - }, 'Parse::RecDescent::Rule' ), - 'cc' => bless( { - 'impcount' => 0, - 'calls' => [ - 'ADDRESSES' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'ADDRESSES', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 97 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'cc', - 'vars' => '', - 'line' => 97 - }, 'Parse::RecDescent::Rule' ), - 'bodyMD5' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'STRING' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 71 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 71 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 71 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'bodyMD5', - 'vars' => '', - 'line' => 71 - }, 'Parse::RecDescent::Rule' ), - 'envelope' => bless( { - 'impcount' => 0, - 'calls' => [ - 'envelopestruct' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 2, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '.*?\\(.*?ENVELOPE', - 'hashname' => '__PATTERN1__', - 'description' => '/.*?\\\\(.*?ENVELOPE/', - 'lookahead' => 0, - 'rdelim' => '/', - 'line' => 187, - 'mod' => '', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'subrule' => 'envelopestruct', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 187 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'pattern' => '.*\\)', - 'hashname' => '__PATTERN2__', - 'description' => '/.*\\\\)/', - 'lookahead' => 0, - 'rdelim' => '/', - 'line' => 187, - 'mod' => '', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 188, - 'code' => '{ $return = $item{envelopestruct} }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'envelope', - 'vars' => '', - 'line' => 187 - }, 'Parse::RecDescent::Rule' ), - 'MESSAGE' => bless( { - 'impcount' => 0, - 'calls' => [], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 1, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '^"MESSAGE"|^MESSAGE', - 'hashname' => '__PATTERN1__', - 'description' => '/^"MESSAGE"|^MESSAGE/i', - 'lookahead' => 0, - 'rdelim' => '/', - 'line' => 32, - 'mod' => 'i', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 32, - 'code' => '{ $return = "MESSAGE"}' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'MESSAGE', - 'vars' => '', - 'line' => 32 - }, 'Parse::RecDescent::Rule' ), - 'DOUBLE_QUOTED_STRING' => bless( { - 'impcount' => 0, - 'calls' => [], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 2, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 1, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '"', - 'hashname' => '__STRING1__', - 'description' => '\'"\'', - 'lookahead' => 0, - 'line' => 40 - }, 'Parse::RecDescent::Literal' ), - bless( { - 'pattern' => '(?:\\\\"|[^"])*', - 'hashname' => '__PATTERN1__', - 'description' => '/(?:\\\\\\\\"|[^"])*/', - 'lookahead' => 0, - 'rdelim' => '/', - 'line' => 40, - 'mod' => '', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'pattern' => '"', - 'hashname' => '__STRING2__', - 'description' => '\'"\'', - 'lookahead' => 0, - 'line' => 40 - }, 'Parse::RecDescent::Literal' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 40, - 'code' => '{ $return = $item{__PATTERN1__} }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'DOUBLE_QUOTED_STRING', - 'vars' => '', - 'line' => 40 - }, 'Parse::RecDescent::Rule' ), - 'subject' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'STRING' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 89 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 89 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 89 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'subject', - 'vars' => '', - 'line' => 89 - }, 'Parse::RecDescent::Rule' ), - 'value' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'NUMBER', - 'STRING', - 'KVPAIRS' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 56 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NUMBER', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 56 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 56 - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '2', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 56 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 56 - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '3', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'KVPAIRS', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 56 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 56 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'value', - 'vars' => '', - 'line' => 56 - }, 'Parse::RecDescent::Rule' ), - 'inreplyto' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'STRING' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 90 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 90 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 90 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'inreplyto', - 'vars' => '', - 'line' => 90 - }, 'Parse::RecDescent::Rule' ), - 'messageid' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'STRING' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 91 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 91 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 91 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'messageid', - 'vars' => '', - 'line' => 91 - }, 'Parse::RecDescent::Rule' ), - 'sender' => bless( { - 'impcount' => 0, - 'calls' => [ - 'ADDRESSES' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'ADDRESSES', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 101 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'sender', - 'vars' => '', - 'line' => 101 - }, 'Parse::RecDescent::Rule' ), - 'multipart' => bless( { - 'impcount' => 0, - 'calls' => [ - 'subpart', - 'bodysubtype', - 'bodyparms', - 'bodydisp', - 'bodylang', - 'bodyloc', - 'bodyextra' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 2, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'subrule' => 'subpart', - 'expected' => undef, - 'min' => 1, - 'argcode' => undef, - 'max' => 100000000, - 'matchrule' => 0, - 'repspec' => 's', - 'lookahead' => 0, - 'line' => 161 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'hashname' => '__DIRECTIVE1__', - 'name' => '', - 'lookahead' => 0, - 'line' => 161, - 'code' => '$commit = 1' - }, 'Parse::RecDescent::Directive' ), - bless( { - 'subrule' => 'bodysubtype', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 161 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'bodyparms', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 162 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodydisp', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 162 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodylang', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 162 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodyloc', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 162 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodyextra', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 162 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'hashname' => '__DIRECTIVE2__', - 'name' => '', - 'lookahead' => 0, - 'line' => 163, - 'code' => 'push @{$thisparser->{deferred}}, sub { $subpartCount = 0 };' - }, 'Parse::RecDescent::Directive' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 164, - 'code' => '{ $return = - { bodysubtype => $item{bodysubtype} - , bodytype => \'MULTIPART\' - , bodystructure => $item{\'subpart(s)\'} - }; - take_optional_items($return, \\%item - , qw/bodyparms bodydisp bodylang bodyloc bodyextra/); - 1; - }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'multipart', - 'vars' => '', - 'line' => 161 - }, 'Parse::RecDescent::Rule' ), - 'bodyenc' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'STRING', - 'KVPAIRS' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 70 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 70 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 70 - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '2', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'KVPAIRS', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 70 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 70 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'bodyenc', - 'vars' => '', - 'line' => 70 - }, 'Parse::RecDescent::Rule' ), - 'bodydesc' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'STRING' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 1, - 'actcount' => 0, - 'items' => [ - bless( { - 'pattern' => '[()]', - 'hashname' => '__PATTERN1__', - 'description' => '/[()]/', - 'lookahead' => -1, - 'rdelim' => '/', - 'line' => 68, - 'mod' => '', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 68 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 68 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 68 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'bodydesc', - 'vars' => '', - 'line' => 68 - }, 'Parse::RecDescent::Rule' ), - 'start' => bless( { - 'impcount' => 0, - 'calls' => [ - 'part' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 2, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '.*?\\(.*?BODYSTRUCTURE \\(', - 'hashname' => '__PATTERN1__', - 'description' => '/.*?\\\\(.*?BODYSTRUCTURE \\\\(/i', - 'lookahead' => 0, - 'rdelim' => '/', - 'line' => 184, - 'mod' => 'i', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'subrule' => 'part', - 'expected' => undef, - 'min' => 1, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '1', - 'lookahead' => 0, - 'line' => 184 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'pattern' => '\\).*\\)\\r?\\n?', - 'hashname' => '__PATTERN2__', - 'description' => '/\\\\).*\\\\)\\\\r?\\\\n?/', - 'lookahead' => 0, - 'rdelim' => '/', - 'line' => 184, - 'mod' => '', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 185, - 'code' => '{ $return = $item{\'part(1)\'}[0] }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'start', - 'vars' => '', - 'line' => 184 - }, 'Parse::RecDescent::Rule' ), - 'RFC822' => bless( { - 'impcount' => 0, - 'calls' => [], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 1, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '^"RFC822"|^RFC822', - 'hashname' => '__PATTERN1__', - 'description' => '/^"RFC822"|^RFC822/i', - 'lookahead' => 0, - 'rdelim' => '/', - 'line' => 33, - 'mod' => 'i', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 33, - 'code' => '{ $return = "RFC822" }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'RFC822', - 'vars' => '', - 'line' => 33 - }, 'Parse::RecDescent::Rule' ), - 'textmessage' => bless( { - 'impcount' => 0, - 'calls' => [ - 'TEXT', - 'basicfields', - 'textlines', - 'bodyMD5', - 'bodydisp', - 'bodylang', - 'bodyextra' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 1, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'subrule' => 'TEXT', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 121 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'hashname' => '__DIRECTIVE1__', - 'name' => '', - 'lookahead' => 0, - 'line' => 121, - 'code' => '$commit = 1' - }, 'Parse::RecDescent::Directive' ), - bless( { - 'subrule' => 'basicfields', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 121 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'textlines', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 121 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodyMD5', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 121 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodydisp', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 122 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodylang', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 122 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodyextra', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 122 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 123, - 'code' => '{ - $return = $item{basicfields} || {}; - $return->{bodytype} = \'TEXT\'; - take_optional_items($return, \\%item - , qw/textlines bodyMD5 bodydisp bodylang bodyextra/); - 1; - }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'textmessage', - 'vars' => '', - 'line' => 121 - }, 'Parse::RecDescent::Rule' ), - 'bodyid' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'STRING' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 1, - 'actcount' => 0, - 'items' => [ - bless( { - 'pattern' => '[()]', - 'hashname' => '__PATTERN1__', - 'description' => '/[()]/', - 'lookahead' => -1, - 'rdelim' => '/', - 'line' => 67, - 'mod' => '', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 67 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 67 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 67 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'bodyid', - 'vars' => '', - 'line' => 67 - }, 'Parse::RecDescent::Rule' ), - 'bodyextra' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'STRING', - 'STRINGS' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 73 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 73 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 73 - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '2', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRINGS', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 73 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 73 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'bodyextra', - 'vars' => '', - 'line' => 73 - }, 'Parse::RecDescent::Rule' ), - 'othertypemessage' => bless( { - 'impcount' => 0, - 'calls' => [ - 'bodytype', - 'basicfields', - 'bodyMD5', - 'bodydisp', - 'bodylang', - 'bodyextra' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'subrule' => 'bodytype', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 131 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'basicfields', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 131 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'bodyMD5', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 131 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodydisp', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 131 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodylang', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 132 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodyextra', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 132 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 133, - 'code' => '{ $return = { bodytype => $item{bodytype} }; - take_optional_items($return, \\%item - , qw/bodyMD5 bodydisp bodylang bodyextra/ ); - merge_hash($return, $item{basicfields}); - 1; - }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'othertypemessage', - 'vars' => '', - 'line' => 131 - }, 'Parse::RecDescent::Rule' ), - 'kvpair' => bless( { - 'impcount' => 0, - 'calls' => [ - 'key', - 'value' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 1, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => ')', - 'hashname' => '__STRING1__', - 'description' => '\')\'', - 'lookahead' => -1, - 'line' => 58 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'subrule' => 'key', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 58 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'value', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 58 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 59, - 'code' => '{ $return = { $item{key} => $item{value} } }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'kvpair', - 'vars' => '', - 'line' => 58 - }, 'Parse::RecDescent::Rule' ), - 'bodysize' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'NUMBER' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 1, - 'actcount' => 0, - 'items' => [ - bless( { - 'pattern' => '[()]', - 'hashname' => '__PATTERN1__', - 'description' => '/[()]/', - 'lookahead' => -1, - 'rdelim' => '/', - 'line' => 69, - 'mod' => '', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 69 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NUMBER', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 69 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 69 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'bodysize', - 'vars' => '', - 'line' => 69 - }, 'Parse::RecDescent::Rule' ), - 'STRING' => bless( { - 'impcount' => 0, - 'calls' => [ - 'DOUBLE_QUOTED_STRING', - 'SINGLE_QUOTED_STRING', - 'BARESTRING' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'DOUBLE_QUOTED_STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 45 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'SINGLE_QUOTED_STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 45 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 45 - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '2', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'BARESTRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 45 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 45 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'STRING', - 'vars' => '', - 'line' => 45 - }, 'Parse::RecDescent::Rule' ), - 'bodytype' => bless( { - 'impcount' => 0, - 'calls' => [ - 'STRING' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 64 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'bodytype', - 'vars' => '', - 'line' => 64 - }, 'Parse::RecDescent::Rule' ), - 'TEXT' => bless( { - 'impcount' => 0, - 'calls' => [], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 1, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '^"TEXT"|^TEXT', - 'hashname' => '__PATTERN1__', - 'description' => '/^"TEXT"|^TEXT/i', - 'lookahead' => 0, - 'rdelim' => '/', - 'line' => 29, - 'mod' => 'i', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 29, - 'code' => '{ $return = "TEXT" }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'TEXT', - 'vars' => '', - 'line' => 27 - }, 'Parse::RecDescent::Rule' ), - 'to' => bless( { - 'impcount' => 0, - 'calls' => [ - 'ADDRESSES' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'ADDRESSES', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 102 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'to', - 'vars' => '', - 'line' => 102 - }, 'Parse::RecDescent::Rule' ), - 'NIL' => bless( { - 'impcount' => 0, - 'calls' => [], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 1, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '^NIL', - 'hashname' => '__PATTERN1__', - 'description' => '/^NIL/i', - 'lookahead' => 0, - 'rdelim' => '/', - 'line' => 34, - 'mod' => 'i', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 34, - 'code' => '{ $return = "NIL" }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'NIL', - 'vars' => '', - 'line' => 34 - }, 'Parse::RecDescent::Rule' ), - 'KVPAIRS' => bless( { - 'impcount' => 0, - 'calls' => [ - 'kvpair' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 2, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '(', - 'hashname' => '__STRING1__', - 'description' => '\'(\'', - 'lookahead' => 0, - 'line' => 61 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'subrule' => 'kvpair', - 'expected' => undef, - 'min' => 1, - 'argcode' => undef, - 'max' => 100000000, - 'matchrule' => 0, - 'repspec' => 's', - 'lookahead' => 0, - 'line' => 61 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'pattern' => ')', - 'hashname' => '__STRING2__', - 'description' => '\')\'', - 'lookahead' => 0, - 'line' => 61 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 62, - 'code' => '{ $return = { map { (%$_) } @{$item{\'kvpair(s)\'}} } }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'KVPAIRS', - 'vars' => '', - 'line' => 61 - }, 'Parse::RecDescent::Rule' ), - 'from' => bless( { - 'impcount' => 0, - 'calls' => [ - 'ADDRESSES' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'ADDRESSES', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 99 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'from', - 'vars' => '', - 'line' => 99 - }, 'Parse::RecDescent::Rule' ), - 'bodystructure' => bless( { - 'impcount' => 0, - 'calls' => [ - 'part' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 2, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '(', - 'hashname' => '__STRING1__', - 'description' => '\'(\'', - 'lookahead' => 0, - 'line' => 181 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'subrule' => 'part', - 'expected' => undef, - 'min' => 1, - 'argcode' => undef, - 'max' => 100000000, - 'matchrule' => 0, - 'repspec' => 's', - 'lookahead' => 0, - 'line' => 181 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'pattern' => ')', - 'hashname' => '__STRING2__', - 'description' => '\')\'', - 'lookahead' => 0, - 'line' => 181 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 182, - 'code' => '{ $return = $item{\'part(s)\'} }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'bodystructure', - 'vars' => '', - 'line' => 181 - }, 'Parse::RecDescent::Rule' ), - 'PLAIN' => bless( { - 'impcount' => 0, - 'calls' => [], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 1, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '^"PLAIN"|^PLAIN', - 'hashname' => '__PATTERN1__', - 'description' => '/^"PLAIN"|^PLAIN/i', - 'lookahead' => 0, - 'rdelim' => '/', - 'line' => 30, - 'mod' => 'i', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 30, - 'code' => '{ $return = "PLAIN" }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'PLAIN', - 'vars' => '', - 'line' => 30 - }, 'Parse::RecDescent::Rule' ), - 'NUMBER' => bless( { - 'impcount' => 0, - 'calls' => [], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 1, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '^(\\d+)', - 'hashname' => '__PATTERN1__', - 'description' => '/^(\\\\d+)/', - 'lookahead' => 0, - 'rdelim' => '/', - 'line' => 35, - 'mod' => '', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 35, - 'code' => '{ $return = $item[1] }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'NUMBER', - 'vars' => '', - 'line' => 35 - }, 'Parse::RecDescent::Rule' ), - 'STRINGS' => bless( { - 'impcount' => 0, - 'calls' => [ - 'STRING' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 2, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '(', - 'hashname' => '__STRING1__', - 'description' => '\'(\'', - 'lookahead' => 0, - 'line' => 47 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'subrule' => 'STRING', - 'expected' => undef, - 'min' => 1, - 'argcode' => undef, - 'max' => 100000000, - 'matchrule' => 0, - 'repspec' => 's', - 'lookahead' => 0, - 'line' => 47 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'pattern' => ')', - 'hashname' => '__STRING2__', - 'description' => '\')\'', - 'lookahead' => 0, - 'line' => 47 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 47, - 'code' => '{ $return = $item{\'STRING(s)\'} }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'STRINGS', - 'vars' => '', - 'line' => 47 - }, 'Parse::RecDescent::Rule' ), - 'HTML' => bless( { - 'impcount' => 0, - 'calls' => [], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 1, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '"HTML"|HTML', - 'hashname' => '__PATTERN1__', - 'description' => '/"HTML"|HTML/i', - 'lookahead' => 0, - 'rdelim' => '/', - 'line' => 31, - 'mod' => 'i', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 31, - 'code' => '{ $return = "HTML" }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'HTML', - 'vars' => '', - 'line' => 31 - }, 'Parse::RecDescent::Rule' ), - 'bodydisp' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'KVPAIRS' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 66 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'KVPAIRS', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 66 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 66 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'bodydisp', - 'vars' => '', - 'line' => 66 - }, 'Parse::RecDescent::Rule' ), - 'part' => bless( { - 'impcount' => 0, - 'calls' => [ - 'multipart', - 'textmessage', - 'nestedmessage', - 'othertypemessage' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'subrule' => 'multipart', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 176 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 176, - 'code' => '{ $return = bless $item{multipart}, $mibs }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'subrule' => 'textmessage', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 177 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 177, - 'code' => '{ $return = bless $item{textmessage}, $mibs }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => 177 - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '2', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'subrule' => 'nestedmessage', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 178 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 178, - 'code' => '{ $return = bless $item{nestedmessage}, $mibs }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => 178 - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '3', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'subrule' => 'othertypemessage', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 179 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 179, - 'code' => '{ $return = bless $item{othertypemessage}, $mibs }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => 179 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'part', - 'vars' => '', - 'line' => 176 - }, 'Parse::RecDescent::Rule' ), - 'nestedmessage' => bless( { - 'impcount' => 0, - 'calls' => [ - 'rfc822message', - 'bodyparms', - 'bodyid', - 'bodydesc', - 'bodyenc', - 'bodysize', - 'envelopestruct', - 'bodystructure', - 'textlines', - 'bodyMD5', - 'bodydisp', - 'bodylang', - 'bodyextra' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 1, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'subrule' => 'rfc822message', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 140 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'hashname' => '__DIRECTIVE1__', - 'name' => '', - 'lookahead' => 0, - 'line' => 140, - 'code' => '$commit = 1' - }, 'Parse::RecDescent::Directive' ), - bless( { - 'subrule' => 'bodyparms', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 140 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'bodyid', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 140 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'bodydesc', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 140 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'bodyenc', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 140 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'bodysize', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 141 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'envelopestruct', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 142 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodystructure', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 142 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'textlines', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 142 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodyMD5', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 143 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodydisp', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 143 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodylang', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 143 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'subrule' => 'bodyextra', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 1, - 'matchrule' => 0, - 'repspec' => '?', - 'lookahead' => 0, - 'line' => 143 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 144, - 'code' => '{ - $return = {}; - $return->{$_} = $item{$_} - for qw/bodyparms bodyid bodydesc bodyenc bodysize/; -# envelopestruct bodystructure textlines/; - - take_optional_items($return, \\%item - , qw/envelopestruct bodystructure textlines/ - , qw/bodyMD5 bodydisp bodylang bodyextra/); - - merge_hash($return, $item{bodystructure}[0]); - merge_hash($return, $item{basicfields}); - $return->{bodytype} = "MESSAGE" ; - $return->{bodysubtype} = "RFC822" ; - 1; - }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'nestedmessage', - 'vars' => '', - 'line' => 140 - }, 'Parse::RecDescent::Rule' ), - 'SINGLE_QUOTED_STRING' => bless( { - 'impcount' => 0, - 'calls' => [], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 2, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 1, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '\'', - 'hashname' => '__STRING1__', - 'description' => '\'\'\'', - 'lookahead' => 0, - 'line' => 39 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'pattern' => '(?:\\\\\'|[^\'])*', - 'hashname' => '__PATTERN1__', - 'description' => '/(?:\\\\\\\\\'|[^\'])*/', - 'lookahead' => 0, - 'rdelim' => '/', - 'line' => 39, - 'mod' => '', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'pattern' => '\'', - 'hashname' => '__STRING2__', - 'description' => '\'\'\'', - 'lookahead' => 0, - 'line' => 39 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 39, - 'code' => '{ $return = $item{__PATTERN1__} }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'SINGLE_QUOTED_STRING', - 'vars' => '', - 'line' => 37 - }, 'Parse::RecDescent::Rule' ), - 'ADDRESSES' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'addressstruct' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 94 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 2, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '(', - 'hashname' => '__STRING1__', - 'description' => '\'(\'', - 'lookahead' => 0, - 'line' => 95 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'subrule' => 'addressstruct', - 'expected' => undef, - 'min' => 1, - 'argcode' => undef, - 'max' => 100000000, - 'matchrule' => 0, - 'repspec' => 's', - 'lookahead' => 0, - 'line' => 95 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'pattern' => ')', - 'hashname' => '__STRING2__', - 'description' => '\')\'', - 'lookahead' => 0, - 'line' => 95 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 95, - 'code' => '{ $return = $item{\'addressstruct(s)\'} }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => 95 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'ADDRESSES', - 'vars' => '', - 'line' => 94 - }, 'Parse::RecDescent::Rule' ), - 'bcc' => bless( { - 'impcount' => 0, - 'calls' => [ - 'ADDRESSES' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'ADDRESSES', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 98 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'bcc', - 'vars' => '', - 'line' => 98 - }, 'Parse::RecDescent::Rule' ), - 'rfc822message' => bless( { - 'impcount' => 0, - 'calls' => [ - 'MESSAGE', - 'RFC822' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'subrule' => 'MESSAGE', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 51 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'RFC822', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 51 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 51, - 'code' => '{ $return = "MESSAGE RFC822" }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'rfc822message', - 'vars' => '', - 'line' => 51 - }, 'Parse::RecDescent::Rule' ), - 'addressstruct' => bless( { - 'impcount' => 0, - 'calls' => [ - 'personalname', - 'sourceroute', - 'mailboxname', - 'hostname' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 2, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '(', - 'hashname' => '__STRING1__', - 'description' => '\'(\'', - 'lookahead' => 0, - 'line' => 81 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'subrule' => 'personalname', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 81 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'sourceroute', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 81 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'mailboxname', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 81 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'hostname', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 81 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'pattern' => ')', - 'hashname' => '__STRING2__', - 'description' => '\')\'', - 'lookahead' => 0, - 'line' => 81 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 82, - 'code' => '{ bless { personalname => $item{personalname} - , sourceroute => $item{sourceroute} - , mailboxname => $item{mailboxname} - , hostname => $item{hostname} - }, \'Mail::IMAPClient::BodyStructure::Address\'; - }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'addressstruct', - 'vars' => '', - 'line' => 81 - }, 'Parse::RecDescent::Rule' ), - 'sourceroute' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'STRING' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 77 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 77 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 77 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'sourceroute', - 'vars' => '', - 'line' => 77 - }, 'Parse::RecDescent::Rule' ), - 'subpart' => bless( { - 'impcount' => 0, - 'calls' => [ - 'part' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 2, - 'dircount' => 1, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '(', - 'hashname' => '__STRING1__', - 'description' => '\'(\'', - 'lookahead' => 0, - 'line' => 174 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'subrule' => 'part', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 174 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'pattern' => ')', - 'hashname' => '__STRING2__', - 'description' => '\')\'', - 'lookahead' => 0, - 'line' => 174 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 174, - 'code' => '{$return = $item{part}}' - }, 'Parse::RecDescent::Action' ), - bless( { - 'hashname' => '__DIRECTIVE1__', - 'name' => '', - 'lookahead' => 0, - 'line' => 174, - 'code' => 'push @{$thisparser->{deferred}}, sub { ++$subpartCount; };' - }, 'Parse::RecDescent::Directive' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'subpart', - 'vars' => '', - 'line' => 174 - }, 'Parse::RecDescent::Rule' ), - 'textlines' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'NUMBER' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 49 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NUMBER', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 49 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 49 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'textlines', - 'vars' => '', - 'line' => 49 - }, 'Parse::RecDescent::Rule' ), - 'BARESTRING' => bless( { - 'impcount' => 0, - 'calls' => [], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 2, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '^[)(\'"]', - 'hashname' => '__PATTERN1__', - 'description' => '/^[)(\'"]/', - 'lookahead' => -1, - 'rdelim' => '/', - 'line' => 42, - 'mod' => '', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'pattern' => '^(?!\\(|\\))(?:\\\\ |\\S)+', - 'hashname' => '__PATTERN2__', - 'description' => '/^(?!\\\\(|\\\\))(?:\\\\\\\\ |\\\\S)+/', - 'lookahead' => 0, - 'rdelim' => '/', - 'line' => 42, - 'mod' => '', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 43, - 'code' => '{ $return = $item{__PATTERN1__} }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'BARESTRING', - 'vars' => '', - 'line' => 42 - }, 'Parse::RecDescent::Rule' ), - 'bodyloc' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'STRING' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 74 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 74 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 74 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'bodyloc', - 'vars' => '', - 'line' => 74 - }, 'Parse::RecDescent::Rule' ), - 'bodylang' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'STRING', - 'STRINGS' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 72 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 72 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 72 - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '2', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRINGS', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 72 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 72 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'bodylang', - 'vars' => '', - 'line' => 72 - }, 'Parse::RecDescent::Rule' ), - 'envelopestruct' => bless( { - 'impcount' => 0, - 'calls' => [ - 'date', - 'subject', - 'from', - 'sender', - 'replyto', - 'to', - 'cc', - 'bcc', - 'inreplyto', - 'messageid' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 2, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '(', - 'hashname' => '__STRING1__', - 'description' => '\'(\'', - 'lookahead' => 0, - 'line' => 104 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'subrule' => 'date', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 104 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'subject', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 104 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'from', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 104 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'sender', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 104 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'replyto', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 104 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'to', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 104 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'cc', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 104 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'bcc', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 105 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'inreplyto', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 105 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'subrule' => 'messageid', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 105 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'pattern' => ')', - 'hashname' => '__STRING2__', - 'description' => '\')\'', - 'lookahead' => 0, - 'line' => 105 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 106, - 'code' => '{ $return = bless {}, "Mail::IMAPClient::BodyStructure::Envelope"; - $return->{$_} = $item{$_} - for qw/date subject from sender replyto to cc/ - , qw/bcc inreplyto messageid/; - 1; - }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'envelopestruct', - 'vars' => '', - 'line' => 104 - }, 'Parse::RecDescent::Rule' ), - 'replyto' => bless( { - 'impcount' => 0, - 'calls' => [ - 'ADDRESSES' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'ADDRESSES', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 100 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'replyto', - 'vars' => '', - 'line' => 100 - }, 'Parse::RecDescent::Rule' ), - 'mailboxname' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NIL', - 'STRING' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'NIL', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 78 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 0, - 'items' => [ - bless( { - 'subrule' => 'STRING', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 78 - }, 'Parse::RecDescent::Subrule' ) - ], - 'line' => 78 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'mailboxname', - 'vars' => '', - 'line' => 78 - }, 'Parse::RecDescent::Rule' ) - } - }, 'Parse::RecDescent' ); -} \ No newline at end of file diff --git a/Mail-IMAPClient-3.25/lib/Mail/IMAPClient/Thread.pm b/Mail-IMAPClient-3.25/lib/Mail/IMAPClient/Thread.pm deleted file mode 100644 index 67fa663..0000000 --- a/Mail-IMAPClient-3.25/lib/Mail/IMAPClient/Thread.pm +++ /dev/null @@ -1,1014 +0,0 @@ -package Mail::IMAPClient::Thread; -use Parse::RecDescent; - -{ my $ERRORS; - - -package Parse::RecDescent::Mail::IMAPClient::Thread; -use strict; -use vars qw($skip $AUTOLOAD ); -$skip = '\s*'; - - -{ -local $SIG{__WARN__} = sub {0}; -# PRETEND TO BE IN Parse::RecDescent NAMESPACE -*Parse::RecDescent::Mail::IMAPClient::Thread::AUTOLOAD = sub -{ - no strict 'refs'; - $AUTOLOAD =~ s/^Parse::RecDescent::Mail::IMAPClient::Thread/Parse::RecDescent/; - goto &{$AUTOLOAD}; -} -} - -push @Parse::RecDescent::Mail::IMAPClient::Thread::ISA, 'Parse::RecDescent'; -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::Thread::thread -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"thread"}; - - Parse::RecDescent::_trace(q{Trying rule: [thread]}, - Parse::RecDescent::_tracefirst($_[1]), - q{thread}, - $tracelevel) - if defined $::RD_TRACE; - - - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: ['(' threadmember ')']}, - Parse::RecDescent::_tracefirst($_[1]), - q{thread}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{thread}); - %item = (__RULE__ => q{thread}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: ['(']}, - Parse::RecDescent::_tracefirst($text), - q{thread}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING1__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [threadmember]}, - Parse::RecDescent::_tracefirst($text), - q{thread}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{threadmember})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::Thread::threadmember, 1, 100000000, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{thread}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [threadmember]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{thread}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{threadmember(s)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying terminal: [')']}, - Parse::RecDescent::_tracefirst($text), - q{thread}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{')'})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__STRING2__}=$_tok; - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{thread}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { - $return = $item{'threadmember(s)'}||undef; - }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: ['(' threadmember ')']<<}, - Parse::RecDescent::_tracefirst($text), - q{thread}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - - unless ( $_matched || defined($return) || defined($score) ) - { - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{thread}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{thread}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{thread}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{thread}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::Thread::NUMBER -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"NUMBER"}; - - Parse::RecDescent::_trace(q{Trying rule: [NUMBER]}, - Parse::RecDescent::_tracefirst($_[1]), - q{NUMBER}, - $tracelevel) - if defined $::RD_TRACE; - - - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [/\\d+/]}, - Parse::RecDescent::_tracefirst($_[1]), - q{NUMBER}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{NUMBER}); - %item = (__RULE__ => q{NUMBER}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: [/\\d+/]}, Parse::RecDescent::_tracefirst($text), - q{NUMBER}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:\d+)//) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN1__}=$&; - - - - Parse::RecDescent::_trace(q{>>Matched production: [/\\d+/]<<}, - Parse::RecDescent::_tracefirst($text), - q{NUMBER}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - - unless ( $_matched || defined($return) || defined($score) ) - { - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{NUMBER}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{NUMBER}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{NUMBER}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{NUMBER}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::Thread::start -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"start"}; - - Parse::RecDescent::_trace(q{Trying rule: [start]}, - Parse::RecDescent::_tracefirst($_[1]), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - - - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [/^\\* THREAD /i thread]}, - Parse::RecDescent::_tracefirst($_[1]), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{start}); - %item = (__RULE__ => q{start}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying terminal: [/^\\* THREAD /i]}, Parse::RecDescent::_tracefirst($text), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{})->at($text); - - - unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:^\* THREAD )//i) - { - - $expectation->failed(); - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{__PATTERN1__}=$&; - - - Parse::RecDescent::_trace(q{Trying repeated subrule: [thread]}, - Parse::RecDescent::_tracefirst($text), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(q{thread})->at($text); - - unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::Thread::thread, 0, 100000000, $_noactions,$expectation,undef))) - { - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [thread]<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{thread(s?)}} = $_tok; - push @item, $_tok; - - - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { - $return=$item{'thread(s?)'}||undef; -}; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [/^\\* THREAD /i thread]<<}, - Parse::RecDescent::_tracefirst($text), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - - unless ( $_matched || defined($return) || defined($score) ) - { - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{start}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{start}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{start}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{start}, - $tracelevel) - } - $_[1] = $text; - return $return; -} - -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub Parse::RecDescent::Mail::IMAPClient::Thread::threadmember -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"threadmember"}; - - Parse::RecDescent::_trace(q{Trying rule: [threadmember]}, - Parse::RecDescent::_tracefirst($_[1]), - q{threadmember}, - $tracelevel) - if defined $::RD_TRACE; - - - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [NUMBER]}, - Parse::RecDescent::_tracefirst($_[1]), - q{threadmember}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[0]; - $text = $_[1]; - my $_savetext; - @item = (q{threadmember}); - %item = (__RULE__ => q{threadmember}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [NUMBER]}, - Parse::RecDescent::_tracefirst($text), - q{threadmember}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::Thread::NUMBER($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{threadmember}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [NUMBER]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{threadmember}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{NUMBER}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{threadmember}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = $item{NUMBER} ; }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [NUMBER]<<}, - Parse::RecDescent::_tracefirst($text), - q{threadmember}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - - while (!$_matched && !$commit) - { - - Parse::RecDescent::_trace(q{Trying production: [thread]}, - Parse::RecDescent::_tracefirst($_[1]), - q{threadmember}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[1]; - $text = $_[1]; - my $_savetext; - @item = (q{threadmember}); - %item = (__RULE__ => q{threadmember}); - my $repcount = 0; - - - Parse::RecDescent::_trace(q{Trying subrule: [thread]}, - Parse::RecDescent::_tracefirst($text), - q{threadmember}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(q{})->at($text); - unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::Thread::thread($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) - { - - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($text), - q{threadmember}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [thread]<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{threadmember}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{thread}} = $_tok; - push @item, $_tok; - - } - - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{threadmember}, - $tracelevel) - if defined $::RD_TRACE; - - - $_tok = ($_noactions) ? 0 : do { $return = $item{thread} ; }; - unless (defined $_tok) - { - Parse::RecDescent::_trace(q{<> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - $item{__ACTION1__}=$_tok; - - - - Parse::RecDescent::_trace(q{>>Matched production: [thread]<<}, - Parse::RecDescent::_tracefirst($text), - q{threadmember}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - - - unless ( $_matched || defined($return) || defined($score) ) - { - - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<>}, - Parse::RecDescent::_tracefirst($_[1]), - q{threadmember}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{threadmember}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{threadmember}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{threadmember}, - $tracelevel) - } - $_[1] = $text; - return $return; -} -} -package Mail::IMAPClient::Thread; sub new { my $self = bless( { - '_AUTOTREE' => undef, - 'localvars' => '', - 'startcode' => '', - '_check' => { - 'thisoffset' => '', - 'itempos' => '', - 'prevoffset' => '', - 'prevline' => '', - 'prevcolumn' => '', - 'thiscolumn' => '' - }, - 'namespace' => 'Parse::RecDescent::Mail::IMAPClient::Thread', - '_AUTOACTION' => undef, - 'rules' => { - 'thread' => bless( { - 'impcount' => 0, - 'calls' => [ - 'threadmember' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 2, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '(', - 'hashname' => '__STRING1__', - 'description' => '\'(\'', - 'lookahead' => 0, - 'line' => 180 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'subrule' => 'threadmember', - 'expected' => undef, - 'min' => 1, - 'argcode' => undef, - 'max' => 100000000, - 'matchrule' => 0, - 'repspec' => 's', - 'lookahead' => 0, - 'line' => 180 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'pattern' => ')', - 'hashname' => '__STRING2__', - 'description' => '\')\'', - 'lookahead' => 0, - 'line' => 180 - }, 'Parse::RecDescent::InterpLit' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 181, - 'code' => '{ - $return = $item{\'threadmember(s)\'}||undef; - }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'thread', - 'vars' => '', - 'line' => 180 - }, 'Parse::RecDescent::Rule' ), - 'NUMBER' => bless( { - 'impcount' => 0, - 'calls' => [], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 1, - 'actcount' => 0, - 'items' => [ - bless( { - 'pattern' => '\\d+', - 'hashname' => '__PATTERN1__', - 'description' => '/\\\\d+/', - 'lookahead' => 0, - 'rdelim' => '/', - 'line' => 173, - 'mod' => '', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'NUMBER', - 'vars' => '', - 'line' => 171 - }, 'Parse::RecDescent::Rule' ), - 'start' => bless( { - 'impcount' => 0, - 'calls' => [ - 'thread' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 1, - 'actcount' => 1, - 'items' => [ - bless( { - 'pattern' => '^\\* THREAD ', - 'hashname' => '__PATTERN1__', - 'description' => '/^\\\\* THREAD /i', - 'lookahead' => 0, - 'rdelim' => '/', - 'line' => 186, - 'mod' => 'i', - 'ldelim' => '/' - }, 'Parse::RecDescent::Token' ), - bless( { - 'subrule' => 'thread', - 'expected' => undef, - 'min' => 0, - 'argcode' => undef, - 'max' => 100000000, - 'matchrule' => 0, - 'repspec' => 's?', - 'lookahead' => 0, - 'line' => 186 - }, 'Parse::RecDescent::Repetition' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 186, - 'code' => '{ - $return=$item{\'thread(s?)\'}||undef; -}' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'start', - 'vars' => '', - 'line' => 185 - }, 'Parse::RecDescent::Rule' ), - 'threadmember' => bless( { - 'impcount' => 0, - 'calls' => [ - 'NUMBER', - 'thread' - ], - 'changed' => 0, - 'opcount' => 0, - 'prods' => [ - bless( { - 'number' => '0', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'subrule' => 'NUMBER', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 177 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 177, - 'code' => '{ $return = $item{NUMBER} ; }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => undef - }, 'Parse::RecDescent::Production' ), - bless( { - 'number' => '1', - 'strcount' => 0, - 'dircount' => 0, - 'uncommit' => undef, - 'error' => undef, - 'patcount' => 0, - 'actcount' => 1, - 'items' => [ - bless( { - 'subrule' => 'thread', - 'matchrule' => 0, - 'implicit' => undef, - 'argcode' => undef, - 'lookahead' => 0, - 'line' => 178 - }, 'Parse::RecDescent::Subrule' ), - bless( { - 'hashname' => '__ACTION1__', - 'lookahead' => 0, - 'line' => 178, - 'code' => '{ $return = $item{thread} ; }' - }, 'Parse::RecDescent::Action' ) - ], - 'line' => 177 - }, 'Parse::RecDescent::Production' ) - ], - 'name' => 'threadmember', - 'vars' => '', - 'line' => 175 - }, 'Parse::RecDescent::Rule' ) - } - }, 'Parse::RecDescent' ); -} \ No newline at end of file diff --git a/Mail-IMAPClient-3.25/prepare_dist b/Mail-IMAPClient-3.25/prepare_dist deleted file mode 100755 index 7c48a65..0000000 --- a/Mail-IMAPClient-3.25/prepare_dist +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/perl - -use warnings; -use strict; - -use Parse::RecDescent 1.94; -use File::Copy qw/move/; - -sub read_file { - my $file = shift; - local( $/, *FH ); - open( FH, $file ) or return undef; - return ; -} - -build_parser 'lib/Mail/IMAPClient/BodyStructure/Parse.grammar' - , 'Mail::IMAPClient::BodyStructure::Parse'; - -build_parser 'lib/Mail/IMAPClient/Thread.grammar' - , 'Mail::IMAPClient::Thread'; - -sub build_parser { - my ($grammarfn, $package) = @_; - - print "* building $package\n"; - - my $grammar = read_file $grammarfn - or die "cannot read grammar from $grammarfn: $!\n"; - - Parse::RecDescent->Precompile($grammar, $package); - - # clumpsy output by Parse::RecDescent - my $outfn = $package . '.pm'; - $outfn =~ s/.*\:\://; - - my $realfn = $grammarfn; - $realfn =~ s/\.\w+$/.pm/; - - move $outfn, $realfn - or die "cannot move $outfn to $realfn: $!\n"; -} diff --git a/Mail-IMAPClient-3.25/sample.perldb b/Mail-IMAPClient-3.25/sample.perldb deleted file mode 100644 index 0c299ec..0000000 --- a/Mail-IMAPClient-3.25/sample.perldb +++ /dev/null @@ -1 +0,0 @@ -&parse_options("NonStop=1 LineInfo=mail_imapclient_db.out"); diff --git a/Mail-IMAPClient-3.25/Changes b/Mail-IMAPClient-3.27/Changes similarity index 96% rename from Mail-IMAPClient-3.25/Changes rename to Mail-IMAPClient-3.27/Changes index 3f57350..267d807 100644 --- a/Mail-IMAPClient-3.25/Changes +++ b/Mail-IMAPClient-3.27/Changes @@ -5,6 +5,74 @@ Changes from 2.99_01 to 3.16 made by Mark Overmeer Changes from 0.09 to 2.99_01 made by David Kernen - Potential compatibility issues from 3.17+ highlighted with '*' +version 3.27: Sun Feb 13 14:37:27 EST 2011 + - rt.cpan.org#65694: migrate fails + [Erik Colson] + - rt.cpan.org#65470: uninitialized warning in message_to_file + [Gilles Lamiral, Mark Hedges] + - rt.cpan.org#61835: (DOC) in LIST context undef may be returned + [Stefan Völkel] + + warn/highlight behavior in docs Errors section + - updated documentation + + migrate() documentation fixed + + moved Custom Authentication Mechanisms toward end + + recommended use of scalar context due to historical API behavior + +version 3.26: Mon Jan 31 22:15:04 EST 2011 + - *require Perl 5.8.1 as constant use is invalid on 5.6 + - rt.cpan.org#63524: fetch_hash() parse errors + [Brian Kroth] + + fixed handling of LITERAL values in response + + fixed handling of field names with a dash (e.g. X-SAVEDATE) + + fetch_hash now uses Escaped_results() method + - *fixed Escaped_results() to properly join LITERAL data with + the data that comes before and after it + - *rt.cpan.org#60945: append_file() does not interpret $date as expected + [Jason Long] + $date should now be 1 (to use the file mtime) or a valid RFC3501 date + - *rt.cpan.org#61292: memory consumption with message_string()/append() + rt.cpan.org#61806: Major problem with one function in IMAPClient + [Gilles Lamiral, Casey Duquette] + + use @_ / $_[] in critical places to avoid pass by + value memory overhead + + use in memory files in a few critical places as that code + path in Mail::IMAPClient is significantly more efficient + with internal memory usage + + *new (undocumented/do-not-use-without-good-reason) + attribute Maxappendstringlength used by append() and + append_string() holds the size (in bytes, default 1 MiB) + that triggers when message SCALAR(s) passed to these + methods will be treated as an in memory file. This + attribute will likely be removed in a future version. + + *append() and append_string() now call append_file() and + use an im memory file when length($message) is greater + than Maxappendstringlength; other minor code cleanup + + *message_string() now calls message_to_file() and uses an + in memory file + + refactor message_to_file() to use internal _imap_uid_command() + + update _read_line() to be more efficient w/CPU in critical + section by pulling isa() checks out of main loop also + conserve memory by not storing an extra copy of LITERAL + data if the data was put into a filehandle from the caller + + Memory/working set (KB) comparison (Perl 5.10 cygwin Win7): + - test: message_string on 6.1M msg and then append 6.1M msg + version | start | after message_string | after append + --------+-------+----------------------+------------- + 2.2.9 | 7624 | 74404 | 131896 + 3.25 | 7716 | 74408 | 156532 + 3.26 | 7684 | 33372 | 42608 + - minor arg cleanup of noop() and tag_and_run() + - rt.cpan.org#63444: relax get_envelope(), allow empty reply-to + [Nikolay Kravchenko] + - rt.cpan.org#61068: append_string can invalidate a good $date + - rt.cpan.org#60045: Logout error if delay between BYE and tagged OK + [Armin Wolfermann] + no longer set an error when this happens + - rt.cpan.org#61062: migrate() errors + [Johan Ekenberg] + + rewrote migrate() to be functional and simple + - Update README and cleanup several old or out of date files + version 3.25: Fri May 28 00:07:40 EDT 2010 - fix body_string parsing bug and added tests in t/body_string.t [Heiko Schlittermann] diff --git a/Mail-IMAPClient-3.25/MANIFEST b/Mail-IMAPClient-3.27/MANIFEST similarity index 96% rename from Mail-IMAPClient-3.25/MANIFEST rename to Mail-IMAPClient-3.27/MANIFEST index 073372d..7443b83 100644 --- a/Mail-IMAPClient-3.25/MANIFEST +++ b/Mail-IMAPClient-3.27/MANIFEST @@ -1,10 +1,7 @@ -COPYRIGHT Changes -INSTALL MANIFEST Makefile.PL README -TODO examples/build_dist.pl examples/build_ldif.pl examples/cleanTest.pl @@ -30,7 +27,6 @@ lib/Mail/IMAPClient/Thread.grammar lib/Mail/IMAPClient/Thread.pm lib/Mail/IMAPClient/Thread.pod prepare_dist -sample.perldb t/basic.t t/body_string.t t/bodystructure.t diff --git a/Mail-IMAPClient-3.25/META.yml b/Mail-IMAPClient-3.27/META.yml similarity index 93% rename from Mail-IMAPClient-3.25/META.yml rename to Mail-IMAPClient-3.27/META.yml index 05bd247..39692f1 100644 --- a/Mail-IMAPClient-3.25/META.yml +++ b/Mail-IMAPClient-3.27/META.yml @@ -1,6 +1,6 @@ --- #YAML:1.0 name: Mail-IMAPClient -version: 3.25 +version: 3.27 abstract: IMAP4 client library author: - Phil Pearl (Lobbes) @@ -22,6 +22,7 @@ requires: List::Util: 0 MIME::Base64: 0 Parse::RecDescent: 1.94 + perl: 5.008 Test::More: 0 no_index: directory: diff --git a/Mail-IMAPClient-3.25/Makefile.PL b/Mail-IMAPClient-3.27/Makefile.PL similarity index 93% rename from Mail-IMAPClient-3.25/Makefile.PL rename to Mail-IMAPClient-3.27/Makefile.PL index 51ae415..82ce861 100644 --- a/Mail-IMAPClient-3.25/Makefile.PL +++ b/Mail-IMAPClient-3.27/Makefile.PL @@ -2,6 +2,8 @@ use ExtUtils::MakeMaker; use warnings; use strict; +use 5.008_001; + my @missing; my %optional = ( "Authen::NTLM" => { for => "Authmechanism 'NTLM'" }, @@ -35,11 +37,12 @@ MSG } WriteMakefile( - NAME => 'Mail::IMAPClient', - , - ABSTRACT => 'IMAP4 client library', - VERSION_FROM => 'lib/Mail/IMAPClient.pm', - PREREQ_PM => { + NAME => 'Mail::IMAPClient', + AUTHOR => 'Phil Pearl (Lobbes) ', + ABSTRACT => 'IMAP4 client library', + VERSION_FROM => 'lib/Mail/IMAPClient.pm', + MIN_PERL_VERSION => '5.008', + PREREQ_PM => { 'Carp' => 0, 'Errno' => 0, 'Fcntl' => 0, @@ -54,10 +57,6 @@ WriteMakefile( 'File::Temp' => 0, }, clean => { FILES => 'test.txt' }, - $] >= 5.005 - ? ## keywords supported since 5.005 - ( AUTHOR => 'Phil Pearl (Lobbes) ' ) - : () ); set_test_data(); diff --git a/Mail-IMAPClient-3.27/README b/Mail-IMAPClient-3.27/README new file mode 100644 index 0000000..26a65fb --- /dev/null +++ b/Mail-IMAPClient-3.27/README @@ -0,0 +1,76 @@ +Mail::IMAPClient +================ +Mail::IMAPClient is a Perl module that provides an interface for +communicating with an IMAP server as an IMAP client. + +DEPENDENCIES +============ +The following are the minimum requirements for using Mail::IMAPClient: + +- Perl 5.8 + http://www.perl.org/ +- Perl modules from CPAN: + http://search.cpan.org/ + Required: + List::Util + MIME::Base64 + Parse::RecDescent + Optional: + Authen::NTLM + Authen::SASL + Digest::HMAC_MD5 + Digest::MD5 + IO::Socket::SSL +- RFC 3501 (IMAP4REV1) compatible IMAP server + http://www.faqs.org/rfcs/rfc3501.html +- Mail::IMAPClient (this package) + +INSTALLATION +============ +1. Download Mail::IMAPClient module + http://search.cpan.org/dist/Mail-IMAPClient/ + +2. Read this README + +3. This module has a number of dependencies on other Perl modules + available from CPAN. If any modules are missing, appropriate + warnings will be generated in the following step. + +4. Prepare to build this module and install any prerequisite modules: + + perl Makefile.PL + +5. Build, test and install this module: + + make + make test + (sudo) make install + +6. Read the documentation to become familiar with this module. + +Project Links +============= +- Bugs/tickets: + http://rt.cpan.org/Public/Dist/Display.html?Name=Mail-IMAPClient +- Source code repository (git): + http://sourceforge.net/p/mail-imapclient/git/ +- CPAN releases: + http://search.cpan.org/dist/Mail-IMAPClient/ +- Project website + http://mail-imapclient.sf.net/ + +COPYRIGHT AND LICENSE +===================== +Copyright (C) 1999-2003 The Kernen Group, Inc. +Copyright (C) 2007-2009 Mark Overmeer +Copyright (C) 2010-2011 Phil Pearl (Lobbes) +All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.0 or, +at your option, any later version of Perl 5 you may have available. + +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 either the +GNU General Public License or the Artistic License for more details. diff --git a/Mail-IMAPClient-3.25/examples/build_dist.pl b/Mail-IMAPClient-3.27/examples/build_dist.pl similarity index 96% rename from Mail-IMAPClient-3.25/examples/build_dist.pl rename to Mail-IMAPClient-3.27/examples/build_dist.pl index d51dc5f..7848194 100755 --- a/Mail-IMAPClient-3.25/examples/build_dist.pl +++ b/Mail-IMAPClient-3.27/examples/build_dist.pl @@ -1,5 +1,5 @@ #!/usr/local/bin/perl -#$Id: //depot/main/ZimbraPS/Mail-IMAPClient/examples/build_dist.pl#1 $ +#$Id$ use Mail::IMAPClient; @@ -132,7 +132,7 @@ All rights reserved. =cut -# $Id: //depot/main/ZimbraPS/Mail-IMAPClient/examples/build_dist.pl#1 $ +# $Id$ # $Log: build_dist.pl,v $ # Revision 19991216.7 2003/06/12 21:38:29 dkernen # diff --git a/Mail-IMAPClient-3.25/examples/build_ldif.pl b/Mail-IMAPClient-3.27/examples/build_ldif.pl similarity index 97% rename from Mail-IMAPClient-3.25/examples/build_ldif.pl rename to Mail-IMAPClient-3.27/examples/build_ldif.pl index aea17ec..72e8d8d 100755 --- a/Mail-IMAPClient-3.25/examples/build_ldif.pl +++ b/Mail-IMAPClient-3.27/examples/build_ldif.pl @@ -1,5 +1,5 @@ #!/usr/local/bin/perl -#$Id: //depot/main/ZimbraPS/Mail-IMAPClient/examples/build_ldif.pl#1 $ +#$Id$ use Mail::IMAPClient; use MIME::Lite; use Data::Dumper; @@ -180,7 +180,7 @@ All rights reserved. =cut -# $Id: //depot/main/ZimbraPS/Mail-IMAPClient/examples/build_ldif.pl#1 $ +# $Id$ # $Log: build_ldif.pl,v $ # Revision 19991216.11 2003/06/12 21:38:30 dkernen # diff --git a/Mail-IMAPClient-3.25/examples/cleanTest.pl b/Mail-IMAPClient-3.27/examples/cleanTest.pl similarity index 100% rename from Mail-IMAPClient-3.25/examples/cleanTest.pl rename to Mail-IMAPClient-3.27/examples/cleanTest.pl diff --git a/Mail-IMAPClient-3.25/examples/copy_folder.pl b/Mail-IMAPClient-3.27/examples/copy_folder.pl similarity index 98% rename from Mail-IMAPClient-3.25/examples/copy_folder.pl rename to Mail-IMAPClient-3.27/examples/copy_folder.pl index bfa9d2a..93193b2 100755 --- a/Mail-IMAPClient-3.25/examples/copy_folder.pl +++ b/Mail-IMAPClient-3.27/examples/copy_folder.pl @@ -1,5 +1,5 @@ #!/usr/local/bin/perl -#$Id: //depot/main/ZimbraPS/Mail-IMAPClient/examples/copy_folder.pl#1 $ +#$Id$ ++$|; use Getopt::Std; use Mail::IMAPClient; diff --git a/Mail-IMAPClient-3.25/examples/cyrus_expire.pl b/Mail-IMAPClient-3.27/examples/cyrus_expire.pl similarity index 100% rename from Mail-IMAPClient-3.25/examples/cyrus_expire.pl rename to Mail-IMAPClient-3.27/examples/cyrus_expire.pl diff --git a/Mail-IMAPClient-3.25/examples/cyrus_expunge.pl b/Mail-IMAPClient-3.27/examples/cyrus_expunge.pl similarity index 96% rename from Mail-IMAPClient-3.25/examples/cyrus_expunge.pl rename to Mail-IMAPClient-3.27/examples/cyrus_expunge.pl index 0016258..2921832 100755 --- a/Mail-IMAPClient-3.25/examples/cyrus_expunge.pl +++ b/Mail-IMAPClient-3.27/examples/cyrus_expunge.pl @@ -1,5 +1,5 @@ #!/usr/local/bin/perl -#$Id: //depot/main/ZimbraPS/Mail-IMAPClient/examples/cyrus_expunge.pl#1 $ +#$Id$ use Mail::IMAPClient; use IO::File; diff --git a/Mail-IMAPClient-3.25/examples/find_dup_msgs.pl b/Mail-IMAPClient-3.27/examples/find_dup_msgs.pl similarity index 98% rename from Mail-IMAPClient-3.25/examples/find_dup_msgs.pl rename to Mail-IMAPClient-3.27/examples/find_dup_msgs.pl index 1e4d8ea..21b41b8 100755 --- a/Mail-IMAPClient-3.25/examples/find_dup_msgs.pl +++ b/Mail-IMAPClient-3.27/examples/find_dup_msgs.pl @@ -1,5 +1,5 @@ #!/usr/local/bin/perl -# $Id: //depot/main/ZimbraPS/Mail-IMAPClient/examples/find_dup_msgs.pl#1 $ +# $Id$ use Mail::IMAPClient; use Mozilla::LDAP::Conn; diff --git a/Mail-IMAPClient-3.25/examples/idle.pl b/Mail-IMAPClient-3.27/examples/idle.pl similarity index 100% rename from Mail-IMAPClient-3.25/examples/idle.pl rename to Mail-IMAPClient-3.27/examples/idle.pl diff --git a/Mail-IMAPClient-3.25/examples/imap_to_mbox.pl b/Mail-IMAPClient-3.27/examples/imap_to_mbox.pl similarity index 98% rename from Mail-IMAPClient-3.25/examples/imap_to_mbox.pl rename to Mail-IMAPClient-3.27/examples/imap_to_mbox.pl index a617698..61acfe7 100755 --- a/Mail-IMAPClient-3.25/examples/imap_to_mbox.pl +++ b/Mail-IMAPClient-3.27/examples/imap_to_mbox.pl @@ -6,7 +6,7 @@ # DESC: Reads a users IMAP folders, and converts them to mbox # Good for an interim switch-over from say, Exchange to Cyrus IMAP. -# $Header: //depot/main/ZimbraPS/Mail-IMAPClient/examples/imap_to_mbox.pl#1 $ +# $Header$ # History: # -------- diff --git a/Mail-IMAPClient-3.25/examples/imtestExample.pl b/Mail-IMAPClient-3.27/examples/imtestExample.pl similarity index 100% rename from Mail-IMAPClient-3.25/examples/imtestExample.pl rename to Mail-IMAPClient-3.27/examples/imtestExample.pl diff --git a/Mail-IMAPClient-3.25/examples/migrate_mail2.pl b/Mail-IMAPClient-3.27/examples/migrate_mail2.pl similarity index 99% rename from Mail-IMAPClient-3.25/examples/migrate_mail2.pl rename to Mail-IMAPClient-3.27/examples/migrate_mail2.pl index d656ae5..df3b673 100755 --- a/Mail-IMAPClient-3.25/examples/migrate_mail2.pl +++ b/Mail-IMAPClient-3.27/examples/migrate_mail2.pl @@ -1,5 +1,5 @@ #!/usr/local/bin/perl -#$Id: //depot/main/ZimbraPS/Mail-IMAPClient/examples/migrate_mail2.pl#1 $ +#$Id$ # # An example of how to migrate from a Netscape server # (which uses a slash as a separator and which does diff --git a/Mail-IMAPClient-3.25/examples/migrate_mbox.pl b/Mail-IMAPClient-3.27/examples/migrate_mbox.pl similarity index 97% rename from Mail-IMAPClient-3.25/examples/migrate_mbox.pl rename to Mail-IMAPClient-3.27/examples/migrate_mbox.pl index 59b71bf..1b5129a 100755 --- a/Mail-IMAPClient-3.25/examples/migrate_mbox.pl +++ b/Mail-IMAPClient-3.27/examples/migrate_mbox.pl @@ -4,7 +4,7 @@ # Note that the migrate method is considered experimental and should # be used with caution. # -#$Id: //depot/main/ZimbraPS/Mail-IMAPClient/examples/migrate_mbox.pl#1 $ +#$Id$ # use Mail::IMAPClient; diff --git a/Mail-IMAPClient-3.25/examples/populate_mailbox.pl b/Mail-IMAPClient-3.27/examples/populate_mailbox.pl similarity index 98% rename from Mail-IMAPClient-3.25/examples/populate_mailbox.pl rename to Mail-IMAPClient-3.27/examples/populate_mailbox.pl index b612de2..0622c9f 100755 --- a/Mail-IMAPClient-3.25/examples/populate_mailbox.pl +++ b/Mail-IMAPClient-3.27/examples/populate_mailbox.pl @@ -1,5 +1,5 @@ #!/usr/local/bin/perl -#$Id: //depot/main/ZimbraPS/Mail-IMAPClient/examples/populate_mailbox.pl#1 $ # +#$Id$ # use Time::Local ; use FileHandle ; use File::Copy ; @@ -256,7 +256,7 @@ All rights reserved. =cut -# $Id: //depot/main/ZimbraPS/Mail-IMAPClient/examples/populate_mailbox.pl#1 $ +# $Id$ # $Log: populate_mailbox.pl,v $ # Revision 19991216.8 2003/06/12 21:38:34 dkernen # diff --git a/Mail-IMAPClient-3.25/examples/sharedFolder.pl b/Mail-IMAPClient-3.27/examples/sharedFolder.pl similarity index 96% rename from Mail-IMAPClient-3.25/examples/sharedFolder.pl rename to Mail-IMAPClient-3.27/examples/sharedFolder.pl index 96666cc..dca8e38 100755 --- a/Mail-IMAPClient-3.25/examples/sharedFolder.pl +++ b/Mail-IMAPClient-3.27/examples/sharedFolder.pl @@ -1,5 +1,5 @@ #!/usr/local/bin/perl -#$Id: //depot/main/ZimbraPS/Mail-IMAPClient/examples/sharedFolder.pl#1 $ +#$Id$ use Mail::IMAPClient; use Getopt::Std; diff --git a/Mail-IMAPClient-3.25/lib/Mail/IMAPClient.pm b/Mail-IMAPClient-3.27/lib/Mail/IMAPClient.pm similarity index 83% rename from Mail-IMAPClient-3.25/lib/Mail/IMAPClient.pm rename to Mail-IMAPClient-3.27/lib/Mail/IMAPClient.pm index 122fa82..b465dbe 100644 --- a/Mail-IMAPClient-3.25/lib/Mail/IMAPClient.pm +++ b/Mail-IMAPClient-3.27/lib/Mail/IMAPClient.pm @@ -1,17 +1,18 @@ # _{name} methods are undocumented and meant to be private. +require 5.008_001; + use strict; use warnings; package Mail::IMAPClient; -our $VERSION = '3.25'; +our $VERSION = '3.27'; use Mail::IMAPClient::MessageSet; use IO::Socket qw(:crlf SOL_SOCKET SO_KEEPALIVE); use IO::Select (); -use IO::File (); use Carp qw(carp); #local $SIG{__WARN__} = \&Carp::cluck; #DEBUG use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK); @@ -84,10 +85,10 @@ BEGIN { foreach my $datum ( qw(Authcallback Authmechanism Authuser Buffer Count Debug Debug_fh Domain Folder Ignoresizeerrors Keepalive - Maxcommandlength Maxtemperrors Password Peek Port - Prewritemethod Proxy Ranges Readmethod Reconnectretry - Server Showcredentials State Supportedflags Timeout Uid - User Ssl Starttls) + Maxappendstringlength Maxcommandlength Maxtemperrors + Password Peek Port Prewritemethod Proxy Ranges Readmethod + Reconnectretry Server Showcredentials Ssl Starttls State + Supportedflags Timeout Uid User) ) { no strict 'refs'; @@ -252,19 +253,20 @@ sub _remove_doubles(@) { sub new { my $class = shift; my $self = { - LastError => "", - Uid => 1, - Count => 0, - Fast_io => 1, - Clear => 5, - Keepalive => 0, - Maxcommandlength => 1000, - Maxtemperrors => undef, - State => Unconnected, - Authmechanism => 'LOGIN', - Port => 143, - Timeout => 600, - History => {}, + LastError => "", + Uid => 1, + Count => 0, + Fast_io => 1, + Clear => 2, + Keepalive => 0, + Maxappendstringlength => 1024**2, + Maxcommandlength => 1000, + Maxtemperrors => undef, + State => Unconnected, + Authmechanism => 'LOGIN', + Port => 143, + Timeout => 600, + History => {}, }; while (@_) { my $k = ucfirst lc shift; @@ -457,7 +459,7 @@ sub login { } sub noop { - my ( $self, $user ) = @_; + my ($self) = @_; $self->_imap_command("NOOP") ? $self->Results : undef; } @@ -728,10 +730,8 @@ sub message_string { my $peek = $self->Peek ? '.PEEK' : ''; my $cmd = $self->imap4rev1 ? "BODY$peek\[]" : "RFC822$peek"; - $self->fetch( $msg, $cmd ) - or return undef; - - my $string = $self->_transaction_literals; + my $string; + $self->message_to_file( \$string, $msg ); unless ( $self->Ignoresizeerrors ) { # Check size with expected size my $expected_size = $self->size($msg); @@ -773,47 +773,41 @@ sub bodypart_string { $self->_transaction_literals; } +# message_to_file( $self, $file, @msgs ) sub message_to_file { - my $self = shift; - my $fh = shift; - my $msgs = join ',', @_; + my ( $self, $file, @msgs ) = @_; - my $handle; - if ( ref $fh ) { $handle = $fh } + # $file can be a name or a scalar reference (for in memory file) + # avoid IO::File bug handling scalar refs in perl <= 5.8.8? + # - buggy: $fh = IO::File->new( $file, 'r' ) + my $fh; + if ( ref $file and ref $file ne "SCALAR" ) { + $fh = $file; + } else { - $handle = IO::File->new(">>$fh"); - unless ( defined($handle) ) { - $self->LastError("Unable to open $fh: $!"); + $$file = "" if ( ref $file eq "SCALAR" and !defined $$file ); + open( $fh, ">>", $file ); + unless ( defined($fh) ) { + $self->LastError("Unable to open file '$file': $!"); return undef; } - binmode $handle; # For those of you who need something like this... } - my $clear = $self->Clear; - $self->Clear($clear) - if $self->Count >= $clear && $clear > 0; + binmode($fh); - return undef unless defined $self->imap4rev1; - my $peek = $self->Peek ? '.PEEK' : ''; - my $cmd = $self->imap4rev1 ? "BODY$peek\[]" : "RFC822$peek"; - - my $uid = $self->Uid ? "UID " : ""; - my $trans = $self->Count( $self->Count + 1 ); - my $string = "$trans ${uid}FETCH $msgs $cmd"; - - $self->_record( $trans, [ 0, "INPUT", $string ] ); - - my $feedback = $self->_send_line($string); - unless ($feedback) { - $self->LastError( "Error sending '$string': " . $self->LastError ); + unless (@msgs) { + $self->LastError("message_to_file: NO messages specified!"); return undef; } - # look for " (OK|BAD|NO)" - my $code = $self->_get_response( { outref => $handle }, $trans ) - or return undef; + my $peek = $self->Peek ? '.PEEK' : ''; + $peek = sprintf( $self->imap4rev1 ? "BODY%s\[]" : "RFC822%s", $peek ); - return $code eq 'OK' ? $self : undef; + my @args = ( join( ",", @msgs ), $peek ); + + return $self->_imap_uid_command( { outref => $fh }, "FETCH" => @args ) + ? $self + : undef; } sub message_uid { @@ -826,305 +820,77 @@ sub message_uid { return undef; } -#???? this code is very clumsy, and currently probably broken. -# Why not use a pipe??? -# Is a quadratic slowdown not much simpler and better??? -# Shouldn't the slowdowns extend over multiple messages? -# --> create clean read and write methods - +# cleaned up and simplified but see TODO in code... sub migrate { my ( $self, $peer, $msgs, $folder ) = @_; - my $toSock = $peer->Socket, my $fromSock = $self->Socket; - my $bufferSize = $self->Buffer || 4096; - - local $SIG{PIPE} = 'IGNORE'; # avoid SIGPIPE on syswrite, handle as error unless ( $peer and $peer->IsConnected ) { - $self->LastError( "Invalid or unconnected peer " + $self->LastError( ( $peer ? "Invalid" : "Unconnected" ) + . " target " . ref($self) - . " object used as target for migrate. $@" ); + . " object in migrate()" + . ( $peer ? ( ": " . $peer->LastError ) : "" ) ); return undef; } - unless ($folder) { - unless ( $folder = $self->Folder ) { - $self->LastError("No folder selected on source mailbox."); - return undef; - } - - unless ( $peer->exists($folder) || $peer->create($folder) ) { - $self->LastError( "Unable to create folder '$folder' on target " - . "mailbox: " - . $peer->LastError ); - return undef; - } + # sanity check to see if $self is same object as $peer + if ( $self eq $peer ) { + $self->LastError("dest must not be the same object as self"); + return undef; } - defined $msgs or $msgs = "ALL"; - $msgs = $self->search("ALL") - if uc $msgs eq 'ALL'; - return undef unless defined $msgs; + $folder = $self->Folder unless ( defined $folder ); + unless ($folder) { + $self->LastError("No folder selected on source mailbox."); + return undef; + } - my $range = $self->Range($msgs); - my $clear = $self->Clear; + unless ( $peer->exists($folder) or $peer->create($folder) ) { + $self->LastError( "Create folder '$folder' on target host failed: " + . $peer->LastError ); + return undef; + } + + if ( !defined $msgs or uc($msgs) eq "ALL" ) { + $msgs = $self->search("ALL") or return undef; + } + + # message size and (internal) date + my @headers = qw(RFC822.SIZE INTERNALDATE FLAGS); + my $range = $self->Range($msgs); + + $self->_debug("Messages to migrate from '$folder': $range"); - $self->_debug("Migrating the following msgs from $folder: $range"); - MSG: foreach my $mid ( $range->unfold ) { - $self->_debug("Migrating message $mid in folder $folder"); - my $leftSoFar = my $size = $self->size($mid); - return undef unless defined $size; + # fetch size internaldate and flags of original message + # - TODO: add flags here... + my $minfo = $self->fetch_hash( $mid, @headers ) + or return undef; - # fetch internaldate and flags of original message: - my $intDate = $self->internaldate($mid); - return undef unless defined $intDate; + my ( $size, $date ) = @{ $minfo->{$mid} }{@headers}; + return undef unless ( defined $size and defined $date ); + + $self->_debug("Copy message $mid (sz=$size,dt=$date) from '$folder'"); my @flags = grep !/\\Recent/i, $self->flags($mid); my $flags = join ' ', $peer->supported_flags(@flags); - # set up transaction numbers for from and to connections: - my $trans = $self->Count( $self->Count + 1 ); - my $ptrans = $peer->Count( $peer->Count + 1 ); + # TODO: - use File::Temp tempfile if $msg > bufferSize? + # read message to $msg + my $msg; + $self->message_to_file( \$msg, $mid ) + or return undef; - # If msg size is less than buffersize then do whole msg in one - # transaction: - if ( $size <= $bufferSize ) { - my $new_mid = - $peer->append_string( $folder, $self->message_string($mid), - $flags, $intDate ); + my $newid = $peer->append_file( $folder, \$msg, undef, $flags, $date ); - unless ( defined $new_mid ) { - $self->LastError( "Unable to append to $folder " - . "on target mailbox. " - . $peer->LastError ); - return undef; - } - - $self->_debug( "Copied message $mid in folder $folder to " - . $peer->User . '@' - . $peer->Server - . ". New message UID is $new_mid" ) - if $self->Debug; - - $peer->_debug( "Copied message $mid in folder $folder from " - . $self->User . '@' - . $self->Server - . ". New message UID is $new_mid" ) - if $peer->Debug; - - next MSG; - } - - # otherwise break it up into digestible pieces: - return undef unless defined $self->imap4rev1; - my ( $cmd, $extract_size ); - if ( $self->imap4rev1 ) { - $cmd = $self->Peek ? 'BODY.PEEK[]' : 'BODY[]'; - $extract_size = sub { $_[0] =~ /\(.*BODY\[\]<\d+> \{(\d+)\}/i; $1 }; - } - else { - $cmd = $self->Peek ? 'RFC822.PEEK' : 'RFC822'; - $extract_size = sub { $_[0] =~ /\(RFC822\[\]<\d+> \{(\d+)\}/i; $1 }; - } - - # Now let's warn the peer that there's a message coming: - my $pstring = - "$ptrans APPEND " - . $self->Massage($folder) - . ( length $flags ? " ($flags)" : '' ) - . qq( "$intDate" {$size}); - - $self->_debug("About to issue APPEND command to peer for msg $mid"); - - $peer->_record( $ptrans, [ 0, "INPUT", $pstring ] ); - unless ( $peer->_send_line($pstring) ) { - $self->LastError( "Error sending '$pstring': " . $self->LastError ); + unless ( defined $newid ) { + $self->LastError( + "Append to '$folder' on target failed: " . $peer->LastError ); return undef; } - # Get the "+ Go ahead" response: - my $code; - until ( defined $code ) { - my $readSoFar = 0; - my $fromBuffer = ''; - $readSoFar += sysread( $toSock, $fromBuffer, 1, $readSoFar ) || 0 - until $fromBuffer =~ /$CRLF/o; - - $code = - $fromBuffer =~ /^\+/ ? 'OK' - : $fromBuffer =~ /^\d+\s+(BAD|NO|OK)\b/ ? $1 - : undef; - - $peer->_debug("$folder: received $fromBuffer from server"); - - if ( $fromBuffer =~ /^(\*\s+BYE.*?)$CR?$LF/oi ) { - $self->State(Unconnected); - $self->LastError($1); - return undef; - } - - # ... and log it in the history buffers - $self->_record( - $trans, - [ - 0, - "OUTPUT", -"Mail::IMAPClient migrating message $mid to $peer->User\@$peer->Server" - ] - ); - $peer->_record( $ptrans, [ 0, "OUTPUT", $fromBuffer ] ); - } - - if ( $code ne 'OK' ) { - $self->_debug("Error writing to target host: $@"); - next MIGMSG; - } - - # Here is where we start sticking in UID if that parameter - # is turned on: - my $string = ( $self->Uid ? "UID " : "" ) . "FETCH $mid $cmd"; - - # Clean up history buffer if necessary: - $self->Clear($clear) - if $self->Count >= $clear && $clear > 0; - - # position will tell us how far from beginning of msg the - # next IMAP FETCH should start (1st time start at offset zero): - my $position = 0; - my $chunkCount = 0; - my $readSoFar = 0; - while ( $leftSoFar > 0 ) { - my $take = min $leftSoFar, $bufferSize; - my $newstring = "$trans $string<$position.$take>"; - - $self->_record( $trans, [ 0, "INPUT", $newstring ] ); - $self->_debug("Issuing migration command: $newstring"); - - unless ( $self->_send_line($newstring) ) { - $self->LastError( "Error sending '$newstring' to source IMAP: " - . $self->LastError ); - return undef; - } - - my $chunk; - my $fromBuffer = ""; - until ( $chunk = $extract_size->($fromBuffer) ) { - $fromBuffer = ''; - sysread( $fromSock, $fromBuffer, 1, length $fromBuffer ) - until $fromBuffer =~ /$CRLF$/o; - - $self->_record( $trans, [ 0, "OUTPUT", $fromBuffer ] ); - - if ( $fromBuffer =~ /^$trans\s+(?:NO|BAD)/ ) { - $self->LastError($fromBuffer); - next MIGMSG; - } - elsif ( $fromBuffer =~ /^$trans\s+OK/ ) { - $self->LastError( "Unexpected good return code " - . "from source host: $fromBuffer" ); - next MIGMSG; - } - } - - $fromBuffer = ""; - while ( $readSoFar < $chunk ) { - $readSoFar += - sysread( $fromSock, $fromBuffer, $chunk - $readSoFar, - $readSoFar ) - || 0; - } - - my $wroteSoFar = 0; - my $temperrs = 0; - my $waittime = .02; - my $maxwrite = 0; - my $maxagain = $self->Maxtemperrors; - undef $maxagain if $maxagain and lc($maxagain) eq 'unlimited'; - my @previous_writes; - - while ( $wroteSoFar < $chunk ) { - while ( $wroteSoFar < $readSoFar ) { - my $ret = - syswrite( $toSock, $fromBuffer, $chunk - $wroteSoFar, - $wroteSoFar ); - - if ( defined $ret ) { - $wroteSoFar += $ret; - $maxwrite = max $maxwrite, $ret; - $temperrs = 0; - } - - if ( $! == EPIPE or $! == ECONNRESET ) { - $self->State(Unconnected); - $self->LastError("Write failed '$!'"); - return undef; - } - - if ( $! == EAGAIN || $ret == 0 ) { - if ( defined $maxagain && $temperrs++ > $maxagain ) { - $self->LastError("Persistent error '$!'"); - return undef; - } - - $waittime = $self->_optimal_sleep( $maxwrite, $waittime, - \@previous_writes ); - next; - } - - $self->State(Unconnected) - if ( $! == EPIPE or $! == ECONNRESET ); - $self->LastError("Write failed '$!'"); - return; # no luck - } - - $peer->_debug( - "Chunk $chunkCount: wrote $wroteSoFar (of $chunk)"); - } - } - - $position += $readSoFar; - $leftSoFar -= $readSoFar; - my $fromBuffer = ""; - - # Finish up reading the server fetch response from the source system: - # look for " (OK|BAD|NO)" - $self->_debug("Reading from source: expecting 'OK' response"); - $code = $self->_get_response($trans) or return undef; - return undef unless $code eq 'OK'; - - # Now let's send a CRLF to the peer to signal end of APPEND cmd: - unless ( $peer->_send_bytes( \$CRLF ) ) { - $self->LastError( "Error appending CRLF: " . $self->LastError ); - return undef; - } - - # Finally, let's get the new message's UID from the peer: - # look for " (OK|BAD|NO)" - $peer->_debug("Reading from target: expect new uid in response"); - $code = $peer->_get_response($ptrans) or return undef; - - my $new_mid = "unknown"; - if ( $code eq 'OK' ) { - my $data = join '', $self->Results; - - # look for something like return size or self if no size found: - # OK [APPENDUID ] APPEND completed - my $ret = $data =~ m#\s+(\d+)\]# ? $1 : undef; - $new_mid = $ret; - } - - if ( $self->Debug ) { - $self->_debug( "Copied message $mid in folder $folder to " - . $peer->User . '@' - . $peer->Server - . ". New Message UID is $new_mid" ); - - $peer->_debug( "Copied message $mid in folder $folder from " - . $self->User . '@' - . $self->Server - . ". New Message UID is $new_mid" ); - } + $self->_debug("Copied UID $mid in '$folder' to target UID $newid"); } return $self; @@ -1195,7 +961,7 @@ sub body_string { until ( $popped && $popped =~ /^\)$CRLF$/o ) || !grep /^\)$CRLF$/o, @$ref; - if ( $head =~ /BODY\[TEXT\]\s*$/i ) { # Next line is a literal + if ( $head =~ /BODY\[TEXT\]\s*$/i ) { # Next line is a literal $string .= shift @$ref while @$ref; $self->_debug("String is now $string") if $self->Debug; @@ -1273,9 +1039,10 @@ sub done { return $self->Results; } +# tag_and_run( $self, $string, $good ) sub tag_and_run { - my ( $self, $string, $good ) = @_; - $self->_imap_command( $string, $good ) or return undef; + my $self = shift; + $self->_imap_command(@_) or return undef; return $self->Results; } @@ -1365,12 +1132,15 @@ sub _imap_command { # addcrlf => 0|1 - suppress adding CRLF to $string # addtag => 0|1 - suppress adding $tag to $string # tag => $tag - use this $tag instead of incrementing $self->Count +# outref => ... - see _get_response() sub _imap_command_do { my $self = shift; my $opt = ref( $_[0] ) eq "HASH" ? shift : {}; my $string = shift or return undef; my $good = shift; + my @gropt = ( $opt->{outref} ? { outref => $opt->{outref} } : () ); + $opt->{addcrlf} = 1 unless exists $opt->{addcrlf}; $opt->{addtag} = 1 unless exists $opt->{addtag}; @@ -1403,7 +1173,7 @@ sub _imap_command_do { } # look for " (OK|BAD|NO|$good)" (or "+..." if $good is '+') - my $code = $self->_get_response( $tag, $good ) or return undef; + my $code = $self->_get_response( @gropt, $tag, $good ) or return undef; if ( $code eq 'OK' ) { return $self; @@ -1428,7 +1198,9 @@ sub _get_response { # tag can be a ref (compiled regex) or we quote it or default to \S+ my $qtag = ref($tag) ? $tag : defined($tag) ? quotemeta($tag) : qr/\S+/; my $qgood = ref($good) ? $good : defined($good) ? quotemeta($good) : undef; - my @readopt = defined( $opt->{outref} ) ? ( $opt->{outref} ) : (); + + my $outref = $opt->{outref}; + my @readopt = defined($outref) ? ($outref) : (); my ( $count, $out, $code, $byemsg ) = ( $self->Count, [], undef, undef ); until ( defined($code) ) { @@ -1467,10 +1239,15 @@ sub _get_response { $code =~ s/$CR?$LF?$//o; $code = uc($code) unless ( $good and $code eq $good ); - # on successful LOGOUT $code is OK (not BYE!) see RFC 3501 sect 7.1.5 + # RFC 3501 7.1.5: $code on successful LOGOUT is OK not BYE + # sometimes we may fail to wait long enough to read a tagged + # OK so don't be strict about setting an error on LOGOUT! if ( $code eq 'BYE' ) { $self->State(Unconnected); - $self->LastError($byemsg) if $byemsg; + if ($byemsg) { + $self->LastError($byemsg) + unless ( $good and $code eq $good ); + } } } elsif ( !$self->LastError ) { @@ -1482,10 +1259,13 @@ sub _get_response { } sub _imap_uid_command { - my ( $self, $cmd ) = ( shift, shift ); + my $self = shift; + my @opt = ref( $_[0] ) eq "HASH" ? (shift) : (); + my $cmd = shift; + my $args = @_ ? join( " ", '', @_ ) : ''; my $uid = $self->Uid ? 'UID ' : ''; - $self->_imap_command("$uid$cmd$args"); + $self->_imap_command( @opt, "$uid$cmd$args" ); } sub run { @@ -1519,7 +1299,7 @@ sub _record { # _send_line handles literal data and supports the Prewritemethod sub _send_line { - my ( $self, $string, $suppress ) = ( shift, shift, shift ); + my ( $self, $string, $suppress ) = @_; $string =~ s/$CR?$LF?$/$CRLF/o unless $suppress; @@ -1595,22 +1375,21 @@ sub _send_bytes($) { } # _read_line: read one line from the socket - -# It is also re-implemented in: message_to_file # -# $output = $self->_read_line($literal_callback, $output_callback) -# Both input arguments are optional, but if supplied must either +# $output = $self->_read_line($literal_callback) +# literal_callback is optional, but if supplied it must be either # be a filehandle, coderef, or undef. # -# Returned argument is a reference to an array of arrays, ie: +# Returns a reference to an array of arrays, i.e.: # $output = [ -# [ $index, 'OUTPUT'|'LITERAL', $output_line ] , -# [ $index, 'OUTPUT'|'LITERAL', $output_line ] , -# ... # etc, -# ]; +# [ $index, 'OUTPUT|LITERAL', $output_line ], +# [ $index, 'OUTPUT|LITERAL', $output_line ], +# ... +# \]; +# BUG?: make memory more efficient sub _read_line { - my ( $self, $literal_callback, $output_callback ) = @_; + my ( $self, $literal_callback ) = @_; my $socket = $self->Socket; unless ( $self->IsConnected && $socket ) { @@ -1622,7 +1401,23 @@ sub _read_line { my $oBuffer = []; my $index = $self->_next_index; my $timeout = $self->Timeout; - my $readlen = $self->{Buffer} || 4096; + my $readlen = $self->Buffer || 4096; + my $transno = $self->Transaction; + + my $literal_cbtype = ""; + if ($literal_callback) { + if ( UNIVERSAL::isa( $literal_callback, "GLOB" ) ) { + $literal_cbtype = "GLOB"; + } + elsif ( UNIVERSAL::isa( $literal_callback, "CODE" ) ) { + $literal_cbtype = "CODE"; + } + else { + $self->LastError( "'$literal_callback' is an " + . "invalid callback; must be a filehandle or CODE" ); + return undef; + } + } my $temperrs = 0; my $maxagain = $self->Maxtemperrors; @@ -1636,7 +1431,6 @@ sub _read_line { && !length $iBuffer # and the input buffer has been MT'ed: ) { - my $transno = $self->Transaction; if ($timeout) { my $rc = $self->_read_more( $socket, $timeout ); @@ -1717,11 +1511,12 @@ sub _read_line { $litstring = $iBuffer; $iBuffer = ''; + my $litreadb = length($litstring); my $temperrs = 0; my $maxagain = $self->Maxtemperrors; undef $maxagain if $maxagain and lc($maxagain) eq 'unlimited'; - while ( $expected_size > length $litstring ) { + while ( $expected_size > $litreadb ) { if ($timeout) { my $rc = $self->_read_more( $socket, $timeout ); return undef unless ( $rc > 0 ); @@ -1730,11 +1525,11 @@ sub _read_line { CORE::select( undef, undef, undef, 0.025 ); } - my $ret = $self->_sysread( - $socket, \$litstring, - $expected_size - length $litstring, - length $litstring - ); + # $litstring is emptied when $literal_cbtype is GLOB + my $ret = + $self->_sysread( $socket, \$litstring, + $expected_size - $litreadb, + length($litstring) ); if ($timeout) { if ( defined $ret ) { @@ -1760,15 +1555,23 @@ sub _read_line { } # EOF: note IO::Socket::SSL does not support eof() - if ( defined $ret && $ret == 0 ) { + if ( defined $ret and $ret == 0 ) { $emsg = "socket closed while reading data from server"; $self->State(Unconnected); } + elsif ( defined $ret and $ret > 0 ) { + $litreadb += $ret; + + # conserve memory when using literal_callback GLOB + if ( $literal_cbtype eq "GLOB" ) { + print $literal_callback $litstring; + $litstring = "" unless ($emsg); + } + } $self->_debug( "Received ret=" - . ( defined($ret) ? "$ret " : " " ) - . length($litstring) - . " of $expected_size" ); + . ( defined($ret) ? $ret : "" ) + . " $litreadb of $expected_size" ); # save errors and return if ($emsg) { @@ -1790,29 +1593,27 @@ sub _read_line { } } - if ( !$literal_callback ) { ; } - elsif ( UNIVERSAL::isa( $literal_callback, 'GLOB' ) ) { - print $literal_callback $litstring; - $litstring = ""; - } - elsif ( UNIVERSAL::isa( $literal_callback, 'CODE' ) ) { - $literal_callback->($litstring) - if defined $litstring; - } - else { - $self->LastError( "'$literal_callback' is an " - . "invalid callback; must be a filehandle or CODE" ); + if ( defined $litstring ) { + if ( $literal_cbtype eq "GLOB" ) { + print $literal_callback $litstring; + } + elsif ( $literal_cbtype eq "CODE" ) { + $literal_callback->($litstring); + } } - push @$oBuffer, [ $index++, 'LITERAL', $litstring ]; + push @$oBuffer, [ $index++, 'LITERAL', $litstring ] + if ( $literal_cbtype ne "GLOB" ); } } - $self->_debug( "Read: " . join "", map { "\t" . $_->[DATA] } @$oBuffer ); + $self->_debug( "Read: " . join "", map { "\t" . $_->[DATA] } @$oBuffer ) + if ( $self->Debug ); + @$oBuffer ? $oBuffer : undef; } -sub _sysread($$$$) { +sub _sysread { my ( $self, $fh, $buf, $len, $off ) = @_; my $rm = $self->Readmethod; $rm ? $rm->(@_) : sysread( $fh, $$buf, $len, $off ); @@ -1892,7 +1693,6 @@ sub Results(;$) { return wantarray ? @a : \@a; } -# Don't know what it does, but used a few times. sub _transaction_literals() { my $self = shift; join '', map { $_->[DATA] } @@ -1902,15 +1702,27 @@ sub _transaction_literals() { sub Escaped_results { my ( $self, $trans ) = @_; my @a; - foreach my $line ( grep defined, $self->Results($trans) ) { + my $prevwasliteral = 0; + foreach my $line ( grep defined, $self->_transaction($trans) ) { + my $data = $line->[DATA]; + + # literal is appended to previous data if ( $self->_is_literal($line) ) { - $line->[DATA] =~ s/([\\\(\)"$CRLF])/\\$1/og; - push @a, qq("$line->[DATA]"); + $data =~ s/([\\\(\)"$CRLF])/\\$1/og; + $a[-1] .= qq( "$data"); + $prevwasliteral = 1; + } + else { + if ($prevwasliteral) { + $a[-1] .= $data; + } + else { + push( @a, $data ); + } + $prevwasliteral = 0; } - else { push @a, $line->[DATA] } } - shift @a; # remove cmd return wantarray ? @a : \@a; } @@ -1922,7 +1734,7 @@ sub Unescape { sub logout { my $self = shift; - my $rc = $self->_imap_command("LOGOUT"); + my $rc = $self->_imap_command( "LOGOUT", "BYE" ); $self->_disconnect; return $rc; } @@ -2085,9 +1897,12 @@ sub get_envelope { $bs; } -# fetch( [$seq_set|ALL], @msg_data_items ) +# fetch( [{option},] [$seq_set|ALL], @msg_data_items ) +# options: +# escaped => 0|1 # return Results or Escaped_results sub fetch { my $self = shift; + my $opt = ref( $_[0] ) eq "HASH" ? shift : {}; my $what = shift || "ALL"; my $take = $what; @@ -2106,7 +1921,7 @@ sub fetch { my $seq = $seq_set->[$x]; $self->_imap_uid_command( FETCH => $seq, @fetch_att, @_ ) or return undef; - my $res = $self->Results; + my $res = $opt->{escaped} ? $self->Escaped_results : $self->Results; # only keep last command and last response (* OK ...) $cmd = shift(@$res); @@ -2157,6 +1972,7 @@ sub _split_sequence { } # fetch_hash( [$seq_set|ALL], @msg_data_items, [\%msg_by_ids] ) +# - TODO: make more efficient use of memory on large fetch results sub fetch_hash { my $self = shift; my $uids = ref $_[-1] ? pop @_ : {}; @@ -2185,15 +2001,16 @@ s/([\( ])FULL([\) ])/${1}FLAGS INTERNALDATE RFC822\.SIZE ENVELOPE BODY$2/i; } my %words = map { uc($_) => 1 } @words; - my $output = $self->fetch( $msgs, "($what)" ) or return undef; + my $output = $self->fetch( { escaped => 1 }, $msgs, "($what)" ) + or return undef; while ( my $l = shift @$output ) { next if $l !~ m/^\*\s(\d+)\sFETCH\s\(/g; my ( $mid, $entry ) = ( $1, {} ); my ( $key, $value ); ATTR: - while ( $l !~ m/\G\s*\)\s*$/gc ) { - if ( $l =~ m/\G\s*([\w\d\.]+(?:\[[^\]]*\])?)\s*/gc ) { + while ( $l and $l !~ m/\G\s*\)\s*$/gc ) { + if ( $l =~ m/\G\s*([^\s\[]+(?:\[[^\]]*\])?)\s*/gc ) { $key = uc($1); } elsif ( !defined $key ) { @@ -2202,7 +2019,6 @@ s/([\( ])FULL([\) ])/${1}FLAGS INTERNALDATE RFC822\.SIZE ENVELOPE BODY$2/i; $self->LastError("Invalid item name in FETCH response: $l"); return undef; } - if ( $l =~ m/\G\s*$/gc ) { $value = shift @$output; $entry->{$key} = $value; @@ -2235,7 +2051,7 @@ s/([\( ])FULL([\) ])/${1}FLAGS INTERNALDATE RFC822\.SIZE ENVELOPE BODY$2/i; $value .= $stuff; } } - m/\G\s*/gc; + $l =~ m/\G\s*/gc; } else { $self->LastError("Invalid item value in FETCH response: $l"); @@ -2887,43 +2703,69 @@ sub selectable { defined $info ? not( grep /NoSelect/i, @$info ) : undef; } +# append( $self, $folder, $text [, $optmsg] ) +# - conserve memory and use $_[0] to avoid copying $text (it may be huge!) +# - BUG?: should deprecate this method in favor of append_string sub append { my $self = shift; my $folder = shift; - my $text = @_ > 1 ? join( $CRLF, @_ ) : shift; - $self->append_string( $folder, $text ); + # $message_string is whatever is left in @_ + $self->append_string( $folder, ( @_ > 1 ? join( $CRLF, @_ ) : $_[0] ) ); } +sub _clean_flags { + my ( $self, $flags ) = @_; + $flags =~ s/^\s+//; + $flags =~ s/\s+$//; + $flags = "($flags)" if $flags !~ /^\(.*\)$/; + return $flags; +} + +# RFC 3501: date-day-fixed = (SP DIGIT) / 2DIGIT +sub _clean_date { + my ( $self, $date ) = @_; + $date =~ s/^\s+// if $date !~ /^\s\d/; + $date =~ s/\s+$//; + $date = qq("$date") if $date !~ /^"/; + return $date; +} + +sub _append_command { + my ( $self, $folder, $flags, $date, $length ) = @_; + return join( " ", + "APPEND $folder", + ( $flags ? $flags : () ), + ( $date ? $date : () ), + "{" . $length . "}", + ); +} + +# append_string( $self, $folder, $text, $flags, $date ) +# - conserve memory and use $_[2] to avoid copying $text (it may be huge!) sub append_string($$$;$$) { - my $self = shift; - my $folder = $self->Massage(shift); - my ( $text, $flags, $date ) = @_; - defined $text or $text = ''; + my ( $self, $folder, $flags, $date ) = @_[ 0, 1, 3, 4 ]; - if ( defined $flags ) { - $flags =~ s/^\s+//g; - $flags =~ s/\s+$//g; - $flags = "($flags)" if $flags !~ /^\(.*\)$/; + #my $text = $_[2]; # conserve memory and use $_[2] instead! + my $maxl = $self->Maxappendstringlength; + + # on "large" strings use append_file to conserve memory + if ( $_[2] and $maxl and length( $_[2] ) > $maxl ) { + $self->_debug("append_string: using in memory file"); + return $self->append_file( $folder, \( $_[2] ), undef, $flags, $date ); } - if ( defined $date ) { - $date =~ s/^\s+//g; - $date =~ s/\s+$//g; - $date = qq("$date") if $date !~ /^"/; - } + my $text = defined( $_[2] ) ? $_[2] : ''; + $folder = $self->Massage($folder); + $flags = $self->_clean_flags($flags) if ( defined $flags ); + $date = $self->_clean_date($date) if ( defined $date ); $text =~ s/\r?\n/$CRLF/og; - my $command = - "APPEND $folder " - . ( $flags ? "$flags " : "" ) - . ( $date ? "$date " : "" ) . "{" - . length($text) - . "}$CRLF"; + my $cmd = $self->_append_command( $folder, $flags, $date, length($text) ); + $cmd .= $CRLF . $text . $CRLF; - $command .= $text . $CRLF; - $self->_imap_command( { addcrlf => 0 }, $command ) or return undef; + $self->_imap_command( { addcrlf => 0 }, $cmd ) or return undef; my $data = join '', $self->Results; @@ -2934,12 +2776,10 @@ sub append_string($$$;$$) { return $ret; } +# BUG?: not much/any savings on cygwin perl 5.10 when using in memory file +# BUG?: we do not retry if sending data fails after getting the OK to send sub append_file { - my ( $self, $folder, $file, $control, $flags, $use_filetime ) = @_; - my $mfolder = $self->Massage($folder); - - $flags ||= ''; - my $fflags = $flags =~ m/^\(.*\)$/ ? $flags : "($flags)"; + my ( $self, $folder, $file, $control, $flags, $date ) = @_; my @err; push( @err, "folder not specified" ) @@ -2949,14 +2789,18 @@ sub append_file { if ( !defined($file) ) { push( @err, "file not specified" ); } - elsif ( ref($file) ) { + elsif ( ref($file) and ref($file) ne "SCALAR" ) { $fh = $file; # let the caller pass in their own file handle directly } - elsif ( !-f $file ) { + elsif ( !ref($file) and !-f $file ) { push( @err, "file '$file' not found" ); } else { - $fh = IO::File->new( $file, 'r' ) + + # $file can be a name or a scalar reference (for in memory file) + # avoid IO::File bug handling scalar refs in perl <= 5.8.8? + # - buggy: $fh = IO::File->new( $file, 'r' ) + open( $fh, "<", $file ) or push( @err, "Unable to open file '$file': $!" ); } @@ -2967,10 +2811,13 @@ sub append_file { binmode($fh); - my $date; - if ( $fh and $use_filetime ) { - my $f = $self->Rfc2060_datetime( ( stat($fh) )[9] ); - $date = qq("$f"); + $folder = $self->Massage($folder) if ( defined $folder ); + $flags = $self->_clean_flags($flags) if ( defined $flags ); + + # allow the date to be specified or even use mtime on file + if ($date) { + $date = $self->Rfc3501_datetime( ( stat($fh) )[9] ) if ( $date eq "1" ); + $date = $self->_clean_date($date); } # BUG? seems wasteful to do this always, provide a "fast path" option? @@ -2984,19 +2831,13 @@ sub append_file { seek( $fh, 0, 0 ); } - my $string = "APPEND $mfolder"; - $string .= " $fflags" if ( $fflags ne "" ); - $string .= " $date" if ( defined($date) ); - $string .= " {$length}"; - - my $rc = $self->_imap_command( $string, '+' ); + my $cmd = $self->_append_command( $folder, $flags, $date, $length ); + my $rc = $self->_imap_command( $cmd, '+' ); unless ($rc) { - $self->LastError( "Error sending '$string': " . $self->LastError ); + $self->LastError( "Error sending '$cmd': " . $self->LastError ); return undef; } - my $count = $self->Count; - # Now send the message itself my ( $buffer, $buflen ) = ( "", 0 ); until ( !$buflen and eof($fh) ) { @@ -3023,14 +2864,6 @@ sub append_file { # reduce buffer to desired size $buffer = substr( $buffer, 0, APPEND_BUFFER_SIZE ); - $self->_record( - $count, - [ - $self->_next_index($count), "INPUT", - '{' . length($buffer) . " bytes from $file}" - ] - ); - my $bytes_written = $self->_send_bytes( \$buffer ); unless ($bytes_written) { $self->LastError( "Error appending message: " . $self->LastError ); @@ -3050,7 +2883,7 @@ sub append_file { # Now for the crucial test: Did the append work or not? # look for " (OK|BAD|NO)" - my $code = $self->_get_response($count) or return undef; + my $code = $self->_get_response( $self->Count ) or return undef; if ( $code eq 'OK' ) { my $data = join '', $self->Results; diff --git a/Mail-IMAPClient-3.25/lib/Mail/IMAPClient.pod b/Mail-IMAPClient-3.27/lib/Mail/IMAPClient.pod similarity index 95% rename from Mail-IMAPClient-3.25/lib/Mail/IMAPClient.pod rename to Mail-IMAPClient-3.27/lib/Mail/IMAPClient.pod index 1e6feef..f03cc89 100644 --- a/Mail-IMAPClient-3.25/lib/Mail/IMAPClient.pod +++ b/Mail-IMAPClient-3.27/lib/Mail/IMAPClient.pod @@ -103,153 +103,6 @@ L. =back -=head2 Custom Authentication Mechanisms - -There are also a number of methods and parameters that you can use to -build your own authentication mechanism. All of the methods and -parameters discussed in this section are described in more detail -elsewhere in this document. This section provides a starting point -for building your own authentication mechanism. - -First of all, if you just want to do plain text authentication and -your server is okay with that idea then you don't even need to read -this section. - -Second of all, the intent of this section is to help you implement the -authentication mechanism of your choice, but you will have to -understand how that mechanism works. There are I of -authentication mechanisms, if your preferred mechanism is not -currently supported but you manage to get it working please consider -donating them to this module. Patches and suggestions are always -welcome. - -Support for add-on authentication mechanisms in Mail::IMAPClient is -pretty straight forward. You create a callback to be used to provide -the response to the server's challenge. The L parameter -contains a reference to the callback, which can be an anonymous -subroutine or a named subroutine. Then, you identify your -authentication mechanism, either via the L parameter or -as an argument to L. - -You may also need to provide a subroutine to encrypt (or whatever) -data before it is sent to the server. The L parameter -must contain a reference to this subroutine. And, you will need to -decrypt data from the server; a reference to the subroutine that does -this must be stored in the L parameter. - -This framework is based on the assumptions that a) the mechanism you -are using requires a challenge-response exchange, and b) the mechanism -does not fundamentally alter the exchange between client and server -but merely wraps the exchange in a layer of encryption. It also -assumes that the line-oriented nature of the IMAP conversation is -preserved; authentication mechanisms that break up messages into -blocks of a predetermined size may still be possible but will -certainly be more difficult to implement. - -Alternatively, if you have access to B, a utility included in -the Cyrus IMAP distribution, you can use that utility to broker your -communications with the IMAP server. This is quite easy to implement. -An example, F, can be found in the -C subdirectory of the source distribution. - -The following list summarizes the methods and parameters that you may -find useful in implementing advanced authentication: - -=over 4 - -=item The authenticate method - -The L method uses the L parameter to -determine how to authenticate with the server see the method -documentation for details. - -=item Socket and RawSocket - -The L and L methods provide access to the socket -connection. The socket is typically automatically created by the -L method, but if you are implementing an advanced -authentication technique you may choose to set up your own socket -connection and then set this parameter manually, bypassing the -B method completely. This is also useful if you want to use -L alternatives like L and need full -control. - -L simply gets/sets the socket without attempting any -interaction on it. In this case, you have to be sure to handle all -the preliminary operations and manually set the Mail::IMAPClient -object in sync with its actual status with respect to this socket (see -below for additional parameters regarding this, especially the -L parameter). - -Unlike L, L attempts to carry on preliminary -connection phases if the conditions apply. If both parameters are -present, this takes the precedence over L. If -L is set, then the L method will be called by -L. - -B As of version 2.99_04 of this module, semantics for -L have changed to make it more "DWIM". L was -introduced as a replacement for the L parameter in older -version. - -=item State, Server, User, Password, Proxy and Domain Parameters - -If you need to make your own connection to the server and perform your -authentication manually, then you can set these parameters to keep -your Mail::IMAPClient object in sync with its actual status. Of -these, only the L parameter is always necessary. The others -need to be set only if you think your program will need them later. - -=item Authmechanism - -Set this to the value that AUTHENTICATE should send to the server as -the authentication mechanism. If you are brokering your own -authentication then this parameter may be less useful. It exists -primarily so that you can set it when you call L to instantiate -your object. The L method will call L, which will -call L. If L sees that you have set an -B then it will call B, using your -B and B parameters as arguments. - -=item Authcallback - -The L, if set, holds a pointer to a subroutine -(CODEREF). The L method will use this as the callback -argument to the B method if the B and -B parameters are both set. If you set B -but not B then the default callback for your mechanism -will be used. All supported authentication mechanisms have a default -callback; in every other case not supplying the callback results in an -error. - -Most advanced authentication mechanisms require a challenge-response -exchange. After the L method sends " AUTHENTICATE -\015\012" to the IMAP server, the server replies with a -challenge. The L method then invokes the code whose -reference is stored in the B parameter as follows: - - $Authcallback->($challenge, $imap) - -where C<$Authcallback> is the code reference stored in the -B parameter, C<$challenge> is the challenge received -from the IMAP server, and C<$imap> is a pointer to the -Mail::IMAPClient object. The return value from the B -routine should be the response to the challenge, and that return value -will be sent by the L method to the server. - -=item Prewritemethod/Readmethod - -The B can hold a subroutine that will do whatever -encryption is necessary and then return the result to the caller so it -in turn can be sent to the server. - -The B can hold a subroutine to be used to replace -B usually performed by Mail::IMAPClient. - -See L and L for details. - -=back - =head2 Errors If you attempt an operation that results in an error, then you can @@ -276,6 +129,11 @@ L. Any of these methods could fail and cause the L method call to return C and leaving the variable C<$@> is set to an error message. +WARNING: (due to historical API behavior) on errors, many methods may +return undef regardless of LIST/SCALAR context. Therefore, it may be +wise to use most methods in a scalar context. Regardless, check +L for details on errors. + =head2 Transactions RFC3501 requires that each line in an IMAP conversation be prefixed @@ -549,46 +407,134 @@ error-prone and stalled the progress of this module. Example: - my $uid = $imap->append( $folder, $msg_text ) + my $uid_or_true = $imap->append( $folder, $msgtext ) or die "Could not append: ", $imap->LastError; -The B method adds a message to the specified folder. It takes -two arguments, the name of the folder to append the message to, and -the text of the message (including headers). Additional arguments are -added to the message text, separated with . +WARNING: This method may be deprecated in the future, consider using +L instead of this method. -On success, the B method returns the UID of the new message -(if the server has the UIDPLUS capability) or a true value otherwise. -On error, C is returned and L will be set. +The B method adds a message to the specified folder. See +L for details as it is effectively an alias for that +method. + +DEPRECATED BEHAVIOR: Additional arguments are added to the message +text, separated with . + +=head2 append_string + +Example: + + # brackets indicate optional arguments (not array refs): + my $uidort = $imap->append_string( $folder, $msgtext [,$flags [,$date ] ] ) + or die "Could not append_string: ", $imap->LastError; + +Arguments: + +=over 4 + +=item $folder + +the name of the folder to append the message to + +=item $msgtext + +the message text (including headers) of the message + +=item $flags + +An optional list of flags to set. The list must be specified as +a space-separated list of flags, including any backslashes that may be +necessary and optionally enclosed by parenthesis. + +=item $date + +An optional RFC3501 date argument to set as the internal date. It +should be in the format described for I fields in RFC3501, +i.e. "dd-Mon-yyyy hh:mm:ss +0000". + +If you want to specify a date/time but you don't want any flags then +specify I as the third ($flags) argument. + +=back + +Returns: + +=over 4 + +=item error: undef + +On error, undef can be returned regardless of LIST/SCALAR context. +Check L for details. + +=item success: UID or $imap + +With UIDPLUS the UID of the new message is returned otherwise a true +value (currently $self) is returned. + +=back To protect against "bare newlines", B will insert a carriage return before any newline that is "bare". -Note that B does not allow you to specify the internal date or -initial flags of an appended message. If you need this capability -then use L, below. - =head2 append_file Example: my $new_msg_uid = $imap->append_file( $folder, - $filename, - [ undef, flags, date ] # optional + $file, + [ undef, $flags, $date ] # optional ) or die "Could not append_file: ", $imap->LastError; -The B method adds a message to the specified folder. It -takes two arguments, the name of the folder to append the message to, -and the file name of an RFC822-formatted message. - +The B method adds a message to the specified folder. Note: The brackets in the example indicate optional arguments; they do not mean that the argument should be an array reference. -On success, the B method returns the UID of the new -message (if the server has the UIDPLUS capability) or a true value -otherwise. On error, C is returned and L will be -set. +Arguments: + +=over 4 + +=item $folder + +the name of the folder to append the message to + +=item $file + +a filename, filehandle or SCALAR reference which holds an +RFC822-formatted message + +=item undef + +a deprecated argument used as a place holder for backwards +compatibility + +=item $flags + +The optional argument is handled the same as append_string. + +=item $date + +The optional argument is handled the same as append_string (RFC3501 +date), with the exception that if $date is "1" (one) then the +modification time (mtime) of the file will be used. + +=back + +Returns: + +=over 4 + +=item error: undef + +On error, undef can be returned regardless of LIST/SCALAR context. +Check L for details. + +=item success: UID or $imap + +With UIDPLUS the UID of the new message is returned otherwise a true +value (currently $self) is returned. + +=back To protect against "bare newlines", B will insert a carriage return before any newline that is "bare". @@ -600,41 +546,6 @@ Version note: In 2.x an optional third argument to use for C was allowed, however this argument is ignored/not supported as of 3.x. -=head2 append_string - -Example: - - # brackets indicate optional arguments (not array refs): - my $uid = $imap->append_string( $folder, $text [ ,$flags [ ,$date ] ] ) - or die "Could not append_string: $@\n"; - -The B method adds a message to the specified folder. -It requires two arguments, the name of the folder to append the -message to, and the text of the message (including headers). The -message text must be included in a single string (unlike L, -above). - -You can optionally specify a third and fourth argument to -B. The third argument, if supplied, is the list of -flags to set for the appended message. The list must be specified as -a space-separated list of flags, including any backslashes that may be -necessary. The enclosing parentheses that are required by RFC3501 are -optional for B. The fourth argument, if specified, is -the date to set as the internal date. It should be in the format -described for I fields in RFC3501, i.e. "dd-Mon-yyyy -hh:mm:ss +0000". - -If you want to specify a date/time but you don't want any flags then -specify I as the third argument. - -On success, the B method returns the UID of the new -message (if the server has the UIDPLUS capability) or a true value -otherwise. On error, C is returned and L will be -set. - -To protect against "bare newlines", B will insert a -carriage return before any newline that is "bare". - =head2 authenticate Example: @@ -1154,7 +1065,7 @@ function in later releases. This method is new with version 2.2.3 and is thus still experimental. If you decide to try this method and run into problems, please see the -section on L. +section on L. =head2 flags @@ -1734,10 +1645,10 @@ C<$imap-EL("ALL")>. Example: - $imap->migrate($imap_2, "ALL", $targetFolder ) - or die "Could not migrate: $@\n"; + $imap_src->migrate( $imap_dest, "ALL", $targetFolder ) + or die "Could not migrate: ", $imap_src->LastError; -The B method copies the indicated messages B the +The B method copies the indicated message(s) B the currently selected folder B another Mail::IMAPClient object's session. It requires these arguments: @@ -1759,40 +1670,22 @@ C("ALL")>. =item 3. -the folder name of a folder on the target mailbox to receive the -message(s). If this argument is not supplied or if I is -supplied then a folder with the same name as the currently selected -folder on the calling object will be created if necessary and used. -If you specify something other then I for this argument, even -if it's '$imap1-EFolder' or the name of the currently selected -folder, then that folder will only be used if it exists on the target -object's mailbox; if it does not exist then B will fail. +the name of the destination folder on the target mailbox to receive +the message(s). If this argument is not supplied or is I then +the currently selected folder on the calling object will be used. The +destination folder will be automatically created if necessary. =back -The target Mail::IMAPClient object should not be the same as the -source. The source object is the calling object, i.e. the one whose -B method will be used. It cannot be the same object as the -one specified as the target, even if you are for some reason migrating -between folders on the same account (which would be silly anyway, -since L can do that much more efficiently). If you try to use -the same Mail::IMAPClient object for both the caller and the receiver -then they'll both get all screwed up and it will be your fault because -I just warned you and you didn't listen. +The target ($imap_dest) Mail::IMAPClient object must not be the same +object as the source ($imap_src). -B will download messages from the source in chunks to -minimize memory usage. The size of the chunks can be controlled by -changing the source Mail::IMAPClient object's the L -parameter. The higher the L value, the faster the migration, -but the more memory your program will require. TANSTAAFL. (See the -L parameter and eponymous accessor method, described above -under the L section.) +This method does not attempt to minimize memory usage. In the future +it could be enhanced to (optionaly) write message data to a temporary +file to avoid storing the entire message in memory. -The B method uses Black Magic to hardwire the I/O between the -two Mail::IMAPClient objects in order to minimize resource -consumption. If you have older scripts that used L -and L to move large messages between IMAP mailboxes then -you may want to try this method as a possible replacement. +To work around potential network timeouts on large messages, consider +setting L to 1 on both $imap_src and $imap_dest. See also C. @@ -3678,24 +3571,167 @@ I IMAP client command.) The B method returns the tag value (or transaction number) of the last IMAP client command. +=head1 Custom Authentication Mechanisms + +If you just want to use plain text authentication or any of the +supported L then there is no +need to read this section. + +There are a number of methods and parameters that you can use to build +your own authentication mechanism. All of the methods and parameters +discussed in this section are described in more detail elsewhere in +this document. This section provides a starting point for building +your own authentication mechanism. + +There are I authentication mechanisms out there, if your +preferred mechanism is not currently supported but you manage to get +it working please consider donating them to this module. Patches and +suggestions are always welcome. + +Support for add-on authentication mechanisms in Mail::IMAPClient is +pretty straight forward. You create a callback to be used to provide +the response to the server's challenge. The L parameter +contains a reference to the callback, which can be an anonymous +subroutine or a named subroutine. Then, you identify your +authentication mechanism, either via the L parameter or +as an argument to L. + +You may also need to provide a subroutine to encrypt (or whatever) +data before it is sent to the server. The L parameter +must contain a reference to this subroutine. And, you will need to +decrypt data from the server; a reference to the subroutine that does +this must be stored in the L parameter. + +This framework is based on the assumptions that a) the mechanism you +are using requires a challenge-response exchange, and b) the mechanism +does not fundamentally alter the exchange between client and server +but merely wraps the exchange in a layer of encryption. It also +assumes that the line-oriented nature of the IMAP conversation is +preserved; authentication mechanisms that break up messages into +blocks of a predetermined size may still be possible but will +certainly be more difficult to implement. + +Alternatively, if you have access to B, a utility included in +the Cyrus IMAP distribution, you can use that utility to broker your +communications with the IMAP server. This is quite easy to implement. +An example, F, can be found in the +C subdirectory of the source distribution. + +The following list summarizes the methods and parameters that you may +find useful in implementing advanced authentication: + +=over 4 + +=item The authenticate method + +The L method uses the L parameter to +determine how to authenticate with the server see the method +documentation for details. + +=item Socket and RawSocket + +The L and L methods provide access to the socket +connection. The socket is typically automatically created by the +L method, but if you are implementing an advanced +authentication technique you may choose to set up your own socket +connection and then set this parameter manually, bypassing the +B method completely. This is also useful if you want to use +L alternatives like L and need full +control. + +L simply gets/sets the socket without attempting any +interaction on it. In this case, you have to be sure to handle all +the preliminary operations and manually set the Mail::IMAPClient +object in sync with its actual status with respect to this socket (see +below for additional parameters regarding this, especially the +L parameter). + +Unlike L, L attempts to carry on preliminary +connection phases if the conditions apply. If both parameters are +present, this takes the precedence over L. If +L is set, then the L method will be called by +L. + +B As of version 2.99_04 of this module, semantics for +L have changed to make it more "DWIM". L was +introduced as a replacement for the L parameter in older +version. + +=item State, Server, User, Password, Proxy and Domain Parameters + +If you need to make your own connection to the server and perform your +authentication manually, then you can set these parameters to keep +your Mail::IMAPClient object in sync with its actual status. Of +these, only the L parameter is always necessary. The others +need to be set only if you think your program will need them later. + +=item Authmechanism + +Set this to the value that AUTHENTICATE should send to the server as +the authentication mechanism. If you are brokering your own +authentication then this parameter may be less useful. It exists +primarily so that you can set it when you call L to instantiate +your object. The L method will call L, which will +call L. If L sees that you have set an +B then it will call B, using your +B and B parameters as arguments. + +=item Authcallback + +The L, if set, holds a pointer to a subroutine +(CODEREF). The L method will use this as the callback +argument to the B method if the B and +B parameters are both set. If you set B +but not B then the default callback for your mechanism +will be used. All supported authentication mechanisms have a default +callback; in every other case not supplying the callback results in an +error. + +Most advanced authentication mechanisms require a challenge-response +exchange. After the L method sends " AUTHENTICATE +\015\012" to the IMAP server, the server replies with a +challenge. The L method then invokes the code whose +reference is stored in the B parameter as follows: + + $Authcallback->($challenge, $imap) + +where C<$Authcallback> is the code reference stored in the +B parameter, C<$challenge> is the challenge received +from the IMAP server, and C<$imap> is a pointer to the +Mail::IMAPClient object. The return value from the B +routine should be the response to the challenge, and that return value +will be sent by the L method to the server. + +=item Prewritemethod/Readmethod + +The B can hold a subroutine that will do whatever +encryption is necessary and then return the result to the caller so it +in turn can be sent to the server. + +The B can hold a subroutine to be used to replace +B usually performed by Mail::IMAPClient. + +See L and L for details. + +=back + =head1 REPORTING BUGS -Please send bug reports to C +Please send bug reports to C or +http://rt.cpan.org/Public/Dist/Display.html?Name=Mail-IMAPClient -=head1 COPYRIGHT +=head1 COPYRIGHT AND LICENSE - Copyright 1999, 2000, 2001, 2002 The Kernen Group, Inc. + Copyright (C) 1999-2003 The Kernen Group, Inc. + Copyright (C) 2007-2009 Mark Overmeer + Copyright (C) 2010-2011 Phil Pearl (Lobbes) All rights reserved. - Copyright 2007, 2008, 2009 Mark Overmeer - - Copyright 2010 Phil Pearl (Lobbes) - -This program is free software; you can redistribute under the same -terms as Perl itself. +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.0 or, +at your option, any later version of Perl 5 you may have available. 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 either the -GNU General Public License or the Artistic License for more -details. All your base are belong to us. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either the +GNU General Public License or the Artistic License for more details. diff --git a/Mail-IMAPClient-3.25/lib/Mail/IMAPClient/BodyStructure.pm b/Mail-IMAPClient-3.27/lib/Mail/IMAPClient/BodyStructure.pm similarity index 100% rename from Mail-IMAPClient-3.25/lib/Mail/IMAPClient/BodyStructure.pm rename to Mail-IMAPClient-3.27/lib/Mail/IMAPClient/BodyStructure.pm diff --git a/Mail-IMAPClient-3.25/lib/Mail/IMAPClient/BodyStructure/Parse.grammar b/Mail-IMAPClient-3.27/lib/Mail/IMAPClient/BodyStructure/Parse.grammar similarity index 98% rename from Mail-IMAPClient-3.25/lib/Mail/IMAPClient/BodyStructure/Parse.grammar rename to Mail-IMAPClient-3.27/lib/Mail/IMAPClient/BodyStructure/Parse.grammar index 853d092..227ca2c 100644 --- a/Mail-IMAPClient-3.25/lib/Mail/IMAPClient/BodyStructure/Parse.grammar +++ b/Mail-IMAPClient-3.27/lib/Mail/IMAPClient/BodyStructure/Parse.grammar @@ -32,6 +32,7 @@ HTML: /"HTML"|HTML/i { $return = "HTML" } MESSAGE: /^"MESSAGE"|^MESSAGE/i { $return = "MESSAGE"} RFC822: /^"RFC822"|^RFC822/i { $return = "RFC822" } NIL: /^NIL/i { $return = "NIL" } +RFCNONCOMPLY: /^\(\)/i { $return = "NIL" } NUMBER: /^(\d+)/ { $return = $item[1] } # Strings: @@ -91,7 +92,7 @@ inreplyto: NIL | STRING messageid: NIL | STRING date: NIL | STRING -ADDRESSES: NIL +ADDRESSES: NIL | RFCNONCOMPLY | "(" addressstruct(s) ")" { $return = $item{'addressstruct(s)'} } cc: ADDRESSES diff --git a/Mail-IMAPClient-3.27/lib/Mail/IMAPClient/BodyStructure/Parse.pm b/Mail-IMAPClient-3.27/lib/Mail/IMAPClient/BodyStructure/Parse.pm new file mode 100644 index 0000000..7d6fded --- /dev/null +++ b/Mail-IMAPClient-3.27/lib/Mail/IMAPClient/BodyStructure/Parse.pm @@ -0,0 +1,16801 @@ +package Mail::IMAPClient::BodyStructure::Parse; +use Parse::RecDescent; + +{ my $ERRORS; + + +package Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse; +use strict; +use vars qw($skip $AUTOLOAD ); +@Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ISA = (); +$skip = '\s*'; + + my $mibs = "Mail::IMAPClient::BodyStructure"; + my $subpartCount = 0; + my $partCount = 0; + + sub take_optional_items($$@) + { my ($r, $items) = (shift, shift); + foreach (@_) + { my $opt = $_ .'(?)'; + exists $items->{$opt} or next; + $r->{$_} = UNIVERSAL::isa($items->{$opt}, 'ARRAY') + ? $items->{$opt}[0] : $items->{$opt}; + } + } + + sub merge_hash($$) + { my $to = shift; + my $from = shift or return; + while( my($k,$v) = each %$from) { $to->{$k} = $v } + } +; + + +{ +local $SIG{__WARN__} = sub {0}; +# PRETEND TO BE IN Parse::RecDescent NAMESPACE +*Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::AUTOLOAD = sub +{ + no strict 'refs'; + $AUTOLOAD =~ s/^Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse/Parse::RecDescent/; + goto &{$AUTOLOAD}; +} +} + +push @Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ISA, 'Parse::RecDescent'; +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyparms +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"bodyparms"}; + + Parse::RecDescent::_trace(q{Trying rule: [bodyparms]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyparms}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or KVPAIRS}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyparms}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{bodyparms}); + %item = (__RULE__ => q{bodyparms}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{bodyparms}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodyparms}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodyparms}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodyparms}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [KVPAIRS]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyparms}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{bodyparms}); + %item = (__RULE__ => q{bodyparms}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [KVPAIRS]}, + Parse::RecDescent::_tracefirst($text), + q{bodyparms}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodyparms}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [KVPAIRS]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodyparms}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{KVPAIRS}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [KVPAIRS]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodyparms}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyparms}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{bodyparms}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{bodyparms}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{bodyparms}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::date +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"date"}; + + Parse::RecDescent::_trace(q{Trying rule: [date]}, + Parse::RecDescent::_tracefirst($_[1]), + q{date}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{date}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{date}); + %item = (__RULE__ => q{date}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{date}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{date}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{date}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{date}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{date}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{date}); + %item = (__RULE__ => q{date}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{date}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{date}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{date}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{date}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{date}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{date}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{date}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{date}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysubtype +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"bodysubtype"}; + + Parse::RecDescent::_trace(q{Trying rule: [bodysubtype]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{PLAIN, or HTML, or NIL, or STRING}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [PLAIN]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{bodysubtype}); + %item = (__RULE__ => q{bodysubtype}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [PLAIN]}, + Parse::RecDescent::_tracefirst($text), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::PLAIN($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [PLAIN]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{PLAIN}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [PLAIN]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [HTML]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{bodysubtype}); + %item = (__RULE__ => q{bodysubtype}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [HTML]}, + Parse::RecDescent::_tracefirst($text), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::HTML($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [HTML]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{HTML}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [HTML]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[2]; + $text = $_[1]; + my $_savetext; + @item = (q{bodysubtype}); + %item = (__RULE__ => q{bodysubtype}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[3]; + $text = $_[1]; + my $_savetext; + @item = (q{bodysubtype}); + %item = (__RULE__ => q{bodysubtype}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{bodysubtype}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{bodysubtype}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{bodysubtype}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::hostname +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"hostname"}; + + Parse::RecDescent::_trace(q{Trying rule: [hostname]}, + Parse::RecDescent::_tracefirst($_[1]), + q{hostname}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{hostname}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{hostname}); + %item = (__RULE__ => q{hostname}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{hostname}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{hostname}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{hostname}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{hostname}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{hostname}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{hostname}); + %item = (__RULE__ => q{hostname}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{hostname}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{hostname}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{hostname}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{hostname}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{hostname}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{hostname}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{hostname}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{hostname}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::basicfields +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"basicfields"}; + + Parse::RecDescent::_trace(q{Trying rule: [basicfields]}, + Parse::RecDescent::_tracefirst($_[1]), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{bodysubtype}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [bodysubtype bodyparms bodyid bodydesc bodyenc bodysize]}, + Parse::RecDescent::_tracefirst($_[1]), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{basicfields}); + %item = (__RULE__ => q{basicfields}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [bodysubtype]}, + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysubtype($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [bodysubtype]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodysubtype}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyparms]}, + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodyparms})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyparms, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyparms]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodyparms(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyid]}, + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodyid})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyid, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyid]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodyid(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodydesc]}, + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodydesc})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydesc, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodydesc]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodydesc(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyenc]}, + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodyenc})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyenc, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyenc]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodyenc(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodysize]}, + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodysize})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysize, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodysize]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodysize(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = { bodysubtype => $item{bodysubtype} }; + take_optional_items($return, \%item, + qw/bodyparms bodyid bodydesc bodyenc bodysize/); + 1; + }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [bodysubtype bodyparms bodyid bodydesc bodyenc bodysize]<<}, + Parse::RecDescent::_tracefirst($text), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{basicfields}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{basicfields}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{basicfields}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::personalname +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"personalname"}; + + Parse::RecDescent::_trace(q{Trying rule: [personalname]}, + Parse::RecDescent::_tracefirst($_[1]), + q{personalname}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{personalname}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{personalname}); + %item = (__RULE__ => q{personalname}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{personalname}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{personalname}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{personalname}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{personalname}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{personalname}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{personalname}); + %item = (__RULE__ => q{personalname}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{personalname}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{personalname}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{personalname}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{personalname}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{personalname}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{personalname}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{personalname}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{personalname}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::key +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"key"}; + + Parse::RecDescent::_trace(q{Trying rule: [key]}, + Parse::RecDescent::_tracefirst($_[1]), + q{key}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{STRING}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{key}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{key}); + %item = (__RULE__ => q{key}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{key}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{key}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{key}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{key}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{key}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{key}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{key}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{key}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::cc +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"cc"}; + + Parse::RecDescent::_trace(q{Trying rule: [cc]}, + Parse::RecDescent::_tracefirst($_[1]), + q{cc}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]}, + Parse::RecDescent::_tracefirst($_[1]), + q{cc}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{cc}); + %item = (__RULE__ => q{cc}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]}, + Parse::RecDescent::_tracefirst($text), + q{cc}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{cc}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{cc}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{ADDRESSES}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<}, + Parse::RecDescent::_tracefirst($text), + q{cc}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{cc}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{cc}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{cc}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{cc}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyMD5 +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"bodyMD5"}; + + Parse::RecDescent::_trace(q{Trying rule: [bodyMD5]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyMD5}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyMD5}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{bodyMD5}); + %item = (__RULE__ => q{bodyMD5}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{bodyMD5}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodyMD5}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodyMD5}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodyMD5}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyMD5}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{bodyMD5}); + %item = (__RULE__ => q{bodyMD5}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{bodyMD5}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodyMD5}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodyMD5}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodyMD5}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyMD5}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{bodyMD5}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{bodyMD5}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{bodyMD5}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::envelope +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"envelope"}; + + Parse::RecDescent::_trace(q{Trying rule: [envelope]}, + Parse::RecDescent::_tracefirst($_[1]), + q{envelope}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{/.*?\\(.*?ENVELOPE/}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/.*?\\(.*?ENVELOPE/ envelopestruct /.*\\)/]}, + Parse::RecDescent::_tracefirst($_[1]), + q{envelope}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{envelope}); + %item = (__RULE__ => q{envelope}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/.*?\\(.*?ENVELOPE/]}, Parse::RecDescent::_tracefirst($text), + q{envelope}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:.*?\(.*?ENVELOPE)/) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying subrule: [envelopestruct]}, + Parse::RecDescent::_tracefirst($text), + q{envelope}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{envelopestruct})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::envelopestruct($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{envelope}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [envelopestruct]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{envelope}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{envelopestruct}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [/.*\\)/]}, Parse::RecDescent::_tracefirst($text), + q{envelope}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{/.*\\)/})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:.*\))/) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN2__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{envelope}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = $item{envelopestruct} }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/.*?\\(.*?ENVELOPE/ envelopestruct /.*\\)/]<<}, + Parse::RecDescent::_tracefirst($text), + q{envelope}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{envelope}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{envelope}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{envelope}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{envelope}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::MESSAGE +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"MESSAGE"}; + + Parse::RecDescent::_trace(q{Trying rule: [MESSAGE]}, + Parse::RecDescent::_tracefirst($_[1]), + q{MESSAGE}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{/^"MESSAGE"|^MESSAGE/i}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/^"MESSAGE"|^MESSAGE/i]}, + Parse::RecDescent::_tracefirst($_[1]), + q{MESSAGE}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{MESSAGE}); + %item = (__RULE__ => q{MESSAGE}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/^"MESSAGE"|^MESSAGE/i]}, Parse::RecDescent::_tracefirst($text), + q{MESSAGE}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^"MESSAGE"|^MESSAGE)/i) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{MESSAGE}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = "MESSAGE"}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/^"MESSAGE"|^MESSAGE/i]<<}, + Parse::RecDescent::_tracefirst($text), + q{MESSAGE}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{MESSAGE}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{MESSAGE}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{MESSAGE}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{MESSAGE}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::DOUBLE_QUOTED_STRING +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"DOUBLE_QUOTED_STRING"}; + + Parse::RecDescent::_trace(q{Trying rule: [DOUBLE_QUOTED_STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{DOUBLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{'"'}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['"' /(?:\\\\"|[^"])*/ '"']}, + Parse::RecDescent::_tracefirst($_[1]), + q{DOUBLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{DOUBLE_QUOTED_STRING}); + %item = (__RULE__ => q{DOUBLE_QUOTED_STRING}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['"']}, + Parse::RecDescent::_tracefirst($text), + q{DOUBLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\"/) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying terminal: [/(?:\\\\"|[^"])*/]}, Parse::RecDescent::_tracefirst($text), + q{DOUBLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{/(?:\\\\"|[^"])*/})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:(?:\\"|[^"])*)/) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying terminal: ['"']}, + Parse::RecDescent::_tracefirst($text), + q{DOUBLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'"'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A\"/) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{DOUBLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = $item{__PATTERN1__} }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['"' /(?:\\\\"|[^"])*/ '"']<<}, + Parse::RecDescent::_tracefirst($text), + q{DOUBLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{DOUBLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{DOUBLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{DOUBLE_QUOTED_STRING}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{DOUBLE_QUOTED_STRING}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::subject +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"subject"}; + + Parse::RecDescent::_trace(q{Trying rule: [subject]}, + Parse::RecDescent::_tracefirst($_[1]), + q{subject}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{subject}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{subject}); + %item = (__RULE__ => q{subject}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{subject}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{subject}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{subject}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{subject}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{subject}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{subject}); + %item = (__RULE__ => q{subject}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{subject}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{subject}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{subject}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{subject}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{subject}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{subject}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{subject}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{subject}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::value +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"value"}; + + Parse::RecDescent::_trace(q{Trying rule: [value]}, + Parse::RecDescent::_tracefirst($_[1]), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or NUMBER, or STRING, or KVPAIRS}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{value}); + %item = (__RULE__ => q{value}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NUMBER]}, + Parse::RecDescent::_tracefirst($_[1]), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{value}); + %item = (__RULE__ => q{value}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NUMBER]}, + Parse::RecDescent::_tracefirst($text), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NUMBER($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NUMBER]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NUMBER}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NUMBER]<<}, + Parse::RecDescent::_tracefirst($text), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[2]; + $text = $_[1]; + my $_savetext; + @item = (q{value}); + %item = (__RULE__ => q{value}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [KVPAIRS]}, + Parse::RecDescent::_tracefirst($_[1]), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[3]; + $text = $_[1]; + my $_savetext; + @item = (q{value}); + %item = (__RULE__ => q{value}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [KVPAIRS]}, + Parse::RecDescent::_tracefirst($text), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [KVPAIRS]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{KVPAIRS}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [KVPAIRS]<<}, + Parse::RecDescent::_tracefirst($text), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{value}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{value}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{value}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{value}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::inreplyto +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"inreplyto"}; + + Parse::RecDescent::_trace(q{Trying rule: [inreplyto]}, + Parse::RecDescent::_tracefirst($_[1]), + q{inreplyto}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{inreplyto}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{inreplyto}); + %item = (__RULE__ => q{inreplyto}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{inreplyto}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{inreplyto}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{inreplyto}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{inreplyto}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{inreplyto}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{inreplyto}); + %item = (__RULE__ => q{inreplyto}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{inreplyto}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{inreplyto}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{inreplyto}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{inreplyto}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{inreplyto}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{inreplyto}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{inreplyto}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{inreplyto}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::messageid +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"messageid"}; + + Parse::RecDescent::_trace(q{Trying rule: [messageid]}, + Parse::RecDescent::_tracefirst($_[1]), + q{messageid}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{messageid}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{messageid}); + %item = (__RULE__ => q{messageid}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{messageid}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{messageid}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{messageid}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{messageid}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{messageid}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{messageid}); + %item = (__RULE__ => q{messageid}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{messageid}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{messageid}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{messageid}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{messageid}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{messageid}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{messageid}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{messageid}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{messageid}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::sender +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"sender"}; + + Parse::RecDescent::_trace(q{Trying rule: [sender]}, + Parse::RecDescent::_tracefirst($_[1]), + q{sender}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]}, + Parse::RecDescent::_tracefirst($_[1]), + q{sender}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{sender}); + %item = (__RULE__ => q{sender}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]}, + Parse::RecDescent::_tracefirst($text), + q{sender}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{sender}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{sender}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{ADDRESSES}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<}, + Parse::RecDescent::_tracefirst($text), + q{sender}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{sender}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{sender}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{sender}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{sender}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::multipart +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"multipart"}; + + Parse::RecDescent::_trace(q{Trying rule: [multipart]}, + Parse::RecDescent::_tracefirst($_[1]), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{subpart}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [subpart bodysubtype bodyparms bodydisp bodylang bodyloc bodyextra ]}, + Parse::RecDescent::_tracefirst($_[1]), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{multipart}); + %item = (__RULE__ => q{multipart}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [subpart]}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::subpart, 1, 100000000, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [subpart]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{subpart(s)}} = $_tok; + push @item, $_tok; + + + + + + Parse::RecDescent::_trace(q{Trying directive: []}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { $commit = 1 }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying subrule: [bodysubtype]}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{bodysubtype})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysubtype($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [bodysubtype]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodysubtype}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyparms]}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodyparms})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyparms, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyparms]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodyparms(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodydisp]}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodydisp})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodydisp]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodydisp(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodylang]}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodylang})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodylang]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodylang(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyloc]}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodyloc})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyloc, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyloc]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodyloc(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyextra]}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodyextra})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyextra]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodyextra(?)}} = $_tok; + push @item, $_tok; + + + + + + Parse::RecDescent::_trace(q{Trying directive: []}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { push @{$thisparser->{deferred}}, sub { $subpartCount = 0 }; }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE2__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = + { bodysubtype => $item{bodysubtype} + , bodytype => 'MULTIPART' + , bodystructure => $item{'subpart(s)'} + }; + take_optional_items($return, \%item + , qw/bodyparms bodydisp bodylang bodyloc bodyextra/); + 1; + }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [subpart bodysubtype bodyparms bodydisp bodylang bodyloc bodyextra ]<<}, + Parse::RecDescent::_tracefirst($text), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{multipart}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{multipart}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{multipart}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyenc +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"bodyenc"}; + + Parse::RecDescent::_trace(q{Trying rule: [bodyenc]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING, or KVPAIRS}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{bodyenc}); + %item = (__RULE__ => q{bodyenc}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{bodyenc}); + %item = (__RULE__ => q{bodyenc}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [KVPAIRS]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[2]; + $text = $_[1]; + my $_savetext; + @item = (q{bodyenc}); + %item = (__RULE__ => q{bodyenc}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [KVPAIRS]}, + Parse::RecDescent::_tracefirst($text), + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [KVPAIRS]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{KVPAIRS}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [KVPAIRS]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{bodyenc}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{bodyenc}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{bodyenc}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydesc +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"bodydesc"}; + + Parse::RecDescent::_trace(q{Trying rule: [bodydesc]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodydesc}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{/[()]/, or STRING}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/[()]/ NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodydesc}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{bodydesc}); + %item = (__RULE__ => q{bodydesc}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/[()]/]}, Parse::RecDescent::_tracefirst($text), + q{bodydesc}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + $_savetext = $text; + + if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:[()])/) + { + $text = $_savetext; + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + $text = $_savetext; + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{bodydesc}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{NIL})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodydesc}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodydesc}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [/[()]/ NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodydesc}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodydesc}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{bodydesc}); + %item = (__RULE__ => q{bodydesc}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{bodydesc}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodydesc}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodydesc}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodydesc}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodydesc}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{bodydesc}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{bodydesc}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{bodydesc}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::start +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"start"}; + + Parse::RecDescent::_trace(q{Trying rule: [start]}, + Parse::RecDescent::_tracefirst($_[1]), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{/.*?\\(.*?BODYSTRUCTURE \\(/i}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/.*?\\(.*?BODYSTRUCTURE \\(/i part /\\).*\\)\\r?\\n?/]}, + Parse::RecDescent::_tracefirst($_[1]), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{start}); + %item = (__RULE__ => q{start}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/.*?\\(.*?BODYSTRUCTURE \\(/i]}, Parse::RecDescent::_tracefirst($text), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:.*?\(.*?BODYSTRUCTURE \()/i) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [part]}, + Parse::RecDescent::_tracefirst($text), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{part})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::part, 1, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [part]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{part(1)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying terminal: [/\\).*\\)\\r?\\n?/]}, Parse::RecDescent::_tracefirst($text), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{/\\).*\\)\\r?\\n?/})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\).*\)\r?\n?)/) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN2__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = $item{'part(1)'}[0] }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/.*?\\(.*?BODYSTRUCTURE \\(/i part /\\).*\\)\\r?\\n?/]<<}, + Parse::RecDescent::_tracefirst($text), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{start}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{start}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{start}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::RFC822 +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"RFC822"}; + + Parse::RecDescent::_trace(q{Trying rule: [RFC822]}, + Parse::RecDescent::_tracefirst($_[1]), + q{RFC822}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{/^"RFC822"|^RFC822/i}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/^"RFC822"|^RFC822/i]}, + Parse::RecDescent::_tracefirst($_[1]), + q{RFC822}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{RFC822}); + %item = (__RULE__ => q{RFC822}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/^"RFC822"|^RFC822/i]}, Parse::RecDescent::_tracefirst($text), + q{RFC822}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^"RFC822"|^RFC822)/i) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{RFC822}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = "RFC822" }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/^"RFC822"|^RFC822/i]<<}, + Parse::RecDescent::_tracefirst($text), + q{RFC822}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{RFC822}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{RFC822}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{RFC822}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{RFC822}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::RFCNONCOMPLY +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"RFCNONCOMPLY"}; + + Parse::RecDescent::_trace(q{Trying rule: [RFCNONCOMPLY]}, + Parse::RecDescent::_tracefirst($_[1]), + q{RFCNONCOMPLY}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{/^\\(\\)/i}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/^\\(\\)/i]}, + Parse::RecDescent::_tracefirst($_[1]), + q{RFCNONCOMPLY}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{RFCNONCOMPLY}); + %item = (__RULE__ => q{RFCNONCOMPLY}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/^\\(\\)/i]}, Parse::RecDescent::_tracefirst($text), + q{RFCNONCOMPLY}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^\(\))/i) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{RFCNONCOMPLY}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = "NIL" }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/^\\(\\)/i]<<}, + Parse::RecDescent::_tracefirst($text), + q{RFCNONCOMPLY}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{RFCNONCOMPLY}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{RFCNONCOMPLY}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{RFCNONCOMPLY}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{RFCNONCOMPLY}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textmessage +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"textmessage"}; + + Parse::RecDescent::_trace(q{Trying rule: [textmessage]}, + Parse::RecDescent::_tracefirst($_[1]), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{TEXT}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [TEXT basicfields textlines bodyMD5 bodydisp bodylang bodyextra]}, + Parse::RecDescent::_tracefirst($_[1]), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{textmessage}); + %item = (__RULE__ => q{textmessage}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [TEXT]}, + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::TEXT($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [TEXT]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{TEXT}} = $_tok; + push @item, $_tok; + + } + + + + Parse::RecDescent::_trace(q{Trying directive: []}, + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { $commit = 1 }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying subrule: [basicfields]}, + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{basicfields})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::basicfields($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [basicfields]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{basicfields}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying repeated subrule: [textlines]}, + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{textlines})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textlines, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [textlines]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{textlines(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyMD5]}, + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodyMD5})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyMD5, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyMD5]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodyMD5(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodydisp]}, + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodydisp})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodydisp]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodydisp(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodylang]}, + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodylang})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodylang]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodylang(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyextra]}, + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodyextra})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyextra]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodyextra(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { + $return = $item{basicfields} || {}; + $return->{bodytype} = 'TEXT'; + take_optional_items($return, \%item + , qw/textlines bodyMD5 bodydisp bodylang bodyextra/); + 1; + }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [TEXT basicfields textlines bodyMD5 bodydisp bodylang bodyextra]<<}, + Parse::RecDescent::_tracefirst($text), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{textmessage}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{textmessage}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{textmessage}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyid +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"bodyid"}; + + Parse::RecDescent::_trace(q{Trying rule: [bodyid]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyid}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{/[()]/, or STRING}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/[()]/ NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyid}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{bodyid}); + %item = (__RULE__ => q{bodyid}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/[()]/]}, Parse::RecDescent::_tracefirst($text), + q{bodyid}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + $_savetext = $text; + + if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:[()])/) + { + $text = $_savetext; + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + $text = $_savetext; + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{bodyid}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{NIL})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodyid}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodyid}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [/[()]/ NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodyid}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyid}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{bodyid}); + %item = (__RULE__ => q{bodyid}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{bodyid}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodyid}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodyid}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodyid}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyid}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{bodyid}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{bodyid}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{bodyid}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"bodyextra"}; + + Parse::RecDescent::_trace(q{Trying rule: [bodyextra]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING, or STRINGS}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{bodyextra}); + %item = (__RULE__ => q{bodyextra}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{bodyextra}); + %item = (__RULE__ => q{bodyextra}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRINGS]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[2]; + $text = $_[1]; + my $_savetext; + @item = (q{bodyextra}); + %item = (__RULE__ => q{bodyextra}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRINGS]}, + Parse::RecDescent::_tracefirst($text), + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRINGS($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRINGS]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRINGS}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRINGS]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{bodyextra}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{bodyextra}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{bodyextra}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::othertypemessage +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"othertypemessage"}; + + Parse::RecDescent::_trace(q{Trying rule: [othertypemessage]}, + Parse::RecDescent::_tracefirst($_[1]), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{bodytype}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [bodytype basicfields bodyMD5 bodydisp bodylang bodyextra]}, + Parse::RecDescent::_tracefirst($_[1]), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{othertypemessage}); + %item = (__RULE__ => q{othertypemessage}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [bodytype]}, + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodytype($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [bodytype]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodytype}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [basicfields]}, + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{basicfields})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::basicfields($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [basicfields]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{basicfields}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyMD5]}, + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodyMD5})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyMD5, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyMD5]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodyMD5(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodydisp]}, + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodydisp})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodydisp]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodydisp(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodylang]}, + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodylang})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodylang]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodylang(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyextra]}, + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodyextra})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyextra]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodyextra(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = { bodytype => $item{bodytype} }; + take_optional_items($return, \%item + , qw/bodyMD5 bodydisp bodylang bodyextra/ ); + merge_hash($return, $item{basicfields}); + 1; + }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [bodytype basicfields bodyMD5 bodydisp bodylang bodyextra]<<}, + Parse::RecDescent::_tracefirst($text), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{othertypemessage}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{othertypemessage}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{othertypemessage}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::kvpair +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"kvpair"}; + + Parse::RecDescent::_trace(q{Trying rule: [kvpair]}, + Parse::RecDescent::_tracefirst($_[1]), + q{kvpair}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{')'}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [')' key value]}, + Parse::RecDescent::_tracefirst($_[1]), + q{kvpair}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{kvpair}); + %item = (__RULE__ => q{kvpair}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{kvpair}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + $_savetext = $text; + + if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + $text = $_savetext; + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$_tok; + $text = $_savetext; + + Parse::RecDescent::_trace(q{Trying subrule: [key]}, + Parse::RecDescent::_tracefirst($text), + q{kvpair}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{key})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::key($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{kvpair}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [key]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{kvpair}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{key}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [value]}, + Parse::RecDescent::_tracefirst($text), + q{kvpair}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{value})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::value($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{kvpair}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [value]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{kvpair}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{value}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{kvpair}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = { $item{key} => $item{value} } }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [')' key value]<<}, + Parse::RecDescent::_tracefirst($text), + q{kvpair}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{kvpair}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{kvpair}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{kvpair}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{kvpair}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysize +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"bodysize"}; + + Parse::RecDescent::_trace(q{Trying rule: [bodysize]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodysize}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{/[()]/, or NUMBER}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/[()]/ NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodysize}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{bodysize}); + %item = (__RULE__ => q{bodysize}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/[()]/]}, Parse::RecDescent::_tracefirst($text), + q{bodysize}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + $_savetext = $text; + + if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:[()])/) + { + $text = $_savetext; + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + $text = $_savetext; + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{bodysize}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{NIL})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodysize}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodysize}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [/[()]/ NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodysize}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NUMBER]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodysize}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{bodysize}); + %item = (__RULE__ => q{bodysize}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NUMBER]}, + Parse::RecDescent::_tracefirst($text), + q{bodysize}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NUMBER($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodysize}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NUMBER]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodysize}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NUMBER}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NUMBER]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodysize}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodysize}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{bodysize}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{bodysize}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{bodysize}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"STRING"}; + + Parse::RecDescent::_trace(q{Trying rule: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{DOUBLE_QUOTED_STRING, or SINGLE_QUOTED_STRING, or BARESTRING}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [DOUBLE_QUOTED_STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{STRING}); + %item = (__RULE__ => q{STRING}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [DOUBLE_QUOTED_STRING]}, + Parse::RecDescent::_tracefirst($text), + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::DOUBLE_QUOTED_STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [DOUBLE_QUOTED_STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{DOUBLE_QUOTED_STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [DOUBLE_QUOTED_STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [SINGLE_QUOTED_STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{STRING}); + %item = (__RULE__ => q{STRING}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [SINGLE_QUOTED_STRING]}, + Parse::RecDescent::_tracefirst($text), + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::SINGLE_QUOTED_STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [SINGLE_QUOTED_STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{SINGLE_QUOTED_STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [SINGLE_QUOTED_STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [BARESTRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[2]; + $text = $_[1]; + my $_savetext; + @item = (q{STRING}); + %item = (__RULE__ => q{STRING}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [BARESTRING]}, + Parse::RecDescent::_tracefirst($text), + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::BARESTRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [BARESTRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{BARESTRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [BARESTRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{STRING}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{STRING}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{STRING}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodytype +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"bodytype"}; + + Parse::RecDescent::_trace(q{Trying rule: [bodytype]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodytype}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{STRING}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodytype}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{bodytype}); + %item = (__RULE__ => q{bodytype}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{bodytype}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodytype}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodytype}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodytype}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodytype}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{bodytype}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{bodytype}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{bodytype}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::TEXT +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"TEXT"}; + + Parse::RecDescent::_trace(q{Trying rule: [TEXT]}, + Parse::RecDescent::_tracefirst($_[1]), + q{TEXT}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{/^"TEXT"|^TEXT/i}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/^"TEXT"|^TEXT/i]}, + Parse::RecDescent::_tracefirst($_[1]), + q{TEXT}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{TEXT}); + %item = (__RULE__ => q{TEXT}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/^"TEXT"|^TEXT/i]}, Parse::RecDescent::_tracefirst($text), + q{TEXT}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^"TEXT"|^TEXT)/i) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{TEXT}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = "TEXT" }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/^"TEXT"|^TEXT/i]<<}, + Parse::RecDescent::_tracefirst($text), + q{TEXT}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{TEXT}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{TEXT}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{TEXT}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{TEXT}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::to +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"to"}; + + Parse::RecDescent::_trace(q{Trying rule: [to]}, + Parse::RecDescent::_tracefirst($_[1]), + q{to}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]}, + Parse::RecDescent::_tracefirst($_[1]), + q{to}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{to}); + %item = (__RULE__ => q{to}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]}, + Parse::RecDescent::_tracefirst($text), + q{to}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{to}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{to}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{ADDRESSES}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<}, + Parse::RecDescent::_tracefirst($text), + q{to}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{to}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{to}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{to}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{to}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"NIL"}; + + Parse::RecDescent::_trace(q{Trying rule: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{NIL}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{/^NIL/i}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/^NIL/i]}, + Parse::RecDescent::_tracefirst($_[1]), + q{NIL}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{NIL}); + %item = (__RULE__ => q{NIL}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/^NIL/i]}, Parse::RecDescent::_tracefirst($text), + q{NIL}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^NIL)/i) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{NIL}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = "NIL" }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/^NIL/i]<<}, + Parse::RecDescent::_tracefirst($text), + q{NIL}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{NIL}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{NIL}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{NIL}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{NIL}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"KVPAIRS"}; + + Parse::RecDescent::_trace(q{Trying rule: [KVPAIRS]}, + Parse::RecDescent::_tracefirst($_[1]), + q{KVPAIRS}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{'('}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['(' kvpair ')']}, + Parse::RecDescent::_tracefirst($_[1]), + q{KVPAIRS}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{KVPAIRS}); + %item = (__RULE__ => q{KVPAIRS}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{KVPAIRS}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [kvpair]}, + Parse::RecDescent::_tracefirst($text), + q{KVPAIRS}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{kvpair})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::kvpair, 1, 100000000, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{KVPAIRS}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [kvpair]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{KVPAIRS}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{kvpair(s)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{KVPAIRS}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{KVPAIRS}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = { map { (%$_) } @{$item{'kvpair(s)'}} } }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['(' kvpair ')']<<}, + Parse::RecDescent::_tracefirst($text), + q{KVPAIRS}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{KVPAIRS}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{KVPAIRS}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{KVPAIRS}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{KVPAIRS}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::from +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"from"}; + + Parse::RecDescent::_trace(q{Trying rule: [from]}, + Parse::RecDescent::_tracefirst($_[1]), + q{from}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]}, + Parse::RecDescent::_tracefirst($_[1]), + q{from}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{from}); + %item = (__RULE__ => q{from}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]}, + Parse::RecDescent::_tracefirst($text), + q{from}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{from}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{from}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{ADDRESSES}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<}, + Parse::RecDescent::_tracefirst($text), + q{from}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{from}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{from}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{from}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{from}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodystructure +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"bodystructure"}; + + Parse::RecDescent::_trace(q{Trying rule: [bodystructure]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodystructure}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{'('}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['(' part ')']}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodystructure}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{bodystructure}); + %item = (__RULE__ => q{bodystructure}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{bodystructure}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [part]}, + Parse::RecDescent::_tracefirst($text), + q{bodystructure}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{part})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::part, 1, 100000000, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodystructure}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [part]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{bodystructure}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{part(s)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{bodystructure}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{bodystructure}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = $item{'part(s)'} }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['(' part ')']<<}, + Parse::RecDescent::_tracefirst($text), + q{bodystructure}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodystructure}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{bodystructure}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{bodystructure}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{bodystructure}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::PLAIN +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"PLAIN"}; + + Parse::RecDescent::_trace(q{Trying rule: [PLAIN]}, + Parse::RecDescent::_tracefirst($_[1]), + q{PLAIN}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{/^"PLAIN"|^PLAIN/i}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/^"PLAIN"|^PLAIN/i]}, + Parse::RecDescent::_tracefirst($_[1]), + q{PLAIN}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{PLAIN}); + %item = (__RULE__ => q{PLAIN}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/^"PLAIN"|^PLAIN/i]}, Parse::RecDescent::_tracefirst($text), + q{PLAIN}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^"PLAIN"|^PLAIN)/i) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{PLAIN}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = "PLAIN" }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/^"PLAIN"|^PLAIN/i]<<}, + Parse::RecDescent::_tracefirst($text), + q{PLAIN}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{PLAIN}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{PLAIN}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{PLAIN}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{PLAIN}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NUMBER +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"NUMBER"}; + + Parse::RecDescent::_trace(q{Trying rule: [NUMBER]}, + Parse::RecDescent::_tracefirst($_[1]), + q{NUMBER}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{/^(\\d+)/}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/^(\\d+)/]}, + Parse::RecDescent::_tracefirst($_[1]), + q{NUMBER}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{NUMBER}); + %item = (__RULE__ => q{NUMBER}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/^(\\d+)/]}, Parse::RecDescent::_tracefirst($text), + q{NUMBER}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^(\d+))/) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{NUMBER}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = $item[1] }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/^(\\d+)/]<<}, + Parse::RecDescent::_tracefirst($text), + q{NUMBER}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{NUMBER}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{NUMBER}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{NUMBER}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{NUMBER}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRINGS +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"STRINGS"}; + + Parse::RecDescent::_trace(q{Trying rule: [STRINGS]}, + Parse::RecDescent::_tracefirst($_[1]), + q{STRINGS}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{'('}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['(' STRING ')']}, + Parse::RecDescent::_tracefirst($_[1]), + q{STRINGS}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{STRINGS}); + %item = (__RULE__ => q{STRINGS}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{STRINGS}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{STRINGS}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{STRING})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING, 1, 100000000, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{STRINGS}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [STRING]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{STRINGS}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING(s)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{STRINGS}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{STRINGS}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = $item{'STRING(s)'} }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['(' STRING ')']<<}, + Parse::RecDescent::_tracefirst($text), + q{STRINGS}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{STRINGS}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{STRINGS}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{STRINGS}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{STRINGS}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::HTML +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"HTML"}; + + Parse::RecDescent::_trace(q{Trying rule: [HTML]}, + Parse::RecDescent::_tracefirst($_[1]), + q{HTML}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{/"HTML"|HTML/i}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/"HTML"|HTML/i]}, + Parse::RecDescent::_tracefirst($_[1]), + q{HTML}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{HTML}); + %item = (__RULE__ => q{HTML}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/"HTML"|HTML/i]}, Parse::RecDescent::_tracefirst($text), + q{HTML}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:"HTML"|HTML)/i) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{HTML}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = "HTML" }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/"HTML"|HTML/i]<<}, + Parse::RecDescent::_tracefirst($text), + q{HTML}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{HTML}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{HTML}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{HTML}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{HTML}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"bodydisp"}; + + Parse::RecDescent::_trace(q{Trying rule: [bodydisp]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodydisp}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or KVPAIRS}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodydisp}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{bodydisp}); + %item = (__RULE__ => q{bodydisp}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{bodydisp}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodydisp}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodydisp}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodydisp}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [KVPAIRS]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodydisp}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{bodydisp}); + %item = (__RULE__ => q{bodydisp}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [KVPAIRS]}, + Parse::RecDescent::_tracefirst($text), + q{bodydisp}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::KVPAIRS($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodydisp}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [KVPAIRS]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodydisp}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{KVPAIRS}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [KVPAIRS]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodydisp}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodydisp}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{bodydisp}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{bodydisp}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{bodydisp}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::part +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"part"}; + + Parse::RecDescent::_trace(q{Trying rule: [part]}, + Parse::RecDescent::_tracefirst($_[1]), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{multipart, or textmessage, or nestedmessage, or othertypemessage}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [multipart]}, + Parse::RecDescent::_tracefirst($_[1]), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{part}); + %item = (__RULE__ => q{part}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [multipart]}, + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::multipart($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [multipart]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{multipart}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = bless $item{multipart}, $mibs }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [multipart]<<}, + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [textmessage]}, + Parse::RecDescent::_tracefirst($_[1]), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{part}); + %item = (__RULE__ => q{part}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [textmessage]}, + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textmessage($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [textmessage]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{textmessage}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = bless $item{textmessage}, $mibs }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [textmessage]<<}, + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [nestedmessage]}, + Parse::RecDescent::_tracefirst($_[1]), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[2]; + $text = $_[1]; + my $_savetext; + @item = (q{part}); + %item = (__RULE__ => q{part}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [nestedmessage]}, + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::nestedmessage($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [nestedmessage]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{nestedmessage}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = bless $item{nestedmessage}, $mibs }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [nestedmessage]<<}, + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [othertypemessage]}, + Parse::RecDescent::_tracefirst($_[1]), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[3]; + $text = $_[1]; + my $_savetext; + @item = (q{part}); + %item = (__RULE__ => q{part}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [othertypemessage]}, + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::othertypemessage($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [othertypemessage]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{othertypemessage}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = bless $item{othertypemessage}, $mibs }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [othertypemessage]<<}, + Parse::RecDescent::_tracefirst($text), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{part}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{part}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{part}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{part}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::nestedmessage +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"nestedmessage"}; + + Parse::RecDescent::_trace(q{Trying rule: [nestedmessage]}, + Parse::RecDescent::_tracefirst($_[1]), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{rfc822message}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [rfc822message bodyparms bodyid bodydesc bodyenc bodysize envelopestruct bodystructure textlines bodyMD5 bodydisp bodylang bodyextra]}, + Parse::RecDescent::_tracefirst($_[1]), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{nestedmessage}); + %item = (__RULE__ => q{nestedmessage}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [rfc822message]}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::rfc822message($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [rfc822message]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{rfc822message}} = $_tok; + push @item, $_tok; + + } + + + + Parse::RecDescent::_trace(q{Trying directive: []}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { $commit = 1 }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying subrule: [bodyparms]}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{bodyparms})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyparms($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [bodyparms]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodyparms}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [bodyid]}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{bodyid})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyid($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [bodyid]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodyid}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [bodydesc]}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{bodydesc})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydesc($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [bodydesc]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodydesc}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [bodyenc]}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{bodyenc})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyenc($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [bodyenc]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodyenc}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [bodysize]}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{bodysize})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodysize($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [bodysize]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodysize}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying repeated subrule: [envelopestruct]}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{envelopestruct})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::envelopestruct, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [envelopestruct]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{envelopestruct(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodystructure]}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodystructure})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodystructure, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodystructure]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodystructure(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [textlines]}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{textlines})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textlines, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [textlines]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{textlines(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyMD5]}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodyMD5})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyMD5, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyMD5]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodyMD5(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodydisp]}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodydisp})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodydisp, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodydisp]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodydisp(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodylang]}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodylang})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodylang]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodylang(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [bodyextra]}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{bodyextra})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyextra, 0, 1, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [bodyextra]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bodyextra(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { + $return = {}; + $return->{$_} = $item{$_} + for qw/bodyparms bodyid bodydesc bodyenc bodysize/; +# envelopestruct bodystructure textlines/; + + take_optional_items($return, \%item + , qw/envelopestruct bodystructure textlines/ + , qw/bodyMD5 bodydisp bodylang bodyextra/); + + merge_hash($return, $item{bodystructure}[0]); + merge_hash($return, $item{basicfields}); + $return->{bodytype} = "MESSAGE" ; + $return->{bodysubtype} = "RFC822" ; + 1; + }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [rfc822message bodyparms bodyid bodydesc bodyenc bodysize envelopestruct bodystructure textlines bodyMD5 bodydisp bodylang bodyextra]<<}, + Parse::RecDescent::_tracefirst($text), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{nestedmessage}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{nestedmessage}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{nestedmessage}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::SINGLE_QUOTED_STRING +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"SINGLE_QUOTED_STRING"}; + + Parse::RecDescent::_trace(q{Trying rule: [SINGLE_QUOTED_STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{SINGLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{'''}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [''' /(?:\\\\'|[^'])*/ ''']}, + Parse::RecDescent::_tracefirst($_[1]), + q{SINGLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{SINGLE_QUOTED_STRING}); + %item = (__RULE__ => q{SINGLE_QUOTED_STRING}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [''']}, + Parse::RecDescent::_tracefirst($text), + q{SINGLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "'"; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying terminal: [/(?:\\\\'|[^'])*/]}, Parse::RecDescent::_tracefirst($text), + q{SINGLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{/(?:\\\\'|[^'])*/})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:(?:\\'|[^'])*)/) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying terminal: [''']}, + Parse::RecDescent::_tracefirst($text), + q{SINGLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'''})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "'"; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{SINGLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = $item{__PATTERN1__} }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [''' /(?:\\\\'|[^'])*/ ''']<<}, + Parse::RecDescent::_tracefirst($text), + q{SINGLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{SINGLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{SINGLE_QUOTED_STRING}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{SINGLE_QUOTED_STRING}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{SINGLE_QUOTED_STRING}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"ADDRESSES"}; + + Parse::RecDescent::_trace(q{Trying rule: [ADDRESSES]}, + Parse::RecDescent::_tracefirst($_[1]), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or RFCNONCOMPLY, or '('}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{ADDRESSES}); + %item = (__RULE__ => q{ADDRESSES}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [RFCNONCOMPLY]}, + Parse::RecDescent::_tracefirst($_[1]), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{ADDRESSES}); + %item = (__RULE__ => q{ADDRESSES}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [RFCNONCOMPLY]}, + Parse::RecDescent::_tracefirst($text), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::RFCNONCOMPLY($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [RFCNONCOMPLY]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{RFCNONCOMPLY}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [RFCNONCOMPLY]<<}, + Parse::RecDescent::_tracefirst($text), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['(' addressstruct ')']}, + Parse::RecDescent::_tracefirst($_[1]), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[2]; + $text = $_[1]; + my $_savetext; + @item = (q{ADDRESSES}); + %item = (__RULE__ => q{ADDRESSES}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [addressstruct]}, + Parse::RecDescent::_tracefirst($text), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{addressstruct})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::addressstruct, 1, 100000000, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [addressstruct]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{addressstruct(s)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = $item{'addressstruct(s)'} }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['(' addressstruct ')']<<}, + Parse::RecDescent::_tracefirst($text), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{ADDRESSES}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{ADDRESSES}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{ADDRESSES}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bcc +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"bcc"}; + + Parse::RecDescent::_trace(q{Trying rule: [bcc]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bcc}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bcc}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{bcc}); + %item = (__RULE__ => q{bcc}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]}, + Parse::RecDescent::_tracefirst($text), + q{bcc}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bcc}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bcc}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{ADDRESSES}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<}, + Parse::RecDescent::_tracefirst($text), + q{bcc}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{bcc}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{bcc}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{bcc}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{bcc}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::rfc822message +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"rfc822message"}; + + Parse::RecDescent::_trace(q{Trying rule: [rfc822message]}, + Parse::RecDescent::_tracefirst($_[1]), + q{rfc822message}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{MESSAGE}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [MESSAGE RFC822]}, + Parse::RecDescent::_tracefirst($_[1]), + q{rfc822message}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{rfc822message}); + %item = (__RULE__ => q{rfc822message}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [MESSAGE]}, + Parse::RecDescent::_tracefirst($text), + q{rfc822message}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::MESSAGE($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{rfc822message}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [MESSAGE]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{rfc822message}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{MESSAGE}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [RFC822]}, + Parse::RecDescent::_tracefirst($text), + q{rfc822message}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{RFC822})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::RFC822($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{rfc822message}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [RFC822]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{rfc822message}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{RFC822}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{rfc822message}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = "MESSAGE RFC822" }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [MESSAGE RFC822]<<}, + Parse::RecDescent::_tracefirst($text), + q{rfc822message}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{rfc822message}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{rfc822message}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{rfc822message}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{rfc822message}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::addressstruct +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"addressstruct"}; + + Parse::RecDescent::_trace(q{Trying rule: [addressstruct]}, + Parse::RecDescent::_tracefirst($_[1]), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{'('}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['(' personalname sourceroute mailboxname hostname ')']}, + Parse::RecDescent::_tracefirst($_[1]), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{addressstruct}); + %item = (__RULE__ => q{addressstruct}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying subrule: [personalname]}, + Parse::RecDescent::_tracefirst($text), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{personalname})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::personalname($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [personalname]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{personalname}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [sourceroute]}, + Parse::RecDescent::_tracefirst($text), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{sourceroute})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::sourceroute($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [sourceroute]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{sourceroute}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [mailboxname]}, + Parse::RecDescent::_tracefirst($text), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{mailboxname})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::mailboxname($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [mailboxname]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{mailboxname}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [hostname]}, + Parse::RecDescent::_tracefirst($text), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{hostname})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::hostname($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [hostname]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{hostname}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { bless { personalname => $item{personalname} + , sourceroute => $item{sourceroute} + , mailboxname => $item{mailboxname} + , hostname => $item{hostname} + }, 'Mail::IMAPClient::BodyStructure::Address'; + }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['(' personalname sourceroute mailboxname hostname ')']<<}, + Parse::RecDescent::_tracefirst($text), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{addressstruct}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{addressstruct}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{addressstruct}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::sourceroute +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"sourceroute"}; + + Parse::RecDescent::_trace(q{Trying rule: [sourceroute]}, + Parse::RecDescent::_tracefirst($_[1]), + q{sourceroute}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{sourceroute}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{sourceroute}); + %item = (__RULE__ => q{sourceroute}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{sourceroute}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{sourceroute}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{sourceroute}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{sourceroute}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{sourceroute}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{sourceroute}); + %item = (__RULE__ => q{sourceroute}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{sourceroute}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{sourceroute}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{sourceroute}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{sourceroute}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{sourceroute}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{sourceroute}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{sourceroute}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{sourceroute}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::subpart +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"subpart"}; + + Parse::RecDescent::_trace(q{Trying rule: [subpart]}, + Parse::RecDescent::_tracefirst($_[1]), + q{subpart}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{'('}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['(' part ')' ]}, + Parse::RecDescent::_tracefirst($_[1]), + q{subpart}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{subpart}); + %item = (__RULE__ => q{subpart}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{subpart}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying subrule: [part]}, + Parse::RecDescent::_tracefirst($text), + q{subpart}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{part})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::part($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{subpart}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [part]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{subpart}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{part}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{subpart}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{subpart}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {$return = $item{part}}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + + Parse::RecDescent::_trace(q{Trying directive: []}, + Parse::RecDescent::_tracefirst($text), + q{subpart}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { push @{$thisparser->{deferred}}, sub { ++$subpartCount; }; }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['(' part ')' ]<<}, + Parse::RecDescent::_tracefirst($text), + q{subpart}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{subpart}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{subpart}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{subpart}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{subpart}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::textlines +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"textlines"}; + + Parse::RecDescent::_trace(q{Trying rule: [textlines]}, + Parse::RecDescent::_tracefirst($_[1]), + q{textlines}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or NUMBER}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{textlines}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{textlines}); + %item = (__RULE__ => q{textlines}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{textlines}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{textlines}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{textlines}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{textlines}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NUMBER]}, + Parse::RecDescent::_tracefirst($_[1]), + q{textlines}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{textlines}); + %item = (__RULE__ => q{textlines}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NUMBER]}, + Parse::RecDescent::_tracefirst($text), + q{textlines}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NUMBER($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{textlines}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NUMBER]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{textlines}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NUMBER}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NUMBER]<<}, + Parse::RecDescent::_tracefirst($text), + q{textlines}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{textlines}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{textlines}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{textlines}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{textlines}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::BARESTRING +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"BARESTRING"}; + + Parse::RecDescent::_trace(q{Trying rule: [BARESTRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{BARESTRING}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{/^[)('"]/}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/^[)('"]/ /^(?!\\(|\\))(?:\\\\ |\\S)+/]}, + Parse::RecDescent::_tracefirst($_[1]), + q{BARESTRING}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{BARESTRING}); + %item = (__RULE__ => q{BARESTRING}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/^[)('"]/]}, Parse::RecDescent::_tracefirst($text), + q{BARESTRING}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + $_savetext = $text; + + if ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^[)('"])/) + { + $text = $_savetext; + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + $text = $_savetext; + + Parse::RecDescent::_trace(q{Trying terminal: [/^(?!\\(|\\))(?:\\\\ |\\S)+/]}, Parse::RecDescent::_tracefirst($text), + q{BARESTRING}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{/^(?!\\(|\\))(?:\\\\ |\\S)+/})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^(?!\(|\))(?:\\ |\S)+)/) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN2__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{BARESTRING}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = $item{__PATTERN1__} }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/^[)('"]/ /^(?!\\(|\\))(?:\\\\ |\\S)+/]<<}, + Parse::RecDescent::_tracefirst($text), + q{BARESTRING}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{BARESTRING}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{BARESTRING}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{BARESTRING}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{BARESTRING}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodyloc +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"bodyloc"}; + + Parse::RecDescent::_trace(q{Trying rule: [bodyloc]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyloc}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyloc}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{bodyloc}); + %item = (__RULE__ => q{bodyloc}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{bodyloc}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodyloc}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodyloc}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodyloc}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyloc}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{bodyloc}); + %item = (__RULE__ => q{bodyloc}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{bodyloc}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodyloc}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodyloc}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodyloc}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodyloc}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{bodyloc}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{bodyloc}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{bodyloc}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bodylang +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"bodylang"}; + + Parse::RecDescent::_trace(q{Trying rule: [bodylang]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING, or STRINGS}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{bodylang}); + %item = (__RULE__ => q{bodylang}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{bodylang}); + %item = (__RULE__ => q{bodylang}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRINGS]}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[2]; + $text = $_[1]; + my $_savetext; + @item = (q{bodylang}); + %item = (__RULE__ => q{bodylang}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRINGS]}, + Parse::RecDescent::_tracefirst($text), + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRINGS($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRINGS]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRINGS}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRINGS]<<}, + Parse::RecDescent::_tracefirst($text), + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{bodylang}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{bodylang}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{bodylang}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::envelopestruct +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"envelopestruct"}; + + Parse::RecDescent::_trace(q{Trying rule: [envelopestruct]}, + Parse::RecDescent::_tracefirst($_[1]), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{'('}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['(' date subject from sender replyto to cc bcc inreplyto messageid ')']}, + Parse::RecDescent::_tracefirst($_[1]), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{envelopestruct}); + %item = (__RULE__ => q{envelopestruct}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying subrule: [date]}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{date})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::date($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [date]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{date}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [subject]}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{subject})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::subject($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [subject]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{subject}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [from]}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{from})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::from($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [from]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{from}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [sender]}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{sender})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::sender($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [sender]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{sender}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [replyto]}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{replyto})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::replyto($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [replyto]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{replyto}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [to]}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{to})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::to($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [to]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{to}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [cc]}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{cc})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::cc($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [cc]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{cc}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [bcc]}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{bcc})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::bcc($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [bcc]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{bcc}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [inreplyto]}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{inreplyto})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::inreplyto($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [inreplyto]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{inreplyto}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [messageid]}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{messageid})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::messageid($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [messageid]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{messageid}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = bless {}, "Mail::IMAPClient::BodyStructure::Envelope"; + $return->{$_} = $item{$_} + for qw/date subject from sender replyto to cc/ + , qw/bcc inreplyto messageid/; + 1; + }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['(' date subject from sender replyto to cc bcc inreplyto messageid ')']<<}, + Parse::RecDescent::_tracefirst($text), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{envelopestruct}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{envelopestruct}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{envelopestruct}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::replyto +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"replyto"}; + + Parse::RecDescent::_trace(q{Trying rule: [replyto]}, + Parse::RecDescent::_tracefirst($_[1]), + q{replyto}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{ADDRESSES}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [ADDRESSES]}, + Parse::RecDescent::_tracefirst($_[1]), + q{replyto}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{replyto}); + %item = (__RULE__ => q{replyto}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [ADDRESSES]}, + Parse::RecDescent::_tracefirst($text), + q{replyto}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::ADDRESSES($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{replyto}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [ADDRESSES]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{replyto}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{ADDRESSES}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [ADDRESSES]<<}, + Parse::RecDescent::_tracefirst($text), + q{replyto}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{replyto}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{replyto}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{replyto}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{replyto}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::mailboxname +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"mailboxname"}; + + Parse::RecDescent::_trace(q{Trying rule: [mailboxname]}, + Parse::RecDescent::_tracefirst($_[1]), + q{mailboxname}, + $tracelevel) + if defined $::RD_TRACE; + + my $def_at = @{$thisparser->{deferred}}; + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NIL, or STRING}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NIL]}, + Parse::RecDescent::_tracefirst($_[1]), + q{mailboxname}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{mailboxname}); + %item = (__RULE__ => q{mailboxname}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NIL]}, + Parse::RecDescent::_tracefirst($text), + q{mailboxname}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::NIL($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{mailboxname}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NIL]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{mailboxname}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NIL}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [NIL]<<}, + Parse::RecDescent::_tracefirst($text), + q{mailboxname}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [STRING]}, + Parse::RecDescent::_tracefirst($_[1]), + q{mailboxname}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{mailboxname}); + %item = (__RULE__ => q{mailboxname}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [STRING]}, + Parse::RecDescent::_tracefirst($text), + q{mailboxname}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse::STRING($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{mailboxname}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [STRING]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{mailboxname}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{STRING}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [STRING]<<}, + Parse::RecDescent::_tracefirst($text), + q{mailboxname}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + splice + @{$thisparser->{deferred}}, $def_at unless $_matched; + + unless ( $_matched || defined($score) ) + { + splice @{$thisparser->{deferred}}, $def_at; + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{mailboxname}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{mailboxname}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{mailboxname}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{mailboxname}, + $tracelevel) + } + $_[1] = $text; + return $return; +} +} +package Mail::IMAPClient::BodyStructure::Parse; sub new { my $self = bless( { + '_precompiled' => 1, + 'localvars' => '', + 'startcode' => '', + 'namespace' => 'Parse::RecDescent::Mail::IMAPClient::BodyStructure::Parse', + 'deferrable' => 1, + 'rules' => { + 'bodyparms' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'KVPAIRS' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 66 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'KVPAIRS', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 66 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 66 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'bodyparms', + 'vars' => '', + 'line' => 66 + }, 'Parse::RecDescent::Rule' ), + 'date' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'STRING' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 93 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 93 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 93 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'date', + 'vars' => '', + 'line' => 93 + }, 'Parse::RecDescent::Rule' ), + 'bodysubtype' => bless( { + 'impcount' => 0, + 'calls' => [ + 'PLAIN', + 'HTML', + 'NIL', + 'STRING' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'PLAIN', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 54 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'HTML', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 54 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 54 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '2', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 54 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 54 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '3', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 54 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 54 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'bodysubtype', + 'vars' => '', + 'line' => 54 + }, 'Parse::RecDescent::Rule' ), + 'hostname' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'STRING' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 80 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 80 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 80 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'hostname', + 'vars' => '', + 'line' => 80 + }, 'Parse::RecDescent::Rule' ), + 'basicfields' => bless( { + 'impcount' => 0, + 'calls' => [ + 'bodysubtype', + 'bodyparms', + 'bodyid', + 'bodydesc', + 'bodyenc', + 'bodysize' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'bodysubtype', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 114 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'bodyparms', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 114 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodyid', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 114 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodydesc', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 115 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodyenc', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 115 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodysize', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 115 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 116, + 'code' => '{ $return = { bodysubtype => $item{bodysubtype} }; + take_optional_items($return, \\%item, + qw/bodyparms bodyid bodydesc bodyenc bodysize/); + 1; + }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'basicfields', + 'vars' => '', + 'line' => 114 + }, 'Parse::RecDescent::Rule' ), + 'personalname' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'STRING' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 77 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 77 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 77 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'personalname', + 'vars' => '', + 'line' => 77 + }, 'Parse::RecDescent::Rule' ), + 'key' => bless( { + 'impcount' => 0, + 'calls' => [ + 'STRING' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 56 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'key', + 'vars' => '', + 'line' => 56 + }, 'Parse::RecDescent::Rule' ), + 'cc' => bless( { + 'impcount' => 0, + 'calls' => [ + 'ADDRESSES' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'ADDRESSES', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 98 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'cc', + 'vars' => '', + 'line' => 98 + }, 'Parse::RecDescent::Rule' ), + 'bodyMD5' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'STRING' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 72 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 72 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 72 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'bodyMD5', + 'vars' => '', + 'line' => 72 + }, 'Parse::RecDescent::Rule' ), + 'envelope' => bless( { + 'impcount' => 0, + 'calls' => [ + 'envelopestruct' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 2, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '.*?\\(.*?ENVELOPE', + 'hashname' => '__PATTERN1__', + 'description' => '/.*?\\\\(.*?ENVELOPE/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 188, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'subrule' => 'envelopestruct', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 188 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => '.*\\)', + 'hashname' => '__PATTERN2__', + 'description' => '/.*\\\\)/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 188, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 189, + 'code' => '{ $return = $item{envelopestruct} }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'envelope', + 'vars' => '', + 'line' => 188 + }, 'Parse::RecDescent::Rule' ), + 'MESSAGE' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '^"MESSAGE"|^MESSAGE', + 'hashname' => '__PATTERN1__', + 'description' => '/^"MESSAGE"|^MESSAGE/i', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 32, + 'mod' => 'i', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 32, + 'code' => '{ $return = "MESSAGE"}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'MESSAGE', + 'vars' => '', + 'line' => 32 + }, 'Parse::RecDescent::Rule' ), + 'DOUBLE_QUOTED_STRING' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 2, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '"', + 'hashname' => '__STRING1__', + 'description' => '\'"\'', + 'lookahead' => 0, + 'line' => 41 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => '(?:\\\\"|[^"])*', + 'hashname' => '__PATTERN1__', + 'description' => '/(?:\\\\\\\\"|[^"])*/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 41, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'pattern' => '"', + 'hashname' => '__STRING2__', + 'description' => '\'"\'', + 'lookahead' => 0, + 'line' => 41 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 41, + 'code' => '{ $return = $item{__PATTERN1__} }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'DOUBLE_QUOTED_STRING', + 'vars' => '', + 'line' => 41 + }, 'Parse::RecDescent::Rule' ), + 'subject' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'STRING' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 90 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 90 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 90 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'subject', + 'vars' => '', + 'line' => 90 + }, 'Parse::RecDescent::Rule' ), + 'value' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'NUMBER', + 'STRING', + 'KVPAIRS' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 57 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NUMBER', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 57 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 57 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '2', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 57 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 57 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '3', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'KVPAIRS', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 57 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 57 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'value', + 'vars' => '', + 'line' => 57 + }, 'Parse::RecDescent::Rule' ), + 'inreplyto' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'STRING' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 91 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 91 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 91 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'inreplyto', + 'vars' => '', + 'line' => 91 + }, 'Parse::RecDescent::Rule' ), + 'messageid' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'STRING' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 92 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 92 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 92 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'messageid', + 'vars' => '', + 'line' => 92 + }, 'Parse::RecDescent::Rule' ), + 'sender' => bless( { + 'impcount' => 0, + 'calls' => [ + 'ADDRESSES' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'ADDRESSES', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 102 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'sender', + 'vars' => '', + 'line' => 102 + }, 'Parse::RecDescent::Rule' ), + 'multipart' => bless( { + 'impcount' => 0, + 'calls' => [ + 'subpart', + 'bodysubtype', + 'bodyparms', + 'bodydisp', + 'bodylang', + 'bodyloc', + 'bodyextra' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 2, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'subpart', + 'expected' => undef, + 'min' => 1, + 'argcode' => undef, + 'max' => 100000000, + 'matchrule' => 0, + 'repspec' => 's', + 'lookahead' => 0, + 'line' => 162 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'hashname' => '__DIRECTIVE1__', + 'name' => '', + 'lookahead' => 0, + 'line' => 162, + 'code' => '$commit = 1' + }, 'Parse::RecDescent::Directive' ), + bless( { + 'subrule' => 'bodysubtype', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 162 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'bodyparms', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 163 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodydisp', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 163 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodylang', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 163 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodyloc', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 163 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodyextra', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 163 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'hashname' => '__DIRECTIVE2__', + 'name' => '', + 'lookahead' => 0, + 'line' => 164, + 'code' => 'push @{$thisparser->{deferred}}, sub { $subpartCount = 0 };' + }, 'Parse::RecDescent::Directive' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 165, + 'code' => '{ $return = + { bodysubtype => $item{bodysubtype} + , bodytype => \'MULTIPART\' + , bodystructure => $item{\'subpart(s)\'} + }; + take_optional_items($return, \\%item + , qw/bodyparms bodydisp bodylang bodyloc bodyextra/); + 1; + }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'multipart', + 'vars' => '', + 'line' => 162 + }, 'Parse::RecDescent::Rule' ), + 'bodyenc' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'STRING', + 'KVPAIRS' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 71 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 71 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 71 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '2', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'KVPAIRS', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 71 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 71 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'bodyenc', + 'vars' => '', + 'line' => 71 + }, 'Parse::RecDescent::Rule' ), + 'bodydesc' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'STRING' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => '[()]', + 'hashname' => '__PATTERN1__', + 'description' => '/[()]/', + 'lookahead' => -1, + 'rdelim' => '/', + 'line' => 69, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 69 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 69 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 69 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'bodydesc', + 'vars' => '', + 'line' => 69 + }, 'Parse::RecDescent::Rule' ), + 'start' => bless( { + 'impcount' => 0, + 'calls' => [ + 'part' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 2, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '.*?\\(.*?BODYSTRUCTURE \\(', + 'hashname' => '__PATTERN1__', + 'description' => '/.*?\\\\(.*?BODYSTRUCTURE \\\\(/i', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 185, + 'mod' => 'i', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'subrule' => 'part', + 'expected' => undef, + 'min' => 1, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '1', + 'lookahead' => 0, + 'line' => 185 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'pattern' => '\\).*\\)\\r?\\n?', + 'hashname' => '__PATTERN2__', + 'description' => '/\\\\).*\\\\)\\\\r?\\\\n?/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 185, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 186, + 'code' => '{ $return = $item{\'part(1)\'}[0] }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'start', + 'vars' => '', + 'line' => 185 + }, 'Parse::RecDescent::Rule' ), + 'RFC822' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '^"RFC822"|^RFC822', + 'hashname' => '__PATTERN1__', + 'description' => '/^"RFC822"|^RFC822/i', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 33, + 'mod' => 'i', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 33, + 'code' => '{ $return = "RFC822" }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'RFC822', + 'vars' => '', + 'line' => 33 + }, 'Parse::RecDescent::Rule' ), + 'RFCNONCOMPLY' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '^\\(\\)', + 'hashname' => '__PATTERN1__', + 'description' => '/^\\\\(\\\\)/i', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 35, + 'mod' => 'i', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 35, + 'code' => '{ $return = "NIL" }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'RFCNONCOMPLY', + 'vars' => '', + 'line' => 35 + }, 'Parse::RecDescent::Rule' ), + 'textmessage' => bless( { + 'impcount' => 0, + 'calls' => [ + 'TEXT', + 'basicfields', + 'textlines', + 'bodyMD5', + 'bodydisp', + 'bodylang', + 'bodyextra' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 1, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'TEXT', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 122 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__DIRECTIVE1__', + 'name' => '', + 'lookahead' => 0, + 'line' => 122, + 'code' => '$commit = 1' + }, 'Parse::RecDescent::Directive' ), + bless( { + 'subrule' => 'basicfields', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 122 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'textlines', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 122 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodyMD5', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 122 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodydisp', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 123 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodylang', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 123 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodyextra', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 123 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 124, + 'code' => '{ + $return = $item{basicfields} || {}; + $return->{bodytype} = \'TEXT\'; + take_optional_items($return, \\%item + , qw/textlines bodyMD5 bodydisp bodylang bodyextra/); + 1; + }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'textmessage', + 'vars' => '', + 'line' => 122 + }, 'Parse::RecDescent::Rule' ), + 'bodyid' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'STRING' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => '[()]', + 'hashname' => '__PATTERN1__', + 'description' => '/[()]/', + 'lookahead' => -1, + 'rdelim' => '/', + 'line' => 68, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 68 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 68 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 68 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'bodyid', + 'vars' => '', + 'line' => 68 + }, 'Parse::RecDescent::Rule' ), + 'bodyextra' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'STRING', + 'STRINGS' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 74 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 74 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 74 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '2', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRINGS', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 74 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 74 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'bodyextra', + 'vars' => '', + 'line' => 74 + }, 'Parse::RecDescent::Rule' ), + 'othertypemessage' => bless( { + 'impcount' => 0, + 'calls' => [ + 'bodytype', + 'basicfields', + 'bodyMD5', + 'bodydisp', + 'bodylang', + 'bodyextra' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'bodytype', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 132 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'basicfields', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 132 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'bodyMD5', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 132 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodydisp', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 132 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodylang', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 133 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodyextra', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 133 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 134, + 'code' => '{ $return = { bodytype => $item{bodytype} }; + take_optional_items($return, \\%item + , qw/bodyMD5 bodydisp bodylang bodyextra/ ); + merge_hash($return, $item{basicfields}); + 1; + }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'othertypemessage', + 'vars' => '', + 'line' => 132 + }, 'Parse::RecDescent::Rule' ), + 'kvpair' => bless( { + 'impcount' => 0, + 'calls' => [ + 'key', + 'value' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => ')', + 'hashname' => '__STRING1__', + 'description' => '\')\'', + 'lookahead' => -1, + 'line' => 59 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'subrule' => 'key', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 59 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'value', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 59 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 60, + 'code' => '{ $return = { $item{key} => $item{value} } }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'kvpair', + 'vars' => '', + 'line' => 59 + }, 'Parse::RecDescent::Rule' ), + 'bodysize' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'NUMBER' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => '[()]', + 'hashname' => '__PATTERN1__', + 'description' => '/[()]/', + 'lookahead' => -1, + 'rdelim' => '/', + 'line' => 70, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 70 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NUMBER', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 70 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 70 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'bodysize', + 'vars' => '', + 'line' => 70 + }, 'Parse::RecDescent::Rule' ), + 'STRING' => bless( { + 'impcount' => 0, + 'calls' => [ + 'DOUBLE_QUOTED_STRING', + 'SINGLE_QUOTED_STRING', + 'BARESTRING' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'DOUBLE_QUOTED_STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 46 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'SINGLE_QUOTED_STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 46 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 46 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '2', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'BARESTRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 46 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 46 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'STRING', + 'vars' => '', + 'line' => 46 + }, 'Parse::RecDescent::Rule' ), + 'bodytype' => bless( { + 'impcount' => 0, + 'calls' => [ + 'STRING' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 65 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'bodytype', + 'vars' => '', + 'line' => 65 + }, 'Parse::RecDescent::Rule' ), + 'TEXT' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '^"TEXT"|^TEXT', + 'hashname' => '__PATTERN1__', + 'description' => '/^"TEXT"|^TEXT/i', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 29, + 'mod' => 'i', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 29, + 'code' => '{ $return = "TEXT" }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'TEXT', + 'vars' => '', + 'line' => 27 + }, 'Parse::RecDescent::Rule' ), + 'to' => bless( { + 'impcount' => 0, + 'calls' => [ + 'ADDRESSES' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'ADDRESSES', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 103 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'to', + 'vars' => '', + 'line' => 103 + }, 'Parse::RecDescent::Rule' ), + 'NIL' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '^NIL', + 'hashname' => '__PATTERN1__', + 'description' => '/^NIL/i', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 34, + 'mod' => 'i', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 34, + 'code' => '{ $return = "NIL" }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'NIL', + 'vars' => '', + 'line' => 34 + }, 'Parse::RecDescent::Rule' ), + 'KVPAIRS' => bless( { + 'impcount' => 0, + 'calls' => [ + 'kvpair' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 2, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '(', + 'hashname' => '__STRING1__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 62 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'subrule' => 'kvpair', + 'expected' => undef, + 'min' => 1, + 'argcode' => undef, + 'max' => 100000000, + 'matchrule' => 0, + 'repspec' => 's', + 'lookahead' => 0, + 'line' => 62 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING2__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 62 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 63, + 'code' => '{ $return = { map { (%$_) } @{$item{\'kvpair(s)\'}} } }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'KVPAIRS', + 'vars' => '', + 'line' => 62 + }, 'Parse::RecDescent::Rule' ), + 'from' => bless( { + 'impcount' => 0, + 'calls' => [ + 'ADDRESSES' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'ADDRESSES', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 100 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'from', + 'vars' => '', + 'line' => 100 + }, 'Parse::RecDescent::Rule' ), + 'bodystructure' => bless( { + 'impcount' => 0, + 'calls' => [ + 'part' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 2, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '(', + 'hashname' => '__STRING1__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 182 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'subrule' => 'part', + 'expected' => undef, + 'min' => 1, + 'argcode' => undef, + 'max' => 100000000, + 'matchrule' => 0, + 'repspec' => 's', + 'lookahead' => 0, + 'line' => 182 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING2__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 182 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 183, + 'code' => '{ $return = $item{\'part(s)\'} }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'bodystructure', + 'vars' => '', + 'line' => 182 + }, 'Parse::RecDescent::Rule' ), + 'PLAIN' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '^"PLAIN"|^PLAIN', + 'hashname' => '__PATTERN1__', + 'description' => '/^"PLAIN"|^PLAIN/i', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 30, + 'mod' => 'i', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 30, + 'code' => '{ $return = "PLAIN" }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'PLAIN', + 'vars' => '', + 'line' => 30 + }, 'Parse::RecDescent::Rule' ), + 'NUMBER' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '^(\\d+)', + 'hashname' => '__PATTERN1__', + 'description' => '/^(\\\\d+)/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 36, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 36, + 'code' => '{ $return = $item[1] }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'NUMBER', + 'vars' => '', + 'line' => 36 + }, 'Parse::RecDescent::Rule' ), + 'STRINGS' => bless( { + 'impcount' => 0, + 'calls' => [ + 'STRING' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 2, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '(', + 'hashname' => '__STRING1__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 48 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'subrule' => 'STRING', + 'expected' => undef, + 'min' => 1, + 'argcode' => undef, + 'max' => 100000000, + 'matchrule' => 0, + 'repspec' => 's', + 'lookahead' => 0, + 'line' => 48 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING2__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 48 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 48, + 'code' => '{ $return = $item{\'STRING(s)\'} }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'STRINGS', + 'vars' => '', + 'line' => 48 + }, 'Parse::RecDescent::Rule' ), + 'HTML' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '"HTML"|HTML', + 'hashname' => '__PATTERN1__', + 'description' => '/"HTML"|HTML/i', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 31, + 'mod' => 'i', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 31, + 'code' => '{ $return = "HTML" }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'HTML', + 'vars' => '', + 'line' => 31 + }, 'Parse::RecDescent::Rule' ), + 'bodydisp' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'KVPAIRS' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 67 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'KVPAIRS', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 67 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 67 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'bodydisp', + 'vars' => '', + 'line' => 67 + }, 'Parse::RecDescent::Rule' ), + 'part' => bless( { + 'impcount' => 0, + 'calls' => [ + 'multipart', + 'textmessage', + 'nestedmessage', + 'othertypemessage' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'multipart', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 177 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 177, + 'code' => '{ $return = bless $item{multipart}, $mibs }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'textmessage', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 178 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 178, + 'code' => '{ $return = bless $item{textmessage}, $mibs }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 178 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '2', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'nestedmessage', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 179 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 179, + 'code' => '{ $return = bless $item{nestedmessage}, $mibs }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 179 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '3', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'othertypemessage', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 180 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 180, + 'code' => '{ $return = bless $item{othertypemessage}, $mibs }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 180 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'part', + 'vars' => '', + 'line' => 177 + }, 'Parse::RecDescent::Rule' ), + 'nestedmessage' => bless( { + 'impcount' => 0, + 'calls' => [ + 'rfc822message', + 'bodyparms', + 'bodyid', + 'bodydesc', + 'bodyenc', + 'bodysize', + 'envelopestruct', + 'bodystructure', + 'textlines', + 'bodyMD5', + 'bodydisp', + 'bodylang', + 'bodyextra' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 1, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'rfc822message', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 141 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__DIRECTIVE1__', + 'name' => '', + 'lookahead' => 0, + 'line' => 141, + 'code' => '$commit = 1' + }, 'Parse::RecDescent::Directive' ), + bless( { + 'subrule' => 'bodyparms', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 141 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'bodyid', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 141 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'bodydesc', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 141 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'bodyenc', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 141 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'bodysize', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 142 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'envelopestruct', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 143 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodystructure', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 143 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'textlines', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 143 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodyMD5', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 144 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodydisp', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 144 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodylang', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 144 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'bodyextra', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 144 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 145, + 'code' => '{ + $return = {}; + $return->{$_} = $item{$_} + for qw/bodyparms bodyid bodydesc bodyenc bodysize/; +# envelopestruct bodystructure textlines/; + + take_optional_items($return, \\%item + , qw/envelopestruct bodystructure textlines/ + , qw/bodyMD5 bodydisp bodylang bodyextra/); + + merge_hash($return, $item{bodystructure}[0]); + merge_hash($return, $item{basicfields}); + $return->{bodytype} = "MESSAGE" ; + $return->{bodysubtype} = "RFC822" ; + 1; + }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'nestedmessage', + 'vars' => '', + 'line' => 141 + }, 'Parse::RecDescent::Rule' ), + 'SINGLE_QUOTED_STRING' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 2, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '\'', + 'hashname' => '__STRING1__', + 'description' => '\'\'\'', + 'lookahead' => 0, + 'line' => 40 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'pattern' => '(?:\\\\\'|[^\'])*', + 'hashname' => '__PATTERN1__', + 'description' => '/(?:\\\\\\\\\'|[^\'])*/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 40, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'pattern' => '\'', + 'hashname' => '__STRING2__', + 'description' => '\'\'\'', + 'lookahead' => 0, + 'line' => 40 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 40, + 'code' => '{ $return = $item{__PATTERN1__} }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'SINGLE_QUOTED_STRING', + 'vars' => '', + 'line' => 38 + }, 'Parse::RecDescent::Rule' ), + 'ADDRESSES' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'RFCNONCOMPLY', + 'addressstruct' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 95 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'RFCNONCOMPLY', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 95 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 95 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '2', + 'strcount' => 2, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '(', + 'hashname' => '__STRING1__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 96 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'subrule' => 'addressstruct', + 'expected' => undef, + 'min' => 1, + 'argcode' => undef, + 'max' => 100000000, + 'matchrule' => 0, + 'repspec' => 's', + 'lookahead' => 0, + 'line' => 96 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING2__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 96 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 96, + 'code' => '{ $return = $item{\'addressstruct(s)\'} }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 96 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'ADDRESSES', + 'vars' => '', + 'line' => 95 + }, 'Parse::RecDescent::Rule' ), + 'bcc' => bless( { + 'impcount' => 0, + 'calls' => [ + 'ADDRESSES' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'ADDRESSES', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 99 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'bcc', + 'vars' => '', + 'line' => 99 + }, 'Parse::RecDescent::Rule' ), + 'rfc822message' => bless( { + 'impcount' => 0, + 'calls' => [ + 'MESSAGE', + 'RFC822' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'MESSAGE', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 52 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'RFC822', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 52 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 52, + 'code' => '{ $return = "MESSAGE RFC822" }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'rfc822message', + 'vars' => '', + 'line' => 52 + }, 'Parse::RecDescent::Rule' ), + 'addressstruct' => bless( { + 'impcount' => 0, + 'calls' => [ + 'personalname', + 'sourceroute', + 'mailboxname', + 'hostname' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 2, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '(', + 'hashname' => '__STRING1__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 82 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'subrule' => 'personalname', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 82 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'sourceroute', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 82 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'mailboxname', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 82 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'hostname', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 82 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING2__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 82 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 83, + 'code' => '{ bless { personalname => $item{personalname} + , sourceroute => $item{sourceroute} + , mailboxname => $item{mailboxname} + , hostname => $item{hostname} + }, \'Mail::IMAPClient::BodyStructure::Address\'; + }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'addressstruct', + 'vars' => '', + 'line' => 82 + }, 'Parse::RecDescent::Rule' ), + 'sourceroute' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'STRING' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 78 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 78 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 78 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'sourceroute', + 'vars' => '', + 'line' => 78 + }, 'Parse::RecDescent::Rule' ), + 'subpart' => bless( { + 'impcount' => 0, + 'calls' => [ + 'part' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 2, + 'dircount' => 1, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '(', + 'hashname' => '__STRING1__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 175 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'subrule' => 'part', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 175 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING2__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 175 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 175, + 'code' => '{$return = $item{part}}' + }, 'Parse::RecDescent::Action' ), + bless( { + 'hashname' => '__DIRECTIVE1__', + 'name' => '', + 'lookahead' => 0, + 'line' => 175, + 'code' => 'push @{$thisparser->{deferred}}, sub { ++$subpartCount; };' + }, 'Parse::RecDescent::Directive' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'subpart', + 'vars' => '', + 'line' => 175 + }, 'Parse::RecDescent::Rule' ), + 'textlines' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'NUMBER' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 50 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NUMBER', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 50 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 50 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'textlines', + 'vars' => '', + 'line' => 50 + }, 'Parse::RecDescent::Rule' ), + 'BARESTRING' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 2, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '^[)(\'"]', + 'hashname' => '__PATTERN1__', + 'description' => '/^[)(\'"]/', + 'lookahead' => -1, + 'rdelim' => '/', + 'line' => 43, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'pattern' => '^(?!\\(|\\))(?:\\\\ |\\S)+', + 'hashname' => '__PATTERN2__', + 'description' => '/^(?!\\\\(|\\\\))(?:\\\\\\\\ |\\\\S)+/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 43, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 44, + 'code' => '{ $return = $item{__PATTERN1__} }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'BARESTRING', + 'vars' => '', + 'line' => 43 + }, 'Parse::RecDescent::Rule' ), + 'bodyloc' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'STRING' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 75 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 75 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 75 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'bodyloc', + 'vars' => '', + 'line' => 75 + }, 'Parse::RecDescent::Rule' ), + 'bodylang' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'STRING', + 'STRINGS' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 73 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 73 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 73 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '2', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRINGS', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 73 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 73 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'bodylang', + 'vars' => '', + 'line' => 73 + }, 'Parse::RecDescent::Rule' ), + 'envelopestruct' => bless( { + 'impcount' => 0, + 'calls' => [ + 'date', + 'subject', + 'from', + 'sender', + 'replyto', + 'to', + 'cc', + 'bcc', + 'inreplyto', + 'messageid' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 2, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '(', + 'hashname' => '__STRING1__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 105 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'subrule' => 'date', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 105 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'subject', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 105 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'from', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 105 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'sender', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 105 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'replyto', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 105 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'to', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 105 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'cc', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 105 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'bcc', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 106 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'inreplyto', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 106 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'messageid', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 106 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING2__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 106 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 107, + 'code' => '{ $return = bless {}, "Mail::IMAPClient::BodyStructure::Envelope"; + $return->{$_} = $item{$_} + for qw/date subject from sender replyto to cc/ + , qw/bcc inreplyto messageid/; + 1; + }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'envelopestruct', + 'vars' => '', + 'line' => 105 + }, 'Parse::RecDescent::Rule' ), + 'replyto' => bless( { + 'impcount' => 0, + 'calls' => [ + 'ADDRESSES' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'ADDRESSES', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 101 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'replyto', + 'vars' => '', + 'line' => 101 + }, 'Parse::RecDescent::Rule' ), + 'mailboxname' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NIL', + 'STRING' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'NIL', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 79 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'STRING', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 79 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 79 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'mailboxname', + 'vars' => '', + 'line' => 79 + }, 'Parse::RecDescent::Rule' ) + }, + '_AUTOTREE' => undef, + '_check' => { + 'thisoffset' => '', + 'itempos' => '', + 'prevoffset' => '', + 'prevline' => '', + 'prevcolumn' => '', + 'thiscolumn' => '' + }, + '_AUTOACTION' => undef + }, 'Parse::RecDescent' ); +} \ No newline at end of file diff --git a/Mail-IMAPClient-3.25/lib/Mail/IMAPClient/BodyStructure/Parse.pod b/Mail-IMAPClient-3.27/lib/Mail/IMAPClient/BodyStructure/Parse.pod similarity index 100% rename from Mail-IMAPClient-3.25/lib/Mail/IMAPClient/BodyStructure/Parse.pod rename to Mail-IMAPClient-3.27/lib/Mail/IMAPClient/BodyStructure/Parse.pod diff --git a/Mail-IMAPClient-3.25/lib/Mail/IMAPClient/MessageSet.pm b/Mail-IMAPClient-3.27/lib/Mail/IMAPClient/MessageSet.pm similarity index 100% rename from Mail-IMAPClient-3.25/lib/Mail/IMAPClient/MessageSet.pm rename to Mail-IMAPClient-3.27/lib/Mail/IMAPClient/MessageSet.pm diff --git a/Mail-IMAPClient-3.25/lib/Mail/IMAPClient/Thread.grammar b/Mail-IMAPClient-3.27/lib/Mail/IMAPClient/Thread.grammar similarity index 100% rename from Mail-IMAPClient-3.25/lib/Mail/IMAPClient/Thread.grammar rename to Mail-IMAPClient-3.27/lib/Mail/IMAPClient/Thread.grammar diff --git a/Mail-IMAPClient-3.27/lib/Mail/IMAPClient/Thread.pm b/Mail-IMAPClient-3.27/lib/Mail/IMAPClient/Thread.pm new file mode 100644 index 0000000..03b6cdf --- /dev/null +++ b/Mail-IMAPClient-3.27/lib/Mail/IMAPClient/Thread.pm @@ -0,0 +1,1024 @@ +package Mail::IMAPClient::Thread; +use Parse::RecDescent; + +{ my $ERRORS; + + +package Parse::RecDescent::Mail::IMAPClient::Thread; +use strict; +use vars qw($skip $AUTOLOAD ); +@Parse::RecDescent::Mail::IMAPClient::Thread::ISA = (); +$skip = '\s*'; + + +{ +local $SIG{__WARN__} = sub {0}; +# PRETEND TO BE IN Parse::RecDescent NAMESPACE +*Parse::RecDescent::Mail::IMAPClient::Thread::AUTOLOAD = sub +{ + no strict 'refs'; + $AUTOLOAD =~ s/^Parse::RecDescent::Mail::IMAPClient::Thread/Parse::RecDescent/; + goto &{$AUTOLOAD}; +} +} + +push @Parse::RecDescent::Mail::IMAPClient::Thread::ISA, 'Parse::RecDescent'; +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::Thread::thread +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"thread"}; + + Parse::RecDescent::_trace(q{Trying rule: [thread]}, + Parse::RecDescent::_tracefirst($_[1]), + q{thread}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{'('}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['(' threadmember ')']}, + Parse::RecDescent::_tracefirst($_[1]), + q{thread}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{thread}); + %item = (__RULE__ => q{thread}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{thread}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "("; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [threadmember]}, + Parse::RecDescent::_tracefirst($text), + q{thread}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{threadmember})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::Thread::threadmember, 1, 100000000, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{thread}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [threadmember]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{thread}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{threadmember(s)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{thread}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = ")"; 1 } and + substr($text,0,length($_tok)) eq $_tok and + do { substr($text,0,length($_tok)) = ""; 1; } + ) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{thread}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { + $return = $item{'threadmember(s)'}||undef; + }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['(' threadmember ')']<<}, + Parse::RecDescent::_tracefirst($text), + q{thread}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{thread}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{thread}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{thread}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{thread}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::Thread::NUMBER +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"NUMBER"}; + + Parse::RecDescent::_trace(q{Trying rule: [NUMBER]}, + Parse::RecDescent::_tracefirst($_[1]), + q{NUMBER}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{/\\d+/}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/\\d+/]}, + Parse::RecDescent::_tracefirst($_[1]), + q{NUMBER}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{NUMBER}); + %item = (__RULE__ => q{NUMBER}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/\\d+/]}, Parse::RecDescent::_tracefirst($text), + q{NUMBER}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:\d+)/) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/\\d+/]<<}, + Parse::RecDescent::_tracefirst($text), + q{NUMBER}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{NUMBER}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{NUMBER}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{NUMBER}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{NUMBER}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::Thread::start +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"start"}; + + Parse::RecDescent::_trace(q{Trying rule: [start]}, + Parse::RecDescent::_tracefirst($_[1]), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{/^\\* THREAD /i}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/^\\* THREAD /i thread]}, + Parse::RecDescent::_tracefirst($_[1]), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{start}); + %item = (__RULE__ => q{start}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/^\\* THREAD /i]}, Parse::RecDescent::_tracefirst($text), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ m/\A(?:^\* THREAD )/i) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + $current_match = substr($text, $-[0], $+[0] - $-[0]); + substr($text,0,length($current_match),q{}); + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $current_match . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$current_match; + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [thread]}, + Parse::RecDescent::_tracefirst($text), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{thread})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::Mail::IMAPClient::Thread::thread, 0, 100000000, $_noactions,$expectation,sub { \@arg }))) + { + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [thread]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{thread(s?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { + $return=$item{'thread(s?)'}||undef; +}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/^\\* THREAD /i thread]<<}, + Parse::RecDescent::_tracefirst($text), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{start}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{start}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{start}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{start}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::Mail::IMAPClient::Thread::threadmember +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"threadmember"}; + + Parse::RecDescent::_trace(q{Trying rule: [threadmember]}, + Parse::RecDescent::_tracefirst($_[1]), + q{threadmember}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $current_match; + my $expectation = new Parse::RecDescent::Expectation(q{NUMBER, or thread}); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [NUMBER]}, + Parse::RecDescent::_tracefirst($_[1]), + q{threadmember}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{threadmember}); + %item = (__RULE__ => q{threadmember}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [NUMBER]}, + Parse::RecDescent::_tracefirst($text), + q{threadmember}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::Thread::NUMBER($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{threadmember}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [NUMBER]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{threadmember}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{NUMBER}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{threadmember}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = $item{NUMBER} ; }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [NUMBER]<<}, + Parse::RecDescent::_tracefirst($text), + q{threadmember}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [thread]}, + Parse::RecDescent::_tracefirst($_[1]), + q{threadmember}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{threadmember}); + %item = (__RULE__ => q{threadmember}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [thread]}, + Parse::RecDescent::_tracefirst($text), + q{threadmember}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::Mail::IMAPClient::Thread::thread($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($text), + q{threadmember}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [thread]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{threadmember}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{thread}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{threadmember}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $return = $item{thread} ; }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [thread]<<}, + Parse::RecDescent::_tracefirst($text), + q{threadmember}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<>}, + Parse::RecDescent::_tracefirst($_[1]), + q{threadmember}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{threadmember}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{threadmember}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{threadmember}, + $tracelevel) + } + $_[1] = $text; + return $return; +} +} +package Mail::IMAPClient::Thread; sub new { my $self = bless( { + '_precompiled' => 1, + 'localvars' => '', + 'startcode' => '', + 'namespace' => 'Parse::RecDescent::Mail::IMAPClient::Thread', + 'rules' => { + 'thread' => bless( { + 'impcount' => 0, + 'calls' => [ + 'threadmember' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 2, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '(', + 'hashname' => '__STRING1__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 10 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'subrule' => 'threadmember', + 'expected' => undef, + 'min' => 1, + 'argcode' => undef, + 'max' => 100000000, + 'matchrule' => 0, + 'repspec' => 's', + 'lookahead' => 0, + 'line' => 10 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING2__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 10 + }, 'Parse::RecDescent::InterpLit' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 11, + 'code' => '{ + $return = $item{\'threadmember(s)\'}||undef; + }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'thread', + 'vars' => '', + 'line' => 10 + }, 'Parse::RecDescent::Rule' ), + 'NUMBER' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => '\\d+', + 'hashname' => '__PATTERN1__', + 'description' => '/\\\\d+/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 3, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'NUMBER', + 'vars' => '', + 'line' => 1 + }, 'Parse::RecDescent::Rule' ), + 'start' => bless( { + 'impcount' => 0, + 'calls' => [ + 'thread' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '^\\* THREAD ', + 'hashname' => '__PATTERN1__', + 'description' => '/^\\\\* THREAD /i', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 16, + 'mod' => 'i', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ), + bless( { + 'subrule' => 'thread', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 100000000, + 'matchrule' => 0, + 'repspec' => 's?', + 'lookahead' => 0, + 'line' => 16 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 16, + 'code' => '{ + $return=$item{\'thread(s?)\'}||undef; +}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'start', + 'vars' => '', + 'line' => 15 + }, 'Parse::RecDescent::Rule' ), + 'threadmember' => bless( { + 'impcount' => 0, + 'calls' => [ + 'NUMBER', + 'thread' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'NUMBER', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 7 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 7, + 'code' => '{ $return = $item{NUMBER} ; }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'thread', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 8 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 8, + 'code' => '{ $return = $item{thread} ; }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 7 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'threadmember', + 'vars' => '', + 'line' => 5 + }, 'Parse::RecDescent::Rule' ) + }, + '_AUTOTREE' => undef, + '_check' => { + 'thisoffset' => '', + 'itempos' => '', + 'prevoffset' => '', + 'prevline' => '', + 'prevcolumn' => '', + 'thiscolumn' => '' + }, + '_AUTOACTION' => undef + }, 'Parse::RecDescent' ); +} \ No newline at end of file diff --git a/Mail-IMAPClient-3.25/lib/Mail/IMAPClient/Thread.pod b/Mail-IMAPClient-3.27/lib/Mail/IMAPClient/Thread.pod similarity index 100% rename from Mail-IMAPClient-3.25/lib/Mail/IMAPClient/Thread.pod rename to Mail-IMAPClient-3.27/lib/Mail/IMAPClient/Thread.pod diff --git a/Mail-IMAPClient-3.27/prepare_dist b/Mail-IMAPClient-3.27/prepare_dist new file mode 100755 index 0000000..1312151 --- /dev/null +++ b/Mail-IMAPClient-3.27/prepare_dist @@ -0,0 +1,43 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use File::Copy qw/move/; +use Parse::RecDescent 1.94; + +sub read_file { + my $file = shift; + local ( $/, *FH ); + open( FH, $file ) or return undef; + return ; +} + +build_parser( + 'lib/Mail/IMAPClient/BodyStructure/Parse.grammar', + 'Mail::IMAPClient::BodyStructure::Parse' +); + +build_parser( 'lib/Mail/IMAPClient/Thread.grammar', + 'Mail::IMAPClient::Thread' ); + +sub build_parser { + my ( $grammarfn, $package ) = @_; + + print("* building $package\n"); + + my $grammar = read_file($grammarfn) + or die("cannot read grammar from $grammarfn: $!\n"); + + Parse::RecDescent->Precompile( $grammar, $package ); + + # clumpsy output by Parse::RecDescent + my $outfn = $package . '.pm'; + $outfn =~ s/.*\:\://; + + my $realfn = $grammarfn; + $realfn =~ s/\.\w+$/.pm/; + + move( $outfn, $realfn ) + or die("cannot move $outfn to $realfn: $!\n"); +} diff --git a/Mail-IMAPClient-3.25/t/basic.t b/Mail-IMAPClient-3.27/t/basic.t similarity index 88% rename from Mail-IMAPClient-3.25/t/basic.t rename to Mail-IMAPClient-3.27/t/basic.t index e4ba40c..d35cd08 100644 --- a/Mail-IMAPClient-3.25/t/basic.t +++ b/Mail-IMAPClient-3.27/t/basic.t @@ -2,6 +2,7 @@ use strict; use warnings; +use IO::File qw(); use Test::More; use File::Temp qw(tempfile); @@ -32,7 +33,7 @@ BEGIN { @missing ? plan skip_all => "missing value for: @missing" - : plan tests => 77; + : plan tests => 85; } BEGIN { use_ok('Mail::IMAPClient') or exit; } @@ -134,15 +135,37 @@ my $append_file_size; $append_file_size = $size; } -# test append (string) -{ - ok( $imap->create($target), "create target" ); +ok( $imap->create($target), "create target" ); +ok( $imap->select($target), "select $target" ); +# Test append / append_string if we also have UID capability +SKIP: { + skip "UIDPLUS not supported", 3 unless $imap->has_capability("UIDPLUS"); + + my $ouid = $imap->Uid(); + $imap->Uid(1); + + # test with date that has a leading space + my $d = " 1-Jan-2011 01:02:03 -0500"; + my $uid = $imap->append_string( $target, $testmsg, undef, $d ); + ok( defined $uid, "append test message to $target with date (uid=$uid)" ); + ok( $imap->delete_message($uid), "delete_message $uid" ); + ok( $imap->uidexpunge($uid), "uidexpunge $uid" ); + + # multiple args joined internally in append() + $uid = $imap->append( $target, $testmsg, "Some extra text too" ); + ok( defined $uid, "append test message to $target with date (uid=$uid)" ); + ok( $imap->delete_message($uid), "delete_message $uid" ); + ok( $imap->uidexpunge($uid), "uidexpunge $uid" ); + + $imap->Uid($ouid); +} + +# test append +{ my $uid = $imap->append( $target, $testmsg ); ok( defined $uid, "append test message to $target" ); - ok( $imap->select($target), "select $target" ); - my $msg = ( $uidplus and $uid ) ? $uid : ( $imap->messages )[0]; my $size = $imap->size($msg); @@ -151,9 +174,13 @@ my $append_file_size; my $string = $imap->message_string($msg); ok( defined $string, "returned string" ); - cmp_ok( length($string), '==', $size, "string matches server size" ); + cmp_ok( length($string), '==', $size, "string == server size" ); { + my $var; + ok( $imap->message_to_file( \$var, $msg ), "to SCALAR ref" ); + cmp_ok( length($var), '==', $size, "correct size" ); + my ( $fh, $fn ) = tempfile UNLINK => 1; ok( $imap->message_to_file( $fn, $msg ), "to file $fn" ); @@ -162,7 +189,7 @@ my $append_file_size; cmp_ok( $size, '==', $append_file_size, "size matches string/file" ); - # save message/folder for use below... + # save first message/folder for use below... #OFF ok( $imap->delete($target), "delete folder $target" ); } @@ -399,6 +426,6 @@ sub ok_relaxed_logout { my $imap = shift; local ($@); my $rc = $imap->logout; - my $err = $imap->LastError || "OK"; - ok( ( $rc or $err =~ /^\* BYE/ ), "logout: $err" ); + my $err = $imap->LastError || ""; + ok( ( $rc or $err =~ /^\* BYE/ ), "logout" . ( $err ? ": $err" : "" ) ); } diff --git a/Mail-IMAPClient-3.25/t/body_string.t b/Mail-IMAPClient-3.27/t/body_string.t similarity index 100% rename from Mail-IMAPClient-3.25/t/body_string.t rename to Mail-IMAPClient-3.27/t/body_string.t diff --git a/Mail-IMAPClient-3.25/t/bodystructure.t b/Mail-IMAPClient-3.27/t/bodystructure.t similarity index 95% rename from Mail-IMAPClient-3.25/t/bodystructure.t rename to Mail-IMAPClient-3.27/t/bodystructure.t index 1995da4..8bcf3e6 100644 --- a/Mail-IMAPClient-3.25/t/bodystructure.t +++ b/Mail-IMAPClient-3.27/t/bodystructure.t @@ -2,7 +2,7 @@ use strict; use warnings; -use Test::More tests => 20; +use Test::More tests => 27; BEGIN { use_ok('Mail::IMAPClient::BodyStructure') or exit; } @@ -98,3 +98,20 @@ $bsobj = Mail::IMAPClient::BodyStructure->new($bs9); ok( defined $bsobj, 'parsed ninth' ); is_deeply( [ $bsobj->parts ], \@exp, 'bs9 parts' ) or diag( join(" ", $bsobj->parts ) ); + +# envelope +# date, subject, from, sender, reply-to, to, cc, bcc, in-reply-to, message-id +{ + my $resp = q{* 2 FETCH (UID 42895 ENVELOPE ("Mon, 29 Nov 2010 18:28:23 +0200" "subj" (("Phil Pearl" NIL "phil+from" "dom.loc")) (("Phil Pearl" NIL "phil+sender" "dom.loc")) () ((NIL NIL "phil+to" "dom.loc")) NIL NIL NIL ""))}; + my $env = Mail::IMAPClient::BodyStructure::Envelope->new($resp); + is( $env->subject, "subj", "subject" ); + is( $env->inreplyto, "NIL", "inreplyto" ); + is( $env->messageid, "", "messageid" ); + is( $env->bcc, "NIL", "bcc" ); + is( $env->cc, "NIL", "cc" ); + is( $env->replyto, "NIL", "replyto" ); + + # personalname mailboxname hostname sourcename + my $to = $env->to_addresses; + is_deeply( $to, [ '' ], "to_addresses" ); +} diff --git a/Mail-IMAPClient-3.25/t/fetch_hash.t b/Mail-IMAPClient-3.27/t/fetch_hash.t similarity index 87% rename from Mail-IMAPClient-3.25/t/fetch_hash.t rename to Mail-IMAPClient-3.27/t/fetch_hash.t index 179ebf5..5ce15a0 100644 --- a/Mail-IMAPClient-3.25/t/fetch_hash.t +++ b/Mail-IMAPClient-3.27/t/fetch_hash.t @@ -9,7 +9,7 @@ use strict; use warnings; -use Test::More tests => 18; +use Test::More tests => 19; BEGIN { use_ok('Mail::IMAPClient') or exit; } @@ -110,6 +110,19 @@ my @tests = ( [ [1], qw(BODY.PEEK[]) ], { "1" => { "BODY.PEEK[]" => q{foo}, }, }, ], + [ + "escaped subject", + [ q{* 1 FETCH (UID 1 X-SAVEDATE "28-Jan-2011 16:52:31 -0500" FLAGS (\Seen) ENVELOPE ("Fri, 28 Jan 2011 00:03:30 -0500" "foo \\"bar\\" baz\'s" (("Phil Pearl" NIL "phil" "dom.loc")) (("Phil Pearl" NIL "phil" "dom.loc")) (("Phil Pearl" NIL "phil" "dom.loc")) ((NIL NIL "phil" "dom.loc")) NIL NIL NIL "")) } ], + [ [1], qw(UID X-SAVEDATE FLAGS ENVELOPE) ], + { + "1" => { + 'X-SAVEDATE' => '28-Jan-2011 16:52:31 -0500', + 'UID' => '1', + 'FLAGS' => '\\Seen', + 'ENVELOPE' => q{"Fri, 28 Jan 2011 00:03:30 -0500" "foo \\"bar\\" baz\'s" (("Phil Pearl" NIL "phil" "dom.loc")) (("Phil Pearl" NIL "phil" "dom.loc")) (("Phil Pearl" NIL "phil" "dom.loc")) ((NIL NIL "phil" "dom.loc")) NIL NIL NIL ""} + }, + }, + ], [ "real life example", [ @@ -212,6 +225,10 @@ sub fetch { my ( $self, @args ) = @_; return $self->{_next_fetch_response} || []; } +sub Escaped_results { + my ( $self, @args ) = @_; + return $self->{_next_fetch_response} || []; +} package main; diff --git a/Mail-IMAPClient-3.25/t/messageset.t b/Mail-IMAPClient-3.27/t/messageset.t similarity index 100% rename from Mail-IMAPClient-3.25/t/messageset.t rename to Mail-IMAPClient-3.27/t/messageset.t diff --git a/Mail-IMAPClient-3.25/t/pod.t b/Mail-IMAPClient-3.27/t/pod.t similarity index 100% rename from Mail-IMAPClient-3.25/t/pod.t rename to Mail-IMAPClient-3.27/t/pod.t diff --git a/Mail-IMAPClient-3.25/t/simple.t b/Mail-IMAPClient-3.27/t/simple.t similarity index 100% rename from Mail-IMAPClient-3.25/t/simple.t rename to Mail-IMAPClient-3.27/t/simple.t diff --git a/Mail-IMAPClient-3.25/t/thread.t b/Mail-IMAPClient-3.27/t/thread.t similarity index 100% rename from Mail-IMAPClient-3.25/t/thread.t rename to Mail-IMAPClient-3.27/t/thread.t diff --git a/Mail-IMAPClient-3.25/test_template.txt b/Mail-IMAPClient-3.27/test_template.txt similarity index 100% rename from Mail-IMAPClient-3.25/test_template.txt rename to Mail-IMAPClient-3.27/test_template.txt diff --git a/Makefile b/Makefile index db0809e..494c6c5 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -# $Id: Makefile,v 1.57 2011/01/12 00:59:12 gilles Exp gilles $ +# $Id: Makefile,v 1.60 2011/02/21 02:20:38 gilles Exp gilles $ .PHONY: help usage all @@ -13,6 +13,7 @@ usage: @echo "make test3xx # run tests with (last) Mail-IMAPClient-3.xy" @echo "make test229 # run tests with Mail-IMAPClient-2.2.9" @echo "make tests_win32 # run tests on win32" + @echo "make tests_win32_dev # run test2.bat on win32" @echo "make all " @echo "make upload_index" @echo "make imapsync.exe" @@ -62,18 +63,16 @@ imapsync.1: imapsync pod2man imapsync > imapsync.1 install: testp imapsync.1 + mkdir -p $(DESTDIR)/usr/bin install imapsync $(DESTDIR)/usr/bin/imapsync - install imapsync.1 $(DESTDIR)/usr/share/man/man1/imapsync.1 chmod 755 $(DESTDIR)/usr/bin/imapsync + mkdir -p $(DESTDIR)/usr/share/man/man1 + install imapsync.1 $(DESTDIR)/usr/share/man/man1/imapsync.1 + chmod 644 $(DESTDIR)/usr/share/man/man1/imapsync.1 +.PHONY: cidone ci -deb: - echo making debball $(DEB_FILE) - mkdir -p ../prepa_deb - cd ../prepa_deb && tar xzvf ../prepa_dist/$(DIST_FILE) &&\ - cd ../prepa_dist/$(DIST_NAME) - -.PHONY: cidone +ci: cidone cidone: rcsdiff RCS/* @@ -91,7 +90,7 @@ test_quick_229: imapsync tests.sh CMD_PERL='perl -I./Mail-IMAPClient-2.2.9' /usr/bin/time sh tests.sh locallocal 1>/dev/null test_quick_3xx: imapsync tests.sh - CMD_PERL='perl -I./Mail-IMAPClient-3.25/lib' /usr/bin/time sh tests.sh locallocal 1>/dev/null + CMD_PERL='perl -I./Mail-IMAPClient-3.27/lib' /usr/bin/time sh tests.sh locallocal 1>/dev/null testv: nice -40 sh -x tests.sh @@ -109,7 +108,7 @@ test229: .test_229 touch .test_229 .test_3xx: imapsync tests.sh - CMD_PERL='perl -I./Mail-IMAPClient-3.25/lib' /usr/bin/time sh tests.sh 1>/dev/null + CMD_PERL='perl -I./Mail-IMAPClient-3.27/lib' /usr/bin/time sh tests.sh 1>/dev/null touch .test_3xx testf: clean_test test @@ -122,8 +121,8 @@ upload_index: index.shtml ../../public_html/www.linux-france.org/html/prj/imapsync/ sh $(HOME)/memo/lfo-rsync -.dosify_bat: build_exe.bat test_exe.bat test.bat - unix2dos build_exe.bat test.bat test_exe.bat +.dosify_bat: build_exe.bat test_exe.bat test.bat test2.bat + unix2dos build_exe.bat test.bat test_exe.bat test2.bat touch .dosify_bat dosify_bat: .dosify_bat @@ -139,6 +138,10 @@ tests_win32: dosify_bat # ssh Admin@c 'tasklist /FI "PID eq 0"' # ssh Admin@c 'tasklist /NH /FO CSV' +tests_win32_dev: dosify_bat + scp imapsync test2.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/' + ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/test2.bat' + test_imapsync_exe: dosify_bat scp test_exe.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/' time ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/test_exe.bat' @@ -161,14 +164,14 @@ imapsync.exe: imapsync build_exe.bat test_exe.bat .dosify_bat imapsync_elf_x86.bin: imapsync rcsdiff imapsync { test 'vadrouille' = "`hostname`" && \ - pp -o imapsync_elf_x86.bin -I Mail-IMAPClient-3.25/lib \ + pp -o imapsync_elf_x86.bin -I Mail-IMAPClient-3.27/lib \ -M Mail::IMAPClient -M IO::Socket -M IO::Socket::SSL \ -M Digest::MD5 -M Digest::HMAC_MD5 -M Term::ReadKey \ -M Authen::NTLM \ imapsync ; \ } || : { test 'petite' = "`hostname`" && \ - pp -o imapsync_elf_x86.bin -I Mail-IMAPClient-3.25/lib \ + pp -o imapsync_elf_x86.bin -I Mail-IMAPClient-3.27/lib \ -M Mail::IMAPClient -M IO::Socket -M IO::Socket::SSL \ -M Digest::MD5 -M Digest::HMAC_MD5 -M Term::ReadKey \ -M Authen::NTLM \ @@ -177,7 +180,7 @@ imapsync_elf_x86.bin: imapsync imapsync ; \ } || : { test 'ks200821.kimsufi.com' = "`hostname`" && \ - pp -o imapsync_elf_x86.bin -I Mail-IMAPClient-3.25/lib \ + pp -o imapsync_elf_x86.bin -I Mail-IMAPClient-3.27/lib \ -M Mail::IMAPClient -M IO::Socket -M IO::Socket::SSL \ -M Digest::MD5 -M Digest::HMAC_MD5 -M Term::ReadKey \ -M Authen::NTLM \ @@ -204,12 +207,17 @@ tarball: cidone all imapsync_elf_x86.bin imapsync.exe cd ../prepa_dist && md5sum -c $(DIST_FILE).md5.txt ls -l ../prepa_dist/$(DIST_FILE) +ks: + rsync -av . imapsync@ks.lamiral.info:public_html/imapsync + { cd /g/var/paypal_reply/ &&\ + rsync -av url_exe url_release url_source imapsync@ks.lamiral.info:/g/var/paypal_reply/ \ + ; } upload_lfo: #rm -rf /home/gilles/public_html/www.linux-france.org/html/prj/imapsync/ #rm -rf /home/gilles/public_html/www.linux-france.org/ftp/prj/imapsync/ rsync -avH ./ChangeLog ./COPYING ./CREDITS ./FAQ \ - ./index.shtml ./INSTALL \ + ./index.shtml ./INSTALL ./TIME \ ./logo_imapsync.png ./logo_imapsync_s.png \ ./paypal.shtml ./README ./style.css ./TODO ./VERSION ./VERSION_EXE \ /home/gilles/public_html/www.linux-france.org/html/prj/imapsync/ diff --git a/README b/README index 7274c33..1242f65 100644 --- a/README +++ b/README @@ -3,7 +3,7 @@ NAME Synchronise mailboxes between two imap servers. Good at IMAP migration. More than 36 different IMAP server softwares supported with success. - $Revision: 1.398 $ + $Revision: 1.404 $ SYNOPSIS To synchronise imap account "foo" on "imap.truc.org" to imap account @@ -371,7 +371,7 @@ IMAP SERVERS HUGE MIGRATION Pay special attention to options --subscribed --subscribe --delete --delete2 --delete2folders --expunge --expunge1 --expunge2 --uidexpunge2 - --maxage --minage --maxsize --useheader --fast + --maxage --minage --maxsize --useheader --fast --useuid --usecache If you have many mailboxes to migrate think about a little shell program. Write a file called file.csv (for example) containing users and @@ -417,5 +417,5 @@ SIMILAR SOFTWARES Feedback (good or bad) will often be welcome. - $Id: imapsync,v 1.398 2011/01/18 03:03:24 gilles Exp gilles $ + $Id: imapsync,v 1.404 2011/02/21 03:35:39 gilles Exp gilles $ diff --git a/TIME b/TIME index baa7434..72c75d7 100644 --- a/TIME +++ b/TIME @@ -1,3 +1,7 @@ +200 Added --useuid. +110 Started to allow copy by uid. Added --notakebody + 60 Fixed cache, dealing with filenames containing \ characters. +210 Fixed cache (chose only the greatest uid with dupplicate 11_21+11_201 or 11_21+101_21) 180 Added --authmd51 and --authmd52. --delete2foldersbutnot. Release 1.398 public. Payment in EUR. 60 Added info about biggest messages. --debugimap* implies --debug 130 Added delete2foldersnot option. diff --git a/VERSION b/VERSION index f9cb03d..c0d870c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.398 +1.404 diff --git a/VERSION_EXE b/VERSION_EXE index f8ace8d..4449725 100644 --- a/VERSION_EXE +++ b/VERSION_EXE @@ -1 +1 @@ -1.398 +1.404 diff --git a/i3 b/i3 index 48179da..d60b776 100755 --- a/i3 +++ b/i3 @@ -1,4 +1,4 @@ #!/bin/sh -perl -IMail-IMAPClient-3.25/lib ./imapsync "$@" +perl -IMail-IMAPClient-3.27/lib ./imapsync "$@" diff --git a/imapsync b/imapsync index e79b598..00682b8 100755 --- a/imapsync +++ b/imapsync @@ -20,7 +20,7 @@ tool. Synchronise mailboxes between two imap servers. Good at IMAP migration. More than 36 different IMAP server softwares supported with success. -$Revision: 1.398 $ +$Revision: 1.404 $ =head1 SYNOPSIS @@ -436,6 +436,8 @@ Pay special attention to options --maxsize --useheader --fast +--useuid +--usecache If you have many mailboxes to migrate think about a little shell program. Write a file called file.csv (for example) @@ -489,7 +491,7 @@ Entries for imapsync: Feedback (good or bad) will often be welcome. -$Id: imapsync,v 1.398 2011/01/18 03:03:24 gilles Exp gilles $ +$Id: imapsync,v 1.404 2011/02/21 03:35:39 gilles Exp gilles $ =cut @@ -514,7 +516,7 @@ use File::Spec; use File::Path qw(mkpath rmtree); use IO::Socket qw(:crlf SOL_SOCKET SO_KEEPALIVE); use Errno qw(EAGAIN EPIPE ECONNRESET); -use File::Glob ':glob' ; +use File::Glob qw( :glob ) ; use IO::File; use Test::More 'no_plan'; @@ -589,14 +591,15 @@ my( $max_msg_size_in_bytes, $modules_version, $delete2folders, $delete2foldersonly, $delete2foldersbutnot, - $usecache, + $usecache, $debugcache, + $takebody, %h1_msgs_copy_by_uid, $useuid, $h2_uidguess, ); # main program # global variables initialisation -$rcs = '$Id: imapsync,v 1.398 2011/01/18 03:03:24 gilles Exp gilles $ '; +$rcs = '$Id: imapsync,v 1.404 2011/02/21 03:35:39 gilles Exp gilles $ '; $total_bytes_transferred = 0; $total_bytes_skipped = 0; @@ -623,9 +626,13 @@ get_options(); $modules_version = defined($modules_version) ? $modules_version : 1; +# $SIG{ INT } = \&catch_continue ; + $releasecheck = defined($releasecheck) ? $releasecheck : 1; my $warn_release = ($releasecheck) ? check_last_release() : ''; +$SIG{ INT } = \&catch_exit ; + # default values $tmpdir ||= File::Spec->tmpdir(); @@ -634,6 +641,18 @@ $pidfile ||= $tmpdir . '/imapsync.pid'; # allow Mail::IMAPClient 3.0.xx by default $allow3xx = defined($allow3xx) ? $allow3xx : 1; +$takebody = defined($takebody) ? $takebody : 1; + +if ( $fast ) { + $useuid = 1 ; + $foldersizes = 0 ; +} + +# Activate --usecache if --useuid is set and no --nousecache +$usecache = 1 if ( $useuid and ( ! defined( $usecache ) ) ) ; + + + print banner_imapsync(@argv_copy); print "Temp directory is $tmpdir\n"; @@ -644,7 +663,7 @@ write_pidfile($pidfile) if ($pidfile); $modules_version and print "Modules version list:\n", modules_VERSION(), "\n"; check_lib_version() or - die "imapsync needs perl lib Mail::IMAPClient release 2.2.9, or 3.0.25 or superior \n"; + die "imapsync needs perl lib Mail::IMAPClient release 2.2.9, or 3.25 or superior \n"; exit_clean(0) if ($justbanner); @@ -946,9 +965,6 @@ print "++++ Looping on each folder\n"; FOLDER: foreach my $h1_fold (@h1_folders_wanted) { - last FOLDER if $imap1->IsUnconnected(); - last FOLDER if $imap2->IsUnconnected(); - my $h2_fold = imap2_folder_name($h1_fold); printf("%-35s -> %-35s\n", "[$h1_fold]", "[$h2_fold]"); @@ -982,9 +998,6 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) { next FOLDER if ($justfolders); - last FOLDER if $imap1->IsUnconnected(); - last FOLDER if $imap2->IsUnconnected(); - my @h1_msgs = select_msgs($imap1); $debug and print "LIST Host1: ", scalar(@h1_msgs), " messages [@h1_msgs]\n"; @@ -1018,7 +1031,7 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) { @h1_msgs_all{ @h1_msgs } = (); @h2_msgs_all{ @h2_msgs } = (); - my @h1_msgs_in_cache = keys %$cache_1_2_ref ; + my @h1_msgs_in_cache = sort { $a <=> $b } keys %$cache_1_2_ref ; my @h2_msgs_in_cache = keys %$cache_2_1_ref ; my ( %h1_msgs_no_cache, %h2_msgs_no_cache ) ; @@ -1030,14 +1043,18 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) { my @h1_msgs_no_cache = keys %h1_msgs_no_cache ; my @h2_msgs_no_cache = keys %h2_msgs_no_cache ; + + if ( $useuid ) { + @h1_msgs_copy_by_uid{ @h1_msgs_no_cache } = ( ) ; + @h1_msgs_no_cache = ( ) ; + @h2_msgs_no_cache = ( ) ; + } + $debug and print "Host1 folder [$h1_fold] parsing headers\n"; - last FOLDER if $imap1->IsUnconnected(); - last FOLDER if $imap2->IsUnconnected(); my ($h1_heads_ref, $h1_fir_ref) = ({}, {}); $h1_heads_ref = $imap1->parse_headers([@h1_msgs_no_cache], @useheader) if (@h1_msgs_no_cache); $debug and print "Time headers: ", timenext(), " s\n"; - last FOLDER if $imap1->IsUnconnected(); @$h1_fir_ref{@h1_msgs} = (undef); $h1_fir_ref = $imap1->fetch_hash_2("FLAGS", "INTERNALDATE", "RFC822.SIZE", $h1_fir_ref) @@ -1050,8 +1067,6 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) { $nb_errors++; next FOLDER; } - last FOLDER if $imap1->IsUnconnected(); - my @h1_msgs_duplicate; foreach my $m (@h1_msgs_no_cache) { @@ -1079,13 +1094,11 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) { my ($h2_heads_ref, $h2_fir_ref) = ( {}, {} ); $h2_heads_ref = $imap2->parse_headers([@h2_msgs_no_cache], @useheader) if (@h2_msgs_no_cache); $debug and print "Time headers: ", timenext(), " s\n"; - last FOLDER if $imap2->IsUnconnected(); @$h2_fir_ref{@h2_msgs} = ( ); # fetch_hash_2 can select by uid with last arg as ref $h2_fir_ref = $imap2->fetch_hash_2("FLAGS", "INTERNALDATE", "RFC822.SIZE", $h2_fir_ref) if (@h2_msgs); $debug and print "Time fir: ", timenext(), " s\n"; - last FOLDER if $imap2->IsUnconnected(); my @h2_msgs_duplicate; foreach my $m (@h2_msgs_no_cache) { @@ -1151,6 +1164,8 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) { } } + my $h2_uidnext = $imap2->uidnext( $h2_fold ) ; + $h2_uidguess = $h2_uidnext ; MESS: foreach my $m_id (@h1_hash_keys_sorted_by_uid) { my $h1_size = $h1_hash{$m_id}{'s'}; my $h1_msg = $h1_hash{$m_id}{'m'}; @@ -1171,128 +1186,23 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) { unless (exists($h2_hash{$m_id})) { # copy - $debug and print "msg $h1_fold/$h1_msg copying to $h2_fold\n"; - last FOLDER if $imap1->IsUnconnected(); - last FOLDER if $imap2->IsUnconnected(); - my $string; - #print "Message_string Beg\n", memory_consumption(); - $string = $imap1->message_string($h1_msg); - #print "Message_string End\n", memory_consumption(); - unless (defined($string)) { - warn - "- msg $h1_fold/$h1_msg could not fetch [$m_id $h1_size]: ", - $imap1->LastError, "\n"; - $nb_errors++; - $total_bytes_error += $h1_size; - next MESS; - } - - #my $message_file = "tmp_imapsync_$$"; - #$imap1->select($h1_fold); - #unlink($message_file); - #$imap1->message_to_file($message_file, $h1_msg) or do { - # warn "Could not put message #$h1_msg to file $message_file", - # $imap1->LastError; - # $nb_errors++; - # $total_bytes_error += $h1_size; - # next MESS; - #}; - #$string = file_to_string($message_file); - #print "AAA1[$string]ZZZ\n"; - #unlink($message_file); - if (@regexmess) { - $string = regexmess($string); - - #string_to_file($string, $message_file); - } - - - $debug and print - "=" x80, "\n", - "F message content begin next line\n", - $string, - "F message content ended on previous line\n", "=" x 80, "\n"; - my $h1_date = ""; - if ($syncinternaldates) { - $h1_date = $h1_idate; - $debug and print "internal date from host1: [$h1_date]\n"; - $h1_date = good_date($h1_date); - $debug and print "internal date from host1: [$h1_date] (fixed)\n"; - } - - if ($idatefromheader) { - - $h1_date = $imap1->get_header($h1_msg,"Date"); - $debug and print "header date from host1: [$h1_date]\n"; - $h1_date = good_date($h1_date); - $debug and print "header date from host1: [$h1_date] (fixed)\n"; - } - - my $h1_flags = $h1_hash{$m_id}{'F'} || ""; - # RFC 2060: This flag can not be altered by any client - $h1_flags =~ s@\\Recent\s?@@gi; - $h1_flags = flags_regex($h1_flags) if @regexflag; - - $h1_flags = flags_filter($h1_flags, $permanentflags2) if ($permanentflags2); - - my $new_id; - $debug and print "msg $h1_fold/$h1_msg date [$h1_date] flags [$h1_flags] size [$h1_size]\n"; - last FOLDER if $imap1->IsUnconnected(); - last FOLDER if $imap2->IsUnconnected(); - $h1_date = undef if ($h1_date eq ""); - - unless ($dry) { - $max_msg_size_in_bytes = max($h1_size, $max_msg_size_in_bytes); - $new_id = $imap2->append_string($h2_fold, $string, $h1_flags, $h1_date); - unless($new_id){ - no warnings 'uninitialized'; - warn "- msg $h1_fold/$h1_msg couldn't append (Subject:[". - $imap1->subject($h1_msg)."]) to folder $h2_fold: ", - $imap2->LastError, "\n"; - $nb_errors++; - $total_bytes_error += $h1_size; - next MESS; - } - else{ - # good - # $new_id is an id if the IMAP server has the - # UIDPLUS capability else just a ref - print "msg $h1_fold/$h1_msg copied to $h2_fold/$new_id\n"; - $total_bytes_transferred += $h1_size; - $nb_msg_transferred += 1; - touch( "$cache_dir/${h1_msg}_$new_id" ) if ( $usecache and $new_id =~ m{\d+} ); - if($delete) { - print "msg $h1_fold/$h1_msg deleted on host1\n"; - unless($dry) { - $imap1->delete_message($h1_msg); - $h1_nb_msg_deleted += 1; - $imap1->expunge() if ($expunge); - } - } - } - } - else{ - $nb_msg_skipped_dry_mode += 1; - } - #unlink($message_file); + copy_message( $h1_msg, $h1_fold, $h2_fold, $h1_fir_ref, $permanentflags2, $cache_dir ) ; next MESS; } else{ - my $h2_msg = $h2_hash{$m_id}{'m'}; - $debug and print "msg $h1_fold/$h1_msg equals $h2_fold/$h2_msg\n"; - $total_bytes_skipped += $h1_size; - $nb_msg_skipped += 1; - touch( "$cache_dir/${h1_msg}_$h2_msg" ) if ( $usecache ); + # already on host2 + my $h2_msg = $h2_hash{$m_id}{'m'} ; + $debug and print "msg $h1_fold/$h1_msg equals $h2_fold/$h2_msg\n" ; + $total_bytes_skipped += $h1_size ; + $nb_msg_skipped += 1 ; + $debugcache and print "touch $cache_dir/${h1_msg}_$h2_msg\n" if ( $usecache ) ; + touch( "$cache_dir/${h1_msg}_$h2_msg" ) if ( $usecache ) ; } - $fast and next MESS; - #$debug and print "MESSAGE $m_id\n"; my $h2_msg = $h2_hash{$m_id}{'m'}; sync_flags( $h1_msg, $h2_msg, $h2_fold, $permanentflags2, $h1_fir_ref, $h2_fir_ref ) ; - - last FOLDER if $imap2->IsUnconnected(); # Good my $h2_size = $h2_hash{$m_id}{'s'}; @@ -1311,13 +1221,20 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) { # END MESS: loop MESS_IN_CACHE: foreach my $h1_msg ( @h1_msgs_in_cache ) { my $h2_msg = $cache_1_2_ref->{ $h1_msg } ; - #$debug and print "cache messages update $h1_msg->$h2_msg\n"; + $debugcache and print "cache messages update $h1_msg->$h2_msg\n"; sync_flags( $h1_msg, $h2_msg, $h2_fold, $permanentflags2, $h1_fir_ref, $h2_fir_ref ) ; my $h1_size = $h1_fir_ref->{ $h1_msg }->{ 'RFC822.SIZE' } ; $total_bytes_skipped += $h1_size; $nb_msg_skipped += 1; } + MESS_BY_UID: foreach my $h1_msg ( sort { $a <=> $b } keys %h1_msgs_copy_by_uid ) { + # copy_message + #print "Copy by uid $h1_fold/$h1_msg\n" ; + copy_message( $h1_msg, $h1_fold, $h2_fold, $h1_fir_ref, $permanentflags2, $cache_dir ) ; + + } + if ($expunge1){ print "Expunging host1 folder $h1_fold\n"; unless($dry) { $imap1->expunge() }; @@ -1365,23 +1282,13 @@ sub sync_flags { print "++++ End looping on each folder\n"; #print memory_consumption(); -my $memory_consumption = memory_consumption(); -my $memory_ratio = ($max_msg_size_in_bytes) ? - sprintf('%.1f', $memory_consumption / $max_msg_size_in_bytes) : "NA"; - $imap1->logout(); $imap2->logout(); -my $host1_reconnect_count = $imap1->Reconnect_counter() || 0; -my $host2_reconnect_count = $imap2->Reconnect_counter() || 0; - - -$timeend = time(); -$timediff = $timeend - $timestart; stats(); -exit_clean(1) if($nb_errors); +exit_clean(1) if( $nb_errors ); exit_clean(0); # END of main program @@ -1490,6 +1397,17 @@ sub ask_for_password { return $password; } +sub catch_exit { + my $signame = shift ; + print "\nGot a SIG$signame!\n" ; + stats( ) ; + exit_clean( ) ; +} + +sub catch_continue { + my $signame = shift ; + print "\nGot a SIG$signame!\n" ; +} sub myconnect { my $self = shift; @@ -1714,8 +1632,8 @@ sub banner_imapsync { my @argv_copy = @_; my $banner_imapsync = join("", '$RCSfile: imapsync,v $ ', - '$Revision: 1.398 $ ', - '$Date: 2011/01/18 03:03:24 $ ', + '$Revision: 1.404 $ ', + '$Date: 2011/02/21 03:35:39 $ ', "\n",localhost_info(), "\n", "Command line used:\n", "$0 ", command_line_nopassword(@argv_copy), "\n", @@ -1751,7 +1669,7 @@ sub write_pidfile { sub exit_clean { my $status = shift; - + $status = defined( $status ) ? $status : 1 ; unlink($pidfile); exit($status); } @@ -2377,9 +2295,142 @@ sub select_msgs { return(@msgs); } + +sub lastuid { + my $imap = shift ; + my $folder = shift ; + my $lastuid_guess = shift ; + my $lastuid ; + + # rfc3501: The only reliable way to identify recent messages is to + # look at message flags to see which have the \Recent flag + # set, or to do a SEARCH RECENT. + # SEARCH RECENT doesn't work this way on courrier. + + my @recent_messages ; + # SEARCH RECENT for each transfer can be expensive with a big folder + # Call commented for now + #@recent_messages = $imap->recent( ) ; + #print "Recent: @recent_messages\n"; + + my $max_recent ; + $max_recent = max( @recent_messages ) ; + + if ( defined( $max_recent ) and ($lastuid_guess <= $max_recent ) ) { + $lastuid = $max_recent ; + }else{ + $lastuid = $lastuid_guess + } + return( $lastuid ) ; +} + +sub copy_message { + # copy + + my ( $h1_msg, $h1_fold, $h2_fold, $h1_fir_ref, $permanentflags2, $cache_dir ) = @_ ; + $debug and print "msg $h1_fold/$h1_msg copying to $h2_fold\n"; + + my $h1_size = $h1_fir_ref->{$h1_msg}->{"RFC822.SIZE"}; + my $h1_flags = $h1_fir_ref->{$h1_msg}->{"FLAGS"}; + my $h1_idate = $h1_fir_ref->{$h1_msg}->{"INTERNALDATE"}; + + my $string; + $string = $imap1->message_string($h1_msg); + unless (defined($string)) { + warn + "- msg $h1_fold/$h1_msg could not be fetched: ", + $imap1->LastError, "\n"; + $nb_errors++; + $total_bytes_error += $h1_size; + return( ) ; + } + + if (@regexmess) { + $string = regexmess($string); + } + + $debug and print + "=" x80, "\n", + "F message content begin next line\n", + $string, + "F message content ended on previous line\n", "=" x 80, "\n"; + my $h1_date = ""; + if ($syncinternaldates) { + $h1_date = $h1_idate; + $debug and print "internal date from host1: [$h1_date]\n"; + $h1_date = good_date($h1_date); + $debug and print "internal date from host1: [$h1_date] (fixed)\n"; + } + + if ($idatefromheader) { + + $h1_date = $imap1->get_header($h1_msg,"Date"); + $debug and print "header date from host1: [$h1_date]\n"; + $h1_date = good_date($h1_date); + $debug and print "header date from host1: [$h1_date] (fixed)\n"; + } + + # RFC 2060: This flag can not be altered by any client + $h1_flags =~ s@\\Recent\s?@@gi; + $h1_flags = flags_regex($h1_flags) if @regexflag; + + $h1_flags = flags_filter($h1_flags, $permanentflags2) if ($permanentflags2); + + my $new_id; + $debug and print "msg $h1_fold/$h1_msg date [$h1_date] flags [$h1_flags] size [$h1_size]\n"; + $h1_date = undef if ($h1_date eq ""); + + unless ($dry) { + $max_msg_size_in_bytes = max($h1_size, $max_msg_size_in_bytes); + $new_id = $imap2->append_string($h2_fold, $string, $h1_flags, $h1_date); + unless($new_id){ + no warnings 'uninitialized'; + warn "- msg $h1_fold/$h1_msg couldn't append (Subject:[". + $imap1->subject($h1_msg)."]) to folder $h2_fold: ", + $imap2->LastError, "\n"; + $nb_errors++; + $total_bytes_error += $h1_size; + return( ) ; + } + else{ + # good + # $new_id is an id if the IMAP server has the + # UIDPLUS capability else just a ref + + + + + + + if ( $new_id !~ m{^\d+$} ) { + $new_id = lastuid( $imap2, $h2_fold, $h2_uidguess ) ; + } + printf( "msg %s/%-10s copied to %s/%-10s\n", $h1_fold, $h1_msg, $h2_fold, $new_id ); + $h2_uidguess++; + $total_bytes_transferred += $h1_size; + $nb_msg_transferred += 1; + $debugcache and print "touch $cache_dir/${h1_msg}_$new_id\n" if ( $usecache ) ; + touch( "$cache_dir/${h1_msg}_$new_id" ) if ( $usecache and $new_id =~ m{^\d+$} ); + if ( $delete ) { + print "msg $h1_fold/$h1_msg deleted on host1\n"; + unless($dry) { + $imap1->delete_message($h1_msg); + $h1_nb_msg_deleted += 1; + $imap1->expunge() if ($expunge); + } + } + } + } + else{ + $nb_msg_skipped_dry_mode += 1; + } + return( ); +} + + sub cache_map { my ( $cache_files_ref, $h1_msgs_ref, $h2_msgs_ref ) = @_; - my ( %map1_2, %map2_1 ) ; + my ( %map1_2, %map2_1, %done2 ) ; my $h1_msgs_hash_ref = { } ; my $h2_msgs_hash_ref = { } ; @@ -2388,12 +2439,29 @@ sub cache_map { @$h2_msgs_hash_ref{ @$h2_msgs_ref } = ( ) ; foreach my $file ( sort @$cache_files_ref ) { - #print "C12: $file\n" ; + $debugcache and print "C12: $file\n" ; ( $uid1, $uid2 ) = match_a_cache_file( $file ) ; if ( exists( $h1_msgs_hash_ref->{ $uid1 } ) and exists( $h2_msgs_hash_ref->{ $uid2 } ) ) { - $map1_2{ $uid1 } = $uid2 ; + # keep only the greatest uid2 + # 130_2301 and + # 130_231 => keep only 130 -> 2301 + + # keep only the greatest uid1 + # 1601_260 and + # 161_260 => keep only 1601 -> 260 + my $max_uid2 = max( $uid2, $map1_2{ $uid1 } || -1 ) ; + if ( exists( $done2{ $max_uid2 } ) ) { + if ( $done2{ $max_uid2 } < $uid1 ) { + $map1_2{ $uid1 } = $max_uid2 ; + delete( $map1_2{ $done2{ $max_uid2 } } ) ; + $done2{ $max_uid2 } = $uid1 ; + } + }else{ + $map1_2{ $uid1 } = $max_uid2 ; + $done2{ $max_uid2 } = $uid1 ; + } }; } @@ -2402,7 +2470,7 @@ sub cache_map { } sub tests_cache_map { - + #$debugcache = 1 ; my @cache_files = qw ( 100_200 101_201 @@ -2416,30 +2484,39 @@ sub tests_cache_map { 180_280 181_280 182_280 + 130_231 + 130_2301 + 161_260 + 1601_260 ) ; - my $msgs_1 = [120, 142, 143, 144, 177, 182 ]; - my $msgs_2 = [ 242, 243, 299, 377, 279, 255, 280 ]; + my $msgs_1 = [120, 142, 143, 144, 161, 1601, 177, 182, 130 ]; + my $msgs_2 = [ 242, 243, 260, 299, 377, 279, 255, 280, 231, 2301 ]; my( $c12, $c21 ) ; ok( ( $c12, $c21 ) = cache_map( \@cache_files, $msgs_1, $msgs_2 ), 'cache_map: 02' ); my $a1 = [ sort { $a <=> $b } keys %$c12 ] ; my $a2 = [ sort { $a <=> $b } keys %$c21 ] ; - ok( 0 == compare_lists( [ 142, 143, 177, 182 ], $a1 ), 'cache_map: 03' ); - ok( 0 == compare_lists( [ 242, 243, 279, 280 ], $a2 ), 'cache_map: 04' ); + ok( 0 == compare_lists( [ 130, 142, 143, 177, 182, 1601 ], $a1 ), 'cache_map: 03' ); + ok( 0 == compare_lists( [ 242, 243, 260, 279, 280, 2301 ], $a2 ), 'cache_map: 04' ); + ok( ! $c12->{161}, 'cache_map: ! 161 -> 260' ); + ok( 260 == $c12->{1601}, 'cache_map: 1601 -> 260' ); + ok( 2301 == $c12->{130}, 'cache_map: 130 -> 2301' ); + #print $c12->{1601}, "\n"; } sub get_cache { - + $debugcache and print "Entering get_cache\n"; my ($cache_dir, $h1_msgs_ref, $h2_msgs_ref) = @_; -d $cache_dir or return( undef ); # exit if cache directory doesn't exist - #print "cache_dir: $cache_dir\n"; + $debugcache and print "cache_dir: $cache_dir\n"; + $cache_dir =~ s{\\}{\\\\}g; my @cache_files = bsd_glob( "$cache_dir/*" ) ; - #print "cache_files: [@cache_files]\n"; + #$debugcache and print "cache_files: [@cache_files]\n"; my( $cache_1_2_ref, $cache_2_1_ref ) = cache_map( \@cache_files, $h1_msgs_ref, $h2_msgs_ref ) ; @@ -2453,6 +2530,7 @@ sub get_cache { #print "\n", map { "c12 $_ -> $cache_1_2_ref->{ $_ }\n" } keys %$cache_1_2_ref ; #print "\n", map { "c21 $_ -> $cache_2_1_ref->{ $_ }\n" } keys %$cache_2_1_ref ; + $debugcache and print "Exiting get_cache\n"; return ( $cache_1_2_ref, $cache_2_1_ref ) ; } @@ -2501,6 +2579,41 @@ sub tests_get_cache { ok( -f 'tmp/cache/F1/F2/100_200', 'get_cache: file NOT removed 100_200'); ok( -f 'tmp/cache/F1/F2/101_201', 'get_cache: file NOT removed 101_201'); + + # strange files + #$debugcache = 1 ; + $maxage = undef ; + ok( ( ! -d 'tmp/cache/rr\uee' or rmtree( 'tmp/cache/rr\uee' )), 'get_cache: rmtree tmp/cache/rr\uee' ) ; + ok( mkpath( 'tmp/cache/rr\uee' ), 'get_cache: mkpath tmp/cache/rr\uee' ) ; + + @test_files_cache = ( qw( + tmp/cache/rr\uee/100_200 + tmp/cache/rr\uee/101_201 + tmp/cache/rr\uee/120_220 + tmp/cache/rr\uee/142_242 + tmp/cache/rr\uee/143_243 + tmp/cache/rr\uee/177_277 + tmp/cache/rr\uee/177_377 + tmp/cache/rr\uee/177_777 + tmp/cache/rr\uee/155_255 + ) ) ; + ok( touch(@test_files_cache), 'get_cache: touch strange tmp/cache/...' ) ; + + # on cache: 100_200 101_201 142_242 143_243 177_277 177_377 177_777 155_255 + # on live: + $msgs_1 = [120, 142, 143, 144, 177 ]; + $msgs_2 = [ 242, 243, 299, 377, 777, 255 ]; + + ok( ( $c12, $c21 ) = get_cache('tmp/cache/rr\uee', $msgs_1, $msgs_2), 'get_cache: strange path 02' ); + $a1 = [ sort { $a <=> $b } keys %$c12 ] ; + $a2 = [ sort { $a <=> $b } keys %$c21 ] ; + ok( 0 == compare_lists( [ 142, 143, 177 ], $a1 ), 'get_cache: strange path 03' ); + ok( 0 == compare_lists( [ 242, 243, 777 ], $a2 ), 'get_cache: strange path 04' ); + ok( -f 'tmp/cache/rr\uee/142_242', 'get_cache: strange path file kept 142_242'); + ok( -f 'tmp/cache/rr\uee/142_242', 'get_cache: strange path file kept 143_243'); + ok( ! -f 'tmp/cache/rr\uee/100_200', 'get_cache: strange path file removed 100_200'); + ok( ! -f 'tmp/cache/rr\uee/101_201', 'get_cache: strange path file removed 101_201'); + } @@ -2553,19 +2666,23 @@ sub clean_cache { my $cache_files_ref = shift ; my $cache_1_2_ref = shift ; - #print map { "$_ -> " . $cache_1_2_ref->{ $_ } . "\n" } keys %$cache_1_2_ref ; + $debugcache and print "Entering clean_cache\n"; + + $debugcache and print map { "$_ -> " . $cache_1_2_ref->{ $_ } . "\n" } keys %$cache_1_2_ref ; foreach my $file ( @$cache_files_ref ) { - #print "$file\n" ; + $debugcache and print "$file\n" ; my ( $uid1, $uid2 ) = match_a_cache_file( $file ) ; - #print "$uid1 $uid2 ", $cache_1_2_ref->{ $uid1 }, "\n" ; + $debugcache and print "u1: $uid1 u2: $uid2 c12: ", $cache_1_2_ref->{ $uid1 } || '', "\n" ; if ( ( ! defined( $uid1 ) ) or ( ! defined( $uid2 ) ) or ( ! exists( $cache_1_2_ref->{ $uid1 } ) ) or ( ! ( $uid2 == $cache_1_2_ref->{ $uid1 } ) ) ) { - #print "remove $file\n" ; - unlink( $file ) ; + $debugcache and print "remove $file\n" ; + unlink( $file ) or warn "$!" ; } } + + $debugcache and print "Exiting clean_cache\n"; return( 1 ) ; } @@ -2610,6 +2727,16 @@ sub tests_clean_cache { } +sub tests_touch { + + ok( (-d 'tmp/tests/' or mkpath( 'tmp/tests/' )), 'tests_touch: mkpath tmp/tests/' ) ; + ok( 1 == touch( 'tmp/tests/lala'), 'tests_touch: tmp/tests/lala') ; + ok( 1 == touch( 'tmp/tests/\y'), 'tests_touch: tmp/tests/\y') ; + ok( 0 == touch( '/aaa'), 'tests_touch: not /aaa') ; + ok( 2 == touch( 'tmp/tests/lili', 'tmp/tests/lolo'), 'tests_touch: 2 files') ; + ok( 1 == touch( 'tmp/tests/\y', '/aaa'), 'tests_touch: 2 files, 1 fails' ) ; + +} sub touch { my @files = @_ ; @@ -2732,8 +2859,17 @@ sub regexmess { return($string); } - sub stats { + $timeend = time(); + $timediff = $timeend - $timestart; + + my $memory_consumption = memory_consumption(); + my $memory_ratio = ($max_msg_size_in_bytes) ? + sprintf('%.1f', $memory_consumption / $max_msg_size_in_bytes) : "NA"; + + my $host1_reconnect_count = $imap1->Reconnect_counter() || 0; + my $host2_reconnect_count = $imap2->Reconnect_counter() || 0; + print "++++ Statistics\n"; print "Transfer time : $timediff sec\n"; print "Messages transferred : $nb_msg_transferred "; @@ -2882,7 +3018,9 @@ sub get_options { "pidfile=s" => \$pidfile, "releasecheck!" => \$releasecheck, "modules_version!" => \$modules_version, - "usecache!" => \$usecache, + "usecache!" => \$usecache, + "debugcache!" => \$debugcache, + "useuid!" => \$useuid, ); $debug and print "get options: [$opt_ret]\n"; @@ -2958,12 +3096,22 @@ sub parse_header_msg { $headstr .= "$H"; } } - #return unless ($headstr); - unless ($headstr){ + + if ( ( ! $headstr) and ( $takebody ) ){ print "no header so taking body first 2Ko\n"; $imap->fetch($m_uid, "BODY.PEEK[TEXT]<0.2048>"); $headstr = $imap->_transaction_literals; + + if ( 4048 <= length( $headstr ) ) { + # the imap server might reply the whole message + # this is bad for memory on huge mailboxes + $takebody = 0 ; + $headstr = '' ; + $h1_msgs_copy_by_uid{ $m_uid } = 1 ; + } } + return() if ( ! $headstr ); + my $size = $s_fir->{$m_uid}->{"RFC822.SIZE"}; my $flags = $s_fir->{$m_uid}->{"FLAGS"}; my $idate = $s_fir->{$m_uid}->{"INTERNALDATE"}; @@ -3035,7 +3183,7 @@ sub is_a_release_number { sub check_last_release { my $public_release = not_long('imapsync_version_lfo'); - print "check_last_release: [$public_release]\n" ; + #print "check_last_release: [$public_release]\n" ; return('unknown') if ($public_release eq 'unknown'); return('timeout') if ($public_release eq 'timeout'); return('unknown') if (! is_a_release_number($public_release)); @@ -3050,7 +3198,7 @@ sub check_last_release { } sub imapsync_version { - my $rcs = '$Id: imapsync,v 1.398 2011/01/18 03:03:24 gilles Exp gilles $ '; + my $rcs = '$Id: imapsync,v 1.404 2011/02/21 03:35:39 gilles Exp gilles $ '; $rcs =~ m/,v (\d+\.\d+)/; my $VERSION = ($1) ? $1: "UNKNOWN"; return($VERSION); @@ -3294,6 +3442,8 @@ Several options are mandatory. --nosyncacls : does not synchronise acls. This is the default. --usecache : Use cache to speedup. --nousecache : Do not use cache. +--useuid : Use uid instead of header as a criterium to sync. + --usecache is then implied unless --nousecache --debug : debug mode. --debugimap1 : imap debug mode for host1. imap debug is very verbose. --debugimap2 : imap debug mode for host2. @@ -3305,8 +3455,7 @@ Several options are mandatory. --justlogin : just login to both host1 and host2 with users credentials, then exit. --justfolders : just do things about folders (ignore messages). ---fast : be faster (just does not sync flags of messages - already transfered). +--fast : be faster, equivalent to --useuid --nofoldersizes --reconnectretry1 : reconnect to host1 if connection is lost up to times per imap command (default is 3) --reconnectretry2 : same as --reconnectretry1 but for host2 @@ -3557,11 +3706,11 @@ sub tests_debug { SKIP: { skip "No test in normal run" if ( not $tests_debug ); - tests_convert_sep_to_slash( ) ; - tests_cache_map( ) ; - tests_get_cache( ) ; tests_clean_cache( ) ; tests_match_a_cache_file( ) ; + tests_touch( ) ; + tests_cache_map( ) ; + tests_get_cache( ) ; } } @@ -3589,6 +3738,7 @@ sub tests { tests_get_cache( ) ; tests_clean_cache( ) ; tests_match_a_cache_file( ) ; + tests_touch( ) ; } } @@ -3621,166 +3771,49 @@ use constant NonFolderArg => 1; # Value to pass to Massage to return $string; }; +# Got from 3.25 +*Mail::IMAPClient::append_string = sub { + my $self = shift; + my $folder = $self->Massage(shift); + my ( $text, $flags, $date ) = @_; + defined $text or $text = ''; -*Mail::IMAPClient::append_file = sub { + if ( defined $flags ) { + $flags =~ s/^\s+//g; + $flags =~ s/\s+$//g; + $flags = "($flags)" if $flags !~ /^\(.*\)$/; + } - my $self = shift; - my $folder = $self->Massage(shift); - my $file = shift; - my $control = shift || undef; - my $count = $self->Count($self->Count+1); - my $flags = shift || undef; - my $date = shift || undef; - - if (defined($flags)) { - $flags =~ s/^\s+//g; - $flags =~ s/\s+$//g; - } - - if (defined($date)) { - $date =~ s/^\s+//g; - $date =~ s/\s+$//g; - } - - $flags = "($flags)" if $flags and $flags !~ /^\(.*\)$/ ; - $date = qq/"$date"/ if $date and $date !~ /^"/ ; - + if ( defined $date ) { + $date =~ s/^\s+//g; + $date =~ s/\s+$//g; + $date = qq("$date") if $date !~ /^"/; + } - unless ( -f $file ) { - $self->LastError("File $file not found.\n"); - return undef; - } + $text =~ s/\r?\n/$CRLF/og; - my $fh = IO::File->new($file) ; + my $command = + "APPEND $folder " + . ( $flags ? "$flags " : "" ) + . ( $date ? "$date " : "" ) . "{" + . length($text) + . "}$CRLF"; - unless ($fh) { - $self->LastError("Unable to open $file: $!\n"); - $@ = "Unable to open $file: $!" ; - carp "unable to open $file: $!"; - return undef; - } + $command .= $text . $CRLF; + $self->_imap_command( $command ) or return undef; - my $bare_nl_count = scalar grep { /^\x0a$|[^\x0d]\x0a$/} <$fh>; + my $data = join '', $self->Results; + #print "ZZZ|$data|ZZZ\n"; + # look for something like return size or self if no size found: + # OK [APPENDUID ] APPEND completed + # 18 OK [APPENDUID 1286144680 1539] APPEND Ok. + my $ret = $data =~ m#^\d+ OK \[APPEND.*\s+(\d+)\].*\Z#m ? $1 : $self; - seek($fh,0,0); - - my $clear = $self->Clear; - - $self->Clear($clear) - if $self->Count >= $clear and $clear > 0; - - my $length = ( -s $file ) + $bare_nl_count; - - my $string = "$count APPEND $folder " . - ( $flags ? "$flags " : "" ) . - ( $date ? "$date " : "" ) . - "{" . $length . "}\x0d\x0a" ; - - $self->_record($count,[ $self->_next_index($count), "INPUT", "$string" ] ); - - my $feedback = $self->_send_line("$string"); - - unless ($feedback) { - $self->LastError("Error sending '$string' to IMAP: $!\n"); - $fh->close; - return undef; - } - - my ($code, $output) = ("",""); - - until ( $code ) { - $output = $self->_read_line or $fh->close, return undef; - foreach my $o (@$output) { - $self->_record($count,$o); # $o is already an array ref - ($code) = $o->[DATA] =~ /(^\+|^\d+\sNO|^\d+\sBAD)/i; - if ($o->[DATA] =~ /^\*\s+BYE/) { - carp $o->[DATA]; - $self->State(Unconnected); - $fh->close; - return undef ; - } elsif ( $o->[DATA]=~ /^\d+\s+(NO|BAD)/i ) { - carp $o->[DATA]; - $fh->close; - return undef; - } - } - } - - { # Narrow scope - # Slurp up headers: later we'll make this more efficient I guess - local $/ = "\x0d\x0a\x0d\x0a"; - my $text = <$fh>; - $text =~ s/\x0d?\x0a/\x0d\x0a/g; - $self->_record($count,[ $self->_next_index($count), "INPUT", "{From file $file}" ] ) ; - $feedback = $self->_send_line($text); - - unless ($feedback) { - $self->LastError("Error sending append msg text to IMAP: $!\n"); - $fh->close; - return undef; - } - _debug($self, "control points to $$control\n") if ref($control) and $self->Debug; - $/ = ref($control) ? "\x0a" : $control ? $control : "\x0a"; - while (defined($text = <$fh>)) { - $text =~ s/\x0d?\x0a/\x0d\x0a/g; - $self->_record( $count, - [ $self->_next_index($count), "INPUT", "{from $file}\x0d\x0a" ] - ); - $feedback = $self->_send_line($text,1); - - unless ($feedback) { - $self->LastError("Error sending append msg text to IMAP: $!\n"); - $fh->close; - return undef; - } - } - $feedback = $self->_send_line("\x0d\x0a"); - - unless ($feedback) { - $self->LastError("Error sending append msg text to IMAP: $!\n"); - $fh->close; - return undef; - } - } - - # Now for the crucial test: Did the append work or not? - ($code, $output) = ("",""); - - my $uid = undef; - until ( $code ) { - $output = $self->_read_line or return undef; - foreach my $o (@$output) { - $self->_record($count,$o); # $o is already an array ref - $self->_debug("append_file: Deciding if " . $o->[DATA] . " has the code.\n") - if $self->Debug; - ($code) = $o->[DATA] =~ /^\d+\s(NO|BAD|OK)/i; - # try to grab new msg's uid from o/p - $o->[DATA] =~ m#UID\s+\d+\s+(\d+)\]# and $uid = $1; - if ($o->[DATA] =~ /^\*\s+BYE/) { - carp $o->[DATA]; - $self->State(Unconnected); - $fh->close; - return undef ; - } elsif ( $o->[DATA]=~ /^\d+\s+(NO|BAD)/i ) { - carp $o->[DATA]; - $fh->close; - return undef; - } - } - } - $fh->close; - - if ($code !~ /^OK/i) { - return undef; - } - - - return defined($uid) ? $uid : $self; + return $ret; }; - *Mail::IMAPClient::fetch_hash = sub { # taken from original lib, # just added split code. @@ -4242,8 +4275,11 @@ no warnings 'once'; #print "call @_ done [", $rc || '', "] [$tries/$retry][" . $self->IsUnconnected . "]\n"; } - if ( !defined($rc) and $retry and $self->IsUnconnected - and $self->LastIMAPCommand !~ /LOGOUT/) { + if ( !defined($rc) + and $retry and $self->IsUnconnected + and ( $self->LastIMAPCommand !~ /LOGOUT/ ) + + ) { print "\nWarning: disconnected. "; if ( $self->reconnect ) { print "Reconnect successful on try #$tries\n"; @@ -4674,6 +4710,7 @@ sub Tls { sub Reconnect_counter { my $self = shift; + $self->{Reconnect_counter} = 0 if ( not defined( $self->{Reconnect_counter} ) ) ; if (@_) { $self->{Reconnect_counter} = shift } return $self->{Reconnect_counter}; diff --git a/imapsync.exe b/imapsync.exe index 11c42d19b3367f6279250ca6384a4c4d6422027e..c6ed57f6a751fc245f9ba7eb727bb1ab624f8088 100755 GIT binary patch delta 461552 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 z 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
`YD`1u74(`bHh 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
^1^&+2C~b1uN05Kl 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຿gRBJJbQBxomxD}sB6bmn$G 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 delta 293578 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

MR_IhTG66l+0;9Y6v_Hz$Y!_R0ULHGi=MNE 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