pax_global_header00006660000000000000000000000064133636741740014530gustar00rootroot0000000000000052 comment=19e6fc2e459ae4db216f0fcc14b0ec813c01e48d wiki2beamer-wiki2beamer-v0.10.0/000077500000000000000000000000001336367417400163745ustar00rootroot00000000000000wiki2beamer-wiki2beamer-v0.10.0/.travis.yml000066400000000000000000000005101336367417400205010ustar00rootroot00000000000000language: python python: - 2.6 - 2.7 - 3.3 - 3.4 - 3.5 - 3.6 # Enable 3.7 without globally enabling sudo and dist: xenial for other build jobs matrix: include: - python: 3.7 dist: xenial sudo: true install: script: - PYTHONPATH=code python tests/test_wiki2beamer.py notifications: email: false wiki2beamer-wiki2beamer-v0.10.0/ChangeLog000066400000000000000000000103671336367417400201550ustar00rootroot00000000000000Version 0.10.0 (2018-10-23) ======================================= * Moved project to github: https://github.com/wiki2beamer * Fix hash collisions in code include * Allow '\' to be used as line continuation * Travis-CI support * Fix Python 3.3 compatibility * Support code within items * Support markers for items (*[C] text) * Add titleframeopts * Fix regex issues for python 3.7 * Many many bugfixes, code cleanups and typo fixes Thanks to Sam Tygier, Zbigniew Jędrzejewski-Szmek, Michael Adam, Gregory Legrin and Moritz Strübe for their work leading to this release. Version 0.9.5 (2012-03-31) ======================================= Added -o,--output option Fix for bug 3365134, mixing coloring and filenames with underscores Improve performance of make_sorted Various fixes in manpage Version 0.9.4 (2011-05-08) ======================================= Added Python 3000 compatibility Restored Python 2.3 compatibility Fixed bug in >>>include<<< statements after [code] sections Version 0.9.3 (2011-05-06) ======================================= Improved/Fixed vastly permissive color replacement rule (_color_text_) Thanks to Georges Khaznadar for the patch. Version 0.9.2 (2010-12-31) (happy new year) =========================================== Fixed small bug that prevented fragile frames from working Added new up-to-date example Version 0.9.1 (2010-11-15) ======================================= Fixed behaviour of >>>includefile<<< inside [code] environments Version 0.9.0 (2010-11-08) ======================================= Improved commandline parsing and handling multiple input files Added escaping of @ and ! as \@ and \! Added file inclusion with >>>includefile<<< Version 0.8.1 (2009-09-16) ======================================= Added new syntax abbreviations for \uncover, \only, \vspace and \vspace*, added frame marking (!) for selective compilation of few frames. See man-page for syntax details. Version 0.8 (2009-07-03) ======================================= Changed license from "GNU GPL v2 only" to "GNU GPL v2 or any later", Changed license of documentation to "GNU FDL 1.3 or later" Bugfixes: * failing transformation after bullet/numbered lists fixed * python 2.4 compatibility fixed Version 0.7 (2009-06-06) ======================================= manpage added, package structure cleaned up, footnote-bug fixed, <[codeframe]> tags removed, rehashing for animated code listings added (no more collisions possible), Python 2.4 compatibility fixes added. Version 0.7 alpha 2 (2009-05-14) ======================================= autotemplate support added - no more templates required to create wiki2beamer presentations Version 0.7 alpha 1 (2009-05-10) ======================================= Frame-close detection for \end{frame} removed as it causes trouble in some situations. <[nowiki] [nowiki]> environment added. Support for animated code listings with the <[code] [code]> environment. Some unittests added. New example for version0_7 Version 0.6 (2009-04-07) ======================================= Frames can be closed "manually" using [frame]>. Thanks to Kai Dietrich for providing the appropriate code. Version 0.5 (2008-05-02) ======================================= \color bug fixed, now uses \teduixtcolor New markup for colors: _red_ example_ (%red% example% does not work any longer) Version 0.4 (2007-07-05) ======================================= Optional section and subsection commands can be used. Two variables can be used/set to show content at the top and bottom of every frame. Both features are presented in a new example file. Version 0.3 (2007-05-21) ======================================= Frames will now be created as \begin{frame} ... \end{frame} instead of \frame. Furthermore, it is possible to add parameters (eg. [fragile]) to frame definitions. A parameter "--version" has been introduced to show the current version of wiki2beamer. Graphics can be included with <<>>. Lines can be joined with (unescaped) percent signs (%) as last character of the first line. A new example using images Version 0.2 (2007-05-11) ======================================= Wiki-like support for environments has been added. Special wiki tags for columns and footnotes. Some substitutions (such as ==> to $\Rightarrow$ have been added). New (advanced) example wiki2beamer-wiki2beamer-v0.10.0/LICENSE000066400000000000000000000354231336367417400174100ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS wiki2beamer-wiki2beamer-v0.10.0/README.md000066400000000000000000000033251336367417400176560ustar00rootroot00000000000000# wiki2beamer Create latex beamer code from an easy, wiki-like syntax. Wiki2Beamer is a small tool to create LaTeX Beamer presentations from text files with a wiki-like syntax. Thus, it enables the user to create beamer presentations in a less time-consuming way. * [Homepage](https://wiki2beamer.github.io) * Current version: 0.10.0 * [![Build Status](https://travis-ci.org/wiki2beamer/wiki2beamer.png)](https://travis-ci.org/wiki2beamer/wiki2beamer) ## People * Maintainer: * Valentin Haenel (http://haenel.co ) * Original Authors: * Michael Rentzsch (http://www.repc.de, ) * Kai Dietrich (http://www.cleeus.de/, ) * Contributors: * Julius Plenz * Volker Mische * Georges Khaznadar * Sam Tygier * Moritz 'Morty' Strübe * Zbigniew Jędrzejewski-Szmek ## License * GNU GPL v2 or later (code) * GNU FDL 1.3 or later (documentation) ---------------------------------------------------------------------- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . wiki2beamer-wiki2beamer-v0.10.0/code/000077500000000000000000000000001336367417400173065ustar00rootroot00000000000000wiki2beamer-wiki2beamer-v0.10.0/code/setup.py000077500000000000000000000021341336367417400210230ustar00rootroot00000000000000#!/usr/bin/env python # This file is part of wiki2beamer. # wiki2beamer is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # wiki2beamer 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 wiki2beamer. If not, see . from distutils.core import setup setup(name='wiki2beamer', version='0.10.0', scripts=['wiki2beamer'], description='Create LaTeX-beamer presentations with a wiki syntax', author='Michael Rentzsch, Kai Dietrich and others', author_email='mmichael.rentzsch@repc.de, mail@cleeus.de', maintainer='Valentin Haenel', maintainer_email='valentin@haenel.co', url='https://wiki2beamer.github.io', ) wiki2beamer-wiki2beamer-v0.10.0/code/wiki2beamer000077500000000000000000001071141336367417400214410ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf8 -*- # wiki2beamer # # (c) 2007-2008 Michael Rentzsch (http://www.repc.de) # (c) 2009-2011 Michael Rentzsch (http://www.repc.de) # Kai Dietrich (mail@cleeus.de) # (c) 2018 Valentin Haenel (valentin@haenel.co) # # Create latex beamer sources for multiple frames from a wiki-like code. # # # This file is part of wiki2beamer. # wiki2beamer is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # wiki2beamer 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 wiki2beamer. If not, see . # # Additional commits by: # Valentin Haenel # Julius Plenz import sys import os import re import random import optparse import codecs VERSIONTAG = "0.10.0" __version__= VERSIONTAG __author__= "Michael Rentzsch, Kai Dietrich and others" #python 2.4 compatability if sys.version_info >= (2, 5): import hashlib else: import md5 #python 2.4 compatability def md5hex(string): if sys.version_info >= (2, 5): # presume that this is valid for all pythin versions after 3 if sys.version_info >= (3, 0): return hashlib.md5(string.encode('utf-8')).hexdigest() else: return hashlib.md5(string).hexdigest() else: dg = md5.md5() dg.update(string) return dg.hexdigest() _redirected_stdout = None _redirected_stderr = None def pprint(string, file=sys.stdout, eol=True): ''' portable version of print which directly writes into the given stream ''' if file == sys.stdout and _redirected_stdout is not None: file = _redirected_stdout if file == sys.stderr and _redirected_stderr is not None: file = _redirected_stderr if file == sys.stderr or file == sys.stdout: file.write(string) else: file.write(string.encode('utf-8')) if eol: file.write(os.linesep) file.flush() def mydebug(message): """ print debug message to stderr """ pprint(message, file=sys.stderr) def syntax_error(message, code): pprint('syntax error: %s' % message, file=sys.stderr) pprint('\tcode:\n%s' % code, file=sys.stderr) sys.exit(-3) class IncludeLoopException(Exception): pass lstbasicstyle=\ r"""{basic}{ captionpos=t,% basicstyle=\footnotesize\ttfamily,% numberstyle=\tiny,% numbers=left,% stepnumber=1,% frame=single,% showspaces=false,% showstringspaces=false,% showtabs=false,% % keywordstyle=\color{blue},% identifierstyle=,% commentstyle=\color{gray},% stringstyle=\color{magenta}% }""" autotemplate = [ ('documentclass', '{beamer}'), ('usepackage', '{listings}'), ('usepackage', '{wasysym}'), ('usepackage', '{graphicx}'), ('date', '{\\today}'), ('lstdefinestyle', lstbasicstyle), ('titleframe', 'True'), ] nowikistartre = re.compile(r'^<\[\s*nowiki\s*\]') nowikiendre = re.compile(r'^\[\s*nowiki\s*\]>') codestartre = re.compile(r'^<\[\s*code\s*\]') codeendre = re.compile(r'^\[\s*code\s*\]>') # lazy initialisation cache for file content _file_cache = {} def add_lines_to_cache(filename, lines): if not filename in _file_cache: _file_cache[filename] = lines def get_lines_from_cache(filename): if filename in _file_cache: return _file_cache[filename] else: lines = read_file_to_lines(filename) _file_cache[filename] = lines return lines def clear_file_cache(): _file_cache.clear() try: from collections import OrderedDict as maybe_odict except ImportError: maybe_odict = dict class w2bstate: def __init__(self): self.frame_opened = False self.enum_item_level = '' self.frame_header = '' self.frame_footer = '' self.next_frame_footer = '' self.next_frame_header = '' self.current_line = 0 self.autotemplate_opened = False self.defverbs = maybe_odict() self.code_pos = 0 return def switch_to_next_frame(self): self.frame_header = self.next_frame_header self.frame_footer = self.next_frame_footer return def escape_resub(string): p = re.compile(r"\\") return p.sub(r"\\\\", string) def transform_itemenums(string, state): """handle itemizations/enumerations""" preamble = "" # for enumeration/itemize environment commands # handle itemizing/enumerations p = re.compile("^([\*\#]+).*$") m = p.match(string) if m is None: my_enum_item_level = "" else: my_enum_item_level = m.group(1) # trivial: old level = new level if my_enum_item_level == state.enum_item_level: pass else: # find common part common = -1 while (len(state.enum_item_level) > common + 1) and \ (len(my_enum_item_level) > common + 1) and \ (state.enum_item_level[common+1] == my_enum_item_level[common+1]): common = common + 1 # close enum_item_level environments from back to front for i in range(len(state.enum_item_level)-1, common, -1): if state.enum_item_level[i] == "*": preamble = preamble + "\\end{itemize}\n" elif state.enum_item_level[i] == "#": preamble = preamble + "\\end{enumerate}\n" # open my_enum_item_level environments from front to back for i in range(common+1, len(my_enum_item_level)): if my_enum_item_level[i] == "*": preamble = preamble + "\\begin{itemize}\n" elif my_enum_item_level[i] == "#": preamble = preamble + "\\begin{enumerate}\n" state.enum_item_level = my_enum_item_level # now, substitute item markers p = re.compile("^([\*\#]+)((?:\[[^\]*]\])?)\s*(.*)$") _string = p.sub(r" \\item\2 \3", string) string = preamble + _string return string def transform_define_foothead(string, state): """ header and footer definitions""" p = re.compile("^@FRAMEHEADER=(.*)$", re.VERBOSE) m = p.match(string) if m is not None: state.next_frame_header = m.group(1) string = "" p = re.compile("^@FRAMEFOOTER=(.*)$", re.VERBOSE) m = p.match(string) if m is not None: state.next_frame_footer = m.group(1) string = "" return string def transform_detect_manual_frameclose(string, state): """ detect manual closing of frames """ p = re.compile(r"\[\s*frame\s*\]>") if state.frame_opened: if p.match(string) is not None: state.frame_opened = False return string def get_frame_closing(state): return " %s \n\\end{frame}\n" % state.frame_footer def transform_h4_to_frame(string, state): """headings (3) to frames""" frame_opening = r"\\begin{frame}\2\n \\frametitle{\1}\n %s \n" % escape_resub(state.next_frame_header) frame_closing = escape_resub(get_frame_closing(state)) p = re.compile("^!?====\s*(.*?)\s*====(.*)", re.VERBOSE) if not state.frame_opened: _string = p.sub(frame_opening, string) else: _string = p.sub(frame_closing + frame_opening, string) if string != _string: state.frame_opened = True state.switch_to_next_frame() return _string def transform_h3_to_subsec(string, state): """ headings (2) to subsections """ frame_closing = escape_resub(get_frame_closing(state)) subsec_opening = r"\n\\subsection\2{\1}\n\n" p = re.compile("^===\s*(.*?)\s*===(.*)", re.VERBOSE) if state.frame_opened: _string = p.sub(frame_closing + subsec_opening, string) else: _string = p.sub(subsec_opening, string) if string != _string: state.frame_opened = False return _string def transform_h2_to_sec(string, state): """ headings (1) to sections """ frame_closing = escape_resub(get_frame_closing(state)) sec_opening = r"\n\\section\2{\1}\n\n" p = re.compile("^==\s*(.*?)\s*==(.*)", re.VERBOSE) if state.frame_opened: _string = p.sub(frame_closing + sec_opening, string) else: _string = p.sub(sec_opening, string) if string != _string: state.frame_opened = False return _string def transform_replace_headfoot(string, state): string = string.replace("<---FRAMEHEADER--->", state.frame_header) string = string.replace("<---FRAMEFOOTER--->", state.frame_footer) return string def transform_environments(string): """ latex environments, the users takes full responsibility for closing ALL opened environments exampe: <[block]{block title} message [block]> """ # -> open p = re.compile("^<\[([^{}]*?)\]", re.VERBOSE) string = p.sub(r"\\begin{\1}", string) # -> close p = re.compile("^\[([^{}]*?)\]>", re.VERBOSE) string = p.sub(r"\\end{\1}", string) return string def transform_columns(string): """ columns """ p = re.compile("^\[\[\[(.*?)\]\]\]", re.VERBOSE) string = p.sub(r"\\column{\1}", string) return string def transform_boldfont(string): """ bold font """ p = re.compile("'''(.*?)'''", re.VERBOSE) string = p.sub(r"\\textbf{\1}", string) return string def transform_italicfont(string): """ italic font """ p = re.compile("''(.*?)''", re.VERBOSE) string = p.sub(r"\\emph{\1}", string) return string def _transform_mini_parser(character, replacement, string): # implemented as a state-machine output, typewriter = [], [] seen_at, seen_escape = False, False for char in string: if seen_escape: if char == character: output.append(character) else: output.append('\\' + char) seen_escape = False elif char == "\\": seen_escape = True elif char == character: if seen_at: seen_at = False output, typewriter = typewriter, output output.append('\\'+replacement+'{') output += typewriter output.append('}') typewriter = [] else: seen_at = True output, typewriter = typewriter, output else: output.append(char) if seen_at: output, typewriter = typewriter, output output.append(character) output += typewriter return "".join(output) def transform_typewriterfont(string): """ typewriter font """ return _transform_mini_parser('@', 'texttt', string) def transform_alerts(string): """ alerts """ return _transform_mini_parser('!', 'alert', string) def transform_colors(string): """ colors """ def maybe_replace(m): """ only replace if we are not within <<< >>> """ for g in graphics: # found color is within a graphics token if m.start() >= g.start() and m.end() <= g.end(): return m.string[m.start():m.end()] return "\\textcolor{" + m.group(1) + "}{" + m.group(2) + "}" p = re.compile("(\<\<\<)(.*?)\>\>\>", re.VERBOSE) graphics = list(p.finditer(string)) p = re.compile("_([^_\\\\{}]*?)_([^_]*?[^_\\\\{}])_", re.VERBOSE) string = p.sub(maybe_replace, string) return string def transform_footnotes(string): """ footnotes """ p = re.compile("\(\(\((.*?)\)\)\)", re.VERBOSE) string = p.sub(r"\\footnote{\1}", string) return string def transform_graphics(string): """ figures/images """ p = re.compile("\<\<\<(.*?),(.*?)\>\>\>", re.VERBOSE) string = p.sub(r"\\includegraphics[\2]{\1}", string) p = re.compile("\<\<\<(.*?)\>\>\>", re.VERBOSE) string = p.sub(r"\\includegraphics{\1}", string) return string def transform_substitutions(string): """ substitutions """ p = re.compile("(\s)-->(\s)", re.VERBOSE) string = p.sub(r"\1$\\rightarrow$\2", string) p = re.compile("(\s)<--(\s)", re.VERBOSE) string = p.sub(r"\1$\\leftarrow$\2", string) p = re.compile("(\s)==>(\s)", re.VERBOSE) string = p.sub(r"\1$\\Rightarrow$\2", string) p = re.compile("(\s)<==(\s)", re.VERBOSE) string = p.sub(r"\1$\\Leftarrow$\2", string) p = re.compile("(\s):-\)(\s)", re.VERBOSE) string = p.sub(r"\1\\smiley\2", string) p = re.compile("(\s):-\((\s)", re.VERBOSE) string = p.sub(r"\1\\frownie\2", string) return string def transform_vspace(string): """vspace""" p = re.compile("^\s*--(.*)--\s*$") string = p.sub(r"\n\\vspace{\1}\n", string) return string def transform_vspacestar(string): """vspace*""" p = re.compile("^\s*--\*(.*)--\s*$") string = p.sub(r"\n\\vspace*{\1}\n", string) return string def transform_uncover(string): """uncover""" p = re.compile("\+<(.*)>\s*{(.*)") # +<1-2>{.... -> \uncover<1-2>{.... string = p.sub(r"\\uncover<\1>{\2", string) return string def transform_only(string): """only""" p = re.compile("-<(.*)>\s*{(.*)") # -<1-2>{.... -> \only<1-2>{.... string = p.sub(r"\\only<\1>{\2", string) return string def transform(string, state): """ convert/transform one line in context of state""" #string = transform_itemenums(string, state) string = transform_define_foothead(string, state) string = transform_detect_manual_frameclose(string, state) string = transform_h4_to_frame(string, state) string = transform_h3_to_subsec(string, state) string = transform_h2_to_sec(string, state) string = transform_replace_headfoot(string, state) string = transform_environments(string) string = transform_columns(string) string = transform_boldfont(string) string = transform_italicfont(string) string = transform_typewriterfont(string) string = transform_alerts(string) string = transform_colors(string) string = transform_footnotes(string) string = transform_graphics(string) string = transform_substitutions(string) string = transform_vspacestar(string) string = transform_vspace(string) string = transform_uncover(string) string = transform_only(string) string = transform_itemenums(string, state) return string def expand_code_make_defverb(content, name): return "\\defverbatim[colored]\\%s{\n%s\n}" % (name, content) def expand_code_make_lstlisting(content, options): return "\\begin{lstlisting}%s%s\\end{lstlisting}" % (options, content) def expand_code_search_escape_sequences(code): esc_open = '1' esc_close = '2' while code.find(esc_open) != -1 or code.find(esc_close) != -1: esc_open = esc_open + chr(random.randint(48,57)) esc_close = esc_close + chr(random.randint(48,57)) return (esc_open,esc_close) def expand_code_tokenize_anims(code): #escape (esc_open, esc_close) = expand_code_search_escape_sequences(code) code = code.replace('\\[', esc_open) code = code.replace('\\]', esc_close) p = re.compile(r'\[\[(?:.|\s)*?\]\]|\[(?:.|\s)*?\]') non_anim = p.split(code) anim = p.findall(code) #unescape anim = [s.replace(esc_open, '\\[').replace(esc_close, '\\]') for s in anim] non_anim = [s.replace(esc_open, '[').replace(esc_close, ']') for s in non_anim] return (anim, non_anim) def make_unique(seq): '''remove duplicate elements in a list, does not preserve order''' keys = {} for elem in seq: keys[elem] = 1 return list(keys.keys()) def expand_code_parse_overlayspec(overlayspec): overlays = [] groups = overlayspec.split(',') for group in groups: group = group.strip() if group.find('-')!=-1: nums = group.split('-') if len(nums)<2: syntax_error('overlay specs must be of the form <(%d-%d)|(%d), ...>', overlayspec) else: try: start = int(nums[0]) stop = int(nums[1]) except ValueError: syntax_error('not an int, overlay specs must be of the form <(%d-%d)|(%d), ...>', overlayspec) overlays.extend(list(range(start,stop+1))) else: try: num = int(group) except ValueError: syntax_error('not an int, overlay specs must be of the form <(%d-%d)|(%d), ...>', overlayspec) overlays.append(num) #make unique overlays = make_unique(overlays) return overlays def expand_code_parse_simpleanimspec(animspec): #escape (esc_open, esc_close) = expand_code_search_escape_sequences(animspec) animspec = animspec.replace('\\[', esc_open) animspec = animspec.replace('\\]', esc_close) p = re.compile(r'^\[<([0-9,\-]+)>((?:.|\s)*)\]$') m = p.match(animspec) if m is not None: overlays = expand_code_parse_overlayspec(m.group(1)) code = m.group(2) else: syntax_error('specification does not match [<%d>%s]', animspec) #unescape code code = code.replace(esc_open, '[').replace(esc_close, ']') return [(overlay, code) for overlay in overlays] def expand_code_parse_animspec(animspec): if len(animspec)<4 or not animspec.startswith('[['): return ('simple', expand_code_parse_simpleanimspec(animspec)) #escape (esc_open, esc_close) = expand_code_search_escape_sequences(animspec) animspec = animspec.replace('\\[', esc_open) animspec = animspec.replace('\\]', esc_close) p = re.compile(r'\[|\]\[|\]') simple_specs = ['[%s]'%s for s in [s for s in p.split(animspec) if len(s.strip())>0]] #unescape simple_specs = [s.replace(esc_open, '\\[').replace(esc_close, '\\]') for s in simple_specs] parsed_simple_specs = list(map(expand_code_parse_simpleanimspec, simple_specs)) unified_pss = [] for pss in parsed_simple_specs: unified_pss.extend(pss) return ('double', unified_pss) def expand_code_getmaxoverlay(parsed_anims): max_overlay = 0 for anim in parsed_anims: for spec in anim: if spec[0] > max_overlay: max_overlay = spec[0] return max_overlay def expand_code_getminoverlay(parsed_anims): min_overlay = sys.maxsize for anim in parsed_anims: for spec in anim: if spec[0] < min_overlay: min_overlay = spec[0] if min_overlay == sys.maxsize: min_overlay = 0 return min_overlay def expand_code_genanims(parsed_animspec, minoverlay, maxoverlay, type): #get maximum length of code maxlen=0 if type=='double': for simple_animspec in parsed_animspec: if maxlen < len(simple_animspec[1]): maxlen = len(simple_animspec[1]) out = [] fill = ''.join([' ' for i in range(0, maxlen)]) for x in range(minoverlay,maxoverlay+1): out.append(fill[:]) for simple_animspec in parsed_animspec: out[simple_animspec[0]-minoverlay] = simple_animspec[1] return out def expand_code_getname(code): hex2alpha_table = { '0':'a', '1':'b', '2':'c', '3':'d', \ '4':'e', '5':'f', '6':'g', '7':'h', '8':'i', '9':'j', \ 'a':'k', 'b':'l', 'c':'m', 'd':'n', 'e':'o', 'f':'p' \ } hexhash = md5hex(code) alphahash = ''.join(hex2alpha_table[x] for x in hexhash) return alphahash def expand_code_makeoverprint(names, minoverlay): out = ['\\begin{overprint}\n'] for (index, name) in enumerate(names): out.append(' \\onslide<%d>\\%s\n' % (index+minoverlay, name)) out.append('\\end{overprint}\n') return ''.join(out) def expand_code_get_unique_name(defverbs, code, lstparams): """generate a collision free entry in the defverbs-map and names-list""" name = expand_code_getname(code) expanded_code = expand_code_make_defverb(expand_code_make_lstlisting(code, lstparams), name) rehash = '' while name in defverbs and defverbs[name] != expanded_code: rehash += chr(random.randint(65,90)) #append a character from A-Z to rehash value name = expand_code_getname(code + rehash) expanded_code = expand_code_make_defverb(expand_code_make_lstlisting(code, lstparams), name) return (name, expanded_code) def make_sorted(seq): '''replacement for sorted built-in''' l = list(seq) l.sort() return l def expand_code_segment(result, codebuffer, state): #treat first line as params for lstlistings lstparams = codebuffer[0] codebuffer[0] = '' #join lines into one string code = ''.join(codebuffer) #tokenize code into anim and non_anim parts (anim, non_anim) = expand_code_tokenize_anims(code) if len(anim)>0: #generate multiple versions of the anim parts parsed_anims = list(map(expand_code_parse_animspec, anim)) max_overlay = expand_code_getmaxoverlay(x[1] for x in parsed_anims) #if there is unanimated code, use 0 as the starting overlay if len(list(non_anim))>0: min_overlay = 1 else: min_overlay = expand_code_getminoverlay(x[1] for x in parsed_anims) gen_anims = [expand_code_genanims(x[1], min_overlay, max_overlay, x[0]) for x in parsed_anims] anim_map = {} for i in range(0,max_overlay-min_overlay+1): anim_map[i+min_overlay] = [x[i] for x in gen_anims] names = [] for overlay in make_sorted(anim_map.keys()): #combine non_anim and anim parts anim_map[overlay].append('') zipped = zip(non_anim, anim_map[overlay]) code = ''.join(x[0] + x[1] for x in zipped) #generate a collision free entry in the defverbs-map and names-list (name, expanded_code) = expand_code_get_unique_name(state.defverbs, code, lstparams) #now we have a collision free entry, append it names.append(name) state.defverbs[name] = expanded_code #append overprint area to result overprint = expand_code_makeoverprint(names, min_overlay) result.append(overprint) else: #we have no animations and can just put the defverbatim in #remove escapings code = code.replace('\\[', '[').replace('\\]', ']') (name, expanded_code) = expand_code_get_unique_name(state.defverbs, code, lstparams) state.defverbs[name] = expanded_code result.append('\n\\%s\n' % name) return def expand_code_defverbs(result, state): result[state.code_pos] = result[state.code_pos] + '\n'.join(list(state.defverbs.values())) + '\n' state.defverbs.clear() def get_autotemplate_closing(): return '\n\end{document}\n' def parse_bool(string): boolean = False if string == 'True' or string == 'true' or string == '1': boolean = True elif string == 'False' or string == 'false' or string =='0': boolean = False else: syntax_error('Boolean expected (True/true/1 or False/false/0)', string) return boolean def parse_autotemplate(autotemplatebuffer): """ @param autotemplatebuffer (list) a list of lines found in the autotemplate section @return (list) a list of tuples of the form (string, string) with \command.parameters pairs """ autotemplate = [] for line in autotemplatebuffer: if len(line.lstrip())==0: #ignore empty lines continue if len(line.lstrip())>0 and line.lstrip().startswith('%'): #ignore lines starting with % as comments continue tokens = line.split('=', 1) if len(tokens)<2: syntax_error('lines in the autotemplate section have to be of the form key=value', line) autotemplate.append((tokens[0], tokens[1])) return autotemplate def parse_usepackage(usepackage): """ @param usepackage (str) the unparsed usepackage string in the form [options]{name} @return (tuple) (name(str), options(str)) """ p = re.compile(r'^\s*(\[.*\])?\s*\{(.*)\}\s*$') m = p.match(usepackage) g = m.groups() if len(g)<2 or len(g)>2: syntax_error('usepackage specifications have to be of the form [%s]{%s}', usepackage) elif g[1]==None and g[1].strip()!='': syntax_error('usepackage specifications have to be of the form [%s]{%s}', usepackage) else: options = g[0] name = g[1].strip() return (name, options) def unify_autotemplates(autotemplates): usepackages = {} #packagename : options documentclass = '' titleframe = False merged = [] for template in autotemplates: for command in template: if command[0] == 'usepackage': (name, options) = parse_usepackage(command[1]) usepackages[name] = options elif command[0] == 'titleframe': titleframe = command[1] elif command[0] == 'documentclass': documentclass = command[1] else: merged.append(command) autotemplate = [] autotemplate.append(('documentclass', documentclass)) for (name, options) in usepackages.items(): if options is not None and options.strip() != '': string = '%s{%s}' % (options, name) else: string = '{%s}' % name autotemplate.append(('usepackage', string)) autotemplate.append(('titleframe', titleframe)) autotemplate.extend(merged) return autotemplate def expand_autotemplate_gen_opening(autotemplate): """ @param autotemplate (list) the specification of the autotemplate in the form of a list of tuples @return (string) the string the with generated latex code """ titleframe = False titleframeopts = '' out = [] for item in autotemplate: if item[0] == 'titleframe': titleframe = parse_bool(item[1]) elif item[0] == 'titleframeopts': titleframeopts = item[1] else: out.append('\\%s%s' % item) out.append('\n\\begin{document}\n') if titleframe: out.append('\n\\frame%s{\\titlepage}\n' % titleframeopts) return '\n'.join(out) def expand_autotemplate_opening(result, templatebuffer, state): my_autotemplate = parse_autotemplate(templatebuffer) the_autotemplate = unify_autotemplates([autotemplate, my_autotemplate]) opening = expand_autotemplate_gen_opening(the_autotemplate) result.append(opening) result.append('') state.code_pos = len(result) state.autotemplate_opened = True return def get_autotemplatemode(line, autotemplatemode): autotemplatestart = re.compile(r'^<\[\s*autotemplate\s*\]') autotemplateend = re.compile(r'^\[\s*autotemplate\s*\]>') if not autotemplatemode and autotemplatestart.match(line)!=None: line = autotemplatestart.sub('', line) return (line, True) elif autotemplatemode and autotemplateend.match(line)!=None: line = autotemplateend.sub('', line) return (line, False) else: return (line, autotemplatemode) def get_nowikimode(line, nowikimode): if not nowikimode and nowikistartre.match(line)!=None: line = nowikistartre.sub('', line) return (line, True) elif nowikimode and nowikiendre.match(line)!=None: line = nowikiendre.sub('', line) return (line, False) else: return (line, nowikimode) def get_codemode(line, codemode): if not codemode and codestartre.match(line)!=None: line = codestartre.sub('', line) return (line, True) elif codemode and codeendre.match(line)!=None: line = codeendre.sub('', line) return (line, False) else: return (line, codemode) def joinLines(lines): """ join lines ending with unescaped percent signs, unless inside codemode or nowiki mode """ nowikimode = False codemode = False r = [] # result array s = '' # new line for _l in lines: (_,nowikimode) = get_nowikimode(_l, nowikimode) if not nowikimode: (_,codemode) = get_codemode(_l, codemode) if not codemode: l = _l.rstrip() else: l = _l if not (nowikimode or codemode) and (len(l) > 1) and (l[-1] == "%") and (l[-2] != "\\"): s = s + l[:-1] elif not (nowikimode or codemode) and (len(l) == 1) and (l[-1] == "%"): s = s + l[:-1] else: s = s + l r.append(s) s = '' return r def read_file_to_lines(filename): """ read file """ try: f = codecs.open(filename, "r", encoding='UTF-8') lines = joinLines(f.readlines()) f.close() except: pprint("Cannot read file: %s" % filename, sys.stderr) sys.exit(-2) return lines def scan_for_selected_frames(lines): """scans for frames that should be rendered exclusively, returns true if such frames have been found""" p = re.compile("^!====\s*(.*?)\s*====(.*)", re.VERBOSE) for line in lines: mo = p.match(line) if mo is not None: return True return False def line_opens_unselected_frame(line): p = re.compile("^====\s*(.*?)\s*====(.*)", re.VERBOSE) if p.match(line) is not None: return True return False def line_opens_selected_frame(line): p = re.compile("^!====\s*(.*?)\s*====(.*)", re.VERBOSE) if p.match(line) is not None: return True return False def line_closes_frame(line): p = re.compile("^\s*\[\s*frame\s*\]>", re.VERBOSE) if p.match(line) is not None: return True return False def filter_selected_lines(lines): selected_lines = [] selected_frame_opened = False frame_closed = True frame_manually_closed = False for line in lines: if line_opens_selected_frame(line): selected_frame_opened = True frame_closed = False if line_opens_unselected_frame(line): selected_frame_opened = False frame_closed = False if line_closes_frame(line): selected_frame_opened = False frame_closed = True frame_manually_closed = True if selected_frame_opened or (frame_closed and not frame_manually_closed): selected_lines.append(line) return selected_lines def convert2beamer(lines): out = "" selectedframemode = scan_for_selected_frames(lines) if selectedframemode: out = convert2beamer_selected(lines) else: out = convert2beamer_full(lines) return out def convert2beamer_selected(lines): selected_lines = filter_selected_lines(lines) out = convert2beamer_full(selected_lines) return out def include_file(line): """ Extract filename to include. @param line string a line that might include an inclusion @return string or None if the line contains an inclusion, return the filename, otherwise return None """ p = re.compile("\>\>\>(.*?)\<\<\<", re.VERBOSE) if p.match(line): filename = p.sub(r"\1", line) return filename else: return None def include_file_recursive(base): stack = [] output = [] def recurse(file_): stack.append(file_) nowikimode = False codemode = False for line in get_lines_from_cache(file_): if nowikimode or codemode: if nowikiendre.match(line): nowikimode = False elif codeendre.match(line): codemode = False output.append(line) elif nowikistartre.match(line): output.append(line) nowikimode = True elif codestartre.match(line): output.append(line) codemode = True else: include = include_file(line) if include is not None: if include in stack: raise IncludeLoopException('Loop detected while trying ' "to include: '%s'.\n" % include + 'Stack: '+ "->".join(stack)) else: recurse(include) else: output.append(line) stack.pop() recurse(base) return output def munge_input_lines(lines): # join lines if they end with single \ munge = False new_lines = [] for line in lines: if munge is True: if not line.endswith('\\') and not line.endswith('\\\\'): munge = False else: line = line[:-1] new_lines[-1] += line else: if line.endswith("\\") and not line.endswith('\\\\'): munge = True line = line[:-1] new_lines.append(line) return new_lines def convert2beamer_full(lines): """ convert to LaTeX beamer""" state = w2bstate() result = [''] #start with one empty line as line 0 codebuffer = [] autotemplatebuffer = [] nowikimode = False codemode = False autotemplatemode = False for line in lines: (line, nowikimode) = get_nowikimode(line, nowikimode) if nowikimode: result.append(line) else: (line, _codemode) = get_codemode(line, codemode) if _codemode and not codemode: #code mode was turned on codebuffer = [] elif not _codemode and codemode: #code mode was turned off expand_code_segment(result, codebuffer, state) if codemode or _codemode: codebuffer.append(line) codemode = _codemode else: (line, _autotemplatemode) = get_autotemplatemode(line, autotemplatemode) if _autotemplatemode and not autotemplatemode: #autotemplate mode was turned on autotemplatebuffer = [] elif not _autotemplatemode and autotemplatemode: #autotemplate mode was turned off expand_autotemplate_opening(result, autotemplatebuffer, state) autotemplatemode = _autotemplatemode if autotemplatemode: autotemplatebuffer.append(line) else: state.current_line = len(result) result.append(transform(line, state)) result.append(transform("", state)) # close open environments if state.frame_opened: result.append(get_frame_closing(state)) if state.autotemplate_opened: result.append(get_autotemplate_closing()) #insert defverbs somewhere at the beginning expand_code_defverbs(result, state) return result def print_result(lines): """ print result to stdout """ for l in lines: pprint(l, file=sys.stdout) return def redirect_stdout(outfilename): global _redirected_stdout outfile = open(outfilename, "wt") _redirected_stdout = outfile def main(argv): """ check parameters, start file processing """ usage = "%prog [options] [input1.txt [input2.txt ...]] > output.tex" version = "%prog (http://wiki2beamer.sf.net), version: " + VERSIONTAG parser = optparse.OptionParser(usage="\n " + usage, version=version) parser.add_option("-o", "--output", dest="output", metavar="FILE", help="write output to FILE instead of stdout") opts, args = parser.parse_args() if opts.output is not None: redirect_stdout(opts.output) input_files = [] if not sys.stdin.isatty(): _file_cache['stdin'] = joinLines(sys.stdin.readlines()) input_files.append('stdin') elif len(args) == 0: parser.error("You supplied no files to convert!") input_files += args lines = [] for file_ in input_files: lines += include_file_recursive(file_) lines = munge_input_lines(lines) lines = convert2beamer(lines) print_result(lines) if __name__ == "__main__": main(sys.argv) wiki2beamer-wiki2beamer-v0.10.0/code/wiki2beamer.py000077700000000000000000000000001336367417400242002wiki2beamerustar00rootroot00000000000000wiki2beamer-wiki2beamer-v0.10.0/dist/000077500000000000000000000000001336367417400173375ustar00rootroot00000000000000wiki2beamer-wiki2beamer-v0.10.0/dist/Makefile000066400000000000000000000030611336367417400207770ustar00rootroot00000000000000.PHONY: debian clean zip man example VERSIONNR=0.10.0 ZIPSUBDIR=./zip/ VERSIONDIR=wiki2beamer-$(VERSIONNR) ZIPDISTDIR=$(ZIPSUBDIR)$(VERSIONDIR) zip: man example mkdir -p $(ZIPDISTDIR) mkdir -p $(ZIPDISTDIR)/code mkdir -p $(ZIPDISTDIR)/doc/man mkdir -p $(ZIPDISTDIR)/doc/example cp ../ChangeLog $(ZIPDISTDIR) cp ../LICENSE $(ZIPDISTDIR) cp ../README $(ZIPDISTDIR) cp ../code/wiki2beamer $(ZIPDISTDIR)/code/ cp ../code/setup.py $(ZIPDISTDIR)/code/ cp ../doc/fdl.txt $(ZIPDISTDIR)/doc/ cp ../doc/man/Makefile $(ZIPDISTDIR)/doc/man/ cp ../doc/man/wiki2beamer.xml $(ZIPDISTDIR)/doc/man/ cp ../doc/man/wiki2beamer.html $(ZIPDISTDIR)/doc/man/ cp ../doc/man/wiki2beamer.1 $(ZIPDISTDIR)/doc/man/ cp ../tests/example/Makefile $(ZIPDISTDIR)/doc/example/ cp ../tests/example/db-rg1024.png $(ZIPDISTDIR)/doc/example/ cp ../tests/example/example.txt $(ZIPDISTDIR)/doc/example/ cp ../tests/example/includefile.txt $(ZIPDISTDIR)/doc/example/ cp ../tests/example/example.pdf $(ZIPDISTDIR)/doc/example/ cd $(ZIPSUBDIR) && zip -r $(VERSIONDIR).zip $(VERSIONDIR)/ man: $(MAKE) -C ../doc/man/ example: $(MAKE) -C ../tests/example/ debian: mkdir -p ./debian/usr/bin mkdir -p ./debian/usr/share/man/man1 mkdir -p ./debian/usr/share/doc/wiki2beamer/ cp -p ../code/wiki2beamer ./debian/usr/bin/ cp -p ../doc/man/wiki2beamer.1 ./debian/usr/share/man/man1/ gzip ./debian/usr/share/man/man1/wiki2beamer.1 cp -Rp ../doc/examples ./debian/usr/share/doc/wiki2beamer/ fakeroot dpkg-deb --build ./debian/ wiki2beamer_x.x-x_all.deb clean: rm -Rf ./debian/usr rm -Rf $(ZIPSUBDIR) wiki2beamer-wiki2beamer-v0.10.0/doc/000077500000000000000000000000001336367417400171415ustar00rootroot00000000000000wiki2beamer-wiki2beamer-v0.10.0/doc/.gitignore000066400000000000000000000001021336367417400211220ustar00rootroot00000000000000man/man1/wiki2beamer.1.bz2 man/wiki2beamer.1 man/wiki2beamer.html wiki2beamer-wiki2beamer-v0.10.0/doc/examples/000077500000000000000000000000001336367417400207575ustar00rootroot00000000000000wiki2beamer-wiki2beamer-v0.10.0/doc/examples/.gitignore000066400000000000000000000001521336367417400227450ustar00rootroot00000000000000*.aux *.log *.out *.snm *.toc *.nav # Make .tex ignores more specific. wiki2beamer.tex wiki_*.tex *.pdf wiki2beamer-wiki2beamer-v0.10.0/doc/examples/Makefile000066400000000000000000000006251336367417400224220ustar00rootroot00000000000000#!/usr/bin/make .PRECIOUS: %.tex WIKIFILES=$(wildcard *.wiki) all: $(patsubst %.wiki, %.pdf, $(WIKIFILES)) %.tex: %.wiki @echo "Translating $<" @python ../../code/wiki2beamer $< > $@ %.pdf: %.tex @echo "Running pdflatex in $<" pdflatex $< pdflatex $< %: %.pdf proper: clean $(RM) *.pdf clean: $(RM) *.aux *.log *.nav *.out *.snm *.toc $(RM) $(patsubst %.wiki, %.tex, $(WIKIFILES)) wiki2beamer-wiki2beamer-v0.10.0/doc/examples/advanced.wiki000066400000000000000000000122471336367417400234170ustar00rootroot00000000000000<[autotemplate] usepackage=[utf8]{inputenc} usepackage=[T1]{fontenc} usepackage={color} usepackage={textcomp} usepackage={graphics} usepackage={wasysym} usepackage={beamerthemeWarsaw} title={wiki2beamer: \\ An advanced example} author={Michael Rentzsch} date={\today} [autotemplate]> ==== Content ==== This example introduces further (and new) concepts of '''wiki2beamer''' (and \LaTeX\ Beamer): * Overlays * Environments ** Plain \LaTeX{}: Center, % % % Flushright, \ldots ** \LaTeX{} Beamer: Block, Example, \ldots * Columns * Substitutions * Footnotes * Manual Frame Closing ==== Overlays ==== *<1-> Overlays are a very useful concept of the beamer class *<2-> They can be used to uncover content step by step *<3-> They can be used for list items *<4-> Or for any other type of content \\[4mm] \only<4->{\includegraphics[width=6cm]{fig/rainbow}} ==== Overlays in wiki2beamer ==== Here is the source code for the preceding slide -- I guess it should be very much self-explanatory: \\[8mm] {\tt *<1-> Overlays are very useful concept of the beamer class \\ *<2-> They can be used to uncover content step by step \\ *<3-> They can be used for list items \\ *<4-> Or for any other type of content $\backslash$$\backslash$[4mm] \\ \ \\ $\backslash$only$<$4-$>\{$$\backslash$includegraphics[width=6cm]$\{$fig/rainbow$\}\}$ } ==== Environments ==== * \LaTeX\ comes with a number of different environments: ** center ** flushright ** and many more \\[3mm] * \LaTeX\ Beamer includes further environments that are quite useful for presentation slides ** boxes ** examples ** theorems Have a look at the next slide, to see some of the environments in action. ==== Environments in action ==== <[center] This is centered text. [center]> <[flushright] This is right-justified text. [flushright]> <[block]{Hello World.} This is boxed text. [block]> <[example] This is an example. [example]> ==== Environments in wiki2beamer ==== You can use plain \LaTeX{} code to create such environments, of course. However, '''wiki2beamer''' offers you a shortcut: \\[6mm] {\tt $<$[center] \\ This is centered text. \\ {} [center]$>$ \\[6mm] } Thus, $<$[\ldots] will be tranformed into $\backslash$begin$\{$\ldots$\}$. Please pay attention to these two issues: * Environment definitions have to start at the first line character * The user takes full responsibility for closing !all! opened environments ==== Parameters to environments ==== As stated on the preceding slide, '''wiki2beamer''' simply transforms the <[center] {\tt $<$[\ldots] \hspace{5mm} [\ldots]$>$ } [center]> to $\backslash$begin and $\backslash$end commands. \\[6mm] Hence, it is possible to add different kind of parameters to the environment you want to use. \\[2mm] <[block]{An example} This block was created like this: {\tt $<$[block]$\{$An example$\}$ \\ \ldots \\ {} [\ldots]$>$ } [block]> ==== Columns ==== \LaTeX\ Beamer introduced another environment which is handy which presentation slides: !columns!. \\[4mm] <[columns] [[[5cm]]] They can be used to place the slide content in a number of different columns. For example, the text could be on the left side, as it is the case on this page. And the right side could be used to show an image. [[[5cm]]] \includegraphics[width=4.5cm]{fig/rainbow} [columns]> ==== Columns in wiki2beamer ==== Use this syntax to create columns in '''wiki2beamer''': \\[4mm] {\tt $<$[columns] \\ {} [[[5cm]]] \\ Text \ldots \\ \ \\ {} [[[5cm]]] \\ $\backslash$includegraphics[width=4.5cm]$\{$fig/rainbow$\}$ \\{} [columns]$>$ \\[4mm] } The length parameter between [[[ and ]]] specifies the column width. ==== Substitutions ==== '''wiki2beamer''' will transform a few common ASCII symbols to their typographically correct equivalents: \\[4mm] * -{-}$>$ becomes ! --> ! (\$$\backslash$rightarrow\$) * $<$-{-} becomes ! <-- ! (\$$\backslash$leftarrow\$) * ==$>$ becomes ! ==> ! (\$$\backslash$Rightarrow\$) * $<$== becomes ! <== ! (\$$\backslash$Leftarrow\$) * :{-}) becomes ! :-) ! ($\backslash$smiley, requires package wasysym) * :{-}( becomes ! :-( ! ($\backslash$frownie, requires package wasysym) \vspace{3mm} These symbols have to be preceeded and followed by at least one whitespace character. ==== Footnotes ==== Footnotes(((as you can see here))) are quite useful on some occasions. Using '''wiki2beamer''', they can be created like this: \\[6mm] {\tt Footnotes({(}(as you can see here){)}) are quite useful on some occasions. } ==== Manual Frame Closing ==== If you want to write \LaTeX\ code outside of the frame environment you can manually close the frame (which was opened by {\tt ====}) via: '''wiki2beamer''' syntax: {\tt [frame]$>$} '''wiki2beamer''' detects these when at the beginning of a line and then consideres the frame closed. [frame]> \defverbatim\somelisting{ <[verbatim] \defverbatim\somelisting{ Some verbatim code as a \defverbatim outside of a frame. Can be referenced as \somelisting later. } [verbatim]> } ==== Manual Frame Closing ==== This verbatim code was defined via {\tt $\backslash$defverbatim} outside the frame and then included via it's name: \pause <[block]{Some Listing} \somelisting [block]> ==== Finally... ==== <[center] \huge The End. [center]> wiki2beamer-wiki2beamer-v0.10.0/doc/examples/beamer.wiki000066400000000000000000000104541336367417400231030ustar00rootroot00000000000000<[autotemplate] usepackage=[utf8]{inputenc} usepackage=[T1]{fontenc} usepackage={color} usepackage={textcomp} usepackage={beamerthemesplit} title={Introduction to Wiki2Beamer} author={Michael Rentzsch} date={\today} [autotemplate]> == Motivation == ==== Why use Wiki2Beamer? ==== \LaTeX{} Beamer is a powerful way to create presentations: * Uses all advantages of \LaTeX, e.g. typesetting of formulas * Powerful overlay concept * Creates small and platform independent PDF files !However, \LaTeX{} Beamer has one big disadvantage:! ==== A typical presentation slide ==== * This is a typical presentation slide * It consists of some items ** Which might be cascaded ** Just like this * The \LaTeX{} Beamer source code for this slide looks like this: ==== Source code ==== { \tt \textbf{$\backslash$frame}{$\{$}\\ {\ \ }\textbf{$\backslash$frametitle}{ $\{$}{A typical presentation slide}{$\}$}\\ { \ \\ }{\ \ }\textbf{$\backslash$begin}{$\{$}{itemize}{$\}$}\\ {\ \ \ \ }\textbf{$\backslash$item }{This is a typical presentation slide\\ }{\ \ \ \ }\textbf{$\backslash$item }{It consists of some items\\ }{\ \ \ \ }\textbf{$\backslash$begin}{$\{$}{itemize}{$\}$}\\ {\ \ \ \ \ \ }\textbf{$\backslash$item }{Which might be cascaded\\ }{\ \ \ \ \ \ }\textbf{$\backslash$item }{Just like this\\ }{\ \ \ \ }\textbf{$\backslash$end}{$\{$}{itemize}{$\}$}\\ {\ \ \ \ }\textbf{$\backslash$item }{ The }\textbf{$\backslash$LaTeX}{$\{$$\}$ }{Beamer source code for this slide looks like this:\\ }{\ \ }\textbf{$\backslash$end}{$\{$}{itemize}{$\}$}\\ { $\}$}\\ } ==== \LaTeX{} Beamer's disadvantage ==== As you can see, one has to write a lot of \LaTeX{} code for a simple slide with a few (structured) items on it. \\[4mm] That's where '''Wiki2Beamer''' comes into play. ==== A typical wiki page ==== Wikis have a very simple syntax. The wiki code for the example slide looks like this: \\[4mm] {\tt ==== A typical presentation slide ====\\ \ \\ * This is a typical presentation slide \\ * It consists of some items \\ ** Which might be cascaded \\ ** Just like this \\ * The $\backslash$LaTeX{} Beamer source code for this slide looks like this: \\ } ==== The idea behind Wiki2Beamer ==== Wiki2Beamer is a small Python script that takes a wiki-like text file and transforms it into \LaTeX{} code for inclusing in a \LaTeX{} Beamer skeleton file. == How to use it == ==== Initial setup ==== # Create a skeleton \LaTeX{} file (see example beamer.tex) # Create a text file for your slides in a wiki-based language # Run '''wiki2beamer.py''' on your wiki file, write the output to a \LaTeX{} file \\ @python wiki2beamer.py wiki.txt > output.tex@ # Use pdflatex to create your presentation file You may want to create a '''make''' script (or something similar) to execute the last two steps. ==== Basic syntax: Headings ==== The Wiki2Beamer syntax is very similiar to those of the famous '''Mediawiki''' software which is used for the '''Wikipedia''' project. \\[4mm] Headings are produced like this: \\[4mm] {\tt !== section ==! will be translated to $\backslash$section{$\ldots$} \\ !=== subsection ===! will be translated to $\backslash$subsection{$\ldots$} \\[2mm] !==== frame ====! will create a new frame } ==== Basic syntax: Lists ==== Lists can be produced very easily: \\[4mm] {\tt * This is an unordered list item. \ \\ ** This is one, too. \ \\ \ \\ \# This is an ordered list item. \ \\ \#\# This is one, too. \ \\ \ \\ * Important: \ \\ *\# Mixing list types is possible. \ \\ *\# Wiki2Beamer will create the necessary environments for you. } ==== Basic syntax: Formatting ==== Wiki2Beamer includes some simple formatting commands: \\[4mm] * '''Bold Text:''' enclose text in @\textquotesingle\textquotesingle\textquotesingle@ * ''Italic Text:'' enclose text in @\textquotesingle\textquotesingle@ * @Typewriter:@ enclose text in @ * !Alerts:! enclose text in ! * _blue_Colors:_ use \_ notation, see project home page \\[4mm] This example presentation can not show all features that '''wiki2beamer''' offers, have a look at the project website for more information. == Further information == ==== Further information ==== Further information can be found on the project home page: \\[4mm] \begin{center} http://wiki2beamer.sourceforge.net \\[4mm] \end{center} Bug reports and feature requests are appreciated. wiki2beamer-wiki2beamer-v0.10.0/doc/examples/fig/000077500000000000000000000000001336367417400215245ustar00rootroot00000000000000wiki2beamer-wiki2beamer-v0.10.0/doc/examples/fig/knot.pdf000066400000000000000000000162051336367417400231760ustar00rootroot00000000000000%PDF-1.4 % 3 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 4 0 obj << /Type /Page /Parent 2 0 R /MediaBox [ 0 0 141.73226929 141.73226929 ] /Resources 5 0 R /Contents 6 0 R /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> >> endobj 6 0 obj << /Length 7 0 R >> stream 0.8 0 0 -0.8 0 142 cm q 0.3574159 0 0 0.3574159 0 0 cm q 0.94117647 0.627451 0.29019609 rg 0 0 m 30.96 30.96 l 185.868 30.96 l 185.868 0 l 0 0 l h f Q q 0.94117647 0.627451 0.29019609 rg 185.868 30.96 m 185.868 0 l 371.736 185.868 l 356.257 201.348 l 185.868 30.96 l h f Q q 0.83529413 0.5411765 0.16862746 rg 0 0 m 0 185.868 l 30.96 185.868 l 30.96 30.96 l 0 0 l h f Q q 0.83529413 0.5411765 0.16862746 rg 0 185.868 m 61.956 247.824 l 77.436 232.344 l 30.96 185.868 l 0 185.868 l h f Q q 0.94117647 0.627451 0.29019609 rg 30.96 30.96 m 61.956 61.956 l 61.956 185.868 l 30.96 185.868 l 30.96 30.96 l h f Q q 0.94117647 0.627451 0.29019609 rg 61.956 185.868 m 92.916 216.864 l 77.436 232.343 l 30.96 185.868 l 61.956 185.868 l h f Q q 0.83529413 0.5411765 0.16862746 rg 30.96 30.96 m 61.956 61.956 l 185.868 61.956 l 340.776 216.864 l 356.255 201.348 l 185.868 30.96 l 30.96 30.96 l h f Q q 0.49803922 0.75294119 0.85882354 rg 61.956 61.956 m 92.916 92.952 l 185.868 92.952 l 325.296 232.344 l 340.775 216.864 l 185.868 61.956 l 61.956 61.956 l h f Q q 0.10980392 0.47843137 0.70980394 rg 92.916 92.952 m 61.956 61.956 l 61.956 185.868 l 92.916 216.864 l 108.432 201.348 l 92.916 185.868 l 92.916 92.952 l h f Q q 0.49803922 0.75294119 0.85882354 rg 92.916 92.952 m 123.912 123.912 l 123.912 185.868 l 108.432 201.348 l 92.916 185.868 l 92.916 108.432 l 92.916 92.952 l 92.916 92.952 l h f Q q 0.10980392 0.47843137 0.70980394 rg 92.916 92.952 m 185.868 92.952 l 325.296 232.344 l 309.78 247.824 l 185.868 123.912 l 123.912 123.912 l 92.916 92.952 l h f Q q 0.94117647 0.627451 0.29019609 rg 0 495.684 m 30.96 464.689 l 30.96 309.779 l 0 309.779 l 0 495.684 l h f Q q 0.94117647 0.627451 0.29019609 rg 30.96 309.779 m 0 309.779 l 185.868 123.911 l 201.348 139.391 l 30.96 309.779 l h f Q q 0.81960785 0.53333336 0.21176471 rg 0 495.684 m 185.868 495.684 l 185.868 464.689 l 30.96 464.689 l 0 495.684 l h f Q q 0.81960785 0.53333336 0.21176471 rg 185.868 495.684 m 247.824 433.693 l 232.344 418.213 l 185.868 464.691 l 185.868 495.684 l 185.868 495.684 l h f Q q 0.94117647 0.627451 0.29019609 rg 30.96 464.688 m 61.956 433.692 l 185.868 433.692 l 185.868 464.688 l 30.96 464.688 l h f Q q 0.94117647 0.627451 0.29019609 rg 185.868 433.691 m 216.864 402.732 l 232.343 418.211 l 185.867 464.688 l 185.867 433.691 l 185.868 433.691 l h f Q q 0.81960785 0.53333336 0.21176471 rg 30.96 464.688 m 61.956 433.692 l 61.956 309.779 l 216.864 154.907 l 201.348 139.391 l 30.96 309.779 l 30.96 464.688 l h f Q q 0.49803922 0.75294119 0.85882354 rg 61.956 433.691 m 92.916 402.732 l 92.916 309.779 l 232.344 170.386 l 216.865 154.907 l 61.956 309.779 l 61.956 433.691 l h f Q q 0.10980392 0.47843137 0.70980394 rg 92.916 402.732 m 61.956 433.691 l 185.868 433.691 l 216.864 402.732 l 201.348 387.252 l 185.868 402.732 l 92.916 402.732 l h f Q q 0.49803922 0.75294119 0.85882354 rg 92.916 402.732 m 123.912 371.736 l 185.868 371.736 l 201.348 387.252 l 185.868 402.732 l 108.432 402.732 l 92.916 402.732 l 92.916 402.732 l h f Q q 0.10980392 0.47843137 0.70980394 rg 92.916 402.732 m 92.916 309.779 l 232.344 170.387 l 247.824 185.867 l 123.912 309.779 l 123.912 371.736 l 92.916 402.732 l h f Q q 0.83529413 0.5411765 0.16862746 rg 495.684 495.684 m 464.688 464.689 l 309.78 464.689 l 309.78 495.684 l 495.684 495.684 l h f Q q 0.83529413 0.5411765 0.16862746 rg 309.78 464.688 m 309.78 495.683 l 123.912 309.779 l 139.392 294.3 l 309.78 464.688 l h f Q q 0.94117647 0.627451 0.29019609 rg 495.684 495.684 m 495.684 309.779 l 464.688 309.779 l 464.688 464.687 l 495.684 495.684 l h f Q q 0.94117647 0.627451 0.29019609 rg 495.684 309.779 m 433.693 247.823 l 418.214 263.303 l 464.691 309.779 l 495.684 309.779 l h f Q q 0.83529413 0.5411765 0.16862746 rg 464.688 464.688 m 433.693 433.692 l 433.693 309.779 l 464.688 309.779 l 464.688 464.688 l h f Q q 0.83529413 0.5411765 0.16862746 rg 433.691 309.779 m 402.731 278.82 l 418.21 263.303 l 464.687 309.779 l 433.691 309.779 l h f Q q 0.96078432 0.63137257 0.23137255 rg 464.688 464.688 m 433.693 433.692 l 309.78 433.692 l 154.908 278.82 l 139.392 294.3 l 309.78 464.688 l 464.688 464.688 l h f Q q 0.10980392 0.47843137 0.70980394 rg 433.691 433.691 m 402.731 402.732 l 309.78 402.732 l 170.388 263.305 l 154.908 278.822 l 309.78 433.692 l 433.691 433.692 l 433.691 433.691 l h f Q q 0.49803922 0.75294119 0.85882354 rg 402.731 402.732 m 433.691 433.691 l 433.691 309.779 l 402.731 278.82 l 387.252 294.3 l 402.731 309.779 l 402.731 402.732 l h f Q q 0.10980392 0.47843137 0.70980394 rg 402.731 402.732 m 371.735 371.736 l 371.735 309.779 l 387.252 294.3 l 402.731 309.779 l 402.731 387.252 l 402.731 402.732 l h f Q q 0.49803922 0.75294119 0.85882354 rg 402.731 402.732 m 309.78 402.732 l 170.388 263.305 l 185.868 247.825 l 309.78 371.736 l 371.735 371.736 l 402.731 402.732 l h f Q q 0.81960785 0.53333336 0.21176471 rg 495.684 0 m 464.688 30.96 l 464.688 185.868 l 495.684 185.868 l 495.684 0 l h f Q q 0.81960785 0.53333336 0.21176471 rg 464.688 185.868 m 495.684 185.868 l 309.78 371.736 l 294.3 356.256 l 464.688 185.868 l h f Q q 0.94117647 0.627451 0.29019609 rg 495.684 0 m 309.78 0 l 309.78 30.96 l 464.687 30.96 l 495.684 0 l h f Q q 0.94117647 0.627451 0.29019609 rg 309.78 0 m 247.823 61.956 l 263.302 77.436 l 309.78 30.96 l 309.78 0 l h f Q q 0.81960785 0.53333336 0.21176471 rg 464.688 30.96 m 433.693 61.956 l 309.78 61.956 l 309.78 30.96 l 464.688 30.96 l h f Q q 0.81960785 0.53333336 0.21176471 rg 309.78 61.956 m 278.819 92.952 l 263.302 77.436 l 309.78 30.96 l 309.78 61.956 l h f Q q 0.94117647 0.627451 0.29019609 rg 464.688 30.96 m 433.693 61.956 l 433.693 185.868 l 278.819 340.775 l 294.298 356.254 l 464.687 185.866 l 464.687 30.96 l 464.688 30.96 l h f Q q 0.10980392 0.47843137 0.70980394 rg 433.691 61.956 m 402.731 92.952 l 402.731 185.868 l 263.304 325.295 l 278.821 340.775 l 433.693 185.867 l 433.691 61.956 l h f Q q 0.49803922 0.75294119 0.85882354 rg 402.731 92.952 m 433.691 61.956 l 309.78 61.956 l 278.819 92.952 l 294.298 108.432 l 309.778 92.952 l 402.731 92.952 l h f Q q 0.10980392 0.47843137 0.70980394 rg 402.731 92.952 m 371.735 123.912 l 309.78 123.912 l 294.3 108.432 l 309.78 92.952 l 387.252 92.952 l 402.731 92.952 l h f Q q 0.49803922 0.75294119 0.85882354 rg 402.731 92.952 m 402.731 185.868 l 263.304 325.295 l 247.825 309.779 l 371.737 185.867 l 371.737 123.911 l 402.731 92.952 l h f Q Q endstream endobj 7 0 obj 6385 endobj 5 0 obj << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] >> endobj 1 0 obj << /Title(solomons_knot_ganson.svg) /Author(Michael Rentzsch) /Creator(www.inkscape.org) /Producer(Inkscape inkscape 0.45) /CreationDate(D:20070518151531Z) >> endobj 2 0 obj << /Type /Pages /Count 1 /Kids [ 4 0 R ] >> endobj xref 0 8 0000000000 65535 f 0000006804 00000 n 0000006988 00000 n 0000000015 00000 n 0000000068 00000 n 0000006735 00000 n 0000000276 00000 n 0000006715 00000 n trailer << /Size 7 /Root 3 0 R /Info 1 0 R >> startxref 7059 %%EOF wiki2beamer-wiki2beamer-v0.10.0/doc/examples/fig/rainbow.pdf000066400000000000000000000607471336367417400236760ustar00rootroot00000000000000%PDF-1.4 % 3 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 4 0 obj << /Type /Page /Parent 2 0 R /MediaBox [ 0 0 357.69439697 198.37759399 ] /Resources 5 0 R /Contents 6 0 R /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> >> endobj 6 0 obj << /Length 7 0 R >> stream 0.8 0 0 -0.8 0 199 cm q 1 0 0 1 0.00000563 -0 cm q 0.84313726 0.98823529 0.63529414 rg 304.123 148.3 m 303.206 147.68 302.048 147.277 301.567 147.408 c 301.084 147.535 300.155 147.141 299.501 146.534 c 298.343 145.451 294.472 138.514 294.043 136.743 c 293.853 135.943 289.819 125.602 288.908 123.561 c 288.704 123.092 286.947 120.852 285.016 118.582 c 283.084 116.308 280.521 113.285 279.315 111.858 c 278.119 110.441 276.425 108.834 275.569 108.299 c 274.719 107.762 273.981 107.175 273.93 106.986 c 273.879 106.8 271.743 104.894 269.181 102.742 c 264.631 98.93 261.995 97.197 257.726 95.214 c 256.573 94.675 253.834 93.397 251.636 92.367 c 247.264 90.315 244.816 89.469 240.933 88.665 c 239.515 88.374 238.123 87.814 237.835 87.419 c 237.545 87.024 236.879 86.815 236.34 86.957 c 235.805 87.103 232.843 87.082 229.754 86.908 c 226.332 86.728 223.108 86.931 221.48 87.435 c 220.015 87.9 218.617 88.095 218.383 87.872 c 218.141 87.649 217.434 88.052 216.798 88.762 c 215.914 89.747 215.129 90.057 213.517 90.047 c 212.346 90.031 210.862 90.403 210.202 90.868 c 209.547 91.332 208.081 92.028 206.942 92.411 c 205.809 92.806 204.801 93.373 204.708 93.676 c 204.619 93.985 204.286 94.161 203.979 94.067 c 203.667 93.976 202.719 94.337 201.858 94.863 c 200.999 95.391 198.47 96.962 196.225 98.346 c 190.61 101.811 185.975 105.746 182.289 110.165 c 176.777 116.771 171.001 126.524 167.63 134.909 c 165.85 139.336 164.18 143.179 163.925 143.449 c 163.675 143.72 163.664 144.692 163.911 145.617 c 164.172 146.589 164.019 147.544 163.536 147.892 c 161.463 149.398 155.855 146.226 155.005 143.058 c 154.792 142.298 155.126 139.12 155.735 136 c 156.553 131.777 157.585 129.04 159.756 125.322 c 165.464 115.532 176.038 102.553 183.347 96.376 c 184.48 95.416 186.154 93.78 187.056 92.741 c 187.962 91.71 189.16 90.738 189.723 90.584 c 190.29 90.435 191.89 89.381 193.284 88.239 c 196.854 85.341 200.407 83.772 208.233 81.657 c 217.006 79.287 223.962 78.42 231.453 78.776 c 234.75 78.929 237.759 78.983 238.116 78.885 c 238.853 78.687 244.462 79.22 248.942 79.917 c 255.227 80.89 270.876 86.15 271.211 87.398 c 271.33 87.812 272.455 88.606 277.832 92.058 c 280.153 93.557 282.118 94.973 282.177 95.205 c 282.245 95.445 283.412 96.95 284.781 98.563 c 286.16 100.186 287.756 102.513 288.336 103.753 c 288.914 104.992 290.162 107.086 291.104 108.401 c 292.047 109.718 294.322 113.379 296.167 116.545 c 298.014 119.705 301.049 124.736 302.902 127.722 c 304.764 130.712 306.836 134.519 307.507 136.191 c 309.679 141.602 309.162 148.536 306.523 149.241 c 306.13 149.351 305.043 148.928 304.123 148.3 c h f Q q 1 0.87058824 0.4627451 rg 321.392 140.439 m 319.728 140.38 317.979 139.921 317.504 139.417 c 316.387 138.218 313.285 132.09 310.704 125.949 c 306.277 115.423 300.273 104.676 294.904 97.664 c 292.875 95.015 290.613 91.913 289.875 90.769 c 288.512 88.673 280.186 81.133 274.944 77.252 c 261.468 67.276 236.607 58.356 222.95 58.588 c 213.097 58.758 210.686 59.013 208.706 60.103 c 207.684 60.668 205.075 61.956 202.9 62.969 c 198.957 64.808 187.254 72.068 186.873 72.903 c 186.77 73.145 185.756 74.156 184.627 75.151 c 182.144 77.326 180.262 79.546 178.492 82.351 c 177.759 83.497 176.888 84.522 176.545 84.614 c 176.205 84.705 175.229 85.678 174.382 86.776 c 173.538 87.875 172.348 88.906 171.743 89.068 c 171.134 89.23 169.966 90.534 169.145 91.961 c 168.326 93.396 165.76 96.252 163.427 98.314 c 159.052 102.207 159.267 101.852 150.919 118.418 c 149.677 120.903 148.205 124.878 147.655 127.259 c 146.484 132.331 143.028 143.122 142.287 143.982 c 142.008 144.308 141.2 144.538 140.497 144.495 c 139.782 144.447 138.439 144.663 137.499 144.981 c 135.481 145.649 134.296 145.212 133.306 143.423 c 132.724 142.395 133.121 140.773 135.153 135.777 c 137.922 128.948 140.376 123.333 141.72 120.743 c 142.18 119.847 143.035 118.056 143.613 116.747 c 144.188 115.446 145.448 112.707 146.41 110.658 c 147.377 108.61 148.603 105.906 149.142 104.653 c 150.668 101.049 150.774 100.855 153.429 97.035 c 154.813 95.04 156.811 91.992 157.877 90.241 c 158.942 88.505 161.571 85.572 163.729 83.723 c 165.89 81.882 167.861 80.092 168.122 79.752 c 173.732 72.308 182.8 64.844 193.427 58.889 c 200.437 54.961 204.005 53.525 211.569 51.572 c 217.57 50.022 229.169 48.907 230.968 49.695 c 231.388 49.887 232.593 50.001 233.624 49.956 c 234.655 49.914 237.414 50.616 239.753 51.529 c 242.083 52.439 246.152 53.799 248.797 54.564 c 251.437 55.324 254.713 56.375 256.075 56.9 c 259.984 58.413 280.057 70.217 281.658 71.937 c 287.303 78.062 291.933 82.804 293.419 84.022 c 298.189 87.901 307.267 100.277 315.177 113.669 c 315.891 114.872 318.306 118.073 320.546 120.783 c 325.244 126.435 327.223 130.104 327.744 134.168 c 328.373 138.984 326.735 140.605 321.392 140.439 c h f Q q 1 0.72156864 0.72156864 rg 354.614 131.498 m 351.635 131.16 347.734 127.088 346.699 123.23 c 346.363 121.991 345.791 120.885 345.404 120.769 c 345.035 120.658 344.535 119.896 344.318 119.084 c 344.106 118.271 343.499 117.149 342.985 116.601 c 342.476 116.054 341.721 114.779 341.3 113.766 c 340.463 111.705 339.896 110.647 339.013 109.495 c 338.686 109.063 337.222 106.32 335.757 103.401 c 332.392 96.723 326.721 87.469 323.912 84.085 c 322.727 82.66 321.375 80.888 320.898 80.138 c 318.975 77.101 311.018 68.129 307.742 65.297 c 302.729 60.976 294.809 55.3 291.245 53.469 c 289.564 52.609 286.221 50.371 283.827 48.486 c 277.1 43.232 272.813 40.636 267.35 38.511 c 262.805 36.745 254.076 34.058 253.43 34.232 c 253.286 34.272 250.405 33.765 247.022 33.101 c 243.644 32.437 240.435 32.019 239.904 32.162 c 239.365 32.306 235.746 32.121 231.845 31.75 c 227.949 31.378 223.948 31.214 222.941 31.368 c 206.008 34.019 197.745 36.234 188.953 40.473 c 186.644 41.59 183.264 42.898 181.452 43.385 c 179.648 43.871 176.711 44.964 174.92 45.809 c 173.146 46.66 171.124 47.576 170.444 47.851 c 169.765 48.123 168.539 48.86 167.731 49.49 c 166.926 50.115 165.798 50.745 165.256 50.892 c 163.31 51.412 154.296 58.619 151.237 62.107 c 147.817 66.005 139.281 80.737 138.548 84.024 c 138.028 86.367 135.354 92.259 132.988 96.281 c 131.902 98.143 130.499 101.183 129.884 103.055 c 129.261 104.913 127.76 108.364 126.546 110.709 c 122.65 118.255 121.697 120.461 121.947 121.397 c 122.077 121.89 121.585 123.284 120.847 124.481 c 120.104 125.68 119.264 127.77 118.978 129.124 c 118.185 132.847 112.847 141.963 110.916 142.898 c 109.533 143.567 108.849 143.406 106.386 141.831 c 104.796 140.812 103.394 139.615 103.275 139.172 c 103.156 138.73 103.515 137.353 104.075 136.11 c 109.106 124.943 111.778 118.413 112.658 115.096 c 112.921 114.118 114.173 110.846 115.459 107.814 c 116.743 104.793 118.262 101.102 118.841 99.629 c 119.427 98.146 121.269 94.393 122.943 91.283 c 124.612 88.181 127.094 83.385 128.448 80.647 c 131.525 74.43 132.811 72.199 134.228 70.607 c 134.837 69.919 135.985 68.376 136.766 67.186 c 137.552 65.982 139.003 64.29 139.983 63.416 c 144.493 59.425 152.221 51.932 152.783 51.007 c 153.016 50.624 153.61 50.206 154.114 50.07 c 154.614 49.935 155.688 49.218 156.488 48.48 c 157.289 47.749 158.293 47.057 158.715 46.942 c 159.139 46.829 159.519 46.503 159.561 46.218 c 159.654 45.557 168.225 39.959 169.791 39.537 c 170.447 39.363 172.887 38.161 175.217 36.872 c 182.681 32.716 190.324 29.604 195.585 28.567 c 197.565 28.174 203.346 26.876 208.427 25.672 c 214.533 24.233 219.472 23.424 223.002 23.294 c 235.939 22.822 257.006 27.194 273.639 33.818 c 281.575 36.975 296.178 46.019 303.024 52.008 c 310.638 58.676 312.637 60.713 321.795 71.073 c 329.431 79.717 332.737 83.667 335.938 88.006 c 337.079 89.54 338.539 91.29 339.184 91.888 c 340.368 92.982 344.111 98.513 349.778 107.559 c 351.471 110.243 353.308 112.883 353.878 113.424 c 354.78 114.298 355.404 115.226 357.289 118.535 c 357.548 118.983 358.376 121.042 359.127 123.108 c 360.251 126.234 360.358 127.132 359.743 128.481 c 358.981 130.152 356.35 131.688 354.614 131.498 c h f Q q 0.98823529 0.47058824 0.34901962 rg 379.845 127.924 m 377.116 127.712 375.359 126.146 374.582 123.251 c 374.407 122.614 373.67 121.357 372.931 120.46 c 370.211 117.143 366.76 108.261 363.606 96.488 c 360.017 83.093 357.797 77.918 351.592 68.439 c 341.766 53.413 331.505 42.516 320.164 35.044 c 319.04 34.293 316.265 32.338 313.993 30.667 c 303.584 23.04 289.841 16.519 279.387 14.238 c 269.902 12.171 265.395 11.619 251.984 10.879 c 236.166 10.015 230.892 9.869 229.422 10.263 c 228.688 10.46 225.399 10.62 222.096 10.62 c 197.965 10.64 197.43 10.704 186.708 14.7 c 183.585 15.864 177.715 17.879 173.667 19.181 c 169.618 20.482 164.979 22.318 163.362 23.269 c 161.743 24.21 158.064 25.774 155.182 26.734 c 151.286 28.03 148.967 29.212 146.081 31.371 c 143.956 32.96 141.868 34.352 141.435 34.469 c 141.005 34.583 139.35 35.883 137.755 37.355 c 136.163 38.827 134.566 40.115 134.212 40.209 c 133.855 40.307 131.497 42.499 128.981 45.097 c 126.464 47.68 124.204 49.851 123.967 49.919 c 123.725 49.983 122.279 52.011 120.767 54.421 c 119.247 56.828 116.848 60.536 115.43 62.66 c 114.017 64.78 112.089 67.72 111.154 69.19 c 110.224 70.662 108.41 73.427 107.139 75.336 c 94.131 94.816 88.933 108.731 89.376 122.856 c 89.76 135.15 89.24 137.735 85.989 139.704 c 81.446 142.454 78.193 141.058 78.352 136.419 c 78.396 135.108 78.373 132.044 78.309 129.625 c 78.237 127.206 78.273 124.774 78.379 124.223 c 78.491 123.669 78.882 121.424 79.251 119.234 c 79.871 115.513 82.605 106.849 85.473 99.51 c 86.159 97.759 87.143 95.084 87.659 93.571 c 88.453 91.222 91.481 84.694 96.862 73.733 c 99.942 67.458 105.635 58.438 110.636 51.91 c 111.982 50.151 113.804 47.745 114.696 46.548 c 116.459 44.175 118.196 42.474 127.559 33.958 c 135.746 26.506 146.065 19.358 153.288 16.128 c 155.316 15.216 157.593 14.154 158.361 13.752 c 159.118 13.355 161.847 12.239 164.408 11.277 c 166.969 10.315 169.278 9.301 169.534 9.024 c 169.793 8.753 174.927 7.04 180.941 5.218 c 193.267 1.497 197.944 0.781 213.95 0.193 c 224.741 -0.207 238.831 0.035 243.869 0.714 c 244.595 0.808 245.884 0.901 246.747 0.914 c 248.732 0.942 264.844 3.718 267.364 4.473 c 267.931 4.645 270.96 5.303 274.095 5.946 c 277.235 6.59 280.867 7.419 282.188 7.799 c 283.512 8.175 285.618 8.777 286.87 9.129 c 293.419 10.991 298.456 12.75 300.866 14.019 c 302.344 14.794 304.84 15.938 306.391 16.552 c 309.401 17.733 321.22 24.603 323.284 26.36 c 323.959 26.932 325.054 27.715 325.721 28.099 c 327.001 28.837 335.541 36.672 335.699 37.256 c 335.746 37.443 336.658 38.266 337.732 39.089 c 344.08 44.005 361.456 67.166 362.936 72.721 c 363.169 73.57 363.603 74.406 363.908 74.581 c 364.227 74.764 364.715 75.599 365.008 76.456 c 366.168 79.88 368.638 85.454 369.245 86.022 c 370.232 86.945 374.141 95.605 374.985 98.749 c 375.397 100.287 376.772 103.34 378.041 105.526 c 379.365 107.817 380.86 111.387 381.543 113.937 c 382.192 116.381 383.376 119.764 384.169 121.472 c 385.566 124.45 385.579 124.637 384.392 126.321 c 383.712 127.282 383.016 128.087 382.851 128.108 c 382.679 128.128 381.321 128.045 379.845 127.924 c h f Q q 0.85490197 0.90980393 0.96862745 rg 175.934 243.434 m 175.71 243.302 173.761 243.281 171.593 243.391 c 166.071 243.678 154.459 241.858 149.775 239.983 c 141.005 236.442 135.444 231.983 134.248 227.525 c 133.939 226.365 133.557 225.453 133.39 225.499 c 133.24 225.541 132.138 226.758 130.942 228.195 c 124.971 235.404 120.004 238.875 107.09 244.873 c 104.268 246.185 98.602 247.569 94.583 247.943 c 91.939 248.187 84.643 246.85 81.793 245.59 c 80.773 245.143 79.645 244.851 79.286 244.948 c 78.931 245.042 77.875 244.789 76.944 244.38 c 76.009 243.972 73.913 243.077 72.278 242.384 c 70.424 241.606 68.164 239.914 66.298 237.915 c 64.643 236.143 62.871 234.574 62.354 234.429 c 61.835 234.281 60.6 233.109 59.604 231.831 c 57.785 229.48 55.86 223.724 55.089 218.341 c 54.687 215.54 55.061 206.245 55.61 205.245 c 56.618 203.441 55.437 203.403 49.012 205.068 c 41.772 206.949 42.13 206.884 35.273 207.496 c 32.67 207.726 29.745 208.123 28.771 208.387 c 24.497 209.533 15.706 206.356 10.919 201.927 c 4.827 196.291 1.101 189.362 0.177 181.915 c -1.092 171.736 4.52 159.986 13.222 154.586 c 23.729 148.064 29.299 145.67 35.225 145.13 c 37.68 144.907 l 36.401 143.477 l 34.496 141.353 31.874 135.623 31.326 132.367 c 30.805 129.297 31.183 126.944 33.138 121.017 c 34.488 116.934 36.742 114.437 42.558 110.591 c 47.019 107.64 54.845 105.433 58.685 106.05 c 62.69 106.693 69.785 109.087 72.197 110.615 c 74.666 112.189 76.237 115.285 75.268 116.687 c 74.49 117.811 72.547 117.516 67.269 115.461 c 65.505 114.774 63.796 114.283 63.482 114.366 c 63.165 114.452 62.073 114.326 61.058 114.091 c 58.596 113.524 52.263 115.256 49.192 117.324 c 44.084 120.792 39.398 129.032 40.401 132.782 c 41.484 136.825 44.396 139.695 48.899 141.15 c 52.787 142.404 56.987 144.956 57.337 146.257 c 58.203 149.499 51.353 152.354 44.529 151.594 c 41.495 151.256 39.425 151.501 33.665 152.889 c 26.956 154.503 26.367 154.748 23.308 157.192 c 17.307 161.966 10.897 170.56 9.586 175.592 c 7.925 181.926 7.885 185.628 9.426 189.088 c 11.014 192.637 13.709 196.18 15.626 197.232 c 20.216 199.747 29.881 201.761 34.161 201.096 c 44.728 199.444 47.469 198.279 50.623 194.103 c 51.703 192.682 53.059 191.77 55.35 190.921 c 58.565 189.732 l 61.047 191.779 l 63.311 193.637 63.571 194.095 64 196.919 c 64.32 199.033 63.981 202.368 62.956 207.366 c 61.648 213.7 61.557 215.14 62.298 217.914 c 64.05 224.448 72.363 232.88 80.638 236.512 c 83.078 237.592 85.637 238.297 86.369 238.101 c 88.117 237.63 94.068 237.831 95.294 238.396 c 96.492 238.953 105.481 236.493 109.184 234.595 c 114.249 231.999 125.045 220.814 126.873 216.263 c 129.055 210.863 130.159 208.936 132.051 207.275 c 134.716 204.945 136.266 204.629 138.095 206.027 c 140.553 207.902 141.365 210.07 140.729 213.06 c 139.756 217.592 141.785 222.897 146.133 227.23 c 147.159 228.248 148.082 229.409 148.187 229.803 c 148.408 230.631 151.401 232.364 154.137 233.247 c 155.796 233.786 158.472 233.844 162.33 233.438 c 163.052 233.363 164.036 233.474 164.513 233.695 c 165.273 234.03 168.818 233.858 179.036 232.979 c 180.509 232.857 183.215 231.89 186.225 230.424 c 190.63 228.272 192.204 227.409 195.996 225.042 c 198.303 223.605 204.162 216.855 205.272 214.352 c 207.032 210.4 208.003 201.435 207.051 197.994 c 205.753 193.319 201.958 189.216 197.647 187.816 c 194.25 186.719 191.087 184.833 189.269 182.804 c 188.61 182.075 187.186 180.907 186.11 180.21 c 183.51 178.538 182.367 175.888 182.866 172.68 c 183.341 169.592 185.011 168.289 188.125 168.56 c 189.323 168.667 190.982 168.581 191.827 168.374 c 192.667 168.164 194.144 168.104 195.124 168.23 c 197.722 168.57 199.015 167.96 202.985 164.524 c 207.49 160.632 208.097 159.426 207.357 155.824 c 206.668 152.385 205.355 150.34 201.107 146.061 c 194.327 139.235 190.413 137.843 180.972 138.878 c 175.414 139.491 173.569 139.087 173.044 137.153 c 172.883 136.581 172.186 135.473 171.494 134.703 c 170.372 133.456 170.282 133.115 170.723 131.738 c 171.132 130.455 171.894 129.923 175.016 128.743 c 181.499 126.285 185.3 126.792 195.646 131.485 c 200.889 133.86 203.38 135.414 206.553 138.299 c 212.125 143.369 213.962 145.881 215.811 150.963 c 217.632 155.97 217.466 159.374 215.188 163.765 c 213.332 167.354 210.544 169.46 204.374 171.958 c 201.428 173.155 198.926 174.248 198.825 174.387 c 198.721 174.523 199.457 175.177 200.471 175.839 c 203.61 177.887 209.817 184.247 211.138 186.767 c 213.879 191.98 215.045 200.54 213.616 204.931 c 213.134 206.419 212.676 208.07 212.602 208.606 c 212.525 209.131 212.121 210.773 211.682 212.252 c 211.244 213.733 210.669 216.144 210.396 217.629 c 209.465 222.74 203.39 229.394 194.215 235.368 c 187.751 239.57 177.241 244.207 175.934 243.434 c h 347.713 234.827 m 342.984 235.264 334.7 235.09 332.963 234.51 c 330.154 233.592 326.051 231.4 325.873 230.727 c 325.777 230.368 325.191 229.75 324.574 229.351 c 323.256 228.494 320.45 222.507 319.199 217.877 c 318.431 215.03 318.214 214.725 317.393 215.37 c 312.382 219.275 304.789 223.376 301.046 224.186 c 297.507 224.956 287.013 224.117 282.666 222.721 c 274.702 220.149 269.327 215.679 266.453 209.224 c 264.238 204.253 263.69 201.131 264.333 197.21 c 264.829 194.23 269.224 185.821 272.206 182.15 c 274.277 179.601 274.038 178.972 271.06 179.143 c 268.412 179.287 263.319 177.936 260.969 176.464 c 259.967 175.839 257.911 174.072 256.402 172.548 c 252.894 169.015 252.491 166.676 254.014 158.773 c 255.59 150.556 257.426 147.317 262.229 144.297 c 267.57 140.943 272.375 139.292 276.896 139.271 c 281.064 139.256 283.299 139.97 285.853 142.149 c 288.041 144.023 288.858 148.379 287.49 150.931 c 286.674 152.455 286.458 152.569 285.337 151.998 c 284.655 151.648 283.774 151.447 283.388 151.551 c 282.997 151.656 282.575 151.399 282.454 150.988 c 282.123 149.862 279.636 148.287 276.934 147.493 c 273.813 146.58 268.581 147.912 266.08 150.261 c 264.054 152.156 262.268 157.362 262.42 160.923 c 262.489 162.901 262.779 163.459 264.149 164.306 c 267.228 166.217 275.724 167.19 278.569 165.963 c 281.534 164.679 288.503 169.059 286.641 171.041 c 286.401 171.298 286.315 172.639 286.458 174.028 c 286.801 177.3 285.201 180.454 279.497 187.768 c 276.978 191.004 274.635 194.605 274.292 195.772 c 273.952 196.947 273.457 197.952 273.21 198.019 c 272.385 198.243 274.726 204.92 276.74 208.09 c 278.803 211.32 281.108 212.792 284.055 212.727 c 284.972 212.714 287.42 213.053 289.5 213.485 c 292.383 214.09 294.593 214.032 298.834 213.245 c 301.888 212.685 305.04 212.01 305.83 211.738 c 308.321 210.9 312.616 206.888 314.175 203.948 c 315.005 202.397 316.784 200.11 318.157 198.875 c 320.441 196.81 320.793 196.663 322.572 197.051 c 323.645 197.283 324.973 197.8 325.534 198.201 c 328.19 200.075 329.671 206.442 327.864 208.194 c 326.936 209.119 326.857 217.66 327.773 219.27 c 328.429 220.407 334.656 223.215 338.169 223.94 c 341.174 224.57 349.161 224.006 353.374 222.877 c 358.728 221.447 364.319 218.367 367.764 214.958 c 370.59 212.159 374.463 205.261 374.993 202.087 c 376.868 190.769 378.414 186.362 380.688 185.749 c 382.469 185.276 386.481 188.124 388.022 190.953 c 388.46 191.751 391.692 194.385 395.234 196.799 c 398.76 199.218 402.29 201.806 403.054 202.552 c 405.668 205.075 412.733 204.993 417.83 202.39 c 423.826 199.322 429.878 195.028 432.496 192.004 c 435.661 188.341 436.947 185.51 438.028 179.777 c 438.896 175.215 438.305 172.076 435.938 168.677 c 435.101 167.472 434.292 166.031 434.127 165.468 c 433.525 163.292 427.163 154.926 425.475 154.1 c 424.519 153.637 423.629 152.897 423.516 152.481 c 423.1 150.945 414.819 146.32 412.714 146.458 c 409.752 146.651 408.224 145.606 406.443 142.209 c 405.037 139.515 404.932 138.947 405.496 136.862 c 406.501 133.165 410.03 132.427 420.499 133.728 c 425.597 134.357 l 428.623 131.86 l 431.21 129.721 431.705 128.929 432.121 126.223 c 432.843 121.629 431.361 116.606 428.448 113.73 c 425.578 110.898 419.622 107.846 415.523 107.11 c 409.149 105.966 402.197 107.604 400.134 110.743 c 398.65 112.982 395.458 115.681 393.743 116.142 c 391.957 116.618 389.518 115.107 389.01 113.218 c 388.87 112.711 388.51 112.359 388.194 112.443 c 386.887 112.793 387.182 109.411 388.641 107.174 c 390.512 104.324 392.489 103.046 399.122 100.4 c 403.416 98.684 404.687 98.434 409.199 98.394 c 415.174 98.349 417.067 98.693 422.98 100.893 c 427.479 102.567 429.845 104.138 432.412 107.151 c 433.245 108.137 434.6 109.635 435.412 110.48 c 437.261 112.406 438.79 117.791 438.595 121.695 c 438.434 124.825 436.827 131.323 435.594 133.839 c 434.552 135.96 431.162 138.913 428.278 140.227 c 425.921 141.297 l 431.262 146.036 l 434.97 149.326 437.041 151.682 438.044 153.74 c 442.257 162.408 443.662 166.033 445.512 172.918 c 448.46 183.902 447.964 185.443 438.679 194.33 c 428.292 204.265 423.095 207.652 415.028 209.741 c 410.981 210.785 403.56 211.589 400.074 211.362 c 398.629 211.271 396.705 211.228 395.803 211.267 c 393.61 211.362 387.352 207.921 386.311 206.05 c 385.075 203.828 384.132 204.519 382.252 209.011 c 381.326 211.232 379.993 213.749 379.286 214.602 c 378.578 215.46 377.254 217.331 376.338 218.77 c 373.906 222.581 369.378 227.092 366.047 229.035 c 362.628 231.03 351.783 234.449 347.713 234.827 c h f Q q 0.8509804 0.98823529 0.93725491 rg 169.979 159.522 m 168.622 158.53 167.432 157.209 167.331 156.575 c 167.067 154.861 163.8 152.317 161.343 151.91 c 156.919 151.183 151.622 152.962 148.976 156.069 c 148.168 157.015 147.312 157.822 147.073 157.861 c 146.395 157.968 145.257 156.746 144.543 155.155 c 142.247 150.022 138.723 147.395 134.92 147.986 c 133.865 148.153 131.686 149.331 130.073 150.613 c 126.282 153.609 125.18 153.729 123.166 151.378 c 121.221 149.106 119.503 148.828 116.275 150.262 c 113.357 151.562 112.716 153.141 113.763 156.472 c 114.197 157.867 114.422 160.19 114.271 161.639 c 113.987 164.225 113.938 164.278 111.313 164.687 c 108.725 165.091 108.603 165.034 107.697 162.937 c 107.18 161.729 106.403 158.995 105.975 156.852 c 105.002 151.944 103.238 149.371 98.644 146.185 c 94.646 143.411 87.179 141.209 83.628 141.766 c 82.449 141.95 79.782 143.064 77.708 144.242 c 70.337 148.412 64.435 148.627 62.932 144.78 c 62.357 143.284 62.484 142.75 63.767 141.362 c 64.608 140.457 65.728 139.181 66.257 138.542 c 66.798 137.895 68.683 136.595 70.454 135.637 c 73.178 134.172 74.615 133.814 79.874 133.308 c 87.016 132.613 87.429 132.674 91.351 134.797 c 92.966 135.67 94.628 136.326 95.052 136.262 c 95.979 136.116 98.16 137.601 102.035 141.024 c 103.616 142.415 105.631 144.177 106.511 144.927 c 107.401 145.679 108.154 146.503 108.196 146.746 c 108.316 147.549 109.389 147.07 113.072 144.571 c 116.67 142.131 l 120.823 142.789 l 123.113 143.152 125.696 143.985 126.556 144.645 c 128.134 145.843 l 130.757 143.955 l 132.2 142.911 134.143 141.893 135.069 141.677 c 138.384 140.911 142.338 142.86 146.738 147.43 c 147.869 148.605 147.943 148.602 150.423 147.231 c 156.181 144.036 163.566 142.501 168.384 143.491 c 169.256 143.674 170.952 144.504 172.14 145.336 c 174.106 146.716 174.368 147.222 175.069 150.981 c 176.048 156.227 175.061 160.859 172.886 161.251 c 172.638 161.288 171.335 160.509 169.979 159.522 c h 309.537 179.703 m 309.437 179.357 310.112 177.004 311.034 174.479 c 313.777 166.996 318.583 161.791 323.096 161.421 c 325.536 161.219 331.831 163.239 333.878 164.882 c 336.082 166.654 336.305 167.76 335.216 171.549 c 334.469 174.125 334.219 174.426 332.82 174.391 c 331.884 174.37 330.205 173.581 328.644 172.434 c 327.22 171.379 325.336 170.312 324.48 170.066 c 322.558 169.512 320.131 171.14 318.292 174.212 c 317.559 175.429 316.617 176.785 316.197 177.23 c 315.777 177.692 315.612 178.348 315.836 178.756 c 316.428 179.82 315.216 181.105 313.637 181.076 c 311.592 181.043 309.736 180.416 309.537 179.703 c h 390.684 141.285 m 390.295 141.065 389.653 139.586 389.192 137.86 c 388.547 135.457 387.922 134.265 386.2 132.172 c 383.292 128.625 382.126 128.284 377.47 129.605 c 373.251 130.8 371.47 132.014 368.767 135.56 c 366.417 138.634 365.413 138.927 363.371 137.109 c 360.711 134.757 360.207 134.492 357.615 134.103 c 354.15 133.586 350.138 134.687 347.086 136.996 c 343.498 139.71 342.902 140.89 344.574 141.985 c 345.037 142.288 345.803 143.426 346.271 144.518 c 347.039 146.294 347.039 146.665 346.22 148.072 c 344.954 150.275 342.831 150.788 340.82 149.385 c 339.994 148.802 339.074 147.968 338.795 147.529 c 338.252 146.683 332.463 144.638 330.449 144.575 c 329.785 144.561 328.211 144.301 326.926 144.005 c 323.832 143.294 322.567 143.752 320.615 146.277 c 318.174 149.442 317.51 149.925 315.211 150.183 c 313.506 150.378 312.982 150.204 312.162 149.184 c 311.273 148.085 311.228 147.801 311.744 146.505 c 312.992 143.313 317.836 140.257 324.605 138.382 c 329.943 136.903 332.185 136.958 336.449 138.669 c 338.14 139.35 338.15 139.347 338.726 138.219 c 339.369 136.96 343.685 132.98 344.697 132.707 c 345.047 132.614 345.543 132.18 345.795 131.739 c 346.041 131.301 347.734 130.394 349.543 129.725 c 352.551 128.61 353.176 128.54 356.846 128.934 c 359.057 129.167 361.467 129.741 362.209 130.195 c 363.555 131.029 l 365.121 129.617 l 368.297 126.754 372.932 124.059 376.217 123.163 c 380.785 121.914 384.252 122.703 389.047 126.079 c 391.838 128.039 396.25 137.591 395.235 139.478 c 394.723 140.459 391.473 141.744 390.684 141.285 c h f Q Q endstream endobj 7 0 obj 24145 endobj 5 0 obj << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] >> endobj 1 0 obj << /Title(rainbow_linda_kim_01.svg) /Author(Michael Rentzsch) /Creator(www.inkscape.org) /Producer(Inkscape inkscape 0.45) /CreationDate(D:20070510085808Z) >> endobj 2 0 obj << /Type /Pages /Count 1 /Kids [ 4 0 R ] >> endobj xref 0 8 0000000000 65535 f 0000024565 00000 n 0000024749 00000 n 0000000015 00000 n 0000000068 00000 n 0000024496 00000 n 0000000276 00000 n 0000024475 00000 n trailer << /Size 7 /Root 3 0 R /Info 1 0 R >> startxref 24820 %%EOF wiki2beamer-wiki2beamer-v0.10.0/doc/examples/graphics.wiki000066400000000000000000000022131336367417400234420ustar00rootroot00000000000000<[autotemplate] usepackage=[utf8]{inputenc} usepackage=[T1]{fontenc} usepackage={color} usepackage={textcomp} usepackage={graphics} usepackage={wasysym} usepackage={beamerthemeWarsaw} title={wiki2beamer: \\ Howto include graphics} author={Michael Rentzsch} date={\today} [autotemplate]> ==== Content ==== <[center] This document shows how to use pictures/images in !!wiki2beamer!! presentations. [center]> ==== The \LaTeX\ Way ==== As alway, you can use plain \LaTeX\ code to include figures \vfill {\tt $\backslash$includegraphics[\ldots]\{\ldots\} } \vfill <[center] \includegraphics[width=4cm]{fig/knot} [center]> ==== The wiki2beamer Way: Part1 ==== '''wiki2beamer''' offers another way to include images which will be % transformed to a \LaTeX\ @includegraphics@-statement: \vfill {\tt $<$$<$$<$filename$>$$>$$>$ } \vfill <[center] <<>> [center]> ==== The wiki2beamer Way: Part2 ==== You can pass '''parameters''' to the @includegraphics@-command using % a comma to separate them from the file name: \vfill {\tt $<$$<$$<$filename,width=4cm,height=3cm$>$$>$$>$ } \vfill <[center] <<>> [center]> wiki2beamer-wiki2beamer-v0.10.0/doc/examples/version0_4.wiki000066400000000000000000000031051336367417400236330ustar00rootroot00000000000000<[autotemplate] usepackage=[utf8]{inputenc} usepackage=[T1]{fontenc} usepackage={color} usepackage={textcomp} usepackage={beamerthemesplit} title={New Features in Version 0.4} author={Michael Rentzsch} date={\today} [autotemplate]> == Introduction ==[Intro] ==== Example Version 0.4 ==== This example demonstrates the new features of '''wiki2beamer''' version 0.4. == Changes in Version 0.4 ==[Changes] ==== List of Changes ==== * Supports header and footer definitions for all frames * Optional description for (sub-) sections (i.\,e. short form) === Usage of Headers and Footers ===[Headers and Footers] ==== Header and Footer Definition ====[containsverbatim] Define headers/footers on a single line each: \vfill <[verbatim] @FRAMEHEADER=\begin{center} Top \end{center} \vfill @FRAMEFOOTER=\vfill \begin{center} Bottom \end{center} [verbatim]> \vfill * You can use all \LaTeX\ commands in these definitions (no '''wiki2beamer''' commands). * For example, one could use a '''textpos''' command to put an element at a defined position on every slide. @FRAMEHEADER=\begin{center}\footnotesize Top\end{center} \vfill @FRAMEFOOTER=\vfill \begin{center}\footnotesize Bottom \end{center} ==== A Frame ==== Now, your header and footer will be printed on every new slide. ==== A Frame ==== Yes, '''every''' slide. ==== A Frame ==== I mean it, every, '''every''' slide. @FRAMEHEADER= @FRAMEFOOTER= ==== Deleteting Headers/Footers ====[containsverbatim] To delete your header and footer definitions, write: % just a comment <[verbatim] @FRAMEHEADER= @FRAMEFOOTER= [verbatim]> wiki2beamer-wiki2beamer-v0.10.0/doc/examples/version0_7.wiki000066400000000000000000000175471336367417400236550ustar00rootroot00000000000000<[autotemplate] usepackage={beamerthemeWarsaw} usepackage=[utf8]{inputenc} usepackage=[german]{babel} usepackage=[T1]{fontenc} title={What's new in 0.7} subtitle={nowiki, code, autotemplate} author={Kai Dietrich} [autotemplate]> == Overview == ==== What's new in 0.7 ==== There are 4 major changes in wiki2beamer 0.7 # @$\backslash$end\{frame\}@ is no longer detected automatically #* @$\backslash$end\{frame\}@ detection causes semantic misinterpretations in various situations #* @[frame]>@ is the preferred notation anyway, use it # the new @<[nowiki] [nowiki]>@ environment allows you the escape from wiki2beamer completly # the new @<[code] [code]>@ environment allows you to write !animated! code listings # @autotemplate@ support == Nowiki-Escaping == ==== @nowiki@-Environment ==== Sometimes you really don't want wiki2beamer to get in your way. That's where @nowiki@ steps in: Use it like an environment to disable all wiki2beamer action in between: <[nowiki] {\tt $<$[nowiki] \\ me@you.com you@me.com \\ {}[nowiki]$>$ } [nowiki]> result without nowiki (notice the changed font): me@you.com you@me.com result with nowiki: <[nowiki] me@you.com you@me.com [nowiki]> == Animated Listings == === Introduction === ==== ==== \centering Animated Listings:\\ @<[code] [code]>@ ==== The Problem ==== It's a common problem to put source code listings on beamer slides and talk about them to the audience. To support your talk you will often need to pup-up or partially hide some code. Doing this in plain \LaTeX{} can be a pain in the ass and a time-consuming task if you don't know exactly how to do it from the beginning. Also beamer has some problems with verbatim environments inside slides, so if you've ever tried, you will have given up most certainly. \vspace{1em} wiki2beamer solves all these problems by putting together the @listings@-package with some clever code generation. See what's coming\ldots === Syntax === ==== The Basic Syntax ==== <[code][style=basic,language=java] ==== Title ==== //usual frame title <\[code\]\[key=value,key=value\] //opens a code block //the key=value list is passed //directly to lstlistings class Fooo {} //some code \\[ //\[ and \] have special meanings, to use them \\] //in the listing, escape them with a \ \[code\]> //closes the code block [code]> ==== Syntax For Animations ==== <[code][style=basic,language=java] <\[code\] some code that appears from start to end | \[<2>some code that only appears on slide 2\] | \[<2-4>some code that appears on slides 2, 3 and 4\] | \[<2,3>some code that appears on slides 2 and 3\] | \[<1-2,4>some code that appears on slides 1, 2 and 4\] | \[\[<2>some code \]\[<4>some other code\]\] | //on slide 1 and 3 the empty space //will be filled with whitespaces \[code\]> [code]> ==== Animation Syntax Example in Action ==== This is the output: <[code][style=basic] some code that appears from start to end | [<2>some code that only appears on slide 2] | [<2-4>some code that appears on slides 2, 3 and 4] | [<2,3>some code that appears on slides 2 and 3] | [<1-2,4>some code that appears on slides 1, 2 and 4] | [[<2>some code ][<4>some other code]] | [code]> ==== Behind the scenes ==== What wiki2beamer does is: * generate a sequence of listings from the [code] block * give names to the listings * put them at the position before the first frame * put references to the listings in an @overprint-onslide@ on the frame If you want to find out how this looks, take a look at the @.tex@ output of this presentation. === Hello World Example === ==== Overview ==== So here's how you create animated listings: # @$\backslash$usepackage\{listings\}@ # write a style definition for @listings@ # write your code, reference to the style # animate it ==== Defining a style for @listings@ ==== <[code][style=basic,language=TeX,title=\tiny template.tex] \lstdefinestyle{basic}{% captionpos=t,% basicstyle=\footnotesize\ttfamily,% numberstyle=\tiny,% numbers=left,% frame=single,% showspaces=false,% showstringspaces=false,% showtabs=false,% % keywordstyle=\color{blue},% identifierstyle=,% commentstyle=\color{gray},% stringstyle=\color{magenta}% } [code]> ==== Writing the code ==== <[code][style=basic,language=TeX] <\[code\]\[style=basic,language=java,title=HelloWorld.java\] class HelloWorld { public static void main(String args\\[\\]) { System.out.println("Hello World!"); } } \[code\]> [code]> ==== Animating the code ==== <[code][style=basic,language=TeX] <\[code\]\[style=basic,language=java,title=HelloWorld.java\] class HelloWorld { \[<2-3>public static void main(String args\\[\\]) {\] \[<3> System.out.println("Hello World!");\] \[<2,3>}\] } \[code\]> [code]> ==== The result ==== <[code][style=basic,language=java,title=HelloWorld.java] class HelloWorld { [<2-3>public static void main(String args\[\]) {] [<3> System.out.println("Hello World!");] [<2,3>}] } [code]> === Delaying Animations === ==== Showing Animated Code later ==== Q: The animation always starts on overlay 1. What can I do to start it later?\\ A: Use @$\backslash$uncover<\ldots>\{\}@ \uncover<2->{ <[code][style=basic,language=java] \uncover<2->{ [<2-3><\[code\]\[style=basic,language=java\]][<3> class HelloWorld { public static void main(String args\[\]) { System.out.println("Hello World!"); } }] [<2-3>\[code\]>] } [code]> } == Autotemplates == === Introduction === ==== ==== \centering Autotemplate-Support @<[autotemplate] [autotemplate]>@ ==== The Problem ==== For \LaTeX beginners it's quite an obstacle to create the template needed to compile wiki2beamers output. Wouldn't it be nice if wiki2beamer could produce a complete all-in-one @.tex@ file without the need for a seperate template? \vspace{1em} wiki2beamer 0.7 can do exactly that. Let's see how it works\ldots ==== The Solution ==== Put a @<[autotemplate] [autotemplate]>@ section at the beginnung of the wiki2beamer-file. Wiki2beamer will then put a minimal environment around your content with all the usepackages and functionality it needs. It will also provide you with a listings style called "basic". <[code][style=basic,language=TeX,title=\tiny body.txt] <\[autotemplate\] \[autotemplate\]> ==== first slide ==== [code]> Done. No really, thats it. Unless ofcourse you want to have usefull content on your first slide. === Syntax === ==== key=value Commands ==== tuning the default template: <[code][style=basic,language=TeX,title=\tiny body.txt] <\[autotemplate\] %some personal information for the titleframe title={My Random Talk} subtitle={about some random stuff} author={James T. Kork} usepackage={beamerthemeWarsaw} \[autotemplate\]> [code]> The format of the @autotemplate@ environment is a simple @key=value@ format. Any unknown key is interpreted as a command, the value is then appended.\\ @date=\{$\backslash$today\}@ becomes @$\backslash$date\{$\backslash$today\}@. === Semantics === ==== defaults ==== wiki2beamer has some some defaults that you can either accept or overwrite. The default template looks something like: <[code][style=basic,language=TeX,title=\tiny defaults.txt] <\[autotemplate\] documentclass={beamer} usepackage={listings} usepackage={color} usepackage={wasysym} date={\today} lstdefinestyle={basic}{...} titleframe=True \[autotemplate\]> [code]> The @titleframe@-key is special, it tells wiki2beamer to generate the title frame on it's own. ==== key-handling ==== Keys are handled differently: # keys that can only have one value (last one use) #* @documentclass@ #* @titleframe@ # keys that can have multiple values #* all unknown keys #* @usepackage@ @usepackage@ is special in a way that only the last occurence of the package counts (you can give multiple option-sets ala @usepackage=[utf8]\{inputenc\}@\\ @usepackage=[latin1]\{inputenc\}@\\ Latin1 will be the option passed to inputenc in the \LaTeX{} output. ==== ==== \centering\huge Please spread the word! :-) % wiki2beamer-wiki2beamer-v0.10.0/doc/fdl.txt000066400000000000000000000546621336367417400204640ustar00rootroot00000000000000 GNU Free Documentation License Version 1.3, 3 November 2008 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The "publisher" means any person or entity that distributes copies of the Document to the public. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements". 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. wiki2beamer-wiki2beamer-v0.10.0/doc/man/000077500000000000000000000000001336367417400177145ustar00rootroot00000000000000wiki2beamer-wiki2beamer-v0.10.0/doc/man/Makefile000066400000000000000000000005741336367417400213620ustar00rootroot00000000000000all: man html man1: mkdir man1 man: wiki2beamer.xml man1 @asciidoctor -b manpage -d manpage wiki2beamer.adoc @bzip2 --keep --stdout wiki2beamer.1 > man1/wiki2beamer.1.bz2 @man -D -M '.' wiki2beamer html: wiki2beamer.xml wiki2beamer.1 asciidoctor -b html5 -d manpage wiki2beamer.adoc clean: rm wiki2beamer.1 rm wiki2beamer.html rm man1/wiki2beamer.1.bz2 rmdir man1/ wiki2beamer-wiki2beamer-v0.10.0/doc/man/wiki2beamer.adoc000066400000000000000000000230411336367417400227450ustar00rootroot00000000000000= wiki2beamer(1) wiki2beamer developers v0.10.0 :doctype: manpage :manmanual: WIKI2BEAMER :mansource: WIKI2BEAMER :man-linkstyle: pass:[blue R < >] == Name wiki2beamer - convert wiki-formatted text to latex-beamer code == Synopsis wiki2beamer [OPTION...] [FILE...] == Description _FILE_:: the text-file(s) to be processed *-h, --help*:: show a short usage help *--version*:: show version information *-o,--output* _FILE_:: write output to FILE instead of stdout == Usage Usually you want to pipe the output of wiki2beamer into a file: wiki2beamer footalk.txt > footalk.tex If called with multiple input files, wiki2beamer processes them in order with their content being simply concatenated. If called without any input file, wiki2beamer will attempt to read input from STDIN. If no input files are supplied and nothing is available on STDIN, wiki2beamer prints its usage message and exits. If an error occurs, wiki2beamer returns a return code other then 0. == Syntax Wiki2beamer has it's own wiki-syntax which (evolved without much of a concept ;) and) is described below. Everything that is unknown to wiki2beamer will be passed through to the LaTeX output (unless inside special environments). === Overall Structure A wiki2beamer txt file can consist of two sections: the head and the body. The head is optional and is an autotemplate environment. The body contains the content of the document. If the head (autotemplate) is not given, then only the code for the body will be generated and can be included into a manually crafted LaTeX template file. === Managing Input You can split input to wiki2beamer into multiple files. This helps to keep things apart and avoids conflicts. There are two ways to split input. The first is to use multiple input files which wiki2beamer will read and process in order as if they were one concatenated file. The second is to use the >>>include<<< syntax. >>>includefile<<<:: Include the file named _includefile_ at this line. Works recursively. Endless recursion will be detected and treated as an error. Including files doesn't work inside [nowiki] and [code] environments (see below). === Structuring the Presentation +==+ _sectionname_ ==:: opens a section called _sectionname_ == _longsectionname_ ==[_shortname_]:: opens a section called _longsectionname_, passing the parameter _shortname_ to latex === _subsectname_ ===:: opens a subsection called _subsectname_ === _longsubsectname_ ===[_shortname_]:: opens a subsection called _longsubsectname_, passing the parameter _shortname_ to latex ==== _frametitle_ ====_:: opens a frame with the title _frametitle_ ==== _frametitle_ ====[_param_]:: opens a frame with the title _frametitle_, passes frame _parameters_ like t, fragile, verbatim etc. to latex +!+==== _frametitle_ ====[_param_]:: the ! added in front of a frame, selects a frame for exclusive generation. It makes wiki2beamer skip all frames that are not selected. You can select multiple frames. This can speed up the edit-compile-view cycle massively. Sectioning commands work only at the beginning of a line. === Lists (Bullets/Enumerations) +*+ _text_:: create a bullet (itemize) with _text_ * _text_:: create a bullet (itemize) with _text_ that only appears on the specified slides (_onslide_) # _text_:: create a numbered item (enumerate) with _text_ # _text_:: create a numbered item (enumerate) with _text_ that only appears on the specified slides (_onslide_) Cascaded lists, mixed ordered and unordered items: .... * This is a crazy list. *# It contains different items. *# In different formats. *** On different levels. ***<2-> which are animated *<3-> Quite a lot of fun. **<4-> Isn't it? .... === Environments LaTeX knows many environments, some of which are as simple as \begin{center} \end{center}, others are more complicated. To use these in a more wiki-like fashion, use <[name] to open and [name]> to close environments. It will be simply converted to \begin{name} and end{name}. *Warning* No parsing is done. The user is responsible for closing any opened environment. Environment-tags are only recognized at the beginning of a line. === Special Environments Unlike standard environments, some environment names are recognized by wiki2beamer. These are: nowiki, code, autotemplate and frame. If wiki2beamer detects one of these it will do some advanced parsing, which can even fail with a syntax error. === Autotemplate Autotemplate can be used at the beginning of a beamer .txt file. It will create the required LaTeX headers to compile the content. <[autotemplate]:: opens the autotemplate environment [autotemplate]>:: close the autotemplate environment _key=value_ (inside [autotemplate])_:: insert a template command _\keyvalue_ key=value pairs are converted to \keyvalue in the output (except special keys) -- everything after = is just appended to \key. <[autotemplate] usepackage=[utf8]{inputenc} [autotemplate]> will be converted to \usepackage[utf8]{inputenc}. There is a built-in set of options: <[autotemplate] documentclass={beamer} usepackage={listings} usepackage={wasysym} usepackage={graphicx} date={\today} lstdefinestyle={basic}{....} titleframe=True [autotemplate]> titleframe is a special key that tells wiki2beamer to create a title frame. To set the title, subtitle and author of the presentation use the keys title, subtitle and author. Overriding of the default options works on: * per-key level for: documentclass, titleframe * per-package level for: usepackage * no overriding for: everything else === Code Use code-environments to display animated code listings. <[code]:: open a code environment <[code][_param_]:: open a code environment passing _parameters_ to the latex lstlisting environment. [code]>:: close the code environment <[code][key=value,...] ... [code]> <[code] opens the environment, [code]> closes it, everything after <[code] is passed to the LaTeX listings package as options for this listing. Inside the code environment, [ and ] must be escaped as \[ and \]. Things between [ and ] are animations. There are two kinds of animations: * [some code] - show "some code" only on specified slides * [[some code][some other code]] - show "some code" on the slides in the first spec, show "some other code" on the slides in the second spec, fill up space on slides without content with spaces Slide-specs can be of the form: * n - one single frame n * n-m - sequence of frames n to m * spec,spec,... - combine multiple specs into on (e.g. <1-3,5>) === Nowiki Nowiki-Environments completely escape from wiki2beamer replacements. <[nowiki] opens the environment, [nowiki]> closes it. === Frame The LaTeX-frame environment is where the content of a slide goes. You can manually close a frame-environment which was opened with ==== Frametitle ==== with [frame]>. Wiki2beamer is then aware that the last frame is already closed and doesn't try to close it again. === Text Formatting '''_text_''':: typeset _text_ bold ''_text_'':: typeset _text_ italic @_text_@:: typeset _text_ in typewriter type, to ignore an @, escape it as \@ !_text_!:: alert _text_, to ignore an !, escape it as \! _ color _ _text_ _:: make _text_ appear in color === Columns <[columns]:: opens the column environment [[[ _width_ ]]]:: creates a column of _width_, everything below goes into this column [columns]>:: closes the column environment === Graphics +<<>>+:: include image from _pathtofile_ +<<>>+:: include image from _pathtofile_ passing _key=value_ parameters to latex === Footnotes (((_text_))):: create a footnote containing _text_ === Layout --_length_--:: when found at start of line, with nothing afterwards, insert a \vspace{_length_} (vertical space of length _length_) --*_length_--:: same as above, but insert a \vspace* (a forced vspace) +<_overlay_>{_content_}:: \uncover the _content_ on the given _overlay_ subframes. They will already take up the space, they need to be displayed, so the geometry of the frame doesn't change when the element pops up. -<_overlay_>{_content_}:: \only show the _content_ on the given _overlay_ subframes. They will not take up the space they need to be displayed, so the geometry of the frame changes when the element pops up. === Substitutions +-->+:: becomes $\rightarrow$ +==>+:: becomes $\Rightarrow$ +<--+:: becomes $\leftarrow$ +<==+:: becomes $\Leftarrow$ +:-)+:: becomes \smiley (requires package wasysym) +:-(+:: becomes \frownie (requires package wasysym) === Frame Headers/Footers There are two variables, FRAMEHEADER and FRAMEFOOTER. The content of these will be inserted at the beginning/end of all following slides. @FRAMEHEADER=_text_:: set frameheader to _text_ @FRAMEFOOTER=_text_:: set framefooter to _text_ Leave text empty to reset frame headers and footers. == License Copyright (C) 2009 Kai Dietrich, Michael Rentzsch and others. === Documentation License Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; === Code License wiki2beamer is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. wiki2beamer-wiki2beamer-v0.10.0/doc/man/wiki2beamer.xml000066400000000000000000000450401336367417400226420ustar00rootroot00000000000000 wiki2beamer 1 Kai Dietrich mail@cleeus.de wiki2beamer Project Michael Rentzsch michael.rentzsch@repc.de wiki2beamer Project wiki2beamer convert wiki-formatted text to latex-beamer code wiki2beamer FILE Description FILE the text-file(s) to be processed , show a short usage help --version show version information , FILE write output to FILE instead of stdout Usage Usually you want to pipe the output of wiki2beamer into a file: wiki2beamer footalk.txt > footalk.tex If called with multiple input files, wiki2beamer processes them in order with their content being simply concatenated. If called without any input file, wiki2beamer will attempt to read input from STDIN. If no input files are supplied and nothing is available on STDIN, wiki2beamer prints its usage message and exits. If an error occurs, wiki2beamer returns a return code other then 0. Syntax Wiki2beamer has it's own wiki-syntax which (evolved without much of a concept ;) and) is described below. Everything that is unknown to wiki2beamer will be passed through to the LaTeX output (unless inside special environments). overall structure A wiki2beamer txt file can consist of two sections: the head and the body. The head is optional and is an autotemplate environment. The body contains the content of the document. If the head (autotemplate) is not given, then only the code for the body will be generated and can be included into a manually crafted LaTeX template file. Managing input You can split input to wiki2beamer into multiple files. This helps to keep things apart and avoids conflicts. There are two ways to split input. The first is to use multiple input files which wiki2beamer will read and process in order as if they were one concatenated file. The second is to use the >>>include<<< syntax. >>>includefile<<< Include the file named includefile at this line. Works recursively. Endless recursion will be detected and treated as an error. Including files doesn't work inside [nowiki] and [code] environments (see below). Structuring the presentation == sectionname == opens a section called sectionname == longsectionname ==[shortname] opens a section called longsectionname, passing the parameter shortname to latex === subsectname === opens a subsection called subsectname === longsubsectname ===[shortname] opens a subsection called longsubsectname, passing the parameter shortname to latex ==== frametitle ==== opens a frame with the title frametitle ==== frametitle ====[param] opens a frame with the title frametitle, passes frame parameters like t, fragile, verbatim etc. to latex !==== frametitle ====[param] the ! added in front of a frame, selects a frame for exclusive generation. It makes wiki2beamer skip all frames that are not selected. You can select multiple frames. This can speed up the edit-compile-view cycle massively. Sectioning commands work only at the beginning of a line. Lists (Bullets/Enumerations) * text create a bullet (itemize) with text *[marker] text Setting markers works like in tex. *<onslide> text create a bullet (itemize) with text that only appears on the specified slides (onslide) # text create a numbered item (enumerate) with text #<onslide> text create a numbered item (enumerate) with text that only appears on the specified slides (onslide) Cascaded lists, mixed ordered and unordered items: * This is a crazy list. *# It contains different items. *# In different formats. *** On different levels. ***<2-> which are animated *<3-> Quite a lot of fun. **<4-> Isn't it? Environments LaTeX knows many environments, some of which are as simple as \begin{center} \end{center}, others are more complicated. To use these in a more wiki-like fashion, use <[name] to open and [name]> to close environments. It will be simply converted to \begin{name} and end{name}. No parsing is done. The user is responsible for closing any opened environment. Environment-tags are only recognized at the beginning of a line. Special Environments Unlike standard environments, some environment names are recognized by wiki2beamer. These are: nowiki, code, autotemplate and frame. If wiki2beamer detects one of these it will do some advanced parsing, which can even fail with a syntax error. autotemplate Autotemplate can be used at the beginning of a beamer .txt file. It will create the required LaTeX headers to compile the content. <[autotemplate] opens the autotemplate environment [autotemplate]> close the autotemplate environment key=value (inside [autotemplate]) insert a template command \keyvalue key=value pairs are converted to \keyvalue in the output (except special keys) -- everything after = is just appended to \key. <[autotemplate] usepackage=[utf8]{inputenc} [autotemplate]> will be converted to \usepackage[utf8]{inputenc}. There is a built-in set of options: <[autotemplate] documentclass={beamer} usepackage={listings} usepackage={wasysym} usepackage={graphicx} date={\today} lstdefinestyle={basic}{....} titleframe=True [autotemplate]> titleframe is a special key that tells wiki2beamer to create a title frame. To set the title, subtitle and author of the presentation use the keys title, subtitle and author. Another special key related to the titleframe key is the titleframeopts key: If set, the value will be passed to the titleframe as options. A commonly useful setting is titleframeopts=[plain]. Overriding of the default options works on per-key level for: documentclass, titleframe per-package level for: usepackage no overriding for: everything else code Use code-environments to display animated code listings. <[code] open a code environment <[code][param] open a code environment passing parameters to the latex lstlisting environment. [code]> close the code environment <[code][key=value,...] ... [code]> <[code] opens the environment, [code]> closes it, everything after <[code] is passed to the LaTeX listings package as options for this listing. Inside the code environment, [ and ] must be escaped as \[ and \]. Things between [ and ] are animations. There are two kinds of animations: [<slidespec>some code] - show "some code" only on specified slides [[<slidespec>some code][<slidespec>some other code]] - show "some code" on the slides in the first spec, show "some other code" on the slides in the second spec, fill up space on slides without content with spaces Slide-specs can be of the form: n - one single frame n n-m - sequence of frames n to m spec,spec,... - combine multiple specs into on (e.g. <1-3,5>) nowiki Nowiki-Environments completely escape from wiki2beamer replacements. <[nowiki] opens the environment, [nowiki]> closes it. frame The LaTeX-frame environment is where the content of a slide goes. You can manually close a frame-environment which was opened with ==== Frametitle ==== with [frame]>. Wiki2beamer is then aware that the last frame is already closed and doesn't try to close it again. Text Formatting '''text''' typeset text bold ''text'' typeset text italic @text@ typeset text in typewriter type, to ignore an @, escape it as \@ !text! alert text, to ignore an !, escape it as \! _ color _ text _ make text appear in color Columns <[columns] opens the column environment [[[ width ]]] creates a column of width, everything below goes into this column [columns]> closes the column environment Graphics <<<pathtofile>>> include image from pathtofile <<<pathtofile,key=value>>> include image from pathtofile passing key=value parameters to latex Footnotes (((text))) create a footnote containing text Layout --length-- when found at start of line, with nothing afterwards, insert a \vspace{length} (vertical space of length length) --*length-- same as above, but insert a \vspace* (a forced vspace) +<overlay>{content} \uncover the content on the given overlay subframes. They will already take up the space, they need to be displayed, so the geometry of the frame doesn't change when the element pops up. -<overlay>{content} \only show the content on the given overlay subframes. They will not take up the space they need to be displayed, so the geometry of the frame changes when the element pops up. Substitutions --> becomes $\rightarrow$ ==> becomes $\Rightarrow$ <-- becomes $\leftarrow$ <== becomes $\Leftarrow$ :-) becomes \smiley (requires package wasysym) :-( becomes \frownie (requires package wasysym) Frame Headers/Footers There are two variables, FRAMEHEADER and FRAMEFOOTER. The content of these will be inserted at the beginning/end of all following slides. @FRAMEHEADER=text set frameheader to text @FRAMEFOOTER=text set framefooter to text Leave text empty to reset frame headers and footers. License Copyright (C) 2009 Kai Dietrich, Michael Rentzsch and others. Documentation License Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; Code License wiki2beamer is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. wiki2beamer-wiki2beamer-v0.10.0/doc/wiki2beamer.png000066400000000000000000000244631336367417400220610ustar00rootroot00000000000000PNG  IHDRfsBIT|d pHYs^tEXtSoftwarewww.inkscape.org< IDATxw@etX(أ槉ijb71X)&Jbb5D#w:KJu.#3 h(꼟¼sfG4{j!HtA4/JQSՃ FB,~>g@ϯEqԈ FcƌI  A0$!`HB! C@  A0$!`HB! C@ nݩM\ CJDyb<^x~ ::m8Gf-Z>D" \pp0G{~a'M^/u"W_h׮6l0>6l[׹sΫS|.JJJУG06B*B"@T"33:t(D";t忽{`ccc<; ^/&}uDX5AWW=>y?QF3~a.\fituvjj bbY'%%bѢuaa!/^D@4)>..]֭[~=g -[6OXWp[}6~Baa!˖Y/&=04< 'Jȑ0yX[[fddx`%(**m6mvz,Xs6g^` [tuuѧO+ZYrl\A4&M2PT?~222Ц*66Z?G6mKK ٳg[m˗ooN _ZWWw$>ڈkccy>55P(0w*&j.Y[[}{w#"!YJYӧOO/ɓQ8v,Ϟ2&yB*ի¥@`OqzѽsOs'X~-`epuumpu-JYCܾ} &G\\,Sw8m̛ǿQW n6*Kqc02qGb8g,(JE 3YYǧr.$ػMMMܹ..XdY ı4W(bՕJ%lٌ ֱ˟kpA:=~<&&g{,{ff&~JJJx3UG͡@GG,ѣ k jpͭ=۷o!??e\KLLĉv 0s̃,,,܋Frr R TRRLg^u9xw!aް1N©SQ[},\Oq̞=30BJKZsssUL8NeϷ_BcÆu:СCvztҕLV׭[ˬXhҿ\ܹ8:⯿>F=fLG;csD+o466So^ܸq&OϞ_Xʊ; [˗9[kw /nXl aggG̙sƯń yi3eeJl2cw;>J] ^^I4ܻ)S>šCC,Xo%`͚]5٘b1|QQ| ؟M9 ?S=}{y}|^{kͱ"##PTTIJf: >Syh@w2:Os߽WBBB8цAAAysQQ!RiQEzzݺu-{hdeNsl~˗/sla-"ڲu۶}S먡 ,II,[m=ߊ96fٯ!**e۷k7dub,-k|:6 a ԩӰ| tA>x7E]0tPRVc׮u \~jXb,^ܓSNT"(*[o)`av:;Qk$&&طo~ΞZÇìYs8Y.˗. 9|9e6;s-m+'/ʕ+^^8XXXysnʕ˜A 6Ig^4mrэXK&&X7oYfr0s,ZD"a·~Ê+:}XgpٹGLǚ[,ۿiq8x!s?ᰰmT-mDu^{ի7K\p  5ktbx{?Wy4?.ggֈa) F2YΟ?_kBTl/;8Ӧ\15o\^ׯ?D"2337ѽ{W4on '֘9sz%U%^/^{}r*\Crrݏ3f2ev=ڴq);;;rsZ_|{+I?>B2F@D F3!!!Q6lXWvXl >|$_Athy@ 7+ >Kӈ&M)w%9  GcߑWwX"(9I)qXKVꔗc͚8sJ.6oފPdffZbud۷/Z;w;O>~a0˕}phڴgݻ{x(7n¸qy>t223)WPT}ʕ9;#gD1M;ps uO.UO`KP]qX/k$C3f,._^z ]t޽Tl坾h#%%<>M1v8d'NXp>hxzȑpbƁ >uz T*6be'M/zii/_ ZwS'koBDBP;Ge˖*oߜ!x۶`llYY%7FؼyeLbT,[N+դ7)89S[|Tjf͚Bw#4_w^HO.XpwZƶm1w2Y +%%a|U57dj|~=R)D">d +\ 9W"+aaapIݿBP[!O )O?O?Kc oo;ˆw;p|j9*ؿn޼-\cp?кAAA}&ЪU+nGwB?$ T*ŠA0h |vpyaݾi|dfܹX&㏎:XwaO-Ջ?`lJ;vsV~:V+++ޕU\b;@e8XQZZyϊ0fXlݺ\Ŀprjٳ.455̙^z5 Px=zCC]…Y}}}9)//ǥKl}63 AJJ2̔)&gMO.sB:t'OjYZZ{ ..gϞ=瑨޽iHM]GGb,/xxX֘ :Æw^'WmgŜTyVßu$\۶\uvu=aDNjsSոu&nݺիWB* UVa˭Z‚ YG.888bժǏYl( XXX0NLR\'͟?_ TlܸChex1!!(-U_?G\8)P(`kkֳ;{ۼ={~ŌӘC?9[lSu68tw 089G||bB }ϞeE3{000YK0{|||Zo +16⸻[D n/{UNc۶hb]…ϗF}pEEE./_b\v 2YRSSdP:7j Q,){À NTnصk'CGGzK .##] ߸q7o=Orr8q o Z.fΜ[n JLL4OXH$̊G}˺nʊ3Ïbz_| ;wxuݻ+Vs8B-[sA*bƌ0aΞ}@Ν۸s6smiiO? SN4G<%_r塰EEEՅD"Ǒ˟X$AoZ3@bɒEP(Xh1^ff&Jacc[o ÜY`llO3ƺѣ',_~ۻs0<|wT]8t {o̚ :y..8;]jw/~իشi o1`B6Ċ!o8`gg_cL6 g>?A\T*̙_~͹ײej7o"II)$?F.Y6O. #Gcu/uku N:1]^5Y~a6{4H8sمY43bZ]oPSYYƍңF,Y9M(11ݺu<ć.ֵ)vcHg)wNͬfffb^^޸{>rs ƍ甉ӧrux ' Q#8z|} ?o 11:m 2`fu>;lDW%`ڴAV[$cEEX6mGsHqIftahh~ڍP$$ijrCNyJ%1t;W Vp_}GfeSp.\\:ׯqžǗu>9PT'>^۷cfoᶲٟc&u];gݻQQ13sxxtdOmll _쳩8p 'NKKΝ۬ƍ8yu_BmyBBB86m Z6󟽠T*`d, Y3)-ab"Ys,X0 Mݽ?_AZZ7o?FFF]NPأI z}{9%Kyߩ r2Y<PZZʎT%(eeeoq`- $D 166k ݻwP^^Q>kbJii8}y[!͚WT~_A׮8umbbI TNU4ӝI$`e˖cܹ֬#'3#>^J@9aĈKq8s4Ӱ냤D^Oznɩ쥥vܧO_ :: QQlGaAA||w}{=zp`i=eelprj ?]뭜Ç / JѬY39 #GPg̘ FXXg7bDDeQUQG8״ ]|[-'Os̙朲|#ddddl2lݺSMe! ^iD"KR`\@i~;~#**eec~)d2Ƕ{F@@.!00r^zsl#rjDe˖޽$k<<:ã#f̘b\gBNp؟;w۴qk y 467n< --)))HI̐T)Or'A;wa) Ç,$kD"a1lXehll D"66U~Iظ+0:77wa'|BUIooPh5yzva5~2/ӧP`kk'a_9?|l'NGY{cn=Hs"8IjK  `,--1jh8p))r\c+/]9ʭ! X,FϞUڡkn$5IDAT5Y۟ʰfMf^Nchh޽†4/7`Bn6}tVΝ=Ѯ;D9''k֬Jzj\reիWF@t(7oţGሊ011awډ=}9GsX68z%/ AԖwcط'J;ݻ':thwhҔuKu! FG8q4%J\r7oހ6mϴ}؟ksssxzvizAq_`uؿ?bccCԩ3燸C__>$@ҥKHB@rTj̛iѱuԮvh @@AAƎ n0ܽ{2Y\#׊ 333|ܺuY8{˖-GΞ*0zz9 f͚a|uQ޼yFFFptl3gN<|(//g#$$h @H```++k;;;bdff0ﷷX,Fbb"5kkk8;;s! [̬%j,[QQGGGB$AV͛RRR`ggD077GffD"T*q}1^~~ҘwjU!>^BQ$!#[eKsHOOGYY dfV```G,3#ppp>!ˡT*,YYYpjCƻQTV ut=V*())a1eq]HRTTT //zi셅dҥ+c+++B`5kUMIIGGjFFFPTCVVАS image/svg+xml wiki2beamer http://wiki2beamer.sf.net wiki2beamer-wiki2beamer-v0.10.0/tests/000077500000000000000000000000001336367417400175365ustar00rootroot00000000000000wiki2beamer-wiki2beamer-v0.10.0/tests/example/000077500000000000000000000000001336367417400211715ustar00rootroot00000000000000wiki2beamer-wiki2beamer-v0.10.0/tests/example/.gitignore000066400000000000000000000001541336367417400231610ustar00rootroot00000000000000example.aux example.log example.nav example.out example.pdf example.snm example.tex example.toc example.vrb wiki2beamer-wiki2beamer-v0.10.0/tests/example/Makefile000066400000000000000000000006001336367417400226250ustar00rootroot00000000000000.PHONY : all clean tex pdf view all: tex pdf tex: example.tex pdf: example.pdf view: example.pdf evince example.pdf example.tex: example.txt Makefile ../../code/wiki2beamer example.txt > example.tex example.pdf: example.tex Makefile pdflatex example.tex clean: rm example.aux example.log example.nav example.out example.pdf example.snm example.tex example.toc example.vrb wiki2beamer-wiki2beamer-v0.10.0/tests/example/db-rg1024.png000066400000000000000000002501361336367417400232100ustar00rootroot00000000000000PNG  IHDR G IDATx{\}UUc2F&M:Kēd͚3ӓ5'I'Ym˱'1e0`cl ҕ.D$KWWUuΞ?N:U: ;woO;{ B!T:4'RkV0eYbƲ!`sRJ`rJJi(+;0Ly\~eHf:XGNSBˉwbKSwkJ)@qRvi8!lY֒(˪6MDF!CzݞjiI)ERJ9'8OJ9`NJ9/BH)7LTKO@G': `YJ-`, ' <( )q؂lڼysR(҄sNmժUEY)XgYjkB 7==nQR)^ [עWA2b6otcxE)?XB `qzzw]A%2 4!ė~{i-Z[ؑûH>Tf.b/NXG,mz BΝ;|5װ E ^(ʅ..˲.B8__A;R (xigq4 8 C%sڶmےW6BHHRQ|_,XJy1w'~ t7#;[Ⱄ8(7Eycǽ2BE8j.4b˲.p lr@匞w 5~ o!ib?`!|0C\B&=ztnojۛ\(oHPF/@GYR0 {gY־ZSJ6!ņ"MȘR*  !6 !.,i L%ܗ^@Z|>@&%^U> !"MȈb\.J>آ  :,x:Hts(Ӏ(4xEײ}۶mkiB2fΝښ5k6 !ޯ(R+v92@d t :xk^R۶m{MNV@\k%[BWQ[n]!$ 4!عs~+lR-w#1@FG#ecRʝ|KںuO:!o !,..NYueY[נ'ͬc&@G/ 'p,QSR=B`E/*k "M&([J)AUJ e&@'@{z>Kw^z/ ېؒ I)Rp 7LiRYW[u:E*@ ɲۄ1whw<rC ^hB>ۦi>u뭷=tBFE~(SqDE}敷:ԟR _U!-@>fYwo塋i+ p'93b許4m'W9hʣ~! 4ɔũvKNp֙",]FKӖ= +o۲W<.xXQp55i^(ݰgoPsDY:P҉RehvG>^g4IDd^Uc!@ ^8m}KOsh6Il48 nMJ$ t6C@; _?) ~mqy=4EJ9r)=~!I@M*Ts(_N@_A? J+ C.,P} z}"$ E}\tcVG_A* tޯxSJ|o9 P(pСmBq!$)Eyp: : gp/x iY_qǭ? HJ&sȑMe=~晔 tX trNהeY_;C0>|eY;e!$-4Wުt41 tm!,O_*W~ B^uV ׅP'BRN#MN@rKy"ƗwN W).^ӟ@0'إ+B2=@G;]7N,i* t?V8. \P+jrCHVP@{啗5VT’B|N7ΦIHW)%nBsnM*z8Nv<<ֻqXx_Rǒn5=&`}R&(%ѣ3L|!$K$ tRѥ@w;98mX5BA[o;Rt(%daaR)o !s!YR(QڤiKN7b Àbwy̿PKR9|o> A*FAnj!m\G|bh tX,+ozxi/Tےty?-4Tr tR@-ʖay)Rz>?;G@֯_W۶mcGH4_ |T t3y Qc=,%~V#ȒoC2V( !O!įo Bvdz*9豼N@lhq!wqq@. WvB2g-%]U^+E7%i)ş*G};LF Ez9r˲~ !yP{ŋUZcG޽{O:D"#GeY E !YQZ6C@Gi^<@r /&>u}u6 "q@GE;=-ݣ筊@G_9s(وn^y (Ǘ|fꕿs뭷Z(18|R?q}!$ (q tu{[vz|(A*(Ѓ]%>u}DHG+q,@GyS@&/K*,YRѠHp/ `BHZ(Q袯B6$ t4_S!*`}rǎ$=(>8pRƸBHZ` tRM?b%Yz8zxzǎ{BPOƃ#Gl,/75 tVm)УݼVYGj:L7; ]W?u:{ҡHp??03r tR@-ʎay)I%d|(Q-O쐢;v|/B8eYI)m}!$)y)qc孲@g=bUc$/^n҃" СC !pŸBH(x<@g-y@ctЯ !1?SvZt[K6 UU]=?u)RJ,,,{!=?CM* tq>zIRN@ǚB_?K8^XXs2(Y@g9(!ղ t$ЃG'q?gw_@g{S UYH^y)^uǏi[z|x]W~}ǎĈtGpBHev=Fߖ=]RK$!4IBDFb(y>oU: QVY_u哓"ӕm)q?(Ays(I$U_m/9h"aLLWZ<8*%2%W,]t+(Ve[.#WP˴6iOPI(M-,WY#h t" t+(VeZt[vjYm)U^ͣ"+i>>XH Dnja1w-:+/:(FS#sC~kT5~u (M-@(Qrfw:T)Q-ozq]o|QwKP)vSHTJqw$+*񰡔R9|A&c=@G;]ww,/m)cIE&6@G-1~sɊJH/,,[A&?SeN*yn>-:{M t,O~w?"}]'ŧ7:Nty'Q t@@qTvq|=IKsΝ(CɿR~S@gՖ= +ozTY9AVK>O'i)?ڔKJ ::JޤCäy-@g=cUh7R#}kHCiE7\fRM(RK t+(F@q|UMxmuWzqw$)-P?MrǓ 4:JF{%MHRJ9#~WHPԂb2R^N.y孎@_A1 tE9{vqzIB)gFJI&P{)E74}:@@O[-;HJ7#o^+l4IIojR_xyj:}]Q]ޱcGv<,݌(h ;^e64FK;|<~,M t/RBm6>;ĥT"}y!)'exC@ņyt<@0w,}^ @g7QB.̮+uH)=ߴǜ7B&$掻C1mܼ~m?M&^,M[8z;ǽc^f|Ţxm띓sO>nd;զ{{N6cK{ lҗr;RH+ @@ ;|3/mcif?+Lq^yXm1W?yb@_f^חhy_1C| Gqw * gI2:PXVb(谾Ρ@Zӌ/9hI ޳>[^if,(U) 谼:@K z+(F&>lܴkQY҈C)ź* t}MS$z|Ū,Yn^y)Eź %RJ{R`Ox~9FK/$NԶ^_^zzKk4;Ӎxm9Y?Wq[od|Ţw<(GެRs;Rw6aɸAOgߜcFK/$|I6MDwPcI^P41w<6z^Pt+(M2bO/חhy~<믿6OwGPEQdTGԢDNW ߻pu|yϡ@g#y-@g=zLL]r7D"-z} =@G;]ww,eǗzIzttv!.,(Q(УKvǒ$ t+(F&²pѸReY Qrn p|T75/諼P;MEq!*i!qK<] tWPl:@@8D" >|(MU[ (D7UQ>Ze{쥍Fc @lb4}:@@1==i}J)D4Mk} FΪ-:E(]畗M1 }i}J)Dj- ;^e64FK;|<~,M2t+(F&Q;:>D"MQV'1h tXl8@Ǔ t>x@;1 !|ڱ1t's-K)!$/injA1 t[6bc$UxC^4%i8wu#TA>Db(_$m)Q8׊~BADuR^^^rv:[PXVb(IWP5&1Q!DF" gϞ|yPG5z+(F6/ZtK&^Kt IDAT^GQnh60 #\t2uS lRxAc|(q 4) alSs҈4`JGi2ԲojA1 w+,֋SIB9uƄ(8!-K)E:402]ZPm4+(FN3bhRvS077ĢQJJ.MU[ (D7UQ>ZeX˫/z:PQM*1$+(Fڗ^(5z(Ë++l4Pbz+xhZoiDzz6(Rz> [ez|Ū,IH^y)Q 4CUUT3;i˲p Z*ڃSez!)x<@g-y@cRtֳӓ(YԼsP}#o:P^y'Oӌ/ 4QUV"wSXzeeXD~aթvG޲T uel%MK:n}:q2yس:4M(ѨXnMv H%E7kywpye&Ӏ#Λ:,o75 tLO@Gh+(F&u(cÿz RVt*+nqqZ*ӧD{sǫ, 4wN:@g-y@<B0 ư 6lX_y*.`fwf:%W=pS@gՖ敗@)Фjhg:6lX ~թH;#L<F,M-@(Qrfw:U^(Q-/䍦0ZL`8z 7nLDwl>qDn2 Q.NsSw:]-|1 t>o|QwNˎQI4Eaބz8(KBĈ4Г+V@킖,t7r @' t %[ez|Ǫ-Am&K8M"A;O kS)#%@fzŊ6m {s'QM@G 4X UY4a2{ Qw[r+W`2ĉ4`'OtIyQJ 4=Rhޱ@G%] tp=F&]QY`!:h!];Fe"E̙3, Fy3,o3CMg-yӏd t+(Vefϡ@*jZgkduQK=Eņ h'~hYݼVY^ΰw- ty)^1ct+D8HR«*@G(I*YIh#֗^MƉ-н縆JussXvuf, E4qiu4 vq7u ^Zث|fۧchnjA1 4:J:i4+(F&z ]jCEڵ177E:em4 ϭ$ىAm:- TՀi0]$E74}:@@bi*z"Z-s vv$ "Nj5jΟ8}y㪪AU2n]478:!ղ tRIry RMSz*BDŽ"s4Mjh7.Pf?( Ày8Mm:h䕗]wxXeWPM)ߨPU{,s033Xn{2E:&ibii Z#N&\mWp9ANه|z J!$j,ޱy)NM^Z-zFzFT֭4$Pl6n#N{~HLq-QjMÉ<K*m|(H^y,ُ/J >7:?J+V5( j (), PUa@gix3pO𛚳|khhh759$C@'iKƹV2y躎F} 荑,KT֭a@4 MӺ[uSrprk+1ԉi~[{<:Pӈ.:\G|bh qPK1F~+u躆5kVcff&FH i0Mww7<;0&ݲ:{@' 4x_hRujh4};nl\D+WUVڽtH)j Dw=n`tY!ME MSi*,Kv߲,W[ t9:lP_A1 pMay<ҬV΄qE:'VU;+܉xtu''uRZzT!YԂbhyD厔iRqE&8uu|4 [Zc6g(9*r _tOLJI-t~xҖ+@[wXu:5:Nw(WPMizwǿW?zğXn z~dPGe{f@dMT-(aT@O@'9lD7ˎQMShLѨw va uk15q;J(#.\7XMmn}N*Pj5iݶ&Ϧc\Tb(YH:z4m)QcOHu/p,$uk׮,q@RJ !Dww})]/.a7EQQس}@ tѥ@ )cF,Oa`ꕘq;N(@J5;xh+v 6 f *ԣ@Sci?Lg|zq 4).<]9;┄H)h4z*n] (CQ;ˁQWlP%p!VZ.7XW=T]ӈnPf|(9)Ф(ug0:h)iY Fc`P (:FC}ܑ%ljjAj `$W* (R@sy)$.%MRlF']cnnk֬2v"]PWp~qn5óȽ`9IJFUՠzjV@'I%d|(QҋSI8[s7uLMMAQn,nyXjeg"C.8Èg(މKvKp/W;up^{Y=;#8b tV/8xX^y)Q Dѿ-w@?80ry_EQ8fKE$ 2_ܠ@`n)4MٳRʮPZz۞WJ-1h :$Sӌ/Hu[h4:ua$#O n`ժU$_(%D]hYf\GY)+=[mYݛv/Db\($&敷:}:^:+l~^v.#ϯʕAD?b@.1vi@Ju~/]OBUUj5v)KtX@I :@'Ux)]n4Ms8^tW0 +VaŊ9W 7)/ `| ˲|p=!C Y o\^=vVivz&@G t%KnOts(d\; 6lẓے; N!P+[uxŲ)ps_{3MaF7cnl|^WӋn^y.%敗= ֐qY!D^Ê+:I#R^(Ʈ?AnjA{xa k{F_lxǹp^0jRE đkkks t:[lz|(e;\nYqA{ӻڳϳ ŲK!9V<ޱ8{5/)7^ln^Pϡ@gKwe@Wz: 6 ԧ%N[!zY4uhA0-V#dhKX[0q#i:4ͮóϕrg4JB[/1hG4]4]-zgF>]\1Cmn133Y Ez= (;y xue,h;-ά#ejJBLky:1 t2I@_b<k`ЇbHoփ,)R 4TK)`Ybxiq%R_?Cd`3[(Zkg!]r}\Ì!Q&@'p8<^TU^?~PgјL H$Etm9_]ޮ*ûayoՏ0irk:j:ffNe!V R=8* tDZtK./ sQL %,h?Y҂jkݼ B&!ڲlt+*nkǣyF];[0j0+aLib=@G;N3S\Qѥ7߾YE,976{'iW{.f v@ǔd tz|1 t(FѭikCQVe*f#&eajYɩ!IH3R (ۺ8澞=j:j5+n3"k_Sn^y)gPS|w٩e0_kv?4̣a蘞Cq&YA&9 (PU;T'*A ~x W6Axrpych}߷@-͡rvQ&d tEFeFJJkL>;*>vɆahh4VM=i;RZh-8o⊢BQן!$gXbpTk ?C/g}{7Zٝvvp/{@' )c=\_8Kl:.(ݶiuUfGHP1M٩BiZgkfhmۦnutd4M G$WIh]Q`:j5ntcϿ"}d}TKZ6@wcMSAq&E"M }C .V+'~%αa! 5Ɉ^?>fïNm˶޷.`^烃',w{X[Hkԗ^|Z;njn){2 2X˒,˖hy̘[LdU^8!"MJeIX )\4g(G#o|+=`v:p^/ {ǃ#3%ND΄j#xkv tX,(Ҥ28-" !ouzݠ-b{` fk{&=>Wct3k뼾==#1צ<kϘZ5{\ٵvdߢ<qz3p\Ӵj1{Bݟ][kA{NAQ^/^d?=zkufGAì @Ny3iRIpf%!Do{L(v?,s<1"`).=;ϐǭS`jzׄ~7s>|18V¾vL$4Z4v~`4 !U"M&E t* MS:f֠(j2{^?(8x~X]uh;- -Qdk LY"kUpϘF!恽S:%eV4Ʌ"M&8w gqMs; {@;lV7xۉ%wz IDATw/k%밿G~'<MzfqڲN˽:-m;כŵZʵ>7ʰ2;b_t9\h{3^!Eihc!͌p?`$u%\4ΧKBSvVF~#P 3;c˵}rs$[c̒@x]#6: 'l1,w氒xoIo꠽ҞevW=ijg}~"}X# P IeYh6Z^vޝѾͦK:loҏ4uID7jRȝ4E.^M׵ԑy|Rby\wC$4ZgYt -"P G MCΝ;{d@Yn/!HW׍J2\C: qg6)},eFϨfp\Vf6`mP%\KB"MiZhZVgI> v7b{{AAE2sYy̘Gk$$4o9E+ )Fū?f_F{FٙeL(H2Fz];{ etJY/=a+'<*i<$}MvIW~xKY˱RGDy]ZVW {{3n@L|"iB }vfvj5$|Y<h) ᰶqy=pc"KG@'PQFzeY8w\W{ٳBز{ͣx&𷔐u4L0,F3: C;[A^$)Zn/ryqcOze{吞(5vogUtVooeB Eҿ\3 թFw;dY]5z39?m頾+uDޢm0y&Iyeayyo6VvWnmr3ΚEJ4!e9oliSU vvV{)| `:e?< Oz;lDlFb?Bi?jaYmX\+_ eBA&bm=pòZUh?i V~Ho9.wi`MuFHF}AQɱwt#{,#&v\QƮS.kC)iBHjLӂi6|u|pԑFMgj5݃3ζyui:<FsL݊M)f7lY+sQ|_k6.B!H)~Hlذa JN)f/Yih6xG}CPUu,}$B!={>(x s.(=5k4WXSqwcժU#!B 7BL^x8Rv{G_"^|Ep7DB!bY{9|_hkbvvvKMiDK/u}-v~> F!BF~3|_?˲\1/KFյ(HXb׋pAٟ^}ռF!B:8~ _ѣG#B/ϹgSJ;,//&ogϞͻB!͉'|<~;܅^84aZJ͛sN ( , ~װn 7oEW !B&)%vڅg}ͦ2B(2mW^ye]̅H,6my%8s ~a<8ydn}$B$;??ǷHa~~]vỸR4|,爺~};wB! ixG =o@J;`شi:||*ԋf'| N]6B!TVF*!}v=zo'!SRL]o>?ŕW^[n+WLB!d;v O?4^y^( jZ9zw}w9w*N|_ř3g-5H; aYvލÖ-[p-`~~>UNB!<9~8}Yٳ' w&7Uyʈ4{C=gz/ӦieYصkvލ|馛bŊy !BĉxgK/e": À2Po\tE\hTJ`ժU>zWahZhۙ\4MG?K/m۶ᦛnl& !BpI<صkW&ZUݖ-[pWWn&ڡr" ׯw܁Gy$3 $ZŏV;w֭[q7B!#ws=_|1ICzUUCxӦM馛2vH%\o> PΝRC?Ɩ-[pM7aڵ'BѣwݻwgVᠪ*:Eq9lE]å<ʊ4`9l>O~+(Fٳgs(RJkxװrJ|ĵ^˲B!9s;w?cǎ䚪bffFu~/0" sss?'xoF6a@u,--jCǏGO<-[n^8kB!d4:t{OT:h9}XjDB3" ؟NCtNnsNܹ>nlٲaBɖf_~8kޝ#>N{W&Z[o^O=TOCu,//0 G>~[lmw{d'BHr>;wb׮]X^^ELws ~ߏo9rxċæMvZ|{ݻ#UU1;;V3gΌܣz ?0{1\qضm6m!B!c񓟼:~jfgg}& u;l,#E7ߌ.O>$|6 a`yyKKK,k]vngٳkp5`ݺu# !2?#^~%8q:fggaFdEQp5c)GiwSO=7|3VFzgbiiilĉxg3`ƍغu+jS%!%OݻK/c틪>fgg7n@@`jj Gg?ӘӧG@ X\\ģ>K/\s 6o ]BH&^}Ux~E,$ .-}CA-[/3<\B=N,¾}o>+W_}5.n!B, o/2;B`vv333]S 333ؾ};.Bǀ"9|cn9xb~~iӱ灳~/F+W^y.R( %'B[x{޽{%Y|n<~؛($ʒ,ٖwYg6;L2?kf2YoědɺVeV%b(8H @Q(x~ӧ(J r{c^~)ܹuKU@x&P@<Ǘ_~/.+DDú [(R`ַVA:G!>dYF0C$A<`]]].{9:t}}} DDmeYSSSݏ(||uHd]c6K:Ɲ;wp]vapp@(ԴՇGDDTd~~CCw044ǏG|Tj\.~?N'\xt! /CmMb6G?;wpD"["<<8"Ȗ[i jo>BcFDD+`d1|l2(|Eoimmŋ/'UAz \.+xqܺu.U.Bmݯiv^"/i$Ο?Aсݻw= DDۀa}<~<MkF0g?.,ʼ@WW;]GٳgK/vZEێ[-"~? RC~2M!"ۻD*<~`||aj(T'芢={hjjbx3 uDe?~ǎ۷qU,,,TEAKK ZZZ:0"HXl6k rdY IDAT ]]FwwOQ/mh41ɓQLNN6|prPn*Ԋ```ǏaS uHlπ`TUűcp1<~׮]c ٬] i`w !DLNNabb;JQg³мRra߾}8x t۵kzzzDp5ܻw-T-(" " {¶+J3EQl6455A-kQzvMsN t?k4MHP(P(AhH&x$Exc;4QId 󘟟¢X:^qϫNBE~oֳ%wSMى#X5&De߿C<WE. n%,.."W|4M{ʣGr ?FB  <h XXX?Cc[}hu*FXUg1 wlmmŞ={AٺC1HPNơCq}禦t (󡳳P5uch`555!jKx&&&D*p׋nUYZZڔyd2vEQzzrvJ,vt:X, ]FF1D"QKzZ+qN +]$X)]P>QyBe|xCx!&&&mkU^ΪXwvvB$ɢVh4Wa8ݹ` .8Nn{!Q3MDx񸞯*ǠaYѣjp`Z$>hEQ ى,| ҴnNayq,..em"ٻ `ϰ^\\p% $ ͮxQtrr9t?|r4 Z @2 ȉDqu?Onm-, ]$X)M ӓ_.*wO;4m(G? 0>>WtJ3A@</XefŢŢk^W$8h#sA:iEi~}d20$Rd@2@2/K$r9Lwz -li,2Wrõ(p=hj .; p T5(g0  w]| gY/--%de2b1bŕ$ AU|V*E/SU@Q$ YV I2Ef| 0ɤN0 #t@:F2D*e0RvPNr #P\DQ7jjjB *s*ϊ󡵵mmExaq\޽f$JUݢ.=*nPQuD"| d2|Ok LE,ːe%UȲ Q( DQ,+EѾ\dȲ Iʝ1?+Ok==_/48laء/i]'" 6fNa&R)<"IKHRH=AOQt#n7bAUiSv4sLNNb~~cjhn#БTTfqJZ-+aJᙨ<ֆOVkF0뵟 f[鶊񠥥-Qi1HӖp\C_&155y躾j%]s[ jomm`Z[ u]gkhm6Ax umTpͪ<e. `t δ.x>x>&LX\\4d j!ܚm]L&H$R4-[V68Z3 |>.HUrm:7 ?Vh gG T* `"51??9D$gVWZkzak{εUv>F2DT-n~>Y*fVACKK3Nצ<.F1HSMMhjj_bbqqH&/ uD{{ot^X n Iχ@ `ejl'r \FJT Ԑ@3,H$d6ernYԄgV؃D*v,c&Ƭm}>|>_Q`JmhRVcf~v>MM!E i[p:AwwWK.ꍲ^H { 'ڪf[sQ*VH~x^XڈXcKq=18v Mے,hmmEkk+ Q<‚gfM)$]D,X h>YX,H$qhD@$lQl2Pax#!|YiNj@ Pjbݖhb-QkF<7 zC5MRҭ]͝LԈ4MN!mA݈-kf0M3?.Q4eiDz*3bi)Z'`L,ɫz ˅gق @uDQnWJi;*y EQV ܂QjǘdzN</\.D <݄o_͚(\M~vGlEH),Tnux޺g; m%k岃>>7sf4+QUzdgU0HA24H$DHaif$/xvg5Cip8hn΍#,Uݶ>7 (pb1;dq$ uJTU[\.׊abp\6ͪFUeQe.^zz"j Dr8p8VYcFcHRd,|HݬcTPMMMVݖD"aRd2iDIF9ꚦ9; [a00;΢w!oT3 RY,Ar[UՖUYm&(i*.L& ] d2$IU &Ƕ`(ZLV v*ù0 ÀaH$fH$r-;T dLx.eBӴ[^f\M˭pl4M9z7VAg2:EQ*& D M DQ.V0ͬ]}5=JJ$(mzV7aB H$vuTV߻RY>dY. p:`\v6Mڷw8 )ga7:bPzgUՠi8n|QC' D[ ;3""""=0>r}fwygV еkGQ҂ LR)=^ՇCDDDDUfG>HlKl fO077W^y\NDDDDkQn!+NvMӄ q~ m [xHRA|>_Qll /DDDD8n߾~KKKe#. u X,ŋa0 o{0 A[thAC/ui8<~@K^~_ڵk%ӳG1 {zzt X?%N?.?J{QJA IRɯP)SSSO|E3 he~m,,,u hoompQ|WFE[azޜBl.]͛7ꫯ+Eh1MW\x<^dY 0M3gju*@WFe)L]}]TՎh;x ~ӟB$I+)>jhȊ4߿7o3_Ei{AǏ ǎ÷-8j.QÉD"?ܼysc%I$I%ot: 4hE+8sza,Kۿ\DDDd2?7nTg\o|UXRV OiPt0? k5䶕DDDDa&nݺ?G]JCi pxxO<)uEQ`Fŕ噙믿.Q]!IEYt:i 6믿˵uE){JFFFo~ Q~+?PeuAo{h" ^~l2 qp)={n#"""*H| Sevk݉'gϞ =NAvލSNҥK+.2TUa=gz%tϟǗ_~_~/2'|QCu9.^06|hKOO϶ұܶ K/aqqw]:"NW'L?ŋqib*m?D}.^d28κoQv{.:x| <ӧOc``mDDD;i>Ο?7odr$񔵠xco`0XW;.H7xMMMxbYe>׼: oܸ7nOɓ'NDDD'H˸pBYW p:!z {zzov-NBss3xyZx<RM(eff.?رc8s :;;7屉իHR@u"+dGiǏ~#/9o9^UU$ $M!JRt.]^K8|04M۔'""0 ׮]M}lQvp8`f9F5#;>HY?tB4bMi(422/;^xz DDD>/W_r-Xmn[v7@{{{-0H9N|W_}ϗl/QE|>R)躾)  %I\x/^D[[N:cǎlqQih_}u/_Ėze*Z-{ J2 AcӃ{e߶c3{255?ӟC^>"'~ml6w˸}6$IzJ3gg^t ---O~O?7nXz#:N8躾Ӆ,]k׮ѣ8zNDD&''݋Y{U+(8òR5mWȲW_}L&˾(x]^$ ~. htSGڔ255/x{n?~DDDH$p \z>)n7^  zzzj}t<޽{Ozٷ5M  "J!nRC<|.ߏÇcpp0 ܹs׮]Ý;C[zn$I^E:t/E?  : Νí[}{Mp8L&B t7o͛7(8EQaw._۷oMx. >r#_}U0@WAz4Mk>XuGqyiB4hfW]Kaے}o>*C5 |ׯ_P],V +9ʮ\^cǞ*T> uuu'? .]V:J!Mr(ZZQ8pľ}i><""JR{.nݺUwh ϷnӃo~|ַ1Ho5_8wܺ#ZfH$ecVb_ׯC$appz[}xDDDFm|MO>lE*dFF<޽{w? A477mjnnoΣu:kQ>^Jsgzĉ8r8A:;;oŋV~ 5t~b1Mziɓ'x ׿v厊DD,p azzziUNk4싢_}Qi U&{9۷/_xv녮D"uG fffp98ݻػwh0<Q-麎>UYhjFjtvڅ3g;2@t(ӧOǥK044l6[nx<$ID"b߸q طo:::Ui;wp=m5wX~{F577ԩSؽ{7Zc1ǃ^{ Nŋq޽Wj(d BvG̴\i>cO}pY&"bx!<#n!vzC^xݻy1Hoχ_/".\lD"%|?. vBon޽---`{5433G֜~UE)>[t}>9{KabwH$˗/Ν;H+nR"= ˅l6X,f~4]ֻv2X504177Ǐs ܤ-χ@ `>վ uss39~; 0@o=:+Ӹz*nܸQmb|>ia,--֧Z9XBO.1X!41;;GmlqBU ǏGgggUA8N>}Nq5D" W[MMMMhnnF<"H]nZZ4tvv==脦i[|DD;a']z8AA(bEQĞ={pqBu7m:%2?cǎahhׯ_x7Rj耮XZZ#L=@I ]]BO.nCDTH$? FGG1==Pkt֢i K Pp,e%b``ǎ~0H9ApA>ٙmUm.d`0XT^^(0H7 Á'O^0n޼ZHѨPfT4M`ff_kmm@kkh[3MKKKd.8OMM5rY \.WժΥB?> ӹǠ A@__ׯcxxx* vOD=$Jat1FGۗVmBEq 2ib~~SSS6 W#^E,m188={@f mٳ8}4=z UW VOuWW$0[W*J+-mmmhiiEkk+9Օt:yLۡyvvv۽øQ  !rE6rkAgٳxn0C4hNumS^)kĄ} hiiFss3[Ԍ@ Ք՚1;;Y>.,,lBJ1u@jMX~=IсtuuY?6t:q ?~蚽nάeMMMhjjh4cMp=rEQ 5%}jF(8>"H,Ç!H`ddcccX\\ܴ*,B/onk%ձRDQ̷xx ͰMےirA9ء9""*p8BLg \Qt4 P===hii l۠1HSߏ}0R8Y S]Kȍ* bHcՔjH;N\' ɭo.D"D"XLG<s\XfHkA bm ~$򴍦& 28S"ۓg2YLLcbbsssɴ.<^/zzz B~|haO:qQNajDQt@4hI6_@.N#L"L NIRI躎D"nD"4M+a TޢQ>hQt:܌]pw֘iciDQDWW=ci)' bWX+[[[b]^\\D$"ft=VEɇk 35 UU kPU>/wNu) J!2`)$)RIcaXN&N,r; >3Qcj-\,hiiAggGug.i4d0>>),,,lWrgU^,띶c1 a ]YVieY,PU@dȲ EdYO"CUUUj/^Lӄa0,4R)tan24 @:A*D:@8DQZ=΅xϝ郶-;;;B:41HSMI|x5>>9^\W ג$minMFE-!Ri鴁XjDQ,E ,A$EQ (LI=JI`(g _|58YVN?g:Na<<6͝7st@&E&A&F6gHۛ59E#jnEEڱ4ncp M*³3RUq=dY_8/V pBl6&DۉK`>kc`!\%8~v m4mQڊ\s: fff젺'jpAµuY</m]^IdO;*h-VO@>ͨ< Yv 5w5LA]0\?,狂u-W ,,vp+D"Q5i/ZrkM*fUW*nB<aV4s/ KKKC4]z+D,۰v@Q۪d[*B}n#DsUU- Ǜ P~_2rMxUUi[amZQ_dL&\X˭KQB|cZ[y[ڪfG"DQQziðBsVldVfS54||qm6i4MCGGˢqR|-`Ql$xh>V膷q'EC?Zm۪JCuVU=KS0Hӎv{v{3L~t]DtipKz=t:r 1J!;#!!9O(;z< @q8ެVf0D.~g=N M;((H7̬D48477(f[[=ںۡ0l[_6Ԉ v튲iFlXq2 Lӄ$4^\.g᭸k QiDQNי܋M.HF? VcժMd%zeu]G</:F:t]G,+{%Q  m/f[_>[zcm`Be8Ь({mo D`@(R)D"Q$: @&(e쭬PWk4 P@q^1"Cu$ qceO܎}g.nU*:\.Rs/i͞zU!4MdtΉ.m4O&L&I#IR*&#Iv:PT7 ddT&0 0 wh4N/wc 0 0d UwT͗םE񎈎17 0 00AL*GxRDL]Jaaیc{DLM"DĪm 0 0!FtԎ;Y'! eaaɚ#1w͸o_]Ep aa;܌1>WUU4D'OvkĴ^>#U@'J0/G~m\aaCȋKc7;+"‡*v]} VıUGB`a1_"mZaax*2'DWKwOX/21QhȰ`X28ȇ[aa4bLB޶[MPm.Lw,!TG"cfǶaaa.atxCCcLpBF\[a7_wsa-cID8q(T"z S?{9-^aa"£!Nb4,k>xۥv|;Y:!H":VU"Zb?N0 0 c`?w7c,I'fⱕo։:Cct K+p~яԎU-/zyBP& ܦuaa#zQ5l: 0 0],ȃ:WxtxTUz;)"ZY:@P/:&Kwck iaaRBYDXx 1!BDpxw]k3ǁc@H;eG׶"5jO:e@v0Hr5ZYRcmaa;A(SjʈV)2U:?u ;d{G}қTT]:TY}uM;eͷ%T?*~_?wԆaaƎvFfV&֮4 p HӯԎՎY=!iL4.[Go]W""f%G>x1lŅ0 0 0̕O=Ӭ~ UMia{ÁN voVU*C|^e Mȅi(t*~'|rs0 0 ""裟oI󡻷 ,ꁤSzGփL7f|)]wT T9ux*{ ]0'=՝ ̜e"e"b&b&O=]0 0 0=3߻ΔQw@YBN!z}Һ#esw݁] |W͆N#R9vZ{!>'| ,aa7o^ğ(+VNTyij&߂z*J0T7͗FÄjX}䏆*+ trUA::֡ 3o_}+f0 0 إ!'nSTFv$(rr*VU ^I@@m~{ &8G5.`_CFf=22\GP@109HI/}7ŗ0 0 0U_~_y%`҃U%q<+N;T: :O6;}n8ܛ)n4nt7|є?H}pj>9O "rԦ>aa|gW&`U0UXDߏ)3X'TNJ@=Ӕ`7\Wja>}U۩tRPf?7>6S>q+|nw?g\aa9wO~AIG/*yI38 TNuNTOffғ"ʺ<5AFDՈ1*N$Puz [~ "848UP]Lkn ]"+h~t٨:w:FJxQ' ~s괈D#}?Ξ=3@:}?x3 0 0BO^z} (ihf=tWp 6Ȫi@U%U)zw 껷'Y;ŒPTwxƺ?oL9kb0 0 ?/,; +3 NվS\FD8$ pE'@UMpB8jG~e:[fMf0yk괈,v~x#8IPt#o6 0 ^:}[H wGz/4GE˓Oj]Ҩ)R^OzGa{m{2ҳ͊%:U{EYgN-?"C^I_͛O71ma=[..hz7'~zt["egOrmS֎lHٯmn7_mj:GOL'K1 0 K?o]PGG׉?248*7oݞ9W{3a#٠> v2i'xZ\uU]y9cGĩSx,úiaa[ů|-ѣ?\~k_Rnӻq sGOhݯD鼎&@Vn,oݞyn?o8}cw;,0 0 cyگzFGFC?6:ĝι5=Vkbѝ[͎ED^ -]nj]x=_7\j 0 063Ϟޜ Ǐ~׉?WBW,o^qJݕwtC{@n(B"r)kxm*[n'36222yc~\{WZ$aa,_җoe}c?Љy!|Y @ %wnF\]˨D4U8DD DD (rͩZ<*s=x葲,&>0 0 M~tcG?x{s{*O>ގV$:o@)JD(Z)a}̐:c @&TC$@@Vw 6$Tq(!N 홙 Cstxxd߉ÓS?pr/5]0 0!&_Ń|gN/LAT4z4A4B9"zh6IIvn;v,<yD`U ҝ%T=\g T$7_Rf#'=O_>qaa&|{(Ǐz9s ]r{IQ)&Kr&TE$EQD p{D$%A\z 35LbK#3 u-][:TVA"EH:,1'utiS#JmBBDpwE14:կN};Oo0 0w<<^j]x3]UfHGQO <-Ow.WaٴV,]c\]/JB)D@|AӾtǒR] j,yKIpe=O8z#L?1n7xU 0 06׮_g~?Љcs~(_zJ ,IDDP>PvHm" "D.&Q ށŖ[.SThDR$TOD D_\"  JBH[\}&Ƹx;GrWxE˛6 0 ũ'_׳Npn}sEYξyʷHE6?H~AJ"DRH1nD8QAxmp43I6nrks&?,Jt "A1mD"6NK$QVwZPi2+AZE֕7"`~3MC7 0 oߝ;x`\w?]qKW!PϦRB"]KD! Pd"b{Me]ϫG Bҡ!* h{jhP瘅ĩ(2E)#%䈈(Dp  Lbغ=62r?3mhe ǎ=CM IDAT"zǻ}o1  Vn݉k[so{c:ﺭf9gl'}}lFYu5O:U|)]2 D)A#A!WWH*@z?E % & 5S0 UTŵ\\+sg6q 1Ss\]PGAe 0CXbRd ݭw$?v(RGzHvNZYlߺr8!|U!"xӟG oaanܼ)O‚7aBQ.]yaDB5V&@U]L(M]M"Pb;QAxA[Fi"Io+@m!u=*0FU'BDT"MPP'읃±cavDL1#))1JuDLb%b9Lt`M72MbXXX9Ĵ4^}qaN:VQzDH/"s"miH+Dh=B\"ʳ*R`!((@)* +J$i@D @(@IQT]d("Zh!D{" 3KxL @j8l3SK{; a"!$LP ~% w3)pWU| KE{+/TaPUW.:D\uPPAROKOcߕ:Ih=YƉHDHut@h@lR[e C( E)3q$"#EeISL0?W%r`dKQxH Rb qzvazh6㥗^s=9ҥfC0֋5k6fwJ^g>-fff}:PUܞv!Ƃ@H@!*dJD(Dj,(ȻBs"%! AJ(B(@4Pt$1(W͆ʅDxtvvo#*Wp:O:8AUh m(7 NJ%;G)#21"JIJ#L;03*uĚ?Asr&N5gbr9ZPk:Ntfn~V748uii BDp4cB0bBzm瘐6!vEQ駟ƣ>ӧOc~~~M筇(.]<{kf*%rCR]ѥ1M" 2=jPB BTA Ȫ%\ BցYc[ Lk/XOo#Hrzh`na~.}CCn7mܸqccc=0޹^9&MHE!} /DK觐ެZށo af%T&]a-ܐthR=B qN$ GbH1Oi@9AA rU5'sP^_RZG,%DTL_y4D!7oL>t&纹p.\/| >8y*aSLNN̙38s fgg""7gnݞ@QE~tYw:#AWiUQPOB*q*pjpQIh ;(]CŹc=R-0vlDH"{ .s8 "ώ3Fd ˢZVx9Q-AK( 1 s ,DHub"!J+}&hG@STN|'14$1JLs*Li?P).]~mzvn 47p]7EƳ>g}w>GG1::ajǙ3g[o:fgݘbYT$DD4 ɦAU|"(Xr*"R~֞WsEUAR8D!aBvR^ 'Ehi /c!f@w.w.o:Ċ(<]JW h4Pia)Bxxh͢`$sII(`Jvpi*uamxAX>q}me+P 4s۞8{,N:/{a#avvc'"^{ }sx饗033`qպt}TԘd6E$IVstD&vgF'!Jt@ԡTrC+"8(btCpžb@{iǶ%⽗^o8焙177=jVa,/Teyv,UyqKCN[ p‰6T0sxH $ h,"G0+,`!B`e0"<<EDUaZ**v*4ORTJd+l e*xfnnvv~~ء')XW_}CCCx?Y? 0 c+v{9|F7vQܜ938ұr!(*PI3d2wьB5[@x.3$A,, D)8 Nh`H8WJ!|C‘#GwlMa}6yY; /EŲ8ft{F9xaeIc‡cp,cGB`aCblFш,{fv"F"aKH-,J?64Pn4A5K_I=xyTyP&P0:i:e1D6y捩?11:2[R5TΧWǏ>߿gab/75犢,í3ss*"mݍ ]⹶r䊲Pn*$N@n+E4f»lP 9/Z$Du!G(. e^J- k sKعCf#0s&v:r/*"+4B{C$N\'_Z IpH`(Nb+[5o'+HUHuCZG)UZTu#}I  H&4xq)9$X\q۷NLMnQHŋx"{1<x{ߋwzya)Iz̒Y3!L}Ӳ桹T#yDĚ);P;HVz4 vyIAʫ=ެ=r>Zm3?F#˖dKVMk"ދHT٭ބ| @O8 &Bٱ߿lF~_`d혬o=f.L֎qvmϙc~پ9^_1o9uz+Ue1Bz'R<ơ aAݰU於 IDAT!7Z[aap[mhK`-w]+ĉŅh۵mCV4\T- /_@W2~!CoFp0bάa5muc]pF-:4,JPY i7Rh 6J3) mAN_`?|4"D#O ?<Ӌg=|pt|O>şg) ?[41i />o_-UųzPqX.tB%LBan -hG%Z}NA4ChV'rg ]BY^th:4"ny-DNZ9`z YY,W:^Y<q;x\5 +ZN6`y`hw;&kq8iIiv#Mxt}or!B`Ѧ,+ЖW4zvxk jtX>zWXV_/~?OO}{Ә41ٸo>sܼ[;N=ve:C޺a֋XtqؼdD/4z_IVȓ93SMmY`~vڊR+,1.OpΊ Y^/R:!"\2qh .GG/~ h wQ}VWn<(E1"C(B< \շ^7nnjn> }?ħ ~Gw];OcӘ4Qo?_wm^\\>bAhS|@ig^J3AXUjMq;fk hѪ}R@sm+;a+.t.}㕐LCK+?"=ڇ3?lz} :9V8Y/ `vM|æK0h8t5`,Ӫ+@$rPl;̶^쯷ƜI_suڼ2")uHS=PCyضO;Sm?c>O駟1iLco鸾_|_|_-5TWNjWk %@CsF* 84jn--ǎ#C-Z#l>çsHl"u6fN[~qs<(S:-oe0*<8&?9G/}4 p5N6K`v ͤ:4Yixe9 C |` mD-#$xxpa8$mDJ;ͪy!y7DxFt+P[r|6yngg ?|{|Ә417ut]_|߾gϯ~|~vm}8R5+BWh"M#Y9]GkH9ξUhi;qB1wιvz%׊sMSDŔ/į\Eq\z(B\Y,u/9wncYlKJ`a&aJE"AJ!J:&u,ZS[AĖ ERuEyqy@mYVS>c5wr1>3~+0ӔqsԎ|;R;Ԏt۞3vm=/߱ݾ^/e|juΒ7<oϤVHm6BohT )J*THKu1zxƎH[Ptl$hM@u-Hȉfa-s׶ ;m[nsv+!EF3+ױ}?xU ˎ]- ̸qIiaf.v@dae=jb|L^홵'ۊjĢBƒ9>+<@\.O;ԇb'|>'ݶ@zi۞3v3|ﭱkvk/.V?>~kۖZ,J4[8LmЂ,N},Wm)xBEۑ¼Τ0D[BQfmEuZa.D;qghSo M#GY:zR| c0-rr*qʴÅ)ѦJ7DBҐ)΄TYrQU|qKӆ@JA1"k$PiP#<y>l%U[޽ӳӓ֊ o HO M =vmϙ@zl;/\^^૯w|Wx)щՏW7 <c$^c*-ǦBSxYB[K[!f+bZ--݈sEWٰ%P|.gX| ր[b];́kи]n!,:XcUS1[}pY=oPcrGgA,CR1bL@9mqy/DO@AQ"TD$0{sNRgH<ЅUkdgrDB{놪 Z%u Msrkơ$-,!#Bw-H'uIuq C]o\|qFŇ]xQ)@f,mlq8Πav,x^$,!f0O5J`D1fNE3R#J"jWj 4zI@ژ^cD_5so6c<~kO }H9H==Y>8;[;?[EÇ7y_>p0gp '@z<}| k|??~fkV׫gW3 g`:&sm9 y/4ut5M5fPQ~j)ʅ --3Z{Lʖ "qOf1w̝ID U4ôt/s+@lF;t,D j%a O0uZUxfUYCpPc[(* xGPV>(QKض׻R%wv~wvw`6~_W~_@z _ =^Vo-7]vk/WWv hg"mXL&'C%6m_iIVm RA[%dR!`ETTd`nV:h'Xص-NY^ DߪkOJ0]azXfK4LXL;VCbf$=b5++,Y<|GȐhjT<%HSh[=>j(zӓqzlepK|/qr,L }9HO = қ׿~ ?wymz}Zݬ~UPoXR8y@#OX:C6@[LPUh1 ʭ,,v,q/õ;aSfhU6M#o1Dcc*0`ZEk0XtwmóYb6,5Nq8X=ﳯ:¬(1i˝VfSTaӬQ${(aEfJ' ՚O`g ,N秧˷5.裏㣏>x|9HO =} O>},nn۫j}yuڐlqкP}5D'0QMY@םmxPUkxZEEZ2ұu1 W dÛcZs  WfL}N9Euܝ|-L˂Ct^bFc޴Sv]/գm!RBRǬ苆^GP {DQc\N^j$k5!T#OPDyp~~;om缉 }uww߽szz΃00L4NZT\kL}CM @U@$Rά@r 3tAH|oPe0ܲz Gx%χ&9Nȹn״kZ zcVl}+|^Av,maZτ㓮n`UEQXgCߴcU]LI4bA 5ު!}Ss?2I$Ny1լ!1`(Ӭ}/þ5?u3|ӓ7%>C|xl '@:@SH@Yʕ!@GWUgSw[ [DY($wfXEzۆdvI"w9 i%ôru|*ѱ|cV[~;om Ϟ=?'Oɓ?ٳg5cl*n6j}Yoq#<֍9? :X8.E<ξ,2 Iq0T QvN 3+ ;i[_@9a4›{E ^]h4pgZ!^ri!Kz,F5iqiDXձRUi_ bD{:{<̇=07myDEl>5Ğb ~CPMPiNg'?_?sxGxGxGx}ev~Hǝ.?>ųg?ɓx ɣCu`_xݘo:z̄"&Yv<kG}@9z0I ]cA0RH]0~T:P : \.g[}hѣG aX`۝3omf?xO GݻHN&of縸0P | ͦY_lj- @PeC 8`H} g5ynaBWæ.g~چ|"mRg  m۶D1+G[T@4f4p}z~-yGѬCﴪ1=-i&bij=Uf lxevQ#W->oL~wJ2kjOj5׸t~z,lLVۏl=z}l 9WWquwyyϟc4 UfmW7f^]' 9/< aYϨZ7FAT-!Yi,DUBh ,EnNXX\%xw»Bm +GQrC y a`ִA'`8,u,y"iǍı:v4f2bVe jVi٧p,6o?P)j~j%T#\t}j50 d9?;9,b>K9 w>NqzzxL 5p}|Kl6 N#Z5nۛz{sv֜?^l³otr4<)<Q9A'"@GOyPa-$B$,v +۱Q'eG$б0Y9BB^0Vcfk 1MbȻ!.u"գ+i@-ڰQuܷ{9-ӡ 1Qb!PsdSzU:zGX3*VTT?J}HX0NNb~zr:?YS(O3NNNpvv3''8=5>99ŐiL =\' IDAT Vܬpuuk\]]{Xf>0GuZfYoVA8-ȀVswwTxxgY7%oT琾 %&psA4T @B[64 Ig dh`aj%&rdU6Zrܱpl7T%գN@W%i9B8`pfu=:m{UɁo`cTZRď~^VCن/v } 0V+ uRrќ,r~7T3c\FE'''rryrl64&>n{nz77kV׸V(o6) Ufkvmζ^ 6B pKx1[w9 CFR>ҡPBDCDGzdgk:?wh0c8bBfiw,go@B3 r4|-[ `GY=}ByndℝH<뎨Qj|(+[Gȡf.L ujq,)/OM@5PzMUFSmߧ@(XDE{kor1_.r~rl$[̘X,8b-qzz||H] lmn^xH`x0vR_صܬۛv{ssl[Jg gv3ȬӀf9 xxF{Y7=3D94\Iʴxp}B*U$:ASG2;oHݷqQ اB) +cе}ox@xVyؕ>sZU:mx/ V݇Z@:Wj)9P3+D0\>>oJ]2tdTp9, Qm XR=yӜ-ra>| l>r*ba\㡻A4pn| !fr;+Hmж-v[v;l׸vvCkuoQ٬fY7@ŷ_ X`ղBg~x>41V( sng IJtRPH:,Vy 5BG+kmi8ζz:}t7NweiPf.Nfq**=j`LZK?ՠȺ^"s=ZhF=vku\,ŢY.rfq`f3cf34 b#"f spDq1EP'" e6UZ͵.ncS~,ab~om;t]:v;t]_b_4ޮv7vno֛fٶdp^F@p<8!5rHe^FT <,hDq6X̺VWMu65MɔkK6jc m] ;f6swOvM#tuBL sX䇾c7zM Ɲy7}t?#y1bၺQN^@]PWY-?:tJ< $>U街zs.ieb^AlssMX@@]Z]V'l c`]X{ 6Zr4rX/ifiAoj;>vm+vlznۮ͠ij؎fא<:g0 q٧txx@>4OѠ؅l%85B GM=fe9F Xi5*B*1 }ϫcޚ64p[H71uZϻ"wZO]RE of 5 {LV`FmVK:MFf?u +9C Hfpy/,^/CECh$Uh(FR;d 9^b>7z>ofqx=iL "nnzi7]{Y*҃q6:$Y5]#g~UҲՋh_'n } Wǩ 5?|`.l%؅C y,D`ߙ0&˄8BvShT((ܷo+Hz(ub<{Z*:Έ}EcR|^iUfod0*+3 !{^mN\4*aپdvu*t(U"B+ H{7ovxAC9xɺ :S M$Rt":@бRBvB;tȄ{bBfMc@Ɇ*c|ߩXu:{XG?nfb]Z]i7@ejWQ~x`b>T}P¾S͒?k^XA+vOpm$)؋٬ϚfX4YËټqGdӘFotfm7V6d۵P3Tg[APm.^x<8v # I s|P= խѢA=L(C#@,BwN1v1 Q>@T-$5MUV)Y(p"Gmv+ QQk}pqfмg*uڑk#P?6T"ŸVgjl ă@&^RZȏk`1^lǎYX̛s<ϚY3k"2i]vkwm+Iil`4<@svOΨ'jKg+DWs["@;,Nji Y0uÒ7H4lD9±}CZ2X dLTY@[ᝓ-o輵7D6}h[=%n4xci[3* CAXun'kMsiOviLmnfkw]۵zko[ȁ@_E>BeDǠy`ѰJosRv,4B}Cse~p}.=.s,l^eZ`89/ ЬQ.:g>h }#YZ e`(,v[t,$\0;aAAW8B9O۫#_"{Q 0CsG%HGRgu@̩VdRa!++;]ﱶ/AyQإp  1XT,"Os= b7^4M4 ̚7iL'wm۶m+۶mk7ۭ%}uoɰ> ԥ ,F>Uν8ۼa Ƽ ;3-vWwHv[? u2zF1rQ1Uj5%px{Jz}qp3xٌ̳snfLmIkqvVvmt7f *Pi㤊9A֞ cKm>Ҧ^A|Ü\qFr@(JG c:]w?m$أBvjL[?`"iJˋ_^p\C޹s4 =XZ688&}MʣVe8ŘJ 4{Ў1zZhCT')F⠄X7aVͺ”dQV[_h[A2nľ[qpmZW:4!l߃{=aDޫdK_cDNV7Yرl03s;gǘyiiVNm[D:ىHv͂%8FQNxaXg"0PU5#WiC-u3"H٫%8dP(d@x.-Ugsh"R8B4QL"oDU3 :nh[M ٫}w@wKOׁz!bCE DĠ3VgM_mP}TTj!)ֹڙ:W ^|ՀՅZ` X2*ƖA5PkbVkT5PU;9Ff ]o=C]`njƹqιfh;f03;5Uo?љP!mۉH׉}mIuv]v~6g>kjrv$t5e\3f0z]ylW{n8E =6VL5^g 7PX6bx3@< < -3:ԍ&O6~ӔB}}Dh|1cg0훬0^-xaǡct/i/P[C2#jv9=rZTgT{^jSNԾm pCfepT۾Հ"ԋ uTDnIj", Um4e"`M^W\Tk^ `l?m UNVE`phرspffp瘉1nw@IG'FQ Hu"ND [m[tJ'];xGMƑPran7G^3bJƘ5cis d|ǫ͐XXhŁ@q~O0_<8ssMu*cQy|Xoh8xALD7RC ^б9F8PҺ"*"\S>wZR#oInԥ4[?zfثT;Pjvུ Uo5. B"` *1dZG;k Q*z vRma;Ȏdx#/5m r!t!QGwffsĎM@VWy+ [*BHܞ UE*DQT*W}sET C(D n}BFÃ`lC/>$)A3,I].=Z=Kߝs]e.n~Cj|bq U8ȋ]֏gQ`:#0sLj=&_L(¶A$= Ȭ!y v @ڎ784PHxdMkd"Zq=exٍ۷g7~ zjtuC{*unThqP%~8>T3QFFiz"[@jj5Jo5"> @i:<*S o㿟,!f*^i:@s!;K z#PpK~ݕln5Jwq|G(|lwyq);>MCNbɿ~n D`U<Y wȪi`lr`=g 0{пOdĕnMH u glixK Up?>2FHȽAul#H#<5ٔiϹCa ]WwD`@Ϲ}_@Hdyth}+x>tg7&N'jMs;%BnRď`P:BunC(JtEWmBڔnl (#ko905+R1$ȨzH|3D@v']yOA;}?g aJ`vG8 fҾ^ׯc3R] iȤ$jG(awxd/$sRGriWtnCu9Nd#Leά? V4GYuHBfh_طj Hv [:Ɣ4uluea|!ٻ=sY=SK֍{3Q&"5B8'Y'°};sc?1p}(i@ "XNwl녉K^c^RCR{GO} ۔e, `ISn5-$5H~N|ypwmg1nU9IWj~v~pNRUF[6z,*0E`QmQ Ѣas,5@ "Q;4Ι' P~B.-!HEpHhqo@+m;i=<ṷ\}f焷~ ʛGG@m,)Kj{s}4*J?!z>VP?BrqjcԤV %ycm9>>jmY\:!vRMa`ZD2n~^fߦ<}rpdGU~X>R~A`㮀[wq( =Yj\Y#S׺#[0eWd(g)eOTAՒf;̶Z?2f[#e8&48:(43  9F9ѲbA6Qu!m#sms0:D]7O 3o!{I}m,YU^j:': IDATj~E7jFlj a3 `Z}AZAbԞ)u;5^쁂m 疐 `ѯm5P a?*;pgسF3wU*0^\%KOzq|~2XgxFv<~10֥>@n@<8uha?!0K_tmNV*sD=fG SRm+R5Rq`ŪaKpFៅoXq  -cukiϡhpߦp,kVL9eu;SsJccv-H Pe&DO3J3 f М5h4 EЫ>Ι]jWͼ-ux:SmthQmx6߳nΊk֍Q3"O7J}4*cۍ?b}AE҇7nPz3Ǡ@q3O*4O)!:4), cju[l Pօbj/zZ,kھgP AQ4E~t d{'`nl Qm:G?BѶ=v]/jqxba?3^~Vfp]@HF~FE2FPs G, 0{)ؾ9?T$֍>Cm'kkP]kEzhM?0U2=;* mLX0هdѰC94(>3:"$8t ٫Q-fӰ&)H CT,mᙶ8%nY7ju5>s@7M/c 8&x)@ Rq?:@*RKgB/RCu^8HiVǂE^.m ǀuwxŋRA*vZïyT^G!`gs WsmDzb}6 ж!lSF; dϻ1z V+f .63,Q4xp`Qwp}y]d+}/#i{˹uc?${620*=ey e;.W@s͞(7z3P7&~/6L{:5qJ}jYtc/TPim:SH* $eycM 5{562+PLCmUˈ(A@aKeݳSzVx=B_׃5|l=g۪}ݣ79%d`Ơ#+" /?Te1,#@u^PXEXEh(, }:+X,)P@o:dWu_ ) ʊ,nZ3bu?%$^A}__9 C*@[28²yy}WX*5z.^?@x?xe\)|oŒ#X3ўa.B-p ƴYFTsR5b1)΃s߮Πչb0 #Ɗzп~1mÐm)]Ԥl Zb{5B_#r~Q *|\qg$wUp_W39WxRyNoHC{B[U!  N{ QmFL o`9{ Ĕl:MK_QC!eEoaJ 3`TmF8A. 0\ٶwfٜ<luH^e =wTfI9=xF~}Xp`f!q@@L$ $ۥGeR| e9ec]( ܖaQ23Hf,9fL]HxR]ΡH0k$3!Ԛ9l-9<3Ɵ |`up}&-HqGJ sj8QdzwUXz}{}v=x:vPcmYG\l!'=uvlT,"6s#@[h#=:Ŀ^H5Mp(tþ>Dx$W֪-_lǞ!'{wºQ)lְ)~Okj|8`[9 5(_+Sㅣ# UP9(uX60(@ʜ#L4w9$ 7 >8Lv "^|SB*p}X> (=؀G m3(9hLN?&\-`;SxQnV,j-S>lŬxoWBż8s_oKz=xZFPU8@=NGr\$(@e]Ì}e T-o̹5#=4g!4{[Fm6 c895 LE|m0 W3pLƾ+HU[X?n @YjNqw@Tk_Tqڹ^\^RkPC.ܡ~=yleۚ7O@i`ߊ=[= c7oP Գc{, ^AUyZ= օ֊5tZ|Ӗ.<וƚz 6*?X/l`%93_*#QF J !tM-I7;PIOn(2$hί=еDۙ=yVu?ݾcb<8,%lgup°v mv1{/ )B0rHgD\0nn;eKX/wlj fHi\i@ yĦA: HooQ ynxF<{gq )Q^o?eo>dž^Q"t2g NWee 5Wng]/(׫+D?Sz/^ kxx~xq ۄk-#\of:=({F5 d#>K,9/vRH&tKk;zO i d[(:ћ <N*\n6N(iX[S<2ryxR<ؗa>(E`9&{G:`V'g,+<²s< 8 N+<4ƿ|98 ؁g^yq"9H-]/p!@uu V =bËXcLnhLѐ{`]v&\lh컴69m?AHku$@"SY);/`e\Y܉^ixjcu0sRՇ,veh!d}C4%5-Y@['9F ׌W9r?T9,{ ̤rN3K2hNlsms:`t'WS6rO gܑ+Ԭuȩރ2?EF@bMpi>c03\$Xk@\3F {mvqozHhc0Pඉ@CY#8Zvvca )nm/Ӵᠠ΄q].cL/ |.@/|w !]~bsj a*fl8r%.KV`K@:X)kPro8F2LyS&F7hF|4lE4员F?ueCva!oDo_Wr^ p[z9Zuq0]!gu`7i3{tm8Ȉи8@>Q$c#a9]&p^'^]jH#d9ݤ4H]=7?TNRCzˣqmMZںҟ J 8u)񊴉1ȥe'!9-P-WR[9rmwYdAs0+``e %gSi;CmdL~8=t38XO-8Ϻf+ץguxr᧐147 @X^$ˬ55'x#Z]q^k34.6gÎaqd(΍~㨀4w>׶Нug(9oŲ E?SܗvXNW#柕m'ܒe[5!?u6oc"/ {.HV ߪ5*nY>IH HSY5!ma';.C]Ոk rr>4G:?6k9? k{s : órzu)TWswE胵XTY}Wj+X(+!eĵ4ʽl@Ӛwm}'Nwݦ8١uIkz1;a^w|u)GQ[H4;t6V TwjO$|r-^K9?S9~y-lvKz s&f% 2E:@ry]efU.}gY²vx#faH( e]м, `jbT8puCR]Sr6P _.cs` ?d:-9ZpqS{]oq<@Pue/5: cD`pzFx^,/ U$ ]fy.fwa.!ך #t-hkF xXCߵ 5 ڈCV42sx1ASA~*lYv! C; .+v}sCݫhl[[P(~ID: }ڝp*(lԎpUARz֐+k8:fg Ͳ0pKp>嚒9u[khT7 rbum7W,uS8 kڬ55c!u`DD>Vj #c":b4EHTm-^Cܖ*ؽ-jPo'2JW>tE63(qeYM(P*-86뫱${@2>Aưܬ590î˜zfY? aRHݹ.U zI]յp],`CcYP@l؆c͇rHݿ 7Z=¸Hu}պڭ,hߩ;:/CBG&՚h4̐mui^iRSx ǰ ȡd*cP; 塿Ü P^m>wuu9H^ :5\y|CCvݧLJ7ANnw.^wߧXnxWo5w5tW/{]1!8/I VqhDZTΥS/5]Hq .K^{vf| z:7gp 5LvstHR[7;a^zNyNuo¡^86Y[r֭ì3kqւVY*ba9ps?% s>f$0i>Rwu.M zKznj T瘻N`Ü 6d8ڰ ^js}{{yzj^UN}E75tM6wy֥,z;w:&n[E/`(gÀ=X0fsap&4d* z1\Ì{ pɆyNGr#-c'Aw9 ߽ںy?iy`]îej| VT 8O1r<aúk[3Lp]_]_.q `9';6%J W ὞>;susk&a'yibZWvy[ `8@uZ@}QU2ep3`>u.כ[Х2; _=жaښ:Rsk[GU6{j)85JƬdA I^Xg_zI0N5ӂa 3lerf|.כ[-S Y :L#̹:pl؏ḿ7 X]:2\Ub˭4\Uȍ5;kw{c_> 1` p=P.C_9^ry9H\Ex8s.6L;0ڥvw\?[h>^}\ EG!w #kю7[. r}e%b;{2<d)] 8~M}qs\/ iKg~_zZySVC}5\W i5k]x:_ H_\W,iu-e}~Ke|r^].Ku].׫zrrv\o^.`ޗCr\.r\.r\.r\.r\.r\.r\.r\.r\.r\.2$TsdKVIENDB`wiki2beamer-wiki2beamer-v0.10.0/tests/example/db-rg1024.svg000066400000000000000000000330761336367417400232250ustar00rootroot00000000000000 image/svg+xml wiki2beamer-wiki2beamer-v0.10.0/tests/example/example.txt000066400000000000000000000416511336367417400233740ustar00rootroot00000000000000<[autotemplate] title={The wiki2beamer example} [autotemplate]> == Introduction == ==== Welcome ==== Welcome to the wiki2beamer example presentation. We will do our best to document and demonstrate all features of wiki2beamer in this file. It is not meant to be a reference though, that will be the man page wiki2beamer(1). ==== Design goals ==== Wiki2beamer was written to make typesetting presentations with \LaTeX and beamer easier. \LaTeX beamer can create beautiful presentations but it's a very verbose language and most of the simple tasks like using frames or bullet lists take an awful amount of code that looks really complicated. This often scares away beginners and fellow colleagues from even starting with \LaTeX. This is where wiki2beamer steps in. It's designed to make the start easier and not remove any of the powers of the language. == Basic usage == === Commandline === ==== Commandline usage ==== Wiki2beamer is written in python and known to work on python 2.3 up to 2.6. You can use it on Windows too, if you have the python interpreter installed properly. On *nix environments you would simple use it like this: <[code][style=basic] wiki2beamer example.txt > example.tex [code]> On Windows you would have to call the python interpreter with the wiki2beamer script: <[code][style=basic] python wiki2beamer example.txt > example.tex [code]> === The big picture === ==== The big picture ==== A latex beamer document consists (like any latex document) of some introductory style definitions and the document body. In plain latex it looks like this: <[code][style=basic] \documentclass{beamer} %do some style-magic here \begin{document} %insert your presentation here (body) \end{document} [code]> wiki2beamer can produce both: only the body content of the presentation or a complete document. ==== body-only ==== If you want full control over all the fancy stuff you can do with latex, you can use wiki2beamer to generate a .tex that that you can include with @\textbackslash input\{filename.tex\}@. <[code][style=basic] \documentclass{beamer} \begin{document} \input{w2b-output.tex} \end{document} [code]> This is the default mode of operation. ==== autotemplate ==== If you want wiki2beamer to generate a complete document with header, you can use the autotemplate feature. It's a special environment in wiki2beamer syntax and must be the first element in the input file. It has a simple @key=\{value\}@ syntax. For a full reference see the man page. <[code][style=basic] <\[autotemplate\] title={The Title} author={Mr. Foo Bar} date={1970-01-01} titleframe=False \[autotemplate\]> [code]> If the autotemplate environment is used, a default titleframe is generated. If you want that disabled, you can switch it with the titleframe option. === Structure and frames === ==== Structure and frames ==== As most wiki-dialects, wiki2beamer supports the famous <[center] @==== title ====@ [center]> syntax. When these markings start at the beginning of a line, wiki2beamer expands them to open a frame. ==== Structure and frames ==== The following heading markups exist: --1em-- @== title ==@ --> opens a section --1em-- @=== title ===@ --> opens a subsection --1em-- @==== title ====@ --> opens a frame --1em-- Frames will be closed automatically when a new sectioning or frame markup appears. Frames can also be closed with an optional @[frame]>@ marking (usually only needed to write advanced LaTeX code between frames). [frame]> % now you can put your fancy LaTeX code here (outside of a frame) === Lists === ==== Lists ==== Probably one of the most used text elements in presentations are: * bullet * lists and # numbered # lists ==== Bullet Lists ==== Bullet lists can be created by prepending one or many @*@ before a line <[code][style=basic] * A simple bullet list * with two items [code]> Bullet list can also be multi-level: <[code][style=basic] * A more complex bullet list ** with a sublist ** and another sublist *** here [code]> ==== Bullet Lists (output) ==== * A simple bullet list * with two items * A more complex bullet list ** with a sublist ** and another sublist *** here ==== Numbered Lists ==== The same works for numbered lists <[code][style=basic] # first item # second item ## with two subitems ## and another ### subsubitem # third item [code]> ==== Numbered Lists (output) ==== # first item # second item ## with two subitems ## and another ### subsubitem # third item ==== Mixed Lists ==== Numbered and bullet lists can be mixed: <[code][style=basic] # first item #* with a sub-list #*# one numbered subsub-item #*# another numbered subsub-item #* and a lone bullet # second item [code]> ==== Mixed Lists (output) ==== # first item #* with a sub-list #*# one numbered subsub-item #*# another numbered subsub-item #* and a lone bullet # second item === Text markup === ==== Text markup ==== Text can be formatted with some markups. Some markups can be escaped with a \textbackslash. \begin{tabular}{|l|l|l|} \hline markup & output & escaping \\\hline \hline <[nowiki] \texttt{'''bold text'''} [nowiki]> & '''bold text''' & \\\hline <[nowiki] \texttt{''italic text''} [nowiki]> & ''italic text'' & \\\hline <[nowiki] \texttt{@teletype text@} [nowiki]> & @teletype text@ & \textbackslash@ \\\hline <[nowiki] \texttt{!alerted text!} [nowiki]> & !alerted text! & \textbackslash! \\\hline <[nowiki] \texttt{\_color\_colored text\_} [nowiki]> & _blue_blue text_ & \\\hline \end{tabular} ==== Text substitutions ==== There are some simple text replacements you can use: --2em-- \begin{tabular}{|l|l|l|} \hline markup & output & escaping \\\hline \hline <[nowiki] \texttt{-->} [nowiki]> & --> & \\\hline <[nowiki] \texttt{<--} [nowiki]> & <-- & \\\hline <[nowiki] \texttt{==>} [nowiki]> & ==> & \\\hline <[nowiki] \texttt{<==} [nowiki]> & <== & \\\hline <[nowiki] \texttt{:-)} [nowiki]> & :-) & \\\hline <[nowiki] \texttt{:-(} [nowiki]> & :-( & \\\hline \end{tabular} ==== Footnotes ==== You can also use footnotes on your slides(((This is such a footnote.))). --2em-- <[code][style=basic] ...your slides(((This is such a footnote.))). [code]> === Environments === ==== Environments ==== One of the basic building blocks of LaTeX syntax are environments. In plain LaTeX you open, give options and close them with the following notation: <[code][style=basic] \begin{someenv}\[option=foo\] ... \end{someenv} [code]> wiki2beamer provides a shorter syntax that looks like this: <[code][style=basic] <\[someenv\]\[option=foo\] ... \[someenv\]> [code]> ==== Environment example ==== Some of the most used environments probably is: --1em-- <[nowiki] \texttt{ <[center] some centered text [center]> } [nowiki]> --1em-- output: --1em-- <[center] some centered text [center]> ==== LaTeX vs. wiki2beamer environments ==== The default case is that wiki2beamer doesn't care about the name of the environment and just passes it on to LaTeX. For these default environments wiki2beamer doesn't track open and close tags. --1em-- There are a few exceptions where wiki2beamer knows and parses the environments: * @[nowiki]@ (escaping from wiki2beamer) * @[code]@ (code listings) * @[autotemplate]@ (autotemplate header) === Escaping === ==== Escaping from wiki2beamer ==== Everything wiki2beamer doesn't know, it doesn't touch. But what if it knows something that you want it to leave untouched? For some of the most common notations we already have escaping with a \textbackslash. If there isn't an escape, you can use the generic @[nowiki]@ environment. <[code][style=basic] <\[nowiki\] '''text that isn't bold''' \[nowiki\]> [code]> Notice that the [nowiki] tags start and end at the beginning of a line. ==== Escaping (output) ==== <[nowiki] '''text that isn't bold''' [nowiki]> === Code === ==== Code ==== One of the great strengths of LaTeX is the ability to typeset and highlight sourcecode. Doing that manually is a very tedious task in visual presentation tools. In LaTeX code listings are realized with the @listings@ package that provides a new @\textbackslash lstlisting@ environment. --1em-- In wiki2beamer we have a convenient @[code]@ environment. ==== Code ==== The basic usage is: <[code][style=basic] <\[code\] ... your listing here ... \[code\]> [code]> The @lstlisting@ environment in the background provides options, e.g. you can configure the highlighting: <[code][style=basic] <\[code\]\[style=basic,language=C,title=code example\] if ( a == b ) { return 0; } \[code\]> [code]> Inside @[code]@ environments, wiki2beamer processing is mostly disabled. The only characters with a special meaning are @[@ and @]@ which have to be escaped with a \textbackslash. ==== Code (output) ==== <[code][style=basic,language=C,title=code example] if ( a == b ) { return 0; } [code]> === Layout === ==== Vertical Space ==== You can insert vertical space between two paragraphs with the <[center] <[nowiki] \texttt{--length--} [nowiki]> [center]> notation where ''length'' can be a valid latex length expression (e.g. @1cm@, @1pt@, @1em@ or even @0.2\textbackslash textwidth@). This space will be squeezed by latex when the page is full. To really force LaTeX to insert a space, use the alternative <[center] <[nowiki] \texttt{--*length--} [nowiki]> [center]> notation. ==== Columns ==== Latex beamer can divide the current frame into columns. In wiki2beamer this can be done with the following notation: <[code][style=basic] <\[columns\] \[\[\[width\]\]\] this is the first column \[\[\[width\]\]\] this is the second column \[columns\]> [code]> where ''width'' is a valid latex length expression. ==== Columns example ==== <[code][style=basic] \centering Text above the columns <\[columns\] \[\[\[0.4\textwidth\]\]\] this is: * the first column * with a list \[\[\[0.4\textwidth\]\]\] this is: * the second column * with another list \[columns\]> \centering Text below the columns [code]> ==== Columns example (output) ==== \centering Text above the columns. <[columns] [[[0.4\textwidth]]] this is: * the first column * with a list [[[0.4\textwidth]]] this is: * the second column * with another list [columns]> \centering Text below the columns. === Headers and Footers === ==== Headers and Footers ==== Sometimes you want to repeat some latex code at the header and footer of your presentation frames (e.g. to show logos or names). To make this easier you can fill two special storage field @\@FRAMEHEADER=@ and @\@FRAMEFOOTER=@ with some latex code. wiki2beamer will append or prepend this right after the frame opening or frame closing in the resulting latex code. @FRAMEHEADER=\begin{flushright}This is a generated FRAMEHEADER\end{flushright} @FRAMEFOOTER=\vfill \begin{flushright}This is a generated FRAMEFOOTER\end{flushright} ==== Frame with generated header/footer ==== This is the text of the frame %deleting header and footer @FRAMEHEADER= @FRAMEFOOTER= == Graphics == ==== Including graphics ==== LaTeX can include graphics with the @\textbackslash includegraphics@ command. To ease the use, wiki2beamer provides a simple syntax. simple: <[code][style=basic] <<>> [code]> advanced: <[code][style=basic] <<>> [code]> For a documentation of available options, take a look at the graphix package documentation. ==== Graphics example ==== <[code][style=basic] <<>> [code]> ==== Graphics example (output) ==== <<>> ==== Figure Example ==== Alternatively you could use the @figure@ environment which would allow you to add a @caption@ too: <[code][style=basic] <\[figure\] <<>> \caption{Database Scheme} <\[figure\] [code]> ==== Figure Example (output) ==== <[figure] <<>> \caption{Database Scheme} [figure]> == Animation == === How it works === ==== Animation ==== LaTeX beamer provides facilities for generating simple animated slides. Wiki2beamer provides some shortcuts on top of the beamer class. --1em-- LaTeX beamer has the notion of animation layers: Whenever a frame contains an animation, it will consist of consecutive numbered animation layers. ==== Layer specs ==== Whenever you animate something, you can specify that it should appear or disappear on a certain animation layer. The notations can look like this: --1em-- \begin{tabular}{ll} @@ & a single layer ''n'' \\ @@ & two layers ''n'' and ''m'' \\ @@ & all layers between ''n'' and ''m'' \\ @@ & all layers between ''n'' and ''m'' plus layer ''k'' \\ \end{tabular} === Animating lists === ==== Animating lists ==== To animate a wiki2beamer list, just add a spec after the @*@ or @\#@ characters: <[code][style=basic] * always there (layer 1-4) *<2> only on layer 2 *<2-3> on layer 2-3 *<2,4> on layer 2 and 4 [code]> ==== Animating lists (output) ==== * always there (layer 1-4) *<2> only on layer 2 *<2-3> on layer 2-3 *<2,4> on layer 2 and 4 === Animating anything === ==== Animating anything ==== LaTeX knows the two commands @\textbackslash uncover@ and @\textbackslash only@. --1em-- @uncover@ shows and element on the given layers while otherwise just displaying an invisible placeholder box. In wiki2beamer this is denoted as: <[center] <[nowiki] \texttt{+$<$n-m$>$\{content\}} [nowiki]> [center]> here's an example: <[code][style=basic] above +<2>{uncovered} below [code]> ==== @uncover@ example (output) ==== above +<2>{uncovered} below ==== @only@ example ==== @only@ makes an element appear without having a placeholder box before. In wiki2beamer this is denoted as: <[center] <[nowiki] \texttt{-$<$n-m$>$\{content\}} [nowiki]> [center]> here's the example: <[code][style=basic] above -<2>{only on 2} below [code]> ==== @only@ example (output) ==== above -<2>{only on 2} below ==== animating graphics ==== Animating graphics is nothing special. Here is the example: <[code][style=basic] +<1>{ <<>> } +<2>{ <<>> } [code]> ==== animating graphics (output) ==== <[center] +<1>{ <<>> } +<2>{ <<>> } [center]> === Animating code === ==== Animating code ==== When talking about code listings, you often want things to appear or disappear, step by step. In wiki2beamer, you can do that with a simple notation(((Try to do it without wiki2beamer, you'll feel the pain ;) ))). <[code][style=basic] <\[code\] some normal code above \[<2-4>some code only on layer 2-4\] \[\[<2>some code on layer 2\]\[<4>replaced on layer 4\]\] some normal code below \[code\]> [code]> ==== Animating code (output) ==== <[code][style=basic] some normal code above [<2-4>some code only on layer 2-4] [[<2>some code on layer 2][<4>replaced on layer 4]] some normal code below [code]> == Advanced usage == ==== Advanced usage ==== <[center] Tricks for the adept. [center]> === Frame options === ==== Frame options ==== LaTeX supports giving arguments to opening frames. It looks like: <[code][style=basic] \begin{frame}\[someoption\] [code]> Such options can be added in wiki2beamer by appending them to the frame opening: <[code][style=basic] ==== frametitle ====\[someoption] [code]> One example are fragile frames. ==== Fragile frames ==== For some features to work (eg. verbatim content), latex beamer needs a frame marked as fragile. In plain \LaTeX this would look like: <[code][style=basic] \begin{frame}\[fragile\] ... \end{frame} [code]> This can be realized with wiki2beamer by simply appending a @[fragile]@ tag to the frame header: <[code][style=basic] ==== a fragile frame ====\[fragile\] ... [code]> ==== a fragile frame ====[fragile] This is such a fragile frame with some \verb-V#rb/\t|m t === selective editing === ==== Selective editing ==== When LaTeX documents become large and contain many inputs (graphics), the latex compiler tends to be slow -- to slow for the edit-compile cycle. --1em-- To speed things up a bit, wiki2beamer allows you to select single frames for editing. <[center] <[nowiki] \texttt{!==== frame title ====} [nowiki]> [center]> --1em-- When there is at least one selected frame, all frames that are not selected will be omitted from the LaTeX output. === Managing input === ==== Managing input ==== If you want to work with your colleagues on a single presentation you can (and should) of course use your favourite version control system, but you'd still have to resolve conflicts. To reduce the number of conflicts, wiki2beamer can build presentations from multiple input files. ==== Multiple inputs by commandline ==== The first way is to use the commandline to concatenate multiple input files: --1em-- <[code][style=basic] wiki2beamer header.txt dave.txt debby.txt > talk.tex [code]> >>>includefile.txt<<< wiki2beamer-wiki2beamer-v0.10.0/tests/example/includefile.txt000066400000000000000000000002731336367417400242170ustar00rootroot00000000000000==== Multiple inputs by includes ==== The second way is to include additional input files with the --1em-- <[center] <[nowiki] \texttt{>>>includefile.txt<<<} [nowiki]> [center]> syntax. wiki2beamer-wiki2beamer-v0.10.0/tests/test_wiki2beamer.py000077500000000000000000000477721336367417400233740ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # This file is part of wiki2beamer. # wiki2beamer is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # wiki2beamer 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 wiki2beamer. If not, see . import sys import unittest import re import random sys.path.append('../code') from wiki2beamer import * class TestBasics(unittest.TestCase): def test_join_lines_standard(self): lines = ['', 'foo%', 'bar'] joined = joinLines(lines) self.assertEqual(len(joined), 2) self.assertEqual(joined[0], lines[0]) self.assertEqual(joined[1], 'foobar') def test_join_lines_shortlines(self): lines = ['%', '%'] joined = joinLines(lines) self.assertEqual(len(joined), 0) def test_escape_resub(self): string = r"foo \1 bar" expected = r"foo \\1 bar" out = escape_resub(string) self.assertEqual(expected,out) def test_escape_resub2(self): instr = "abc" substr = r'a\1' p = re.compile(".*(b).*") out = p.sub(escape_resub(substr), instr) self.assertEqual(out, substr) class TestTransform(unittest.TestCase): def setUp(self): self.state = w2bstate() return def tearDown(self): self.state = None return def test_substitutions(self): self.assertEqual(transform('foo --> bar', self.state), r'foo $\rightarrow$ bar') self.assertEqual(transform('foo <-- bar', self.state), r'foo $\leftarrow$ bar') def test_section(self): self.assertEqual(transform('== foo ==', self.state), '\n\\section{foo}\n\n') def test_subsection(self): self.assertEqual(transform('=== foo ===', self.state), '\n\\subsection{foo}\n\n') def test_footnote(self): self.assertEqual(transform('(((foo)))', self.state), '\\footnote{foo}') def test_columns(self): self.assertEqual(transform('[[[6cm]]]', self.state), '\\column{6cm}') def test_typewriter(self): input_expected = [('@TEST@', '\\texttt{TEST}'), ('@TEST', '@TEST'), ('TEST@', 'TEST@'), ('@TEST@TEST@', '\\texttt{TEST}TEST@'), ('@TEST@ test @TEST@', '\\texttt{TEST} test \\texttt{TEST}'), ('\@TEST\@', '@TEST@'), ('\\TEST', '\\TEST'), ('@TEST\@TEST@', '\\texttt{TEST@TEST}'), ('\@TEST @TEST@ TEST\@', '@TEST \\texttt{TEST} TEST@')] for input_, expected in input_expected: self.assertEqual(transform(input_, self.state), expected) def test_alert(self): input_expected = [('!TEST!', '\\alert{TEST}'), ('!TEST', '!TEST'), ('TEST!', 'TEST!'), ('!TEST!TEST!', '\\alert{TEST}TEST!'), ('!TEST! test !TEST!', '\\alert{TEST} test \\alert{TEST}'), ('\!TEST\!', '!TEST!'), ('\\TEST', '\\TEST'), ('!TEST\!TEST!', '\\alert{TEST!TEST}'), ('\!TEST !TEST! TEST\!', '!TEST \\alert{TEST} TEST!')] for input_, expected in input_expected: self.assertEqual(transform(input_, self.state), expected) def test_vspace(self): self.assertEqual(transform('--3em--', self.state), '\n\\vspace{3em}\n') self.assertEqual(transform('--3em--foo', self.state), '--3em--foo') self.assertEqual(transform(' --3em-- ', self.state), '\n\\vspace{3em}\n') def test_vspacestar(self): self.assertEqual(transform('--*3em--', self.state), '\n\\vspace*{3em}\n') self.assertEqual(transform('--*3em--foo', self.state), '--*3em--foo') self.assertEqual(transform(' --*3em-- ', self.state), '\n\\vspace*{3em}\n') def test_uncover(self): self.assertEqual(transform('+<2-> {foo}', self.state), '\\uncover<2->{foo}') self.assertEqual(transform(' +<2->{\nfoo', self.state), ' \\uncover<2->{\nfoo') def test_only(self): self.assertEqual(transform('-<2-> {foo}', self.state), '\only<2->{foo}') self.assertEqual(transform(' -<2->{\nfoo', self.state), ' \only<2->{\nfoo') def test_uncover_intext(self): self.assertEqual(transform('foo +<2->{moo} bar', self.state), 'foo \\uncover<2->{moo} bar') self.assertEqual(transform(\ 'foo +<2-3> {\\begin{enumerate} \\end{enumerate}}', self.state),\ 'foo \\uncover<2-3>{\\begin{enumerate} \\end{enumerate}}') def test_color(self): self.assertEqual(transform('_blue_foo_', self.state), '\\textcolor{blue}{foo}') # test for bug 3294518 self.assertEqual(transform(r'\frac{V_1}{R_1}=\frac{V_2}{R_2}', self.state), r'\frac{V_1}{R_1}=\frac{V_2}{R_2}') # test for bug 3365134 # colors interfere with graphics self.assertEqual(transform(r'<<>>', self.state),'\includegraphics{file/foo_bar/baz_dazz_baz}') self.assertEqual(transform(r'_blue_make me blue_ <<>>', self.state),r'\textcolor{blue}{make me blue} \includegraphics{file/foo_bar_/baz_fasel.svg}') class TestExpandCode(unittest.TestCase): def test_search_escape_sequences_basic(self): code = "System435.out.println(\"foo\");123System.ou12t.println234(\"foo\");System.23out.23456println(\"foo\");S237yst28em.out.pr18intln(\"foo\");" (open, close) = expand_code_search_escape_sequences(code) self.assertEqual(code.find(open), -1) self.assertEqual(code.find(close), -1) def test_search_escape_sequences_short(self): code = "12" (open, close) = expand_code_search_escape_sequences(code) self.assertEqual(code.find(open), -1) self.assertEqual(code.find(close), -1) def test_search_escape_sequences_veryshort(self): code = "" (open, close) = expand_code_search_escape_sequences(code) self.assertEqual(code.find(open), -1) self.assertEqual(code.find(close), -1) def test_search_escape_sequences_large(self): code = [] for i in range(0, 10000): code.append(chr(random.randint(48,57))) code = ''.join(code) (open, close) = expand_code_search_escape_sequences(code) self.assertEqual(code.find(open), -1) self.assertEqual(code.find(close), -1) def test_expand_code_tokenize_anims(self): items = ['1', '2', '3', '-', ',', '[', ']', '<', '>', 'a', 'b', 'c', 'd', 'e', '}', '{'] code = [] for i in range(0, 100): code.extend(items) random.shuffle(items) out = expand_code_tokenize_anims(''.join(code)) self.assertTrue(len(out[0])>0) self.assertTrue(len(out[1])>0) for item in out[0]: #anims self.assertTrue(item.startswith('[') and item.endswith(']')) for item in out[1]: #non-anims self.assertTrue(not (item.startswith('[') and item.endswith(']'))) def test_expand_code_tokenize_anims_empty(self): out = expand_code_tokenize_anims('') self.assertEqual(out[0], []) self.assertEqual(out[1], ['']) class TestConvert2Beamer(unittest.TestCase): def setUp(self): return def tearDown(self): return def test_nowiki(self): lines = ['<[nowiki ]%',\ '==== foo ====',\ '[ nowiki]>moo'] expected = ['\n', '%',\ '==== foo ====',\ 'moo',\ ''] out = convert2beamer(lines) self.assertEqual(out, expected) def test_not_nowiki(self): lines = [' <[nowiki]', '== foo =='] expected = ['\n', ' <[nowiki]', '\n\section{foo}\n\n', ''] out = convert2beamer(lines) self.assertEqual(out, expected) def test_frame_open_close(self): lines = ['==== foo ===='] expected = ['\n', '\\begin{frame}\n \\frametitle{foo}\n \n', '', ' \n\\end{frame}\n'] out = convert2beamer(lines) self.assertEqual(out, expected) def test_frame_open_close_again(self): lines = ['==== foo ====', '==== bar ===='] expected = ['\n', '\\begin{frame}\n \\frametitle{foo}\n \n', ' \n\\end{frame}\n\\begin{frame}\n \\frametitle{bar}\n \n', '', ' \n\\end{frame}\n'] out = convert2beamer(lines) self.assertEqual(out, expected) def test_frame_close_detect(self): lines = ['==== foo ====', '[ frame ]>', '==== bar ===='] expected = ['\n', '\\begin{frame}\n \\frametitle{foo}\n \n', '\\end{ frame }', '\\begin{frame}\n \\frametitle{bar}\n \n', '', ' \n\\end{frame}\n'] out = convert2beamer(lines) self.assertEqual(out, expected) def test_itemize(self): lines = ['* foo', '* bar', '** foobar'] expected = ['\n', '\\begin{itemize}\n \\item foo', ' \\item bar', '\\begin{itemize}\n \\item foobar', '\\end{itemize}\n\\end{itemize}\n'] out = convert2beamer(lines) self.assertEqual(out, expected) def test_itemize_nospace(self): lines = ['*foo', '*bar', '**foobar'] expected = ['\n', '\\begin{itemize}\n \\item foo', ' \\item bar', '\\begin{itemize}\n \\item foobar', '\\end{itemize}\n\\end{itemize}\n'] out = convert2beamer(lines) self.assertEqual(out, expected) def test_itemize_marker(self): lines = ['*[A]foo', '*[B] bar', '**[C] foobar'] expected = ['\n', '\\begin{itemize}\n \\item[A] foo', ' \\item[B] bar', '\\begin{itemize}\n \\item[C] foobar', '\\end{itemize}\n\\end{itemize}\n'] out = convert2beamer(lines) self.assertEqual(out, expected) def test_enumerate(self): lines = ['# one', '# two', '## onetwo'] expected = ['\n', '\\begin{enumerate}\n \\item one', ' \\item two', '\\begin{enumerate}\n \\item onetwo', '\\end{enumerate}\n\\end{enumerate}\n'] out = convert2beamer(lines) self.assertEqual(out,expected) def test_enumerate_nospace(self): lines = ['#one', '#two', '##onetwo'] expected = ['\n', '\\begin{enumerate}\n \\item one', ' \\item two', '\\begin{enumerate}\n \\item onetwo', '\\end{enumerate}\n\\end{enumerate}\n'] out = convert2beamer(lines) self.assertEqual(out,expected) def test_enumerate_marker(self): lines = ['#[A]foo', '#[B] bar', '##[C] foobar'] expected = ['\n', '\\begin{enumerate}\n \\item[A] foo', ' \\item[B] bar', '\\begin{enumerate}\n \\item[C] foobar', '\\end{enumerate}\n\\end{enumerate}\n'] out = convert2beamer(lines) self.assertEqual(out, expected) def test_itemenum(self): lines = ['# one', '#* onefoo', '#* onebar', '## oneone', '#*# onefooone'] expected = ['\n', '\\begin{enumerate}\n \\item one', '\\begin{itemize}\n \\item onefoo', ' \\item onebar', '\\end{itemize}\n\\begin{enumerate}\n \\item oneone', '\\end{enumerate}\n\\begin{itemize}\n\\begin{enumerate}\n \\item onefooone', '\\end{enumerate}\n\\end{itemize}\n\\end{enumerate}\n'] out = convert2beamer(lines) self.assertEqual(out, expected) def test_header(self): lines = ['==== foo ====', '@FRAMEHEADER=bar', '==== bar ===='] expected = ['\n', '\\begin{frame}\n \\frametitle{foo}\n \n', '', ' \n\\end{frame}\n\\begin{frame}\n \\frametitle{bar}\n bar \n', '', ' \n\\end{frame}\n'] out = convert2beamer(lines) self.assertEqual(out,expected) def test_footer(self): lines = ['==== foo ====', '@FRAMEFOOTER=bar', '==== bar ===='] expected = ['\n', '\\begin{frame}\n \\frametitle{foo}\n \n', '', ' \n\\end{frame}\n\\begin{frame}\n \\frametitle{bar}\n \n', '', ' bar \n\\end{frame}\n'] out = convert2beamer(lines) self.assertEqual(out,expected) def test_subexp_footer(self): lines = ['==== foo ====', '@FRAMEFOOTER=\\huge bar 3', '==== bar ===='] expected = ['\n', '\\begin{frame}\n \\frametitle{foo}\n \n', '', ' \n\\end{frame}\n\\begin{frame}\n \\frametitle{bar}\n \n', '', ' \\huge bar 3 \n\\end{frame}\n'] out = convert2beamer(lines) self.assertEqual(out,expected) def test_section_footer(self): lines = ['==== foo ====', '@FRAMEFOOTER=bar', '== foosec ==', '==== bar ===='] expected = ['\n', '\\begin{frame}\n \\frametitle{foo}\n \n', '', ' \n\\end{frame}\n\n\\section{foosec}\n\n', '\\begin{frame}\n \\frametitle{bar}\n \n', '', ' bar \n\\end{frame}\n'] out = convert2beamer(lines) self.assertEqual(out,expected) def test_itemizeclose_column(self): lines = ['* foo', '[[[6cm]]]'] expected = ['\n', '\\begin{itemize}\n \\item foo', '\\end{itemize}\n\\column{6cm}', ''] out = convert2beamer(lines) self.assertEqual(out,expected) def test_fragile(self): lines = ['==== foo ====[fragile]', 'foo'] expected = ['\n', '\\begin{frame}[fragile]\n \\frametitle{foo}\n \n', 'foo', '', ' \n\\end{frame}\n'] out = convert2beamer(lines) self.assertEqual(out, expected) def test_code_inside_code(self): lines = ['<[code]', '\\[code\\]', '[code]>'] out = convert2beamer(lines) self.assertTrue('code' in '\n'.join(out)) def test_indexing_inside_code(self): lines = ['<[code]', 'i\\[12345\\]', '[code]>'] out = convert2beamer(lines) self.assertTrue('12345' in '\n'.join(out)) def test_a_list_inside_code(self): lines = ['<[code]', '\\[11111 10000 9000 code 70000\\]', '[code]>'] out = convert2beamer(lines) self.assertTrue('11111' in '\n'.join(out)) def test_utf8_in_code(self): lines =['<[code]', 'ä', '[code]>'] # this should not raise an exception out = convert2beamer(lines) def test_use_code_in_itemenums(self): lines = ["* L1", "** L2.1", "<[code]", "Example", "[code]>", "** L2.2", ] expected = ['\\defverbatim[colored]\\akfchdafjhpleppkabpmbbhnjohbodkj{\n\\begin{lstlisting}Example\\end{lstlisting}\n}\n', '\\begin{itemize}\n \\item L1', '\\begin{itemize}\n \\item L2.1', '\n\\akfchdafjhpleppkabpmbbhnjohbodkj\n', ' \\item L2.2', '\\end{itemize}\n\\end{itemize}\n'] received = convert2beamer(lines) self.assertTrue(expected, received) class TestFileInclusion(unittest.TestCase): def setUp(self): files = {'test_file': ['test file content'], 'test_file2':['content from test_file2', '>>>test_file<<<'], 'test_file3':['content from test_file3', '<[nowiki]', '>>>test_file<<<', '[nowiki]>'], 'test_file_loop':['test_file_loop content', '>>>test_file_loop<<<'], 'test_file_code':['<[code]', '>>>test_file<<<', '[code]>'], 'test_file_code_nowiki':['<[code]', '<[nowiki]', '>>>test_file<<<', '[nowiki]>', '[code]>'], 'test_file_include_after_code':['<[code]','[code]>','>>>test_file<<<'] } for file_, lines in list(files.items()): add_lines_to_cache(file_, lines) return def tearDown(self): clear_file_cache() return def test_include_file_works(self): expected = 'test_file' line = ">>>test_file<<<" out = include_file(line) self.assertEqual(expected, out) def test_include_file_recursive_works(self): expected = ['content from test_file2', 'test file content'] out = include_file_recursive('test_file2') self.assertEqual(expected, out) def test_include_file_recursive_honors_nowiki(self): expected = ['content from test_file3', '<[nowiki]', '>>>test_file<<<', '[nowiki]>'] out = include_file_recursive('test_file3') self.assertEqual(expected, out) def test_include_file_recursive_detects_loop(self): expected = ["test_file_loop content"] self.assertRaises(Exception, include_file_recursive, 'test_file_loop') def test_include_file_disabled_inside_code(self): expected = ['\\defverbatim[colored]\\mfkjiamnpineejahopjoapckhioohfpa{\n\\begin{lstlisting}>>>test_file<<<\\end{lstlisting}\n}\n', '\n\\mfkjiamnpineejahopjoapckhioohfpa\n', ''] out = include_file_recursive('test_file_code') out = convert2beamer(out) self.assertEqual(out,expected) def test_include_file_inside_code_inside_nowiki(self): expected = ['\\defverbatim[colored]\\nebnimnjipaalcaeojiaajjiompiecho{\n\\begin{lstlisting}\\end{lstlisting}\n}\n', '', '>>>test_file<<<', '\n\\nebnimnjipaalcaeojiaajjiompiecho\n', ''] out = include_file_recursive('test_file_code_nowiki') out = convert2beamer(out) self.assertEqual(out,expected) def test_include_file_after_code(self): expected = ['\\defverbatim[colored]\\nebnimnjipaalcaeojiaajjiompiecho{\n\\begin{lstlisting}\\end{lstlisting}\n}\n', '\n\\nebnimnjipaalcaeojiaajjiompiecho\n', 'test file content', ''] out = include_file_recursive('test_file_include_after_code') out = convert2beamer(out) self.assertEqual(out, expected) class TestMunge(unittest.TestCase): def test_basic_munge(self): in_ = ['* one\\', ' two', '* three', '* four'] expected = ['* one two', '* three', '* four'] out = munge_input_lines(in_) self.assertEqual(out, expected) def test_multi_munge(self): in_ = ['* one\\', ' two\\', ' three', '* four'] expected = ['* one two three', '* four'] out = munge_input_lines(in_) self.assertEqual(out, expected) def test_correct_munge_escape(self): in_ = ['* one\\\\', ' two'] out = munge_input_lines(in_) self.assertEqual(out, in_) class TestSelectedFramesMode(unittest.TestCase): def setUp(self): return def tearDown(self): return def test_selected_frames_simple(self): lines = ['!==== foo ====', 'mooo'] expected = ['!==== foo ====', 'mooo'] out = filter_selected_lines(lines) self.assertEqual(out,expected) def test_unselected_frames_simple(self): lines = ['==== foo ====', 'moo'] expected = [] out = filter_selected_lines(lines) self.assertEqual(out,expected) def test_selected_frames_mixed(self): lines = ['==== unselected ====', 'foo', '', '!==== selected ====', 'moo', '==== unselected2 ====', 'moo', '!==== selected2 ====', 'moo'] expected = ['!==== selected ====', 'moo', '!==== selected2 ====', 'moo'] out = filter_selected_lines(lines) self.assertEqual(out,expected) def test_selected_frames_autotemplate(self): lines = ['<[autotemplate]', '[autotemplate]>', '!==== selected ====', 'foo', '', '==== unselected ===='] expected = ['<[autotemplate]', '[autotemplate]>', '!==== selected ====', 'foo', ''] out = filter_selected_lines(lines) self.assertEqual(out,expected) if __name__=="__main__": unittest.main() wiki2beamer-wiki2beamer-v0.10.0/web/000077500000000000000000000000001336367417400171515ustar00rootroot00000000000000wiki2beamer-wiki2beamer-v0.10.0/web/Makefile000066400000000000000000000010071336367417400206070ustar00rootroot00000000000000.PHONY: publish example man USER=cleeus PROJECT=wiki2beamer DSTPATH=/home/groups/w/wi/wiki2beamer/htdocs/ EXAMPLEDIR=../tests/example/ MANDIR=../doc/man/ COMMANDS =put index.html $(DSTPATH) \n COMMANDS+=put $(EXAMPLEDIR)/example.pdf $(DSTPATH)/wiki2beamer-example.pdf \n COMMANDS+=put $(MANDIR)/wiki2beamer.html $(DSTPATH)/wiki2beamer.html \n COMMANDS+=bye publish: example man echo -e "$(COMMANDS)" | sftp -b - $(USER),$(PROJECT)@web.sourceforge.net example: $(MAKE) -C $(EXAMPLEDIR) man: $(MAKE) -C $(MANDIR) wiki2beamer-wiki2beamer-v0.10.0/web/index.html000066400000000000000000000055461336367417400211600ustar00rootroot00000000000000 wiki2beamer home

wiki2beamer

collaborative slide editing made easy

wiki2beamer converts a simple wiki-like syntax to complex LaTeX beamer code. It's written in python and should run on windows and all *nix platforms. Why collaborative? Because you can use it with version control systems. Afraid to loose some LaTeX powers? Don't worry: you can always fall back to plain LaTeX as wiki2beamer is just a preprocessor.

wiki2beamer: Try it with your colleagues! :)

Syntax

This is how it looks like:

wiki2beamer code input LaTeX code output
==== A simple frame ====

* with a funky
* bullet list
*# and two
*# numbered sub-items
\begin{frame}
 \frametitle{A simple frame}

  \begin{itemize}
    \item with a funky
    \item bullet list
      \begin{enumerate}
        \item and two
    \item numbered sub-items
      \end{enumerate}
  \end{itemize}

\end{frame}

Which do you like more? And there is even more cool stuff inside: animations, code listings, text formatting, ... (see the example pdf).

Links

Contribute

If you want to improve wiki2beamer, don't be afraid. It's not that complicated and we happily accept pull-requests. Just make your changes, and submit a pull-request on GitHub. If you want to make things go faster, you can also document your changes in the man-page sources (asciidoc) and write some unittests so we don't have to do that for you.

Distributions

wiki2beamer has native packages in the following distributions:

Dependencies/Compatibility

wiki2beamer only requires a working python interpreter. It's supposed to run on CPython 2.3 up to 3.x. If it doesn't, it's a bug that should be filed in the bugtracker.