zim-0.72.0/0000755000175000017500000000000013532016620012245 5ustar jaapjaap00000000000000zim-0.72.0/contrib/0000755000175000017500000000000013532016620013705 5ustar jaapjaap00000000000000zim-0.72.0/contrib/zim2trac.py0000644000175000017500000001203313532015264016014 0ustar jaapjaap00000000000000 # Copyright 2009 Pablo Angulo '''Script to export zim wiki pages to trac / mediawiki To use it, call python trac2zim.py notebook output_folder prefix where prefix is a string you put before each wiki page name. It will fill output_folder with plain text files ready to be loaded with trac-admin: trac-admin /path/to/project wiki load output_folder zim links like [[:Software:note taking:zim|zim]] are flattened to wiki entries like [Software_note_taking_zim zim]. ''' import re import sys import os #buscaCabeceras=re.compile('(={1:5})([^=]*)(={1:5})') def flatten(linkName): '''Changes a zim link, possibly with categories, to a trac link it also removes accents and other spanish special characters ''' #remove final ':' character and name = linkName[:-1] if linkName[-1] == ':' else linkName return removeSpecialChars(name.replace(':', '_').replace(' ', '_')) def removeSpecialChars(s): '''certain trac installation reported problems with special chars other trac systems loaded all files without problem the problem is only for file names and wiki pages names, not for content ''' return s.replace('á', 'a').replace('é', 'e').replace('í', 'i').replace('ó', 'o').replace('ú', 'u').replace('ñ', 'n').replace('Á', 'A').replace('É', 'E').replace('Í', 'I').replace('Ó', 'O').replace('Ú', 'U').replace('Ñ', 'ñ') cabecera = re.compile("(={1,6})([^=/]+?)(={1,6})") inlineVerbatim = re.compile("''([^']+?)''") #~ multilineVerbatim=re.compile("\n[\t](.+?)\n") negrita = re.compile('\*\*([^*]+?)\*\*') italic = re.compile('//([^/\n\]]+?)//') bracketedURL = re.compile('\[\[(http://[^|]+)\|([^|]+?)\]\]') #TODO: separar links relativos y absolutos simpleRelLink = re.compile('\[\[([^:][^|]+?)\]\]') namedRelLink = re.compile('\[\[([^:][^|]+?)\|([^|]+?)\]\]') simpleAbsLink = re.compile('\[\[:([^|]+?)\]\]') namedAbsLink = re.compile('\[\[:([^|]+?)\|([^|]+?)\]\]') images = re.compile('([^{]){{/(.+?)\}\}') def translate(nota, prefix1, prefix2): '''Takes a note in zim format and returns a note in trac format ''' #duplicate all line breaks nota = nota.replace('\n', '\n\n') # Headings mm = cabecera.search(nota) lista = [] lastIndex = 0 while mm: lista.append(nota[lastIndex:mm.start()]) gg = mm.groups() iguales = len(gg[0]) lista.append("=" * (7 - iguales) + gg[1] + "=" * (7 - iguales)) lastIndex = mm.end() mm = cabecera.search(nota, lastIndex) lista.append(nota[lastIndex:]) nota = ''.join(lista) #inlineVerbatim nota = inlineVerbatim.sub("{{{\\1}}}", nota) #multiline verbatim #TODO #bold nota = negrita.sub("'''\\1'''", nota) #italic nota = italic.sub("''\\1''", nota) #bracketedURL nota = bracketedURL.sub("[\\1 \\2]", nota) #~ #simple links #~ nota=simpleLink.sub("[wiki:\\1]",nota) #~ #named links #~ nota=namedLink.sub("[wiki:\\1 \\2]",nota) #simple relative links mm = simpleRelLink.search(nota) lista = [] lastIndex = 0 while mm: lista.append(nota[lastIndex:mm.start()]) gg0 = mm.groups()[0] lista.append("[wiki:" + prefix1 + prefix2 + flatten(gg0) + " " + gg0 + "]") lastIndex = mm.end() mm = simpleRelLink.search(nota, lastIndex) lista.append(nota[lastIndex:]) nota = ''.join(lista) mm = simpleAbsLink.search(nota) lista = [] lastIndex = 0 while mm: lista.append(nota[lastIndex:mm.start()]) gg0 = mm.groups()[0] lista.append("[wiki:" + prefix1 + flatten(gg0) + " " + gg0 + "]") lastIndex = mm.end() mm = simpleAbsLink.search(nota, lastIndex) lista.append(nota[lastIndex:]) nota = ''.join(lista) #named relativelinks mm = namedRelLink.search(nota) lista = [] lastIndex = 0 while mm: lista.append(nota[lastIndex:mm.start()]) gg = mm.groups() lista.append("[wiki:" + prefix1 + prefix2 + flatten(gg[0]) + " " + gg[1] + "]") lastIndex = mm.end() mm = namedRelLink.search(nota, lastIndex) lista.append(nota[lastIndex:]) nota = ''.join(lista) #named absolute links mm = namedAbsLink.search(nota) lista = [] lastIndex = 0 while mm: lista.append(nota[lastIndex:mm.start()]) gg = mm.groups() lista.append("[wiki:" + prefix1 + flatten(gg[0]) + " " + gg[1] + "]") lastIndex = mm.end() mm = namedAbsLink.search(nota, lastIndex) lista.append(nota[lastIndex:]) nota = ''.join(lista) #lists nota = nota.replace('\n* ', '\n * ') #images nota = images.sub("\\1[[Image(\\2)]]", nota) return nota def processPath(pathin, pathout, prefix1, prefix2=''): for archivo in os.listdir(pathin): fullPath = os.path.join(pathin, archivo) if archivo[-3:] == 'txt': fichero = open(fullPath, mode='r') nota = fichero.read() fichero.close() nota_out = translate(nota, prefix1, prefix2) #~ nameout= prefix+"_"+archivo[:-4] if prefix else archivo[:-4] fichero = open(os.path.join(pathout, prefix1 + prefix2 + removeSpecialChars(archivo[:-4])), mode='w') fichero.write(nota_out) fichero.close() elif os.path.isdir(fullPath): print(pathin, archivo, fullPath) processPath(fullPath, pathout, prefix1, prefix2 + removeSpecialChars(archivo) + "_") if __name__ == '__main__': pathin = sys.argv[1] pathout = sys.argv[2] prefix = sys.argv[3] processPath(pathin, pathout, prefix) zim-0.72.0/setup.py0000755000175000017500000002052213532015264013766 0ustar jaapjaap00000000000000#!/usr/bin/env python3 import os import sys import shutil import subprocess try: import py2exe except ImportError: py2exe = None from distutils.core import setup from distutils.command.sdist import sdist as sdist_class from distutils.command.build import build as build_class from distutils.command.build_scripts import build_scripts as build_scripts_class from distutils.command.install import install as install_class from distutils import cmd from distutils import dep_util from zim import __version__, __url__ import msgfmt # also distributed with zim import makeman # helper script try: assert sys.version_info >= (3, 2) except: print('zim needs python >= 3.2', file=sys.stderr) sys.exit(1) # Some constants PO_FOLDER = 'translations' LOCALE_FOLDER = 'locale' # Helper routines def collect_packages(): # Search for python packages below zim/ packages = [] for dir, dirs, files in os.walk('zim'): if '__init__.py' in files: package = '.'.join(dir.split(os.sep)) packages.append(package) #~ print('Pakages: ', packages) return packages def get_mopath(pofile): # Function to determine right locale path for a .po file lang = os.path.basename(pofile)[:-3] # len('.po') == 3 modir = os.path.join(LOCALE_FOLDER, lang, 'LC_MESSAGES') mofile = os.path.join(modir, 'zim.mo') return modir, mofile def include_file(file): # Check to exclude hidden and temp files if file.startswith('.'): return False else: for ext in ('~', '.bak', '.swp', '.pyc'): if file.endswith(ext): return False return True def collect_data_files(): # Search for data files to be installed in share/ data_files = [ ('share/man/man1', ['man/zim.1']), ('share/applications', ['xdg/zim.desktop']), ('share/mime/packages', ['xdg/zim.xml']), ('share/pixmaps', ['xdg/hicolor/48x48/apps/zim.png']), ('share/metainfo', ['xdg/org.zim_wiki.Zim.appdata.xml']), ] # xdg/hicolor -> PREFIX/share/icons/hicolor for dir, dirs, files in os.walk('xdg/hicolor'): if files: target = os.path.join('share', 'icons', dir[4:]) files = [os.path.join(dir, f) for f in files] data_files.append((target, files)) # mono icons -> PREFIX/share/icons/ubuntu-mono-light | -dark for theme in ('ubuntu-mono-light', 'ubuntu-mono-dark'): file = os.path.join('icons', theme, 'zim-panel.svg') target = os.path.join('share', 'icons', theme, 'apps', '22') data_files.append((target, [file])) # data -> PREFIX/share/zim for dir, dirs, files in os.walk('data'): if '.zim' in dirs: dirs.remove('.zim') target = os.path.join('share', 'zim', dir[5:]) if files: files = list(filter(include_file, files)) files = [os.path.join(dir, f) for f in files] data_files.append((target, files)) # .po files -> PREFIX/share/locale/.. for pofile in [f for f in os.listdir(PO_FOLDER) if f.endswith('.po')]: pofile = os.path.join(PO_FOLDER, pofile) modir, mofile = get_mopath(pofile) target = os.path.join('share', modir) data_files.append((target, [mofile])) #~ import pprint #~ print('Data files: ') #~ pprint.pprint(data_files) return data_files def fix_dist(): # Generate man page makeman.make() # Add the changelog to the manual # print('copying CHANGELOG.txt -> data/manual/Changelog.txt') # shutil.copy('CHANGELOG.txt', 'data/manual/Changelog.txt') # Copy the zim icons a couple of times # Paths for mimeicons taken from xdg-icon-resource # xdg-icon-resource installs: # /usr/local/share/icons/hicolor/.../mimetypes/gnome-mime-application-x-zim-notebook.png # /usr/local/share/icons/hicolor/.../mimetypes/application-x-zim-notebook.png # /usr/local/share/icons/hicolor/.../apps/zim.png if os.path.exists('xdg/hicolor'): shutil.rmtree('xdg/hicolor') os.makedirs('xdg/hicolor/scalable/apps') os.makedirs('xdg/hicolor/scalable/mimetypes') for name in ( 'apps/zim.svg', 'mimetypes/gnome-mime-application-x-zim-notebook.svg', 'mimetypes/application-x-zim-notebook.svg' ): shutil.copy('icons/zim48.svg', 'xdg/hicolor/scalable/' + name) for size in ('16', '22', '24', '32', '48'): dir = size + 'x' + size os.makedirs('xdg/hicolor/%s/apps' % dir) os.makedirs('xdg/hicolor/%s/mimetypes' % dir) for name in ( 'apps/zim.png', 'mimetypes/gnome-mime-application-x-zim-notebook.png', 'mimetypes/application-x-zim-notebook.png' ): shutil.copy('icons/zim%s.png' % size, 'xdg/hicolor/' + dir + '/' + name) # Overloaded commands class zim_sdist_class(sdist_class): # Command to build source distribution # make sure _version.py gets build and included def initialize_options(self): sdist_class.initialize_options(self) self.force_manifest = 1 # always re-generate MANIFEST def run(self): fix_dist() sdist_class.run(self) class zim_build_trans_class(cmd.Command): # Compile mo files description = 'Build translation files' user_options = [] def initialize_options(self): pass def finalize_options(self): pass def run(self): for pofile in [f for f in os.listdir(PO_FOLDER) if f.endswith('.po')]: pofile = os.path.join(PO_FOLDER, pofile) modir, mofile = get_mopath(pofile) if not os.path.isdir(modir): os.makedirs(modir) if not os.path.isfile(mofile) or dep_util.newer(pofile, mofile): print('compiling %s' % mofile) msgfmt.MESSAGES.clear() # prevent "spill over" between translations - see github #664 msgfmt.make(pofile, mofile) else: #~ print('skipping %s - up to date' % mofile) pass class zim_build_scripts_class(build_scripts_class): # Adjust bin/zim.py -> bin/zim def run(self): build_scripts_class.run(self) if os.name == 'posix' and not self.dry_run: for script in self.scripts: if script.endswith('.py'): file = os.path.join(self.build_dir, script) print('renaming %s to %s' % (file, file[:-3])) os.rename(file, file[:-3]) # len('.py') == 3 class zim_build_class(build_class): # Generate _version.py etc. and call build_trans as a subcommand # And put list of default plugins in zim/plugins/__init__.py sub_commands = build_class.sub_commands + [('build_trans', None)] def run(self): fix_dist() build_class.run(self) ## Set default plugins plugins = [] for name in os.listdir('./zim/plugins'): if name.startswith('_') or name == 'base': continue elif '.' in name: if name.endswith('.py'): name, x = name.rsplit('.', 1) plugins.append(name) else: continue else: plugins.append(name) assert len(plugins) > 20, 'Did not find plugins' file = os.path.join(self.build_lib, 'zim', 'plugins', '__init__.py') print('Setting plugin list in %s' % file) assert os.path.isfile(file) fh = open(file) lines = fh.readlines() fh.read() for i, line in enumerate(lines): if line.startswith('\t\tplugins = set('): lines[i] = '\t\tplugins = set(%r) # DEFAULT PLUGINS COMPILED IN BY SETUP.PY\n' % sorted(plugins) break else: assert False, 'Missed line for plugin list' fh = open(file, 'w') fh.writelines(lines) fh.close() class zim_install_class(install_class): def run(self): install_class.run(self) mimedir = os.path.join(self.install_data, 'share', 'mime') print( 'To register zim with the desktop environment, please run\n' 'the following two commands:\n' '* update-desktop-database\n' '* update-mime-database %s\n' % mimedir ) # Distutils parameters, and main function scripts = ['zim.py'] if py2exe: py2exeoptions = { 'windows': [{ 'script': 'zim.py', 'icon_resources': [(1, 'icons/zim.ico')] # Windows 16x16, 32x32, and 48x48 icon based on PNG }], 'zipfile': None, 'options': { 'py2exe': { 'compressed': 1, 'optimize': 2, 'ascii': 1, 'bundle_files': 3, 'packages': ['encodings', 'cairo', 'atk', 'pangocairo', 'zim'], 'dll_excludes': { 'DNSAPI.DLL' }, 'excludes': ['Tkconstants', 'Tkinter', 'tcl'] } } } else: py2exeoptions = {} if __name__ == '__main__': setup( # wire overload commands cmdclass = { 'sdist': zim_sdist_class, 'build': zim_build_class, 'build_trans': zim_build_trans_class, 'build_scripts': zim_build_scripts_class, 'install': zim_install_class, }, # provide package properties name = 'zim', version = __version__, description = 'Zim desktop wiki', author = 'Jaap Karssenberg', author_email = 'jaap.karssenberg@gmail.com', license = 'GPL v2+', url = __url__, scripts = scripts, packages = collect_packages(), data_files = collect_data_files(), requires = ['gi', 'xdg'], **py2exeoptions ) zim-0.72.0/test.py0000755000175000017500000001313313532015264013605 0ustar jaapjaap00000000000000#!/usr/bin/python3 # This is a wrapper script to run tests using the unittest # framework. It setups the environment properly and defines some # commandline options for running tests. # # Copyright 2008-2017 Jaap Karssenberg import os import sys import shutil import getopt import logging import unittest try: import coverage except ImportError: coverage = None def main(argv=None): '''Run either all tests, or those specified in argv''' if argv is None: argv = sys.argv # parse options covreport = False fasttest = False fulltest = False failfast = False loglevel = logging.WARNING opts, args = getopt.gnu_getopt(argv[1:], 'hVD', ['help', 'coverage', 'fast', 'failfast', 'ff', 'full', 'debug', 'verbose']) for o, a in opts: if o in ('-h', '--help'): print('''\ usage: %s [OPTIONS] [MODULES] Where MODULE should a module name from ./tests/ If no module is given the whole test suite is run. Options: -h, --help print this text --fast skip a number of slower tests and mock filesystem --failfast stop after the first test that fails --ff alias for "--fast --failfast" --full full test for using filesystem without mock --coverage report test coverage statistics -V, --verbose run with verbose output from logging -D, --debug run with debug output from logging ''' % argv[0]) return elif o == '--coverage': if coverage: covreport = True else: print('''\ Can not run test coverage without module 'coverage'. On Ubuntu or Debian install package 'python3-coverage'. ''', file=sys.stderr) sys.exit(1) elif o == '--fast': fasttest = True # set before any test classes are loaded ! elif o == '--failfast': failfast = True elif o == '--ff': # --fast --failfast fasttest = True failfast = True elif o == '--full': fulltest = True elif o in ('-V', '--verbose'): loglevel = logging.INFO elif o in ('-D', '--debug'): loglevel = logging.DEBUG else: assert False, 'Unkown option: %s' % o # Set logging handler (don't use basicConfig here, we already installed stuff) handler = logging.StreamHandler() handler.setFormatter(logging.Formatter('%(levelname)s: %(message)s')) logger = logging.getLogger() logger.setLevel(loglevel) logger.addHandler(handler) #logging.captureWarnings(True) # FIXME - make all test pass with this enabled # Start tracing - before importing the tests if coverage: cov = coverage.coverage(source=['zim'], branch=True) cov.erase() # clean up old date set cov.exclude('assert ') cov.exclude('raise NotImplementedError') cov.start() # Build the test suite import tests tests.FAST_TEST = fasttest tests.FULL_TEST = fulltest loader = unittest.TestLoader() try: if args: suite = unittest.TestSuite() for name in args: module = name if name.startswith('tests.') else 'tests.' + name test = loader.loadTestsFromName(module) suite.addTest(test) else: suite = tests.load_tests(loader, None, None) except AttributeError as error: # HACK: unittest raises and attribute errors if import of test script # fails try to catch this and show the import error instead - else raise # original error import re m = re.match(r"'module' object has no attribute '(\w+)'", error.args[0]) if m: module = m.group(1) m = __import__('tests.' + module) # should raise ImportError raise error # And run it unittest.installHandler() # Fancy handling for ^C during test result = \ unittest.TextTestRunner(verbosity=2, failfast=failfast, descriptions=False).run(suite) # Stop tracing if coverage: cov.stop() cov.save() # Check the modules were loaded from the right location # (so no testing based on modules from a previous installed version...) mylib = os.path.abspath('./zim') if os.name == 'nt': mylib = mylib.replace('/', '\\') # on msys the path is "/" seperated for module in [m for m in list(sys.modules.keys()) if m == 'zim' or m.startswith('zim.')]: if sys.modules[module] is None: continue file = sys.modules[module].__file__ if os.name == 'nt': file = file.replace('/', '\\') assert file.startswith(mylib), \ 'Module %s was loaded from %s' % (module, file) test_report(result, 'test_report.html') print('\nWrote test report to test_report.html') # print timings with open('test_times.csv', 'w') as out: for name, time in sorted(tests.TIMINGS, reverse=True, key=lambda t: t[1]): out.write("%s,%f\n" % (name, time)) print("Wrote test_times.csv") # Create coverage output if asked to do so if covreport: print('Writing coverage reports...') cov.html_report(directory='./coverage', omit=['zim/inc/*']) print('Done - Coverage reports can be found in ./coverage/') exitcode = 1 if result.errors or result.failures else 0 sys.exit(exitcode) def test_report(result, file): '''Produce html report of test failures''' output = open(file, 'w') output.write('''\ Zim unitest Test Report

Zim unitest Test Report

%i tests run
%i skipped
%i errors
%i failures


''' % ( result.testsRun, len(result.skipped), len(result.errors), len(result.failures), )) def escape_html(text): return text.replace('&', '&').replace('<', '<').replace('>', '>') def add_errors(flavour, errors): for test, err in errors: output.write("

%s: %s

\n" % (flavour, escape_html(result.getDescription(test)))) output.write("
%s\n
\n" % escape_html(err)) output.write("
\n") add_errors('ERROR', result.errors) add_errors('FAIL', result.failures) output.close() if __name__ == '__main__': main() zim-0.72.0/cgi-bin/0000755000175000017500000000000013532016620013555 5ustar jaapjaap00000000000000zim-0.72.0/cgi-bin/zim.cgi0000644000175000017500000000234413442520504015044 0ustar jaapjaap00000000000000#!/usr/bin/python3 # Copyright 2008 Jaap Karssenberg # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301, USA. '''Default cgi-bin script for zim. In order to use this you need to copy this script to your webserver's cgi-bin directory and edit the script to set the configuration. ''' from zim.config import data_dir config = { 'notebook': data_dir('manual'), #~ 'template': 'Default.html', } import logging logging.basicConfig(level=logging.INFO) from zim.www import WWWInterface from wsgiref.handlers import CGIHandler CGIHandler().run(WWWInterface(**config)) zim-0.72.0/icons/0000755000175000017500000000000013532016620013360 5ustar jaapjaap00000000000000zim-0.72.0/icons/zim16.png0000664000175000017500000000153113100604220015024 0ustar jaapjaap00000000000000PNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8eMlTe}w)L F~E@B0%t BqɂDR 1jB?@@KNi8C3Ν}.؞9y{~sZbJF ^k9ik-:K k,p:1HhYĚ^5KvQ({*Z[V-FG(B|W=L(kJ\=sW»_a .v4cӓFF{EB埝}H4 ~=.:>ȗrx$q05K?F/oo:o%B@IF]Dk^x@ '`s _n޳2z^x8)Rk9;]_l:Q7ulE\|0 LȊTP4pV :zfGri^},W 6WL'-4 =5yAҌ\@כ ʌƒW|?b~SL= (+wr   hPNG  IHDR\rfqIDATx}$WuܓsܼZiw%* I($D6A |71&a,D!! Wiqr\[_U鞮+VOŮu KFf\ pنPt6Խ0Q/BVH~ظ_ZUT1lÏ_qi]*!u'jEXL}H7K,G@/qum2___oϊH|TSg*;k=YnR'F]Sk&Ymx?߾ջ(]dYn*uY~Vlvn'MG х־|UY1DHlW]%uY  B28-UI 2R'ŋ0d1 e2v@eN>$r`?" jR'ŋRH hk S`_Q,p qBߕB ؎!@դN>g @v@X1WAb 0Y'I|/ (!4`Z D&uY  A$x.W\3!G90V'I|/B!ؗ=[@1@B.H&uY@FP9Y`v! `NU:,N^@ڿA9$u g)DD$ &8CP5EV048 2R'ŋD$V8숋d jR'ŋزL[6!! `&uY !ƿ`hFhuEDP5Ea$e'PW0 9ڄ\}u g"@C &V$vGd jR'ŋH!.ph3V `O&uY fV0#tp:TMx@$$ &$NG/:TMx@#@A9$ 'nN :TMx@@ZЉ!)oe4V\6ZO܃n\ f^|/hF:+zّi$`}ނ;p pw!$v|/hA9+ `ݢ:{AY@).N˧ X'ŋ "H+z8 %*O˅M-G$_yP'ŋ `_4 &^$~G/O0@_˛|+HQ'ŋ:Η `v@-" @s !%†i۴*>Fbt"48` [< ߃Kw'bq{$S 4&@ *3¾uPO" E]HƬK<&ocːA%R9bSiP m9yj~ ȢFyLO$4UW_F'3AmI"f@@1=˩Ŝ#UOA`p !a\u 0˅@| PS\cl(5q/𶭴cUz2bh jqPCYVgȓ@2g$ߠ.>M @T7׏!plשԾRIдZ,xZ.=)\;BUiz6g)*(H ʴ( xmvp`->8 I:,aW|}k=XYf!fԖYjElZX!B]? BDb }6 .Bxf/#|N"Oz ~ltc-3Sxπk*p`c5o؆) z?]g3Y |bYi<s$ `N\N/:O2C3VC[p)(&GbM{VV-T2lIB M.D T߄J i,7vPdj؍zrfu)\`_-ZBd(:O©$OHUJ͸.4l6^X!B h8eNX_a#6dw BX?+ky_ ,c}.\,Zl(5wR'O423K"=x44nM}o'%(WO%ӐE@PfeJ*< BC&z3+| )s5O-(˜e„ʷ^zݥ [ Qp<QѲ!g΁؜F)ZW KIK^y|Q! ZDP/{ G:~u# o$;O[6-y_T,  |WbH_B*R5>)@ͽAϙ`{J g4o*D!}_ d]9OM*%?rCτB5;7%ÔΪ lOKVCC|@;ءQ7' )p3\uu^"=)Ԗby_Oœ|&P_|g}kA:̍΍ `2QǮZZ }w&3; o6 QY i?=gб& а&2?ʛ׀?We FOlխr'(xh4,DW }2ΡV@(Fd}_pC;%vyih>%]xЫzrs $ۢ p$%ش4v= ` T]Jڽ$;#| |bð_U8*}vHm@6~ i|̜|+VC o~Jɽ 8(ݠ܀UAt.DUow3u ׂWXFt1zv,>nD" S," e @HeSa r/s Ak?^0͸ ߜB>r5HC(e4@b7q6 ^πi쐯 驲5>zZO_^PdFe.Ne`zr2٬7kDXDsPvcͼSB,H@s&*%9,EiD@ĶaI`~M '6 C5tdڦLGࢧб}!փ؀ `ioHO%S)_TB a#Nc}n 7R<P pMHL m2/\*.A >NE3мFѻbv rNK\ eͩW% s'~3 ] s +:XZ X#ːާ^UAznJ4- $$YC}fJ Qԗhg dr{9oA𿧘k$$'HPL `JAZР \K w1yh

n;+ 3^&#HKz%>בW%77 " ]^Ψc (YV' Lzhk7mػ ;&XAh,l%XjxӑrKXV8 ..HSuX ƥ!TiȳW] Wв󀳁^Dn~k뇳d M}gPi]炐yTU)HJ$bdA$ &U-'\:@s|#(P\tlQqZfR L̬Vgn&?kji`| ,:&33xv$+r\cHK/2)d~]+f!H,m7H$$fDppyvl7U'?Vkzd#/ן{$#pXrQ$CAE}$r0+~*E=ki[S@~Qi@t*SȾwnS<΄??&PPUVs(/Cg6@f[ws߂L 0ۄu>M(0Z/~DTQ pdNlNWS|UsiȊѧ [o1A4>ck EmEcsrƱ^_ 2 h2/Bz+4s@R81"Xܿ z.:qKO@Hx%_{a6\@ʻGeH@2!Uo<Bfyl' Ph{#0/Hz B77Nj81 'HaGp!U56vx6v`;أt ('f0ks z5׬ڛ4@p /e! HQLg8!/n!ޠzKOU1XwQTf mey.1S+LgvV{vVTDH<iwr5#< @4Hpq"_A zB[p{ |MT%~015eѬ=;Sb69cit_Gg>#U9r?$vst3}I[ݰvٳPGw14;7<-|M9/Y(Z>|Egn=㘾yP]Q|oO-^J dhUrV}K7 $̧KQv#[0/X{$Q߿QYF?{ְׂ{_Rx@Fchb[J紈5!]ggSuDžF6zbP3qS]$s0~*;;7j*m쳃ck =­s.W.f_Rz8A&0ss ]s^F8 `n{) E9i};$vP `M|ϪJABWKW/rpՂ_J%d47_ <&`;пU/\◤,LL@:U{v8"Ovȇ-0H/p.M/]ٷ` ]^6TneajA* AN:xyMM xIϖl+"@s0;?e{ZXm=k5RDݦ=ƶJ[G W~=Ap"?W 4 @odXsg7㨙R y>n+Rhߎ󶕲=*5_a\  s>nQ8gNMžm omP$hjQ[Z$ןM0vLn=a!`4\Xos*A>[ $ng =ؚ~I:uS.^VMJ!t8w <;Ol_Eˁp&den fe&ˏ YQ|y\ ڿwcA>ݽZ]|.=ӏvKQ+W}puy5o%\#yOxw~}&G~x7O?e['w9{.MD@Zh>ՂH]{}誛X*{6sHF'wi==zHhOܹ7ȇdZ/BX/@3%\N><-DJC*E;C{ϕ`5>{>L>srg Tš 擁+@"~:zD"L57=1e 4̝14Nᡩvx䏐[6 WoI=bP-U#դtGMem皠w;zI.]W 8s`oW6ܨe7rL? #\ ~tiw_1N9><8Uh~>Gޤ=SU>{ҍQcV`{oX7|fYo=xw[ahvLg@B{z0:_bO>KAlz1j2S~Q>w*lz{h[>-/Y~n-0`6p}S?V{+JQwe=ywqz&pz~ɲ'zY_~ K(G@)[LPAaaAox5fg0DZ_DubmmZty-nJ~BX|? yKC2,~ufQFW7P\n4cЊ $r$mC#)I }OqnH,Msl: lQ+E%I=f7e)4w f0:oU45Y_a19Q>K=}|߹TG!khf0v{?)N_A/CS̚2v+SkZv!iIϵ/v2TͼqX#DDIChۇ [oc]awu2tnD-%2_/a*x2Q;ή~C*vs_VPm0] /s 彘cXLЏƸ-G ~fEO#<_{!)K'H׊"z̏LwC%/>މއ܃˛AA1};lY' A,v*_?S˙gjEve< +6 =?h21Mr|4z6{ }.ׂ.$l+Hv .XK(G( Hsއ kD k܀;Yu/jΈ)o5eC7oZ$nDM\#dQ!yݐ\hy'|{3=y^01SP׀/V 6*;hx )aS<4Ł~>ߟ ؝܊$}ǿ t3|rAn@ѣ W,+i dtEPȟ⫆tQAT5p+jB>gO> ?xI y [8=O\@"Fz!&{0OdFnJ >K@Ǟ_7?8!$x g@]B?1rE/"x^\D8}Ї7s0[}Ѩޣ0|y`}0d:lڮػYQXS p$lKѬ;w3-eDO>RO#1ʇ5ܲa{B~d%e{NJYlA7`mۏ E` >*JQsm7d&XA T춯 ,$u( HWQlt,V;k-<~Ev[Ǽ _ |ؼ~d ^g"N2+C mF܀eQE _P,T#o,_r/I:G:YJ.:_."ˌ׺PA=31ug WM%!i޾nW?_jj0|@PB .ϔeE$ ١-xRZצmN>4 p;eEFZ1S>3m]|Nͯ5S|r{v=gKhD,*9#ryr D):"G4KPShfn'@iN[<T5vBz74{b- ):H@ 0U}l/PUÌnk=)b՚iKq8v9]HԁSMЛ91fIJ$ꧣ:\۝2lFio_}d9u[Kp[& g1~{𛗼l lz4%{#ZU_F(md9=ewWΡ4qPg%8L~gsk^+^˟f%m$_>.oڛc&^uYlNLz;؝9^ (~>׳{?ѻ;!5NT1̴AӍwU g(FNlcD[xshf~0[Rw!z D[ioMV2gHR|{`[s'`/{OB~;R -* z6J1,P"I*CR`,~pQy[aϪN1FӮKBըѯue2N{,6]t0q,s_%8 ` P\,|_!74Awo6 wvܼ/"(!*P-ЛB9> I$J ^ܙIߏ2$46mn?]l>s*k[n] xzr{?`@\ެCC{a~E~4D9bFz3YXRNep/q̹iwwVkS~ݔ7?fЏvZLXr fMqotks>[/hV}N_:ǎrP9гؿ)+ A1ߔ6|mj^ Ww9pYzΒ}63ydK{c@ͣky}pw>#7É{ ǩފZ?EWe:$;R4퉶FxrwKn䲒66_̻& X?\~jK/-j^cI1+ǩAO}~6=mq_)zI>gZZm|$@9v u kސ Q#GZz#3~-ο%F g ̫Flm$PWmty8@W`d Fk$2LK4q5@ϮoBl|~29 8ؤWuoI@8.Lnh~?[Gz+`߂ z8t{Oг筀rybNA=\τaN;IQL B:gW \}Ĺ= mU>sD9'Y#HDpZR5>~Pr<[k~nm3 L? {}R0WIoLV 'AS;cޜx i )"`'߿o7j쿪{ƽ+hu\j0ˣ_Pby!uAkp,yPw_ h,Nښ& #\ϊeہ|̬8}Kn>꽬дo5 .]0Tk]E9Bi"cXbNe ^lҾ%}'!pLI>)IӪʾ/`@oj}.M kitsx~=v24$FsR@ ?"/i@Ne q)h 2 ƀݗYRL> L;l?+0ZH3`+c7)>}> 1\g.7OB'Q!S6 +2$[)[OЛ_=ŷf?+uX )O& D8 M=|:Rde X9?jU2f?|DіG m_` YV=z:& f0~o$G}"6 -9M>C1@9Ϳ!9Cj+uX }n#L3 d@.=\SO"[> z+釽 Xfr>\.;؀]1+#)z{~g7/Ԋzpw4FɡxiUrP8V^R'8B0M8b]y3Z=Jqhoɿ5|6b4wg75ۀO"`n2B0-m,k9h\E"?KT@P  ZB]C^ef裟cEh|k{f n 0,{>H4ukQ[Ys0"tO4< ʜk-(‾)<zߒ?IJ# D:$v(r-ܻOܒW' f`X'Qp4B5oE]0lK6S O`TGPA2N0.e^O :PP2ï趭8 ZЫ[qh"1zfl~\QXwj{N شr7ow *mkci00Fk(wwQݲ}FIE?7k-f^t AA凵/}kN&AWbT}17Y|9I9||7w_u1UeVh?Oۀom_+~Z{ ؁o#&s:/[kUAX$6W)a\n>Yq"~r0mӧI >@s}. c@/@ &>6cj+0D#ɖYivE=ݿasBD@Ia?>s"Hw6 u84Ҽ`L*IL>qy@.svM~"r>> T6x Ƥ #gINW3=])(AP%@%\}jT-GOzpV3{1k|@@_L~V > qGS* K i}I Di+/ _gqk'u(R(of"5|I` 'm1@;h}pכP&?!i?Qa ~w`얂%!2 `T6R'"WY:<d#G濬h=uR7H ,sr[CjA|PV @wX"G`2g~nj:jBUg%NE1D͇ $2{h:/I+wfYRP"6 > tR`Eɓ-g}?گ h'Ϲw B1 q lIR~$tj6_+?S 3`7|h~[oA2#̐^UST!_%g`an@S2ڲ1hd?4ĩ q2Ɋ%<j[ J`R\il5Ynd(?TA@͇@`jZQ`d_i3Ý|6~˪R?LJk@"N"X3hUؒWb`mr8xXޚ+gwif= 4Ogh8I6]*R6Eڴd}'gmdIo-迬(@.^ᣃp}ZW e."o~|gqT^l`,ag`;L?Y8o~%)22zE 'eLF;0-ka蜙}iOHxc(+hkʽ΍6ퟏ@Ϯ jsSz %|!hh&Hq4G`'L?Z3wv,ZN\:V)ȣji^ZEYCdžҲˊ!u{4mXkV?z\unxtm6ug59p d}j7ۉݩ۴k @*2j%p.\B!h/Lw'.*|.*1, 9i =W .IBu8΀:lu۱%5*(~軐ML ᖎV[4@ k_Eo ȏ("d_?@&(vk ;& M oL$:H@o  z7.#oǸHcj9b|D|h jf?X# Elzeۜǜ6ǺT܁*457@Cc,\܁dUL0$*N~&~)A/9,6$(0=T'j+KݨC(룈 jD G lVI;h;W  s40c h]/J7R>@vquP#?S=(GD}3ѹ a$!{Dl pgpyx~.Y  ԍKڴPeQ[hK)Kq}6P=}9б0݁Tǟyv"0$p3~/$+Z`x;ڊ|\Z:P視F-ɇ+#0l.CD)3kjK޹;|`z뽵6ǤdjzB8QߦX) ݩo]o9ZW 72?<}{0x!޾6|-6@3 H 8p?iŠ`n6]N49 h,2j߶ԀOCo{@R`~owT;#O":2ۆnFiÓއ!}JP@7n3h=~Lr|w_0k/z?f0 >hL!AjjzkuUZ.;Q2Lamjxo)L~6璹FH̄16Ҥ&`tC}=o -}zOs~p"67@Y$;`lH܈}*G\&gX(n߿VB>J!*|/t-ʪ*J-w JȬ[)Л(rKih7i#iB?9eRӭťec?g<baow=P+(mU?csFt7wPoP2poAr\  p }ADܠ^[& `(}P6 ٗ y$IRm20+)^h -LBkژ#wU'?%fP45"YcO'^pm!X@i"KpKΞߡv|D(;U 22rk{WBߝ|p㵙n&جY--&[[@e@oM= a +?只J .8U >M鏸vE{>d$Zϝx?c(-(B2Q 4T` wv9]ZK8BGَ<RDuCrWg_@86f!>mRL$?s?z+܊৛}.u{.Qj\_pnF`e@O/ga}ZܝqеMF +HJF^5:C SAm{K4dW;f8^&̸w4@,o+TW'V/)ৢaZF~ Ņr{N-~Kp;\1)Z`R=λ;}AnD+@q22Z,/ kD~$*|!^Hh$dxg oYO34}=Jsl{2eg@УN[C(/`!<H!M +3%szN~~֖* $&xp ~ۜtD`3xlDS_9F0v,&S(_gn=ʐ)3=7'JirFG?ЋR\FBhp {r]ZQQ2Ne{vqoM6u RN<d%#7#K!d`fA> p8 dͤ'.qfu^c  APTSビnO 3 6l"eDa@LqAAnES?LOCSAw@#_ |rI{p<1 BDBD?UFP@ke>Z܃B2 Şie|3vػ؉7I뷨TH3οGqfAo]kꆡ.r~CP / UOlT}ݫkF%~QM"h~|w6*B^Vm<MHLF;R_GW +r7X[m2?!y fm*P>MҢ})-PUV6o9ZkMYNoWA:qڦ/(Y jށ/{FH̱4s,#U&npE[M>_ .co'界w @WՄ2Znz~6Og213;L\H+Ʊx⻽ \I&Oc=ʹ۫31ʸߞw")[#^ 7.rb(Q$vLS% OhݩWN㛤2&k[w:oHvZz`PJ%a1t | }犊*΋rxoL}U4H|Ib92ߣ>XmGiW1# [ ~eD1$VY @ caA\rٟ s_ﶋ ep۲8?n,׈`dJ8j1ssL fqtg4S܆5 >͜?q'sU~?,w-#31=7>*w: Z]TYIH̥J.W}!t.0M0dS0+uGpыîr ÂH"r,71ʴ󀧦67NLB8m4!7Dp,#hglwY{LTkkuUйZ%hKɩϑxĉa$! ٭CK˒F9zlM3 {A rxDCcn䡷G]NN[ 6((zbbs7~<!2#NEmCz' UP*Rb?4\N<#Q$ |̌S{M4J؅c`Q0AiL)dQ'P! LYV፦- SW<*n="<2􎟀@2?{!2"F|.\E 襁Ac}:{'~3tb6l{5vU}ڇFP:éTkIt=4'i<~̟!ZG# 2"&|nTE~WyW!8ʝx/'/=z'Mr7Q)1uCPUeߓ;s/=gb@ k@/]ތH#LrH}_-t޹wޏ#pm*~_ LJ)PG<~Lʗ*84r43p*/N{ :?%'n&1zƅA(;ĒGq>} Z2~tϻ :Gox'DuЛCiiq5'陚գc`ʞ"ɶ3j"<r!(ˈZ{ 3>_E8n F~Qx!=?[9}g\%~yPB(}wF_}^8 # PiZZN85:pDW0aI'umiQctG#)C;Hsv[uֽO}=;ᙻ~\6B _+MHzTFCе`J682 @Aww>Bm|=jd}n @Pգ Nv)|/r `CTnۚƒ4=hn#DN;o~6%@&&v[ϟҺkTUZ yZB fL!iF瀵5yصez^w](>!71 }EgHcvwGX`Vx6e QN-#hg\!'HpGPwa~N|vxs~(@JIw[fw}^܈;^c7R#G/ny9hKs9(\?.|Ce "b,ɜf @ٌ~n/> Dr3})v ;jΌ] Tiq}h41'[L4eg-۶A$P\(D ۈI. x@#`K *I){EhbB.BC)e][ :}vO7k8~j$Fu`f(Gc X=l}}Q ]zDe}5V!`Ľy/E )Q28Ob *ٸzʹ}eE_O(qY T]} H<Dzտ^DRgϿ'JҜoۡ4!~;huP 9d]ҹ}>S<Oq{^:7[zUU2Gvzkx/J/_8ɚ3uSPJgK.6 9߉r۞ KO$Q@V}m$8閭189@Nsf.ۿEW?g mnM헢̕Pb|ig/xpLiM}y -B@\WRbP[/׆$#@(QQ`"ѧ 1hrPNU\Ӏ:`kNKo:. \- /-&C ==4E)\pV#{ЮwHf#;~w `,Ut +(Hh{Sv7_⵨ n$' K^& _n+;/)jFO1~i[Ter(8vQH˧>U;? 8rB?XvC_On:4VwWq&4~ IsmJL(KQR [u46[@8*'d4?K;)^dت×G]]ġ?N߀pV3 /a=߀GC 5a5DI9E_,Ux;M_ҩ܍;oi^%#Oq~`M=ߟ14 K1cC"?MIPs[ŊW߿Sz0w-Rh [yR5IkG^im$gM%4dś]< TV}swS(_/{OǟNqx4-k;i 'tW9y#Tj~?S{u|?ȿT wo߇tsJN$ LɨRRϼoP:fC4\y=9+4 !`QQ@x;\Ҁ >Ul߽t|44?=fM*޼ݡ5dؼrhoaMS>h&ԀQ-td&rT,(gFLeԔN9EӬ5(讌s!d;h6r)`EIepޱ.~3 cU^  \E,i=}g-ZjOөw}ȈǫD/Yxf6@c`qZ"W@U=sQMڏ}IN y7oEGrWASGo״}u48_#f0b޶1)f_;V6 B+I᩺;믜lM ~Pnŝ@-GM9?M?@If|X&?*H?GiUN L߹7ی} xLVv0j8U <{i¶mLtOsȢ#vZ5Z m>(|[)ADʄ2&=’J)deIIs}n oo V QNNNNNO T^,Y<^T@H_SWURWVSWUSWU+.{^|!.!V^ZX U RONNNNP^%]>dQMZSRWVSWUTWVJN[MN^g9)ea`^\Y U QNNNNN[!b=hSK[SSWUKPZ25k.0}E@ת ū7t\jgfdc`]Y UPNNNNZ!e=iSGVV8;g47x2502=@`P=bP$n!l m kjhd`[ W RNNNN[$g=gTdS?H_NRXTVURWVSWUSVVk@@@=cP3g30}3~3~1|.y)t#nic^X RNNNb(h?bQPXTSWUSWUTVUSXTSWUoUUU M6XX2t7Ѓ7ς:҅:҅7ς3~-x&qke^X SNNNf+e@bPRXUSWUSWUSWUSWUSVVkN ;cY6ˀ<Ն>ՈA׋A֋<ӆ6̀/z(s me`Y TNNO i0aA`QRXUSWUTVUSWUTVUSVVeX=jY:ʁAڌEَJݒGܐA֋9Ђ0|)u!mf_Y TNN P!l4\D_QSWURXUSWUTVUSWUTWTXc~>gR<ȁEݑKޔQMߕC،:у1|)u!me`Y RNN T$m9uVA`QRVTyRVURXUSWUSWUUUU'n@`P)?dP;{JMTLߔA׋9Ђ0{(t ld^X RNNY$j=hR@`P>IIITWTISWUSWURVTz@`P;_R:lIMߕLޔGې>Ո6̀.y&r kc] V QNN_$d>cQ@`PUUUZZZCHHHHHHH ,1qbP`*%;k@y]K֏N9Ѓ.y)s"nhb\ W QNN Sc;kS@`PI`*%7jU=cPBrKޔ=ԇ*u#nid^Y TNNNW]>cQ@`P`+,@`P?aPf?nWA€Cٍ.z je`[ V QNNN['W=cP`+,@`P=cP@c<Ɂ8у#oa\ W RNNNO\8mR@`Pd`,+@`P;=cPdP7c,ui WPNNNN T%S=cPz+-*@`P?aPv=fR/a!j_ QNNNO T=dQ@`P 9````}z```_@`P=cP>eQ,[`YQNN P'{P>bP@`P>bP>dQ,VY V QP$P=cP @`P>bP>bP8lR+{R&~Q>bP@`P! @`P@`P0@`Pe>bP@`P        < <         @   ?     ?       03 x x x x x x x x x          ( @ -y]KC ,; C.umfvUVSRVVY]T25i %%n)6Iz  >g\KZQNURV\S47i.0H',f&V YPT UAdQ:Ce01.1tQUUrUVV#Ѥk lMNNPX,W:V_79mUYSSXV24tJ 7KdH W V QNNMT]aP!n jiga[ TNNNc\Nw,k'u)s'r"mg_ XPNNem@DaVZTRVVaSVVޏF؎Fۏ<҆0{%qf\ TM S*hD^QTWURWUTVUSWTWTVTk?fDPN>Շ1|%qe\ RM Y/bEVNRXVxRXUSWUSUT2r>9B4;`HݎOGې;҄/z#odZ QL_3[BDD%VWTSWU}}y]'>sJ}K>҈4~*v kaXPMb8sU9aM Z? d AgL<Ԇ+v#nf] UNOa@aQBiU azl>lQG~<؉'seaYPMR$[@[Nx>bP bd89<bP=dQEZPcD@`P>bP?*???? @@/ @ <@@@@(  }@z HRa.8   O^[#?o*~cQHJSLW4z)ߗ&(q3wQDL^)'MY;  SVVIOS5f_\UP"&{ M."`dXNS9~Y;6rVX,/2j,z%pa PS7rcTOQT\VV&'!'=~A׎/zf R WBqZTTTRWUgw,5_UgHͅL/zfPZDgVTWUvRVT` image/svg+xml zim-0.72.0/icons/zim16.svg0000664000175000017500000004707713100604220015056 0ustar jaapjaap00000000000000 image/svg+xml zim-0.72.0/icons/zim22.png0000664000175000017500000000235113100604220015022 0ustar jaapjaap00000000000000PNG  IHDRĴl;sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<fIDAT8[lTU}ΙۙLhKQD,$SDDPHIxUC b /xIL( `1\ )Υ3sf朽}jz_J))u][|YcJj)7@upB2\EOҤOѻmI3lCj"4,U.hT8{7P%!U Ju|!DK9 Jui[b FD{,S w20|(4Pc*;FӪ|yćMwzG`xY׃ϭ]i`|vZݧy '.UO\6:ԸdePm'/ͭwYTCWC1}+.ty bE][pqUv7j^HrD2A&;ĵZ:==B gyBnMh$SIҙ4(bHGצ΃'v gYu~c"iK<9+K6%VF֢R,Q2N{W(/xΏLa[b7+j1 eB-jQ$R_iDSC {C&'"[sKuԜWHJ$ qSnԊb~\SSjIבW_pE)M{[ ױs_4۲M5~0gc{_{ml_ޫA>IJv@7 w},'K/|hH:ۻ԰q\!M}3U:-1rͮ7n\>8L68,ssR?d}Mެ<¢g=ӧ`be3FYV%:Xyee4q֚Rv캤,4V:3]sM#Iy1:O7, +c16:%>?^EvyoM^gWZx9zdҚm3'`- aNm;fmy-ܥ(w Ewڼ7o - a84&;W1Һr=>aPʨ;;t9ppkzv]0RZk1$P3 S XNz;]|ѩ⥆9= 2c~z5){Ӌ/v~%pbmj 덕z=BFc , 3uJȁឿӳ;w&u< |o'fA^kI\)ɹ<Z%gO_sב5/7_6hc5>oj19K_'.%Z߿زf?6m6^ԃY?$獱~`>!D'0 F5Lu8*#WIENDB`zim-0.72.0/icons/ubuntu-mono-light/0000755000175000017500000000000013532016620016755 5ustar jaapjaap00000000000000zim-0.72.0/icons/ubuntu-mono-light/zim-panel.svg0000664000175000017500000003757513100604220021403 0ustar jaapjaap00000000000000 image/svg+xml zim-0.72.0/icons/zim48.png0000664000175000017500000000725313100604220015040 0ustar jaapjaap00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<(IDAThŚyp]}?{*=l8 (II\XIӤI҅d i:I)&i.4fBٍm0blk,ws~=ڌ-3}mGJD+)k0\ "0g\MéJ)4"86]%7JrtLF)* ?͚3| HN$}( 31s]LcDs]J[[<`%p%ڮ~UH ]ũC')Rg `}kK ~͟LU#8QR:?eaUjљ8J }Mh^v' i: ЦT-Qc.b)A1wp|B7g`ܥaAG%a<|"g?r 5y܉ D@^6Ӭv`UVtx'~{o4dhqq]+( )>aP$ !AQlB;72R]>U( #*@I -۶lrNQS,e;>{9˿$h]CÐ0 0È( ,J).^Qm^)~͛e1 ֭; LU9n6ƪC`c0.K, KKhlVI+Ծ(a֭;Q0|N +K-|Ab!"($ K;Qt>:ϯE*]oB^DDW"S?'[[m?^{i 4`peGfR|_]#)U|HqݼR6-/?>۟ܪtr@)IߔJEDqLFDQLē"\U%ާ籠SHNaẺ~%(>0DzUWyAa<A%kMb2%| #&VQ՜8񉪮+Vzh֭pDz G+>ޕ)%HRTxky**3d]d[5N.cZc3ַDvGTpP֎eWUK3 \k2^Z *s$M-2^q]/S5N|6:1쇂|Sg ͟$^J' F?trU7T uO(wǦcJ ΫMaF~SPB^^+7l.'C>(p"yLw_Zᥫ{>pkrw`({~̿IN[.LˊdRiDd{܎BUnEob> t97 i?+Y'Tn/Q1OovWq6]wRc<*'Z"Q$̨Rzcn*;Mw'fUL'W+U@V${^,Cm JK:-7oצ;֒2C| &Dq^e-]j]H-4E'{̱ ;z0i&3:x9;`H ^l1$DGO7o<~ғ@ZSvr* LdY"S7Ϗ?OuCWuuk1y5ѐ|fCUA kR0cD1dǎq2_ŗ' L)i ߽NjO=XQ4+Tcv0$5Z24oբ8F+.;E1QX|o%˳P; GTr@A:ʽ‘eF1ˆ/PJ&sU1 W)uwf @ɿͪՊT )Qdё)Z}a~V nXk*%;1M39"T.m9T83J k=q<6l_puMj_IENDB`zim-0.72.0/icons/zim24.png0000664000175000017500000000255613100604220015033 0ustar jaapjaap00000000000000PNG  IHDRw=bKGDԂ pHYs oy vpAgxLrIDATHœ[lTUsLg-r)% $VZBc%hFh>! ڊ<T)Pi>sn{ЩU4O׿?Oaq7B*aRha 8 /TW*ꎶ}B1.- B \*^fTļNeO/X +ymv@I7NoT ﮄwg'}r!- ͮC}@;.T9_TZJ R5іg\ÍSC3|Wr'@`(@x!lnkm?'+Gl2(RCʊ]*ʫJXk{Eȸ_fφ{qׇr a(Ko94uα0RHOdS sHɫm  `^k]OVڞUnUQI$2)24e s~W z}ؙۭa|P[6߫A*$MdyK-m-?m]o`#ɢrC2v,$70Mh8Bat:DoUc\R@uﷰؘc;abҷߤ%iG|-l< NTvcI9Bl vy_Y.8;K+,iaonBuy?1gQ5=\dI_Z9|@JfBtB(% !gA D&hx4kk(.t|(tybMICl"A/wox\ 3n !9ݱ{.ybo#ѽw&[-Y:# image/svg+xml zim-0.72.0/icons/zim32.svg0000664000175000017500000006020313100604220015036 0ustar jaapjaap00000000000000 image/svg+xml zim-0.72.0/icons/zim22.svg0000664000175000017500000005060613100604220015043 0ustar jaapjaap00000000000000 image/svg+xml zim-0.72.0/PLUGIN_WRITING.md0000644000175000017500000002115113451350005014766 0ustar jaapjaap00000000000000Plugins ======= Plugins one of the two extension mechanisms supported by zim. Plugins are loaded as part of the application code and can modify key components of the interface. In fact one of our design goals is to keep the core functionality limitted and ship default plugins for anything a user would want to be able to disable. ( The other extension mechanism being "custom tools". The later allows defining tools in the zim menu that call an external script or application. This can be used to add some simple functions that only act on the files in the notebook. ) Plugins are written in Python3 and consists of a class defining the plugin and one or more extension classes. See the module `zim.plugins` for API documentation of the plugin framework. **NOTE:** Under the GPL license used for distributing this program all plugins should also be licensed under the GPL. A closed source plugin extension is not allowed. A plugin is allowed to call any non-GPL program as long as the plugin itself is under GPL and the non-GPL program runs as a separate process with a clearly defined inter process communication interface. ## Defining your plugin Plugins are simply sub-modules of the `zim.plugins` python package. However only core plugins should be placed directly in the module folder. To allow plugins to be installed locally, the `$XDG_DATA_HOME/zim/plugins` folder and all `$XDG_DATA_DIRS/zim/plugins` folders are added to the search path for `zim.plugins`. By default the home folder would be `~/.local/share/zim/plugins`. The best for packaging is then is to organize your plugin as a folder with a `__init__.py` containing the main plugin class. Users can then directly unpack this folder to `~/.local/share/zim/plugins` or directly branch you git repository to this location. The main plugin class should provide information for Zim to recognize the plugin and add it to the preferences dialog. Example plugin class: ```python3 from zim.plugins import PluginClass class MyPlugin(PluginClass): plugin_info = { 'name': _('My Plugin'), 'description': _('My first plugin') 'author': 'Your Name', } ``` **NOTE:** when testing your plugin you will have to quite zim and restart after changing the plugin code because once a plugin is loaded it keeps using the copy from memory. ## Adding functionality to your plugin The plugin class itself does not do much other than providing information about the plugin and it's preferences. To add functionality to your plugin you need to define one or more classes that do the actual work. These will be "extension" classes and must derive from a extension base-class. You can find all extension points in the application by searching for the `@extendable` class decorator. Classes that are extendable have this decorator and thus declare what extension base class they support. For example to add functionality to the `PageView` class, you must define a class derived from `PageViewExtension`. At the time of writing these extension base-classes are defined: - `NotebookExtension`: for functions that act on signals of the notebook - `PageViewExtension`: for functions that add functionality to the editor window, or want to add side panes next to the editor - `InsertedObjectTypeExtension`: special extension for plugins that want to define an object type (e.g. equation) that can be rendered in line in the text -- see also to `zim.plugins.base.imagegenerator` module - `MainWindowExtension`: for any other changes to the mainwindow that are not handled by a `PageViewExtension` When you define a subclass of such an extension class it will be loaded automatically by the plugin for each instance of the target component. Key interfaces for extensions are: adding actions, adding widgets, connecting to signals and calling methods on the extended object. Apart from extensions there is one other class that will also be used automatically: Classes derived from the `Command` class are used to handle commandline arguments in the form "`zim --plugin yourplugin`". ## Preferences and properties Preferences are maintained by the plugin object and are global for the application. That means that they apply in the same way for all notebooks. If your plugin has behavior that should be different per notebook you need to use the notebook properties instead. Preferences can be defined by adding a list of `plugin_preferences` to your plugin class. Within the plugin these are accessible through the `preferences` dict and in the user interface they will show up in the plugin configuration in the preferences dialog. Notebook properties can be defined similarly by adding a list of `plugin_notebook_properties` to the plugin class. To obtain the properties for a specific notebook as a dict you need to call the plugin method `notebook_properties()`. In the user interface they will show up in the properties dialog. ## Actions Some extension classes use actions to define menu items. These can be defined using the `@action` or `@toggle_action` decorators from the `zim.actions` module. ## Accessing functions of other plugins The functions `get_extension()` and `get_action()` can be used to access extensions and actions defined by other plugins. ## Signals Zim is build using the Gtk / GObject toolkit. This toolkit relies heavily on the concept of "signals" to collaborate between classes. In short this means that any class can define a number of signals that are emitted for various events. Objects that are interested in these events can register an event handler using the `connect()` method. Zim defines a `SignalConnectorMixin` class in `zim.signals` with some convenience methods for classes that want to connect to signals. For classes that do not derive for GObject classes but do want to emit their own signales zim has it's own `SignalEmitter`class in `zim.signals`. Keep in mind that with each `connect()` an object reference is created to the handler method. The reference is kept by the object that is being connected to and is only broken when that object is being destroyed. So if you do object_A.connect('some-signal', object_B.some_method) then object_B will not be destroyed as long as object_A is alive. On the other hand, if object_A is destroyed, object_B simply doesn't get any signals anymore. The `SignalConnectorMixin` class keeps track of the connections it made, which helps in cleaning up. ## Coding Style & Conventions See the python style guide for best practices. Some additional remarks: * In contradiction to the style guide, zim uses `TAB`s (not spaces) with a tabstop set to the equivalent of 4 spaces * Only use "assert" for checks that could be removed when code is stable, these statements could be optimized away * Writing test cases is good, full test coverage is better. Run `./test.py --cover` to get a coverage report. * Use signals for colaboration between classes where possible * Signal handlers have a method name starting with "do_" (for signals of the same classe) or "on_" (for signals of collaborating classes) ### Test suite Zim comes with a full test suite, it can be executed using the `test.py` script. See `test.py --help` for it's commandline options. This test suite will at least test for all plugins that they can be loaded and contain proper information. To test the specific functions of your plugin, you need to write your own test case. Have a look at test cases of existing plugins for ideas how to do that. ## Merge request checklist If you think your plugin is a good fit for the list of default plugins in Zim you can create your own branch of the zim source code with your plugin added and open a merge request. Some things to consider: * Make sure the plugin not only solves your own problem, but is also applicable for a more generic use case that many people may have * Each plugin should have it's own page in the user manual that explains what it does and how to use it. * Each plugin should come with its own test cases for the test suite. Other developers may not use your plugin, so if it breaks later on it may go undetected unless there is a test case for it. Also see [CONTRIBUTING.md](./CONTRIBUTING.md) for more guidelines on getting new features accepted for the main repository. ## How to ... *If your answer is not in this list, see if any of the default plugins do something similar and inspect the code.* ### Let a plugin handle a specific URL scheme The PageView object defines a signal `activate-link`. An extension object can connect to this signal and check the link that is being opened. If it matches the URL scheme of interest you can handle it and return `True` to let the PageView know it should not try to open this link itself. zim-0.72.0/msgfmt.py0000644000175000017500000001557113442520505014127 0ustar jaapjaap00000000000000#! /usr/bin/env python3 # Written by Martin v. Löwis """Generate binary message catalog from textual translation description. This program converts a textual Uniforum-style message catalog (.po file) into a binary GNU catalog (.mo file). This is essentially the same function as the GNU msgfmt program, however, it is a simpler implementation. Usage: msgfmt.py [OPTIONS] filename.po Options: -o file --output-file=file Specify the output file to write to. If omitted, output will go to a file named filename.mo (based off the input file name). -h --help Print this message and exit. -V --version Display version information and exit. """ import os import sys import ast import getopt import struct import array from email.parser import HeaderParser __version__ = "1.1" MESSAGES = {} def usage(code, msg=''): print(__doc__, file=sys.stderr) if msg: print(msg, file=sys.stderr) sys.exit(code) def add(id, str, fuzzy): "Add a non-fuzzy translation to the dictionary." global MESSAGES if not fuzzy and str: MESSAGES[id] = str def generate(): "Return the generated output." global MESSAGES # the keys are sorted in the .mo file keys = sorted(MESSAGES.keys()) offsets = [] ids = strs = b'' for id in keys: # For each string, we need size and file offset. Each string is NUL # terminated; the NUL does not count into the size. offsets.append((len(ids), len(id), len(strs), len(MESSAGES[id]))) ids += id + b'\0' strs += MESSAGES[id] + b'\0' output = '' # The header is 7 32-bit unsigned integers. We don't use hash tables, so # the keys start right after the index tables. # translated string. keystart = 7*4+16*len(keys) # and the values start after the keys valuestart = keystart + len(ids) koffsets = [] voffsets = [] # The string table first has the list of keys, then the list of values. # Each entry has first the size of the string, then the file offset. for o1, l1, o2, l2 in offsets: koffsets += [l1, o1+keystart] voffsets += [l2, o2+valuestart] offsets = koffsets + voffsets output = struct.pack("Iiiiiii", 0x950412de, # Magic 0, # Version len(keys), # # of entries 7*4, # start of key index 7*4+len(keys)*8, # start of value index 0, 0) # size and offset of hash table output += array.array("i", offsets).tostring() output += ids output += strs return output def make(filename, outfile): ID = 1 STR = 2 # Compute .mo name from .po name and arguments if filename.endswith('.po'): infile = filename else: infile = filename + '.po' if outfile is None: outfile = os.path.splitext(infile)[0] + '.mo' try: lines = open(infile, 'rb').readlines() except IOError as msg: print(msg, file=sys.stderr) sys.exit(1) section = None fuzzy = 0 # Start off assuming Latin-1, so everything decodes without failure, # until we know the exact encoding encoding = 'latin-1' # Parse the catalog lno = 0 for l in lines: l = l.decode(encoding) lno += 1 # If we get a comment line after a msgstr, this is a new entry if l[0] == '#' and section == STR: add(msgid, msgstr, fuzzy) section = None fuzzy = 0 # Record a fuzzy mark if l[:2] == '#,' and 'fuzzy' in l: fuzzy = 1 # Skip comments if l[0] == '#': continue # Now we are in a msgid section, output previous section if l.startswith('msgid') and not l.startswith('msgid_plural'): if section == STR: add(msgid, msgstr, fuzzy) if not msgid: # See whether there is an encoding declaration p = HeaderParser() charset = p.parsestr(msgstr.decode(encoding)).get_content_charset() if charset: encoding = charset section = ID l = l[5:] msgid = msgstr = b'' is_plural = False # This is a message with plural forms elif l.startswith('msgid_plural'): if section != ID: print('msgid_plural not preceded by msgid on %s:%d' % (infile, lno), file=sys.stderr) sys.exit(1) l = l[12:] msgid += b'\0' # separator of singular and plural is_plural = True # Now we are in a msgstr section elif l.startswith('msgstr'): section = STR if l.startswith('msgstr['): if not is_plural: print('plural without msgid_plural on %s:%d' % (infile, lno), file=sys.stderr) sys.exit(1) l = l.split(']', 1)[1] if msgstr: msgstr += b'\0' # Separator of the various plural forms else: if is_plural: print('indexed msgstr required for plural on %s:%d' % (infile, lno), file=sys.stderr) sys.exit(1) l = l[6:] # Skip empty lines l = l.strip() if not l: continue l = ast.literal_eval(l) if section == ID: msgid += l.encode(encoding) elif section == STR: msgstr += l.encode(encoding) else: print('Syntax error on %s:%d' % (infile, lno), \ 'before:', file=sys.stderr) print(l, file=sys.stderr) sys.exit(1) # Add last entry if section == STR: add(msgid, msgstr, fuzzy) # Compute output output = generate() try: open(outfile,"wb").write(output) except IOError as msg: print(msg, file=sys.stderr) def main(): try: opts, args = getopt.getopt(sys.argv[1:], 'hVo:', ['help', 'version', 'output-file=']) except getopt.error as msg: usage(1, msg) outfile = None # parse options for opt, arg in opts: if opt in ('-h', '--help'): usage(0) elif opt in ('-V', '--version'): print("msgfmt.py", __version__) sys.exit(0) elif opt in ('-o', '--output-file'): outfile = arg # do it if not args: print('No input file given', file=sys.stderr) print("Try `msgfmt --help' for more information.", file=sys.stderr) return for filename in args: make(filename, outfile) if __name__ == '__main__': main() zim-0.72.0/CHANGELOG.md0000644000175000017500000010176213532016534014071 0ustar jaapjaap00000000000000Changes for zim =============== Jaap Karssenberg This branch is the Python rewrite and starts with version 0.42. Earlier version numbers for zim correspond to the Perl branch. ## 0.72.0 - Thu 29 Aug 2019 * Improve pathbar with "linked" visual design * Improve statusbar visual style * Change behavior for lists with mixed bullets * Add configuration of keybindings to preferences dialog * Support gnome-screenshot in the insert screenshot pluing * Save size of secondary page window * Add option for linenumbers option in insert code block dialog * Add option to display date column in tasklist side pane * Add warnings if locale does not support unicode * Make SVG thumbnail support configurable * Fix bug for insert equation and other objects * Fix use of escape sequence in table cells * Fix tasklist view for multiple dates in task * Fix "apply heading" to strip list formatting * Make ToC plugin update instead of refresh on save * Fix issue with not-unique headings in tableofcontents * Fix bugs in auto insert bullet at newline ## 0.71.1 - Thu 23 May 2019 * Fix robustness for OSError on process startup * Fix for popup menu on page index for Gtk < 3.22 * Updated translations ## 0.71.0 - Thu 25 Apr 2019 * Fix "spill over" between translation files * Fix use of popup menus * Hack to work around textview glitches embedded objects * Make indexer recover from duplicate page names * Fix recovery of broken index file on startup * Restore New Sub Page for index context menu * Let customtools replace autoselected words and insert * Fallback encoding when calling external applications * Hide pathbar in distraction free mode * Merge fix for unicode completion in dialogs * Remember cursor position on reload * Fix inlinecalculator plugin * Update Gtk prerequisite version to 3.18 * Updated Russian translation ## 0.70 - Thu 28 Mar 2019 * Ported zim to use Python3 & Gtk3 * Refactored application framework, all windows run single process now with single plugin manager and preferences manager * Refactored plugin extension loading code and added functions to find extensions and actions * Removed the notebook "profile" properties * Plugins now can use notebook properties to store settings per notebook * The page index side pane and the pathbar are now plugins * Redesign journal plugin sidepane view and remove dialog * Renamed "calendar" plugin to "journal" * Removed OSX menubar plugin * Image generator plugins now are "inserted objects" * Workaround for missing clipboard.set_with_data() * Improved speed of test suite and refactored test constructs * Support flatpack-spawn to execute processes * Critical fix for updating links on move page and rename page * Critical fix for parsing headers when page has no title * Fix page index issue on delete page ## 0.69 - Sun 16 Dec 2018 * Performance improvements for indexing large notebooks * Performance improvement for auto-completion of page names in dialogs * Updated translations from launchpad ## 0.68 - Sat 17 Mar 2018 * Critical fix for updating links on move page and rename page * Critical fix for rename page and indexing on case-insensitive file systems (like windows) * Fix for regression in tasklist option to _not_ regard all checkboxes as tasks -- Fabian Stanke * Fix for egression in index navigation with previous page and next page * Fix for memory leak in spell checker plugin -- Alexander Meshcheryakov * Fix issues with multi-line selections in linesorter plugin * Fix bug with opening notebook list from tray icon * Fix bug with "-s" commandline argument for exporting * Fix bug with importing attachments in quicknote plugin commandline use * Pathbar now reveals more path elements in case of ambiguous pages -- Robert Hailey * Add "font" property for use in "styles.conf" * Add "navigation.home" to template parser for export -- Rolf Kleef * Version control plugin updated to better handle git staging -- Paul Becker * Extend interface for "image generator" plugins - Robert Hailey * Code cleaned up to be a bit PEP8 compliant and more future proof for python3 conversion -- Christian Stadelmann ## 0.67 - Mon 10 Jul 2017 * Critical fix for missing page headers & remembering custom headers * Critical fix by removing dependency on threading for index and socket handling - Hidden option to also do autosave without thread to test further issues * Critical fix for handling unicode file names on windows * Fix issue where config values go missing if not used * Fix error for file shortcuts in various dialogs * Restored macOS integration using a plugin * Shorter socket name to avoid os specific error on OS X * More robustness for socket errors, fallback to --standalone automaticlly * More robustness at startup when default notebook went missing, fallback to --list * More robustness in preferences dialog when plugins give exceptions * More robustness for invalid dates in tasklist parser * Merge patch to add accelerators for bookmarks * Updated build process for windows installer * Fix indexing errors on move/rename page * Fix regression in close-page when autosave ongoing * Fix regression drag-n-drop index pane * Fix regression for keybindings in index pane * Fix regressions for attaching files * Fix regression for opening folders * Fix regression in opening inter-wiki links * Fix regression in custom tools * Fix regression in completion of page name in dialog entry * Fix regression in quicknote "--attachments" option * Fix regression for quicknote plugin due to process management * Fix regression in date format for recentchanges dialog * Fix regression in custom tool execution * Fix for unicode in auto-linking * Fix for unicode in arithmetic plugin * Fix "insert image" also inserting a text link * Fix search regex for chinese language to not match whitespace for start/end of word * Fix for table editor plugin when sorting rows * Fix for wrong usage of escapes in latex export for verbatim blocks ## 0.66 - Fri 28 Apr 2017 * Multiple notebooks run as single process now to reduce multi-process complexity - more robust startup, reduce need for "--standalone" * SQLite indexer re-written to fix long standing bugs and design flaws with indexing * Improved performance tag filtering in side pane * Detect pages have changed on disk, even when page present in cache * Bug fix for drag-n-drop of text within the editor * New checkbox type available for "moved task" for journal workflow * Context menu defined for checkboxes * Horizontal lines "


" added to wiki syntax -- Pavel_M * Pathbar buttons can now also be used to insert page links by drag-n-drop -- Klaus Holler * "search in section" added to context menu for pages * "search backlinks" added to context menu for pages -- Volodymyr Buell * Keyboard navigation of plugin tab in preferences dialog -- Jens Sauer * Allow "mailto:" links contain arguments like "?subject=" * Tasklist plugin: now also available embedded in side pane * Tasklist plugin: new syntax for including due and start dates * Tasklist plugin: new formatting priority column including deadlines * Tasklist plugin: new "flat list" mode to only see lowest level tasks * Tasklist plugin: removed support for "next" label * Tasklist plugin: dialog now remembers sorting -- Jonas Pfannschmidt * Versioncontrol plugin: git: removed global "git add", instead stage individual files * Versioncontrol plugin: fossil: fix for fossil "addremove" * Attachment browser: bug fix for drag-n-drop * Linesorter plugin: added keybindings to move / duplicate / delete lines -- Johannes Kirschner * Sourceview plugin: bug fix to make export via commandline also use objects -- Alex Ivkin * Sourceview plugin: bug fix to follow editable state of parent window -- Jan Taus * Bookmarks plugin updates -- Pavel_M * Tableeditor plugin: bug fix for links -- Sašo Živanović * Linkmap plugin: bug fix "unexpected char '-'" * Arithmic plugin: bug fix to allow negative numbers -- TROUVERIE Joachim * Dev: Templates are now translatable, using "gettext()" -- Jens Sauer * Dev: Index API completely changed, see tasklist for a plugin example * Dev: New module for file-system interaction, to be used in new code * Dev: New parsing strategy based on tokenlist, used for tasklist parser * Dev: Defined notebook API for concurrent operations in gtk main loop * Dev: Simplified SignalEmitter code * Packaging: removed support for maemo build - code went stale * Packaging: make package build reproducible -- Reiner Herrmann * Added translations for: Amharic, Arabic, Basque, and Portuguese ## 0.65 - Sun 01 Nov 2015 This release fixes two critical bugs in version 0.64: * keybindings fail for older gtk versions, and in particular for the keybinding * The table editor tends to drop columns of content in the precences of empty cells ## 0.64 - Tue 27 Oct 2015 * Bookmark plugin - by Pavel M * Updated spell plugin to allow using gtkspellcheck as backend * Updated attachmentbrowser plugin with new thumbnailing logic * Speed up of sqlite indexing * Updated support for OS X - by Brecht Machiels * Bug fixes for the Fossil version control support * Bug fixes for locale in strftime and strxfrm functions * Bug fix to avoid overwriting the accelmap config file ## 0.63 - Sat 13 Jun 2015 * Table plugin - by Tobias Haupenthal * Support for Fossil version control - by Stas Bushuev ... Many bug fixes ## 0.62 - Tue 30 Sep 2014 Bug fix release * Fixed broken Source View plugin * Fixed Tray Icon plugin for Ubuntu * Fixed bug with Caps Lock on windows * Fixed behavior of New Page dialog * Fixed status parsing for Git backend * Fixed bug with CamelCase parsing for Persian & Arabic script * Fixed parsing of numbered list character to be robust for Chinese characters * Fixed bug with www server dialog * Fixed bug in Go Child Page action * Fixed export using the S5 slideshow template - now splits by heading * Fixed bug in indexing for python 2.6 * Fixed bug in Open Notebook dialog when selecting current notebook * Changed lookup path for 3rd party plugin modules - now uses XDG path * Merged patch to support more screenshot tools in the Insert Screenshot plugin - Andri Kusumah * Updated Sort Lines plugin to use natural sorting for unicode * Added control for handling of line breaks in HTML export * Changed rendering of checkboxes in HTML export * Merged patch to set image size for GNU R plugin - Olivier Scholder * Added control to toggle full page name in Tag index view * Added handling of SIGTERM signal ## 0.61 - Thu 31 Jul 2014 * Full refactoring of code for parsing and processing wiki syntax making parser easier to extend and document interface more scalable * Full refactoring of code for plugin framework making plugins more flexible by defining decorators for specific application objects * Full refactoring of code for exporting pages from zim - Now supports MHTML export format - Supports exporting multiple pages to a single file - Supports recursive export of a page and all it's sub-pages - Templates now support many more instructions and expressions * Full refactoring of the code for parsing commandline commands and initializing the application * New config manager code to make parsing and handling of config files more robust * Merged new plugin for editing sequence diagrams by Greg Warner * Improved the ToC plugin with floating widget * Fixed unicode issue when calling external applications, and in particular for the hg and git commands * Fixed support for unicode CamelCase word detection * Fixed bug on windows with unicode user names in background process connection * Changed "tags" plugin to show full page paths in the pre-tag view * Added option for custom commands to replace the current selection * Added keybindings for XF86Back and XF86Forward * Many small fixes & patches from various persons that I forgot about *sorry* * Added Finnish translation ## 0.60 - Tue 30 Apr 2013 * In this release the required python version is changed from 2.5 to 2.6 ! * Added a Recent Changes dialog and a Recent Changes pathbar option * Added search entry to toolbar * Added function to attachment browser plugin to zoom icon size * Added new template by Robert Welch * Critical bug fix for using templates that have a resources folder * Fix for week number in Journal plugin page template (again) * Fix for focus switching with distraction free editing plugin * Fix for handling BOM character at start of file * Fixed quicknote dialog to ask for confirmation on discard * Fix to allow calling executables that do not end in .exe on windows * Fix for various typos in the manual by Stéphane Aulery * Removed custom zim.www.Server class in favor of standard library version * New translations for Korean and Norwegian Bokmal ## 0.59 - Wed 23 Jan 2012 * Critical bug fix in pageview serialization * Fix for inheritance of tags in tasklist - Epinull * Fix for customtools dialog - Epinull * Fix for week number in Journal plugin page template ## 0.58 - Sat 15 Dec 2012 * Added new plugin for distraction free fullscreen mode * Added options to limit tasklist plugin to certain namespaces - Pierre-Antoine Champin * Added option to tasklist plugin to flag non-actionable tasks by a special tag * Added prompt for filename for Insert New File action * Added template option to list attachments in export * Added class attributes to links in HTML output * Added two more commandline options to quicknote plugin * Made sidepanes more compact by embedding close buttons in widgets * Critical fix for restarting zim after a crash (cleaning up socket) * Bug fix for search queries with quoted arguments * Bug fix for use of tags in the tasklist plugin * Bug fix for wiki format to be more robust for bad links * Bug fix for latex format to not use file URIs in \includegraphics{} * Bug fix for including latex equations in latex export * Bug fix list behavior checkboxes and numbered lists * Fix first day of week locale for calendar plugin - based on patch by Leopold Schabel * Fix for handling "file:/" and "file://" URIs in links - see manual for details * Fix for windows to not open consoles for each external application - klo uo * Fix for windows to put config files under %APPDATA% - klo uo * Fix to have "update heading" toggle in rename dialog more intelligent - Virgil Dupras * Fix to make template errors report relevant error dialogs * Fix for search and replace whitespace in pageview * Various small fixes ## 0.57 - Mon 8 Oct 2012 * Ported zim background process to use the multiprocessing module - this fixes app-indicator issues under Ubuntu Unity - adds support for quicknote and other plugins on Windows * Reworked application framework and "open with" dialog, now also allows to set applications per URL scheme * New plugin for using GNU Lilypond to render music scores - Shoban Preeth * New Zeitgeist plugin - Marcel Stimberg * Added template method to iterate days of the week for a calendar page * Added pythonic syntax to access dicts to template modules * Added tasklist option to take into account a Mon-Fri work week * Fixed start of week and week number first week of the year for calendar plugin * Added "untagged" category to task list * Fixed strike out TODO label showing up in task list * Added template editor dialog * Added support for "forward" and "back" mouse buttons * Added support for exporting to ReST - Yao-Po Wang * Added new option to create and insert new attachments based on file template * Added an argument to the quicknote plugin to import attachments * Added icons per mimetype to the attachmentbrowser * Added statusbar button for attachment browser * Added monitors to watch attachment folder for updates * Fix drag&drop on non-existing folder in attachment browser * Fix drag&drop for attachment folder on windows * Made location of plugin widgets in side panes configurable and reworked key bindings for accessing side panes and toggling them * Made tags plugin to revert to standard index if no tag is selected * Page completion now matches anywhere in the basename -- patch by Mat * Patch to use sourceview in imagegenerator dialog - Kevin Chabowski * Fix for insert symbol dialog to insert without typing a space * Made image data pasted as bmp convert to png to make it more compact * Critical bug fix for version control plugin * Critical bug fix for xml.etree.TreeBuilder API for python 2.7.3 * Bug fix for exceptions in index - Fabian Moser * Bug fix for interwiki links * On windows fix for bug when home folder or user name contain non-ascii characters * Fixed help manual opens in compiled windows version * Fixed locale support on windows * Added translations for Brazilian Portuguese and Romanian ## 0.56 - Mon 2 Apr 2012 * Merged support for Git and Mercurial version control backends - Damien Accorsi & John Drinkwater * Merged plugin for "ditaa" diagrams - YPWang * Merged patch for different configuration profiles, allowing per notebook configuration of plugins, font etc. - Mariano Draghi * Added drag & drop support for the Attachment Browser plugin * Made sidepane and tagcloud remember state * Fixed critical bug for opening email adresses without "mailto:" prefix * Fixed bug where context menu for page index applied to the current page instead of the selected page * Added a Serbian translation ## 0.55 - Tue 28 Feb 2012 * Numbered lists are now supported * The index now has "natural" sorting, so "9" goes before "10" * Added new plugin to show a Table Of Contents per page, and allows modifying the outline * Added Markdown (with pandoc extensions) as an export format * New context menu item "move text" for refactoring text to a new page * Tasklist now supports a "next:" keyword to indicate dependencies, and it can hide tasks that are not yet actionable * Made zim taskbar icons and trayicon overloadable in theme - Andrei * Fixed behavior of Recent Pages pathbar in cases where part of the history is dropped * Fixed behavior of the Search dialog, it no longer hangs and also allows cancelling the search * Fixed bug where replacing a word (e.g spell correction) could drop formatting * Fixed behavior of case-sensitive rename on a case-insensitive file system (windows) ## 0.54 - Thu 22 Dec 2011 Bug fix release with minor feature enhancements * Added mono icons for the Ubuntu Unity panel * Tasklist plugin now supports hierarchic nested tasks * Added "automount" plugin to automatically mount notebook folders * Interwiki lookup now goes over all urls.list files in the path * Fixed bug that prevented clicking links in read-only mode * Fixed bug for parsing relative paths to parent pages e.g. in drag and drop * Fixed bug causing the index to jump with every page selection * Fixed bug causing the icon for custom tools to be missing in the toolbar * Fixed bug for drag and drop of files on windows * Fixed bug causing task list to reset when page is saved * Fixed autocomplete for page entry in quicknote * Fixed error in "you found a bug" error dialogs :S * Fixed issue in test suite for loading pixbufs * Added translation for Galician ## 0.53 - Mon 19 Sep 2011 * Cosmetic updates to entry widgets, the page index, the insert date dialog, and the tasklist dialog * Updated the find function to properly switch focus and highlight current match even when text does not have focus - Oliver Joos * Added function to remember the position of the main window across sessions and the position of dialog within a session - Oliver Joos * Added "interwiki keyword" to give shorthand for linking notebooks - Jiří Janoušek * Added template function to create a page index - Jiří Janoušek * Added support to include additional files with a template - Jiří Janoušek * Added preference for always setting the cursor position based on history or not * Added feature so images now can have a link target as well - Jiří Janoušek * Refactored index to do much less database commit actions, resulting in performance gain on slow storage media * Added "print to browser" button in the tasklist dialog * Added "--search" commandline option * Added feature for calendar plugin to use one page per week, month, or year instead of one page per day - Jose Orlando Pereira * Added feature to have implicit deadline for tasks defined on a calendar page - Jose Orlando Pereira * Added new plugin for evaluating inline arithmetic expressions - Patricio Paez * Added support for plugins to have optional dependencies - John Drinkwater * Added hook so plugins can register handlers for specific URL schemes * Upgraded test suite to unittest support shipped with python 2.7 * Increased test coverage for main window, dialogs, and image generator plugins * Many small typo fixes and code cleanup - Oliver Joos * Extensive updates for the developer API documentation - now using epydoc * Made file paths in config file relative to home dir where possible in order to facilitate portable version (e.g. home dir mapped to USB drive) * Build code updated to build new windows installer and support for portable install - Brendan Kidwell * Fixed build process to hardcode platform on build time (maemo version) * Fixed bug in notebook list, causing compiled version to be unable to set a default notebook (windows version) * Fixed bug with copy-pasting and drag-n-drop using relative paths * Fixed bug allowing to click checkboxes in read-only mode * Fixed several possible exceptions when moving pages * Fixed execution of python scripts on windows - Chris Liechti * Fix to preserve file attributes (like mtime) when copying attachments - Oliver Joos * Fixed path of checkbox images in html export - Jiří Janoušek * Fix for indexing error in scenario with external syncing (e.g. dropbox) * Fix for latex output to use "\textless{}" and "\textgreater{}" * Fixed Maemo window class, and python 2.5 compatibility - Miguel Angel Alvarez * Fixed unicode usage in template module - Jiří Janoušek * Fixed error handling for errors from bzr in versioncontrol plugin * Fixed error handling for errors due to non-utf-8 encoded text in pages ## 0.52 - Thu 28 Apr 2011 Bug fix release * Fixed a critical bug in the "Add Notebook" prompt for the first notebook on a fresh install and two minor bugs with the ntoebook list - Jiří Janoušek ## 0.51 - Tue 19 Apr 2011 * Fixed critical bug with resizing images - Stefan Muthers * Fixed bug preventing resizing of text entries in dialogs * Fixed bug disabling auto-completion for page names in dialogs * Fix so cancelling the preferences dialog will also reset plugins - Lisa Vitolo * Fix to switch sensitivity of items in the Edit menu on cursor position - Konstantin Baierer * Fix to handle case where document_root is inside notebook folder - Jiří Janoušek * Fixed support for interwiki links in export * Fixed "Link Map" plugin to actually support clicking on page names in the map * Fixed copy pasting to use plain text by default for external applications added preference to revert to old behavior * Disable keybinding due to conflicts with internationalization added hidden preference to get it back if desired * Added support for organizing pages by tags - Fabian Moser * Added feature to zoom font size of the page view on + / - - Konstantin Baierer * Added support for system Trash (using gio if available) * Added Calendar widget to the "Insert Date" dialog * Added plugin to sort selected lines - NorfCran * Added plugin for GNUplot plots - Alessandro Magni ## 0.50 - Mon 14 Feb 2011 Maintenance release with many bug fixes. Biggest change is the refactoring of input forms and dialogs, but this is not very visible to the user. * Added custom tool option to get wiki formatted text * Added option to Task List plugin to mix page name elements with tags * Added style config for linespacing * Cursor is now only set from history when page is accessed through history * Updated latex export for verbatim blocks and underline format * Added basic framework for plugins to add widgets to the main window * Notebook list now shows folder path and icon - Stefan Muthers * Folder last inserted image is now remembered - Stefan Muthers * Preview is now shown when selecting icons files - Stefan Muthers * Image paths are now made relative when pasting image an file - Jiří Janoušek * Image data is now accepted on the clipboard directly - Stefan Muthers * Added overview of files to be deleted to Delete Page dialog to avoid acidental deletes * Added traceback log to "You found a bug" error dialog * Fixed critical bug for windows where zim tries to write log file to a non-existing folder * Fixed critical bug where text below the page title goes missing on rename * Fixed behavior when attaching files, will no longer automatically overwrite existing file, prompt user instead - Stefan Muthers * Fixed bug when opening notebooks through an inter-wiki link * Fixed support for month and year pages in Calendar namespace * Fixed support for wiki syntax in Quick Note dialog when inserting in page * Fixed bug in Task List plugin where it did not parse checkbox lists with a label above it as documented in the manual * Fixed bug with custom template in export dialog - Jiří Janoušek * Fixed bug with style config for tab size * Fixed many more smaller bugs * Rewrote logic for indented text and bullet lists, fixes remaining glitches in indent rendering and now allow formatting per bullet type * Refactored part of the Attachment Browser plugin, no longer depends on Image Magick for thumbnailing and added action buttons * Refactored code for input forms and decoupled from Dialog class * Refactore History class to use proper Path objects * Added significants amount of test coverage for dialog and other interface elements * Package description of zim was rewritten to be more readable * Added translation for Danish ## 0.49 - Tue 2 Nov 2010 * Added experimental Attachment Browser plugin - by Thorsten Hackbarth * Added Inline Calculator plugin * Made file writing logic on windows more robust to avoid conflicts * Fixed bug with unicode characters in notebook path * Fixed 'shared' property for notebooks * Patch to update history when pages are deleted or moved - by Yelve Yakut * Patch backporting per-user site-packages dir for python 2.5 - by Jiří Janoušek * Fix for bug with spaces in links in exported HTML - by Jiří Janoušek * Fixed bug forcing empty lines after an indented section * Patch for indenting in verbatim paragraphs - by Fabian Moser * Fixed bug with unicode handling for file paths * Added names for pageindex and pageview widgets for use in gtkrc * Patch to jump to task within page - by Thomas Liebertraut * Added option for setting custom applications in the preferences * Fixed printtobrowser plugin to use proper preference for web browser * Added default application /usr/bin/open for Mac * Imporved behavior of 'Edit Source' * Added checkbox to quicknote dialog to open the new page or not * Added support for outlook:// urls and special cased mid: and cid: uris * Added translations for Hungarian, Italian and Slovak ## 0.48 - Thu 22 Jul 2010 * Added support for sub- and superscript format - by Michael Mulqueen * Updated the export dialog to an Assistant interface * Renamed "Create Note" plugin to "Quick Note" * Improved the "Quick Note" plugin to support appending to pages and support templates * Fixed webserver to be available from remote hosts and to support files and attachments * Merged support for Maemo platform with fixes for zim on a small screen - by Miguel Angel Alvarez * Updated zim icon and artwork * Several fixes for latex export - by Johannes Reinhardt * Fixed inconsistency in formatting buttons for selections * Fixed bug that prevented adding custom tools without icon * Fixed bug with deleting directories on windows * Added translations for Catalan, Croatian and Slovak ## 0.47 - Sun 6 Jun 2010 Big release with lots of new functionality but also many bug fixes * Significant performance improvements for the page index widget * Task list plugin now uses the index database to store tasks, this makes opening the dialog much faster. Also the dialog is updated on synchronous as soon as changes in the current page are saved. * Added support for "TODO" and "FIXME" tags in task list plugin, as a special case headers above checkbox lists are supported as well * Added "create note" dialog to quickly paste text into any zim notebook, it is available from the trayicon menu and can be called by a commandline switch * Support added for new "app-indicator" trayicon for Ubuntu 10.4 * Added support to start trayicon by a commandline switch * Option added to reformat wiki text on the fly (Johannes Reinhardt) * Attach file dialog can now handle multiple files at once (Johannes Reinhardt) * Layout for linkmap improved by switching to the 'fdp' renderer * Added new plugin "Insert Symbols" for inserting e.g. unicode characters * Added new plugin to insert and edit plots using GNU R (Lee Braiden) * Added scripts needed to build a windows installer and fixed various issues relating to proper operation of zim when compiled as windows executable * Added option to delete links when deleting a page or placeholder * Added option to "move" placeholder by updating links * Fixed bug with interwiki links to other notebooks * Fixed various bugs due to unicode file names on windows and non-utf8 filesystems on other platforms * Fixed bug with non-utf8 unicode in urls * Fixed bugs with calendar plugin when embedded in side pane * Fixed support for icons for custom tools * Fixed bug with indented verbatim blocks (Fabian Moser) * Added translation for Traditional Chinese ## 0.46 - Wed 24 Mar 2010 Bug fix release * Fixed critical bug preventing the creation of new pages. ## 0.45 - Tue 23 Mar 2010 This release adds several new features as well as many bug fixes. * Added possiblility to add external applications to the menu as "custom tools" * Added Latex as export format - patch by Johannes Reinhardt * Improved dependency checks for plugins - patch by Johannes Reinhardt * Improved application responsiveness by using threading for asynchronous i/o * Fixed memory leak in the index pane for large notebooks * Fixed drag-n-drop support for images * Fixed index, previous and next pages in export templates * Fixed backlinks in export templates * Improved fallback for determining mimetype without XDG support * Added translations for Hebrew, Japanese and Turkish ## 0.44 - Wed 17 Feb 2010 This release adds improved query syntax for search and several bug fixes * Implemented more advanced search syntax - see manual for details * Implemented recursive checkbox usage and recursive indenting bullet lists * Merged "Insert Link" and "Insert External Link" dialogs * Added options to insert attached images and attach inserted images * Support for recognizing image attachment on windows * Fixed bug for lower case drive letters in windows paths * Fixed bug with non-date links in the calendar namespace * Fixed bug with invalid page names during move page * Fixed bugs with unicode in search, find, task list tags, auto-linking pages and in url encoding * Several fixes in behavior of the page index widget * Added translations for Russian and Swedish ## 0.43 - Sun 17 Jan 2010 This is a bug fix release with fixes for most important issues found in 0.42 * Added update method for data format for older notebooks * Fixed bug with duplicates showing in the index * Fixed bug with indexing on first time opening a notebook * Fixed bug with format toggle buttons in the toolbar * Fixed bug with permissions for files created by zim * Fixed bug with selection for remove_link * Fixed bug with default path for document_root * Fixed bug with updating links to children of moved pages * Added strict check for illegal characters in page names * Improved PageEntry to highlight illegal page names * Improved user interaction for Edit Link and Insert Link dialogs * Trigger Find when a page is opened from the Search dialog * Allow selecting multiple tags in Task List plugin * Allow negative queries in Task List, like "not @waiting" * Checkbox icons are now included in export * Fixed import of simplejson for pyton 2.5 specific * Translations added for: English (United Kingdom), Greek and Polish ## 0.42 - Sun 10 Jan 2010 This is the first release after a complete re-write of zim in python. Functionality should be more or less similar to Perl branch version 0.28, but details may vary. Additional issues addressed in this release: * Moving a page also moves sub-pages and attachments * Deleting a page also deletes sub-pages and attachments * After deleting a page the user is moved away from that page * Wrapped lines in bullet lists are indented properly * Better desktop integration using the default webbrowser and email client * Added a web-based interface to read zim notebooks * Task List now supports tags * Distinguishing between "move page" and "rename page" * Menu actions like "Rename Page (F2)" now follow the focus and work in the side pane as well * Page title can be updated automatically when moving a page * "Link" action behaves more like inserting an object instead of applying formatting * File links are now inserted showing only the basename of the file * Dialogs spawned from another dialog will pop over it * Dialogs remember their window size * Allow user to quit individual notebooks even when the tray icon is in effect * Check for pages that are changed offline now employs MD5 sum to be more robust Translations available for: Dutch, Estonian, Czech, French, German, Korean, Ukrainian, Simplified Chinese and Spanish zim-0.72.0/Makefile0000644000175000017500000000227413451350005013710 0ustar jaapjaap00000000000000PYTHON=`which python3` DESTDIR=/ BUILDIR=$(CURDIR)/debian/zim PROJECT=zim all: $(PYTHON) setup.py build help: @echo "make - Build sources" @echo "make test - Run test suite" @echo "make install - Install on local system" @echo "make source - Create source package" @echo "make buildrpm - Generate a rpm package" @echo "make builddeb - Generate a deb package" @echo "make epydoc - Generate API docs using 'epydoc'" @echo "make clean - Get rid of scratch and byte files" source: $(PYTHON) setup.py sdist $(COMPILE) test: $(PYTHON) test.py install: $(PYTHON) setup.py install --root $(DESTDIR) $(COMPILE) buildrpm: $(PYTHON) setup.py bdist_rpm --post-install=rpm/postinstall --pre-uninstall=rpm/preuninstall builddeb: dpkg-buildpackage -i -I -rfakeroot $(MAKE) -f $(CURDIR)/debian/rules clean epydoc: epydoc --config ./epydoc.conf -v @echo -e '\nAPI docs are available in ./apidocs' clean: $(PYTHON) setup.py clean rm -rf build/ MANIFEST tests/tmp/ locale/ man/ xdg/hicolor test_report.html find . -name '*.pyc' -delete find . -name '*.pyo' -delete find . -name '*~' -delete rm -fr debian/zim* debian/files debian/python-module-stampdir/ rm -fr debian/.debhelper rm -fr .pybuild/ zim-0.72.0/epydoc.conf0000664000175000017500000000060113100604220014364 0ustar jaapjaap00000000000000[epydoc] # Information about the project. name: Zim Desktop Wiki url: http://zim-wiki.org modules: zim # Write html output to the directory "apidocs" output: html target: apidocs/ include-log: yes # Graph options graph: classtree # Code parsing options parse: yes introspect: no # Exclude private methods and signal handlers private: no exclude: zim\.inc\..* .*\.on_.* .*\.do_.* zim-0.72.0/CONTRIBUTING.md0000644000175000017500000001521413503417020014476 0ustar jaapjaap00000000000000Contributing ============ Thank you for considering to contribute to the zim desktop wiki project. Zim is an open source project and run by volunteers, zo all help is welcome. **Help wanted:** there are many issues in the bug tracker need someone to pick them up. To get started please have a look at the [good first issue](https://github.com/zim-desktop-wiki/zim-desktop-wiki/labels/good%20first%20issue) and [plugin idea](https://github.com/zim-desktop-wiki/zim-desktop-wiki/labels/plugin%20idea) labels. ## Other resources * Code repository: https://github.com/zim-desktop-wiki/zim-desktop-wiki * Bug tracker and feature requests: https://github.com/zim-desktop-wiki/zim-desktop-wiki/issues * Public wiki: https://www.zim-wiki.org/wiki/ * Mailing list: https://launchpad.net/~zim-wiki * IRC Channel: #zim-wiki on Freenode IRC network. (Access from your web browser https://webchat.freenode.net/?channels=%23zim-wiki .) ## Filing a bug report To file a bug report, please go to the bug tracker at https://github.com/zim-desktop-wiki/zim-desktop-wiki/issues * Make sure the issue is not already in the list by trying out a few key words in the search box * Describe what you did and what happened in such a way that another user can follow step by step and reproduce the same result * Please include information on your operating system, language settings, and other relevant context information ## Requesting new functionality Also feature requests can go in the bug tracker. In this case: * Please provide a use case description, explain the problem you are trying to solve with the proposed feature before describing the solution. This allows other users to think along and maybe improve on your solution. * Make sure the use case is generic enough that it will benefit other users as well. If it is highly tailored for your specific work flow, changes are that no-one will work on it. ## Getting started with the code See [README.md](./README.md) for instructions to setup zim from source code. Checkout the github repository at https://github.com/zim-desktop-wiki/zim-desktop-wiki to get the latest development branch. The zim code is kept under version control using the git version control system. See the website for documentation on using this system: https://git-scm.com/ ## Bug fixes For obvious bugs with simple fixes a merge request can be opened directly. These should be very easy to review and merge. If you consider something a bug even though the code does what it is supposed to do, please discuss first on the mailing list or through am issue ticket. ## Adding new features Many features can be added through a plugin. Where possible this is the preferred way of extending zim. Using a plugins allows adding lot of configurability via the plugin preferences and properties while keeping the core interfaces simple. See [PLUGIN_WRITING.md](./PLUGIN_WRITING.md) for documentation on writing plugins. Also if you want to work on the core functionality, this is a good introduction on the code structure. Only very generic features that are obviously useful for all users should be part of the core package. When in doubt please discuss first - either via the mailing list or via a github issue ticket. In some cases there is a good compromise by extending the core functionality with certain capabilities, but exposing the user interface to take advantage of these capabilities via a plugin. An example of this is the support for tags; tags are part of the core wiki parsing methods, however to see a special index view for tags you need to enable a plugin. ### Test suite Zim comes with a full test suite, it can be executed using the `test.py` script. See `test.py --help` for it's commandline options. It is good practice to run the full suite before committing to a development branch and especially before generating a merge request. This should ensures the new patch doesn't break any existing code. For any but the most trivial fixes test cases should be written to ensure the functionality works as designed and to avoid breaking it again at a later time. You'll surprise how often the same bug comes back after some time if there is now test case is in place to detect it. Some bugs are just waiting to happen again and again. For writing tests have a look at the existing test code or check the documentation for the "unittest" module in the python library. A most useful tool for developing tests is looking at test **coverage**. When you run `test.py` with the `--coverage` option the "coverage" module will be loaded and a set of html pages will be generated in `./coverage`. In these pages you can see line by line what code is called during the test run and what lines of code go untested. It is hard to really get to 100% coverage, but the target should be to get the coverage above at least 80% for each module. If you added e.g. a new class and wrote a test case for it have a look at the coverage to see what additional tests are needed to cover all code. Of course having full coverage is no guarantee we cover all possible inputs, but looking at coverage combined with writing tests for reported bugs ## Merge requests Please use github to upload your patches and file a merge request towards the zim repository. If you mention relevant issue numbers in the merge request it will automatically be flagged in those issue tickets as well. ## Limitations Main assumption about the whole file handling and page rendering is that files are small enough that we can load them into memory several times. This seems a valid assumption as notebooks are spread over many files. Having really huge files with contents is outside the scope of the design. If this is what you want to do, you probably need a more heavy duty text editor. ## Translations To contribute to translations onlne please go to https://launchpad.net. To test a new translation you can either download the snapshot from launchpad and run: ./tools/import-launchpad-translations.py launchpad-export.tar.gz Or you can edit the template zim.pot with your favourite editor. In that case you should add you new .po file to the po/ directory. After adding the .po file(s) you can compile the translation using: ./setup.py build_trans ### Italian Translation A few remarks for Italian contributors. Please notice that these choices were made earlier and we should respect them in order to assure consistency. It doesn't mean that they're better than others. It's a just matter of stop discussing and choosing one option instead of another. :) -- *Mailing list post by Marco Cevoli, Aug 29, 2012* * plugin = estensione * Please... = si elimina sempre * pane = pannello (non riquadro) * zim = lo mettiamo sempre in maiuscolo, Zim zim-0.72.0/data/0000755000175000017500000000000013532016620013156 5ustar jaapjaap00000000000000zim-0.72.0/data/globe_banner_small.png0000664000175000017500000002712613100604220017471 0ustar jaapjaap00000000000000PNG  IHDR@Ph1sBIT|d pHYs : :dJtEXtSoftwarewww.inkscape.org<tEXtTitleEarth GlobevtEXtAuthorDan Gerhrads2tEXtDescriptionSimple globe centered on North America9btEXtCreation TimeMay 1, 2005h IDATxyE?oYfߓ$!$dD!#*Ȣ z^pA.xыMUD@MdCX@LϜK?̙3Y<9UoWw}zJT1bx'"1m9@{.?_53Rm N?r:}#ARyє)FCƒ@$qrq˂N U0sPa4>C\.G:jQҝԇ_h#FcLi@yW2IuP@N.°n{ 7&,Ueҁ{>ƺ mobĈe5 [*rŞ{v'T~bΆĄDo.Co&1D"8߶p1bj9,Wنel/RDXJ/OwMjrwm]'a7" w~]I1bl#Vm= eXHss?u5-Zjf;:h]׎r-dh1bxsX$R)\V(Ho" };rR,wݤ吖}кn=)2+*%?,FCX#ݞЯ@^O ե%)qUM45atrƵttc &[M$T5??-'.YbĈ1rSxjXaOD Bp#U/xk6|Su\ce˰ρZmC0$8B]]]N4)w֌1b>),ƏD`rʑ»u['V8ݙNԍ/ |y}cٗgGJрVU_EqbVi `JuC] w9?Q"vD>9^.E>~F_m] zߨxk[-CDW[>~ 0c]Ri4EYί{Ʋd"Gx~fzߞpMX n<_.~:b=#9"?3 9Eo5UpHG{Aa O?=Ԛ{v=#7!%~.u=rY;#("Bfm]?^4Tl U$RUFƈ]9=}Q姦r ~Gi8t.%”<!kW]3eծ9 <%<#E#fo` MިͶ/Ny/P qw P]dMUo!LBUGqlvށ4<<:ϣ<ҞGp<< CʆY8R͞|㇟]7+8nIf9'͒ffd2f2Dz}Tn 7>]'ѡ^h@DfFU/L Eh;dӦG gowUDf*oc`?9GU\ͦ$<9^U#F!6O黵U PD̓DjDޭO{f[g>jJ O`T Ð0| s>aدlVS7V~};\o7sI:|K~Òlp$pR,"[輽sÎ-kb/9@6PnUTj%dㄳ3BFi_nPl?PvQUśd)'jH}my.x#mŽ*((",wW:'LJ{u:LW"a6m 0MZW^?UuEq=/ GL6&R7د*?L̆}a?~8@Cv5k^dӍڊ6sv|QU:Zeq9`<0-J;T9 $9;91tx0%O7CU%HtCo'8I|]uB*k<~[foAE9m<"Pfj`N;3j'!8+fC<`iXL[zҢN+vi.Xfh׊'rX7xii` ``ߊ8U,zT(z_ |k_?*2܋[x\ѝXۓ#ưbP<ÚGl\ O&Aʗ!<c?)"~5qهN wfğk)|'+N2˖ѹ9 !A;'RzM͍7$]~٢۱3纬8;c8{/r(+Kr}jbf'{տ|r:v ߓ-/xj  5c ;4+.: {΀PY 3'/nY슚Ϯes5ɝ*~3k@GͯHFeLBXTTȚ|k"(\3yYVknʼ6Ug0 Yuڼ12u Z[$aS؋J1˛=˚xJ&_35U57Uoi^mȻw['F-ėU&! iwSU$ Y8h8xDߖH%H$IDMI7*Om8NH8s[jE^rm:n,w#:+)'%Հ[Z/1"|8.ao{0TƷ-ye1 2i!\\8ɚ[_ɤ%CSAlxT3MjЅ{U5 7B[{Q^L:|մ KADzznꨛaWE˜aatWM|Ikࡶhф|rA҅ђ'Fa 泪:It>ܴ'='LH}8}%]Q`' NhJ?ͬ$D&t:e?%@+8O!pSLcxoc҅:sj0m0cK/k.+˺7g6Dd. *Uђ'Fa%@o{|& deHt mڧi>$%ۗīJ&Mٲ4'x)Oh]FoG8SAyW,\D,h[U>I@@/jDNц4aGzTDI?i10XV5횙}{N"UpY 11˙=@1yaamd^MbC !x\y}\F{&P$Lȗ^8&֑L C^]9iH˴2&@Ю\<{84!" ȋC`Lj=0N<&uTyΎ^ն&le.z #;FI3iֹGp:>~69`w'z+^3 Կ>G6ي!ϩtH(8kS$  gH@{ץfTzˏ8~$ӛʨ@2P~6\=M(قOS$N; Nj8YquN={7Ι}=6xk'3;L\r \3(mda`<.4}3좩Y %Z<@f^O+YQs  I [,e6cbX0U>?&vv 9k*@%'5u:{~X3NR [Hml^\N3nf B2/4PCzʐ,v$*sfoh4,1bP2Hm} I<|΁SICگ;%u%q3ՀJ&ԝo&\.=Zk7KK[[28#keGKj2o7 JhK l<3`k-TfAyLdQ\Ag7FmƐ 0j 63U ?ʼkkc&>PQk OokwLMbi?:Gw\~zĭh,"ܳj#P ~ ;]IHߊ#FCv!QD|cUjb?_c?ˊWPG 6v?cB 01SN2ByNjaU>ݳJ^T. `P7Fo DMaGtc0?9qe?م%6(\v=x?<6"mwc,Ƅ1&$ oΜCn4 zcĈPDdSc5В]g#dulE`pl:)n,$nWGYQA;]=c #mPr΢8uULƈ텡k*eB;M1/MkΆ  ѧ_K>8]WHQ[+0ai_ ,f (P1bĈ0TLkq 8!_ěgXߣ6XL `=VN {F' a a ;ip-PgߔcĈP 0g^? X(uq֔zɛ>CITUx>>aPAL$ |'a`{]>1[3F ކ\AA}$Q 2]ySIc2\/A!ac0 9F=D̮x5LaYް LjcǐPUsed/[A`Vm-yS8`; u_3u2APY 0 1 QHɰdgX j*+,@dU3h)3X1r tt~/X L+Ԅ=c1e^! ~+$BF@[q4X٩LRBu[LĈvM`UuU35, EfRfkX ΗpzLMG}:;~S$82 5Q}da$QmxCq<Z8|+;@R#Fd8:4EIlW-8HH6x\ ;ASPH UYeSH5桡itOcm]?^=Nr/YSJ5%TID%%_$,քWT}(#;B|}"ޏ9Fq,9h4C(/a{q!{ NcØ)CM#j }~V1^@ud^ J8Yנ&3-~겡U1Dj22y@8Y("TUu!&y,.jM1]QTM p0R\S-<#Fw .%9Z٣יD8bD'BMQ!H=Nj8Mt/D|/~ ~bT o~w#F%DWT&I8m6Wߠ?DfA HCgd%zN+lEfb}Нǀ1Faݪk; " Xwmk%Щ,; DKTz|/U]8RD$ ݪ]x-#%a~倓jf ,&r~r={CYU꼂/6L@s*&y ZO{׶i`11$DmYv01}-e3E"R52m ^A`n mG_޳&->wCkJ:g$W[* Ӄe"r'@U_.u4;t銶hځCUs]#jHb[h=]oo``~re'B~@I\ rmHXm^U>rj9 di?]"XLx$uA6v'?bLDF"' z2e+=M#>Z +8m&"I`wޭ+uwI2s3/hOR4m4]44^:ITd*E:*2z.R`/Ix;V/Jضa-,M[]cS3pNRJGlv G+"'7gc8_Rװ p !s"rѐQDDZJD*E["Oy]D.&_D䋥  +E)iU"r9H"yVDO#wlEd<'"F/f!"GFY=OEdI$"2ȷKG~(}HDƉQUo:<$"o-"+`ȧ"Vk"r4({Jt6Y."Bmvgm_ȭ"2KD.ݢ""7w\#"/ *!gDHY8|smVTN_SMv#m6oMRd6TMĀ@S&hʠg,]M=PaJk|$造g9xl^Kk g[k"#,&("ǀ`5ǀ/Sӣk%aTYiǀ/a="r>\ ._qX%1 (IDATX`|@EdϨI$2-X "21𤪾 "I6`HcEdnNĖw^To_"R<=,RW܍mӻS{>]%}F!"{j6;;%;Pl/  PD`]@"r7ys(sɶOj7ӢT=}"2X$1(u=$*tKakovb8WAq 0ü^ ,y؇=|Ac< _DjTSU}y K. "ǒ㗊@EyO*CU( Ha5-Dp|OUK>^º#]#Y>[CڧىȅOsG5YJ3˓ȡ]K"y.'`]+ {Wտ\7WEF 죪V*"%dFDky\D)"@MkX ɪFǾ\\76^7gKpdYOl`pyoXE։5 `ͅ*$[M[YzD}/v*UEUVV4[BdF^(5o1m.4jDdJAIf?c!#"gG_ɓ_Kh02,yE^뢿{]$bve9{z.vƾP-$~/H`)+4g[K~".~} SOjYH~`_7V՞{cXb5KUB=>bBƒ#_{~i3|˩J'0ʲb~|w#HxQD~Hvj* sɇt߳o417VJ7\YHwH}`MS?`ۦ8l73AzgDg;a+Rx`x$ڿxKtbM$5 S3Ey_3<`3۬P޽qI,_/^gb`'"-J?ě=Szs)m&̟/%G y$3b(t6I"r=(VjY.Uz[s^>w"6/" K]>,THkF>TaCѡC^r('Oϊ>:7r 6B=?Usc?f&ê(L,ٔѾ'?<^"1i76ʾ7^1ZE2DU/FD׉'nq? +Zʢ>Kf`Rq`-' "c7SO)Oji$k++""D{柍C$14?5;{[wvX.vt0{l]*ƨEM`|zVDfb.(9)oւis-CU{D乨b{>]"jPi)XՎZּ5`FH+·y=A!YYhN>{Uf3M2TE"rkABsr+Yg/ƶ>l# {]!k{Q>a=Oam\}(c@YR|k6sEgc?8%݅5eoÚJutib X ғX',H?ESZ^%^lKcI >WGA|#s *?a謂-Q{?QZyܵ?=_>o`:xSQ't~>ۂ|Xͫ١rnt*,JK`gvN?>::j㻢w+KXWAxsۏG@G[aMjjO+q_M>XMI̢7)`CP(g? ع "jX;:Gڰކ|S|Ej{OlC7E[U}&r[|h_#X~0 0'8oWM$oqX"WfDd2Vk?/(PߣcWfX+C\ɷ`?U{҇au8Ɵv聟 S*&zLۡ#& UlycD}Vc1C 㩬MTj}޾c s<-16!"k!Clƒ <#8;Iʍk{ҮKg..Z7Ĉ+=.&"2 knKy cqD2db(w1 ^ec`۫±E :x-h171jo؞u)LlCt9C?F1c"h2ԁkDb 0FCX"7c: OåX 8,}KA1bĈ3a0 T{o1c? Earth Globe Simple globe centered on North America earth globe northamerica Open Clip Art Library Dan Gerhrads Dan Gerhrads May 1, 2005 image/svg+xml en wmf2svg zim-0.72.0/data/pixmaps/0000755000175000017500000000000013532016620014637 5ustar jaapjaap00000000000000zim-0.72.0/data/pixmaps/migrated-box.png0000664000175000017500000000157613112517463017747 0ustar jaapjaap00000000000000PNG  IHDRw=gAMA abKGD pHYs : ߸tIME JytEXtCommentCreated with GIMPWIDATHOHTQ8Mb Q +ʬf"A%HvЦ]Ц,p$bDL-b*J0 NhFmQZE}?$`0iH)Bd$}qq1TDÔ:ad *a H&)IJ, xAWNSW֗EvIkDe{.U`LBD>qvBǧ)8pflzlno 7t7sz8InoC5ҿČRܒ",*Yxxh w4,Nxla.lEѨ>NnNxk;g}z#j)ola`m He"}g}*SD4D!+s<Eu.߿g՚jcze0hRJ%{ޭ(8p' q=';Elc/vBLLyy6cS'1!(P !1HHLP%EEEljbw/DJ1Hޔ|>~ou?Cz{;IENDB`zim-0.72.0/data/pixmaps/attachment.png0000664000175000017500000000172213100604220017467 0ustar jaapjaap00000000000000PNG  IHDRw=bKGD pHYs oyDIDATHǽMh\U,$1N>&nԈ4Ә;) .j .l@ ,VIiJ֊ bU,vQkP2I @&SySS\t&{1-z?{?Fxx ;.ǩou8r>o55kp\y#\ѲWzӀ}>t|~R ) #iYARU}Im՞Hk&.$rּalK&{b"¶m[=򚝎-@E $qJ%ykU]OY}=#*xm*M~;>rt(wW,V*e9ZT5@>5]8Yd_r DߏJ"坭JL/.#`930Mksg0C?ڻgϜ9,Z;FWS 5u*/C .k_4WF&`< `khq FvDiJ=,7}vף߷hąv?{6yK}}JiOmm"B}f1wkx $oӗ.ΌweJ!] x2[jn(ro߮I̓"zTXtSoftwarex+//.NN,H/J6XS\IENDB`zim-0.72.0/data/pixmaps/linkmap.svg0000664000175000017500000001207213100604220017005 0ustar jaapjaap00000000000000 image/svg+xml zim-0.72.0/data/pixmaps/xchecked-box.png0000664000175000017500000000232013100604220017676 0ustar jaapjaap00000000000000PNG  IHDRw=sRGBbKGD pHYs : ߸tIME  LtEXtCommentCreated with GIMPW+IDATHՕKhSY&5Lf"eꣵ݉LW7Ju\ƥ .*.lt!R\ZpჂH}Z3Z4m̢ cktFp3[=̀x'}Cp7I(:V]P p  t+@HUgϖth?Z[+R.ӜL>>N _J;M{2&]0BQj[^&ew0 Í*A$aKBai{w7z,a۬%r:"+d3>t /MM$΢9J=5e$ aد^?wl&@Zc#mmpjlȱ@/>9Ia`c ǡ H==$#>6E|JklcONxݻ|,@(՞=dQ5&n)BvEEqXxϳp>F$"D/\DjA%m8AHЀ4012I6% e q ծY˅4\"6)@c1NBmmE>jH9B]g'nhBx~ԭ[d]@ O(W:ْmu ktgq!8AU!ҥ/ˬ ( 6B?}Kd&v>f## a^nt FH4J--_&󴍍7 EP7m" dY͛lŘܽiH"u33d@BcDVBԟvϷì;~f!P,7lxza';?vi ( ?hIJIV9n2R"Y 45w,~b<FEƎ ˅8H ?K\8l}ۮ TjM,*KIENDB`zim-0.72.0/data/pixmaps/add-bookmark.png0000664000175000017500000000301113100604220017663 0ustar jaapjaap00000000000000PNG  IHDR szzbKGD pHYs  tIME%MIDATXõKl\W9;oNcڎ[w J]E$;P` u BSEu夎];3;qLeGypѽswq J=gZA9}[#s.yiR;7}4}bllJ򽵾8oG& nT2U->Wy/>y??q׿:Ѻ~_]Nj8֒Ll}2mR ƄDQvlW.~ YJZʕ+Yaww~n bņ |/^dvv+#nqKJs }(\>F1,",//S8'WCk6^c$}M=rLtT0o>ƨ%<N($\?~AD)?A Nja^E]D?ri]f?.D%v3(#D,,u Q -Fʮ0Y{ǚvπ.:T?w(@ZhqEcdd}!fQ/4D}pa \D^)FK evɤ((" g/a<VeiMm[i||gS5gar=r!NPƢͽ}l<5Jl Vh+411s^SCEKhiZWirr:!뉥6B>Ȥ I&|rx9o_gڇPtun`'6N(pDSSS={Yn3hYBJ6iJ3߆tK_HWDU34nNF((u(Ió'GA|"u|'$C߆9΃(Bad(IZg$b}sG9sJqH_Q~p"$}3˧RT`ee/A1̴V=w0l4ߝgyoۼraӧO399n3R x' -'Ǐ7Nk=AV_gt^ Bm~,o/..;Z37 5_8瘙i)xRd$F/R(q.GCIXXXZ5o9:*t_lR}U^Zsܹ Ah)ԃorlQ0vr"cC?Ygb@}Z/@8Z,t4(ܨ޾}q@k^cG7v(`wiqy'`){s?;zn&IENDB`zim-0.72.0/data/pixmaps/calendar.png0000664000175000017500000000121013100604220017100 0ustar jaapjaap00000000000000PNG  IHDRw=sRGBbKGD pHYs  tIMEIDATHjQۑ +WƆ T.}AgP|eiL>EWu_41%#bL&"]sx?lݓ.nުOpn\+1Fʅ3s pRscn2.-vڔޫ.XHt !elw= "FtN#F( b IIo߽I$΋fBkvvcVKV8r$Z%V Pd2~IGv@F@ I^^Bt38nk(Sʥ"źf1v:1&f7HBLh$j}; t(OUǵ8ETQvO m6˕o1 q}8:|+`pOi:GN6yS6|v,7}ak,ZƮ}{Xv?|h_ѿO dbP/M^ fh  RN }O:]T(=fV2ә ]NNNO<`R ?`Qe3lRYONNN;_R&u.J`-~Yi VNNO>bP@`P"2RZ7sZ1xfP TO=cP@`P (tbP4]%h[=cP @`P >bPy=dQ9rV>bP@`P8@`PD `zim-0.72.0/data/pixmaps/link.png0000664000175000017500000000112213100604220016266 0ustar jaapjaap00000000000000PNG  IHDRw=bKGDIDATxMhSQPzVbt*AHPFp!EBԕEE\"5TX+D &A7O_sQ 5yVt\!!XBh-Bh+h;z w,z1_΁@Z;=}ۢ} <#Bʓǽm*Bh RhOO;1Vsî:;/#v./?*3N JUj>e?>rWQ/2;=s2_*Ys&Zx< <]q=REw RU _%#`b퐮+Ul(H29LScafor27;C.ZwvɎʨ_[}چJ-+R%HtEXtCommentCreated with The GIMP (c) 2003 Jakub 'jimmac' Steiner'3XIDATxŖ?LQ3 .^c@W j#7C4P4jcgbbPO JOl J+(LѨ;o9۷o7 ll@j^, ^j&dk rgL&9n<{ր߻/+BX,J>P6s?b5jo?IFr\zzz}]렽oUlv$ZXi3 ayyAEHQT#THR QAL@TP@EAD0u%"D9: RI6'()Z?= e#0s>Bft D|Y[!r834ROZ\`c|||UTZd\kqwzD;=Q:c灥8TFc /i?NvZhg9:OV. ισFB/LoxWWl{Qą  AB aθ|DU˰Ne5#$h^EP6Cj6K 9 H+2GL2M C Hj zp# z= 8R?|$V[oi?^SaIENDB`zim-0.72.0/data/pixmaps/checked-box.png0000664000175000017500000000225213100604220017512 0ustar jaapjaap00000000000000PNG  IHDRw=sRGBbKGD pHYs : ߸tIME ,0A(itEXtCommentCreated with GIMPWIDATHǭk]EgsɹӞڤ=1-5TQzAR,> "CA[AXA1/-HEy0%R6sיCq[6x&hnLMhƄ}M KFK""2<>7xm?݌ZOa4_T[Re SLLL)RcbݳK?c !B%sdz_1;;Ν;<4Mm$՛QJ)QuCq`f l<42!8L[Ȝ-[HE,D-?#M@Kbm!˴3JfۅlU+H2=i#PJjCexԯ"ٮwn h4VLNlAySC#Gw76r"X=# B˻s%+vٵ%{CT0K./e ؜!#BO(x..MTѻ]])Sc eYlsƲQ$NѣGocV'B7ϖ X.XUfeQPli4r?A(ģ׮`xxQZfs? !jexK'oIENDB`zim-0.72.0/data/pixmaps/linkmap.png0000664000175000017500000000246213100604220016774 0ustar jaapjaap00000000000000PNG  IHDR@@iqsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATxkW?'fw6F EZ?PObH[JBO}Z'EZgSjmTPY#&槻0;͏ٹ;)s~sι\QU>z\77DM jԖ2fFGY?5iβ8vmDiߧ޽N66o} 5{J?֬!gY$V%j3)o^#.'}[9qcI߆ ; +^TꛕZq6[,^`FVdw1[-4>zxT"T 0"|`SHE=F7؞uہ)R@(@|=Ȯ0D(txojP!5L!> _mSYXk@E@TUD~{aEwR,uu{Zw?"WlغY5pSd0 6M‡֪G+yU8tnHq ruNLw0"1})zq ZX"zO}AN8זۘY:2lтp &_$=b*7N\voLWu_| زUFyVR^O ,1(p(sPF8go|<|]n΀Hoѷ܏]*`8`>׮Qn鬁 -n 8 RzzzR1o'ykH_쫔Qi":t֭ar5"@ggD"zӢ0}4@ݻly Tmm!2*q}lɆ,j +VاQx)M2L @Q)D иE"  E0)Pb\M(HDW[a"#!qֳXi[m{O] S^\le1ZlJ,5hU  4.Z77Z+<+<{Ȥ$%4uN*%3DQ\.R(( (t: jN#L}l~mOǓpKE4 t: @>j)%V )%ι#HuЫb3^҈$o){LL3442xǣG8w<߿OTB)u` vjMYןs\B<})%;;;<~!;;; Va9`;. yFp 3Hǭ[fLNN.\<0իWhTKH5.7=P(P*MRAJ)j/^@)E@k}A88!0ƣӉd2(}|>5ZkRXk1 cgOy{*TŷcM(l6REa{hf rJArcZyw ;ѱя>b%N344DZejj 5KKK?XXXwX}+1<,-aϞ[9lсKvQRakkggتmJ{dNӎ%۵m$ gcg7)vi"'N`ff/嘝ennBxj B' ;A۵4[-6+z*@ιfI$qVsJYk]ZuJu]D^=ʍ- &5ŷ/~'{s?l!DF^klll8vRJqΡbmmB ]N:=?x򧅔0gwC 7nh?OWgB4 Tu_{}-6?>ɕK^RK/Xꨬo+|@YvC5lݜv#%tEXtdate:create2015-02-02T22:50:13+01:00w+_%tEXtdate:modify2015-02-02T22:50:13+01:00"tEXtexif:ExifImageLength48fputEXtexif:ExifImageWidth48tEXtexif:ExifOffset667wgatEXtexif:SoftwareShotwell 0.20.1PIENDB`zim-0.72.0/data/globe_banner.svg0000664000175000017500000015064113100604220016313 0ustar jaapjaap00000000000000 Earth Globe Simple globe centered on North America earth globe northamerica Open Clip Art Library Dan Gerhrads Dan Gerhrads May 1, 2005 image/svg+xml en wmf2svg Zim Invade your desktop ! zim-0.72.0/data/symbols.list0000644000175000017500000001341413503417020015543 0ustar jaapjaap00000000000000## Entity table copied from the HTML::Entities perl module by Gisle Aas ## # Some normal chars that have special meaning in SGML context #amp 38 # ampersand #gt 62 # greater than #lt 60 # less than #quot 34 # double quote #apos 39 # single quote # PUBLIC ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML \AElig 198 # capital AE diphthong (ligature) \Aacute 193 # capital A, acute accent \Acirc 194 # capital A, circumflex accent \Agrave 192 # capital A, grave accent \Aring 197 # capital A, ring \Atilde 195 # capital A, tilde \Auml 196 # capital A, dieresis or umlaut mark \Ccedil 199 # capital C, cedilla \ETH 208 # capital Eth, Icelandic \Eacute 201 # capital E, acute accent \Ecirc 202 # capital E, circumflex accent \Egrave 200 # capital E, grave accent \Euml 203 # capital E, dieresis or umlaut mark \Iacute 205 # capital I, acute accent \Icirc 206 # capital I, circumflex accent \Igrave 204 # capital I, grave accent \Iuml 207 # capital I, dieresis or umlaut mark \Ntilde 209 # capital N, tilde \Oacute 211 # capital O, acute accent \Ocirc 212 # capital O, circumflex accent \Ograve 210 # capital O, grave accent \Oslash 216 # capital O, slash \Otilde 213 # capital O, tilde \Ouml 214 # capital O, dieresis or umlaut mark \THORN 222 # capital THORN, Icelandic \Uacute 218 # capital U, acute accent \Ucirc 219 # capital U, circumflex accent \Ugrave 217 # capital U, grave accent \Uuml 220 # capital U, dieresis or umlaut mark \Yacute 221 # capital Y, acute accent \aacute 225 # small a, acute accent \acirc 226 # small a, circumflex accent \aelig 230 # small ae diphthong (ligature) \agrave 224 # small a, grave accent \aring 229 # small a, ring \atilde 227 # small a, tilde \auml 228 # small a, dieresis or umlaut mark \ccedil 231 # small c, cedilla \eacute 233 # small e, acute accent \ecirc 234 # small e, circumflex accent \egrave 232 # small e, grave accent \eth 240 # small eth, Icelandic \euml 235 # small e, dieresis or umlaut mark \iacute 237 # small i, acute accent \icirc 238 # small i, circumflex accent \igrave 236 # small i, grave accent \iuml 239 # small i, dieresis or umlaut mark \ntilde 241 # small n, tilde \oacute 243 # small o, acute accent \ocirc 244 # small o, circumflex accent \ograve 242 # small o, grave accent \oslash 248 # small o, slash \otilde 245 # small o, tilde \ouml 246 # small o, dieresis or umlaut mark \szlig 223 # small sharp s, German (sz ligature) \thorn 254 # small thorn, Icelandic \uacute 250 # small u, acute accent \ucirc 251 # small u, circumflex accent \ugrave 249 # small u, grave accent \uuml 252 # small u, dieresis or umlaut mark \yacute 253 # small y, acute accent \yuml 255 # small y, dieresis or umlaut mark # Some extra Latin 1 chars that are listed in the HTML3.2 draft (21-May-96) \copy 169 # copyright sign \reg 174 # registered sign \nbsp 160 # non breaking space # Additional ISO-8859/1 entities listed in rfc1866 (section 14) \iexcl 161 \cent 162 \pound 163 \curren 164 \yen 165 \brvbar 166 \sect 167 \uml 168 \ordf 170 \laquo 171 \not 172 \shy 173 \macr 175 \deg 176 \plusmn 177 \sup1 185 \sup2 178 \sup3 179 \acute 180 \micro 181 \para 182 \middot 183 \cedil 184 \ordm 186 \raquo 187 \frac14 188 \frac12 189 \frac34 190 \iquest 191 \times 215 \divide 247 \OElig 338 \oelig 339 \Scaron 352 \scaron 353 \Yuml 376 \fnof 402 \circ 710 \tilde 732 \Alpha 913 \Beta 914 \Gamma 915 \Delta 916 \Epsilon 917 \Zeta 918 \Eta 919 \Theta 920 \Iota 921 \Kappa 922 \Lambda 923 \Mu 924 \Nu 925 \Xi 926 \Omicron 927 \Pi 928 \Rho 929 \Sigma 931 \Tau 932 \Upsilon 933 \Phi 934 \Chi 935 \Psi 936 \Omega 937 \alpha 945 \beta 946 \gamma 947 \delta 948 \epsilon 949 \zeta 950 \eta 951 \theta 952 \iota 953 \kappa 954 \lambda 955 \mu 956 \nu 957 \xi 958 \omicron 959 \pi 960 \rho 961 \sigmaf 962 \sigma 963 \tau 964 \upsilon 965 \phi 966 \chi 967 \psi 968 \omega 969 \thetasym 977 \upsih 978 \piv 982 \ensp 8194 \emsp 8195 \thinsp 8201 \zwnj 8204 \zwj 8205 \lrm 8206 \rlm 8207 \ndash 8211 \mdash 8212 \lsquo 8216 \rsquo 8217 \sbquo 8218 \ldquo 8220 \rdquo 8221 \bdquo 8222 \dagger 8224 \Dagger 8225 \bull 8226 \hellip 8230 \permil 8240 \prime 8242 \Prime 8243 \lsaquo 8249 \rsaquo 8250 \oline 8254 \frasl 8260 \euro 8364 \image 8465 \weierp 8472 \real 8476 \trade 8482 \alefsym 8501 \larr 8592 \uarr 8593 \rarr 8594 \darr 8595 \harr 8596 \crarr 8629 \lArr 8656 \uArr 8657 \rArr 8658 \dArr 8659 \hArr 8660 \forall 8704 \part 8706 \exist 8707 \empty 8709 \nabla 8711 \isin 8712 \notin 8713 \ni 8715 \prod 8719 \sum 8721 \minus 8722 \lowast 8727 \radic 8730 \prop 8733 \infin 8734 \ang 8736 \and 8743 \or 8744 \cap 8745 \cup 8746 \int 8747 \there4 8756 \sim 8764 \cong 8773 \asymp 8776 \ne 8800 \equiv 8801 \le 8804 \ge 8805 \sub 8834 \sup 8835 \nsub 8836 \sube 8838 \supe 8839 \oplus 8853 \otimes 8855 \perp 8869 \sdot 8901 \lceil 8968 \rceil 8969 \lfloor 8970 \rfloor 8971 \lang 9001 \rang 9002 \loz 9674 \spades 9824 \clubs 9827 \hearts 9829 \diams 9830 ## Additional shortcuts ## \pm 177 # +- sign \neq 8800 # not equal to sign (may also use =/= ) ## Some arrows ## \left 8592 \up 8593 \right 8594 \down 8595 ## units ## \ohm 937 # same as \omega ## Additional typography ## # See https://en.wikipedia.org/wiki/Arrow_%28symbol%29 for more codes # convert hex -> decimal before using here --> 8594 # same as \right <-- 8592 # same as \left <-> 8596 <--> 8596 ==> 8658 <=> 8660 <==> 8660 <== 8656 -- 8212 # em dash aka — in HTML =/= 8800 # not equal to sign (may also use \neq) +- 177 # +- sign +_ 177 # +- sign <3 9825 # Heart empty \music 9835 # Beamed Eighth Notes \warn 9888 # Warning :) 9786 # Smiley - have a nice day! \smile 9786 # Smiley - have a nice day! \mail 9993 # Envelope - Mail \tel 9990 # Telephone Sign \phone 9990 # Telephone Sign \flag 9873 # Black Flag ## Suggestions for more shortcuts are welcome - please file in bug tracker ## zim-0.72.0/data/templates/0000755000175000017500000000000013532016620015154 5ustar jaapjaap00000000000000zim-0.72.0/data/templates/plugins/0000755000175000017500000000000013532016620016635 5ustar jaapjaap00000000000000zim-0.72.0/data/templates/plugins/scoreeditor.ly0000664000175000017500000000031413100604220021513 0ustar jaapjaap00000000000000\header { tagline = ##f } [% version %] \paper { raggedright = ##t raggedbottom = ##t indent = 0\mm } [% include_header %] [% score %] [% include_footer %] \layout { } zim-0.72.0/data/templates/plugins/gnuploteditor.gnu0000664000175000017500000000020313100604220022232 0ustar jaapjaap00000000000000set term png set output '[% png_fname %]' [% IF attachment_folder %] cd '[% attachment_folder %]' [% END %] [% gnuplot_script %] zim-0.72.0/data/templates/plugins/equationeditor.tex0000664000175000017500000000036113100604220022403 0ustar jaapjaap00000000000000\documentclass[12pt]{article} \pagestyle{empty} \usepackage{amssymb} \usepackage{amsmath} \usepackage[usenames]{color} \begin{document} % No empty lines allowed in math block ! \begin{align*} [% equation -%] \end{align*} \end{document} zim-0.72.0/data/templates/plugins/gnu_r_editor.r0000664000175000017500000000014413100604220021467 0ustar jaapjaap00000000000000png("[% png_fname %]",width=[% r_width %], height=[% r_height %]) [% gnu_r_plot_script %] dev.off() zim-0.72.0/data/templates/plugins/quicknote.txt0000664000175000017500000000013113100604220021363 0ustar jaapjaap00000000000000[% text %] [% IF url -%] Source: [% url %] [% END -%] //[% strftime("%A %d %B %Y") %]// zim-0.72.0/data/templates/latex/0000755000175000017500000000000013532016620016271 5ustar jaapjaap00000000000000zim-0.72.0/data/templates/latex/Article.tex0000664000175000017500000000225613100604220020373 0ustar jaapjaap00000000000000\documentclass{scrartcl} \usepackage[mathletters]{ucs} \usepackage[utf8x]{inputenc} \usepackage{amssymb} \usepackage{amsmath} \usepackage[usenames]{color} \usepackage{hyperref} \usepackage{wasysym} \usepackage{graphicx} \usepackage[normalem]{ulem} \usepackage{enumerate} \usepackage{listings} \lstset{ % basicstyle=\footnotesize, % the size of the fonts that are used for the code showspaces=false, % show spaces adding particular underscores showstringspaces=false, % underline spaces within strings showtabs=false, % show tabs within strings adding particular underscores frame=single, % adds a frame around the code tabsize=2, % sets default tabsize to 2 spaces breaklines=true, % sets automatic line breaking breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace } [% options.document_type = 'article' %] \title{[% title %]} \date{[% strftime("%A %d %B %Y") %]} \author{} \begin{document} \maketitle [% FOR page IN pages %] [% IF loop.first and loop.last %] [% page.content %] [% ELSE %] [% page.content %] [% END %] [% END %] \end{document} zim-0.72.0/data/templates/latex/Report.tex0000664000175000017500000000215613100604220020262 0ustar jaapjaap00000000000000\documentclass{scrreprt} \usepackage[mathletters]{ucs} \usepackage[utf8x]{inputenc} \usepackage{amssymb} \usepackage{amsmath} \usepackage[usenames]{color} \usepackage{hyperref} \usepackage{wasysym} \usepackage{graphicx} \usepackage[normalem]{ulem} \usepackage{enumerate} \usepackage{listings} \lstset{ % basicstyle=\footnotesize, % the size of the fonts that are used for the code showspaces=false, % show spaces adding particular underscores showstringspaces=false, % underline spaces within strings showtabs=false, % show tabs within strings adding particular underscores frame=single, % adds a frame around the code tabsize=2, % sets default tabsize to 2 spaces breaklines=true, % sets automatic line breaking breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace } [% options.document_type = 'report' %] \title{[% title %]} \date{[% strftime("%A %d %B %Y") %]} \author{} \begin{document} \maketitle \tableofcontents [% FOR page IN pages %] [% page.content %] [% END %] \end{document} zim-0.72.0/data/templates/latex/Part.tex0000664000175000017500000000016113100604220017707 0ustar jaapjaap00000000000000[% options.document_type = 'report' %] \part{[% title %]} [% FOR page IN pages %] [% page.content %] [% END %] zim-0.72.0/data/templates/rst/0000755000175000017500000000000013532016620015764 5ustar jaapjaap00000000000000zim-0.72.0/data/templates/rst/Default.rst0000644000175000017500000000024513532015264020106 0ustar jaapjaap00000000000000[% FOR page IN pages %] [% FOR i IN range(len(page.title)) %] =[% END %] [% page.title %] [% FOR i IN range(len(page.title)) %] =[% END %] [% page.body %] [% END %] zim-0.72.0/data/templates/markdown/0000755000175000017500000000000013532016620016776 5ustar jaapjaap00000000000000zim-0.72.0/data/templates/markdown/Default.markdown0000664000175000017500000000010513100604220022112 0ustar jaapjaap00000000000000[% FOR page IN pages %] # [% page.title %] [% page.body %] [% END %] zim-0.72.0/data/templates/html/0000755000175000017500000000000013532016620016120 5ustar jaapjaap00000000000000zim-0.72.0/data/templates/html/SlideShow_(S5).html0000664000175000017500000000324613100604220021374 0ustar jaapjaap00000000000000 [% title %]
[% options.empty_lines = "remove" %] [% FOR page IN pages %] [% FOR section IN page.headings(1) %]
[% section.content %]
[% END %] [% END %]
zim-0.72.0/data/templates/html/ZeroFiveEight.html0000664000175000017500000002107213112517463021531 0ustar jaapjaap00000000000000 [% title %] [% options.empty_lines = "default" %]

[% page.title %]

[% page.body %]
[% IF loop.first %]
Backlinks: [% END %] [% link.name %] [% IF loop.last %]

[% END %]
[% IF not loop.last %]
[% END %]
zim-0.72.0/data/templates/html/Default.html0000664000175000017500000001731713121023223020374 0ustar jaapjaap00000000000000 [% title %] [% options.empty_lines = "default" %]
[% IF navigation.prev %] [ [% gettext("Prev") %] ] [% ELSE %] [ [% gettext("Prev") %] ] [% END %] [% IF links.get("index") %] [ [% gettext("Index") %] ] [% ELSE %] [ [% gettext("Index") %] ] [% END %] [% IF navigation.next %] [ [% gettext("Next") %] ] [% ELSE %] [ [% gettext("Next") %] ] [% END %]

[% page.title %]

[% page.body %]

[% IF not loop.last %]
[% END %]
zim-0.72.0/data/templates/html/Print.html0000664000175000017500000001466413112517463020124 0ustar jaapjaap00000000000000 [% title %] [% options.empty_lines = "default" %] [% FOR page IN pages %] [% page.content %] [% END %] zim-0.72.0/data/templates/html/Presentation.html0000664000175000017500000002032013112517463021465 0ustar jaapjaap00000000000000 [% title %] [% options.empty_lines = "default" %]

[% title %]

 
[% FOR page IN pages %] [% page.body %] [% END %]
 
[% IF navigation.prev -%] < [%- ELSE -%] < [%- END %] + [% IF navigation.next -%] > [%- ELSE -%] > [%- END %]
zim-0.72.0/data/templates/html/Default_with_index.html0000664000175000017500000001764013112517463022633 0ustar jaapjaap00000000000000 [% title %]
[% IF navigation.prev %] [ [% gettext("Prev") %] ] [% ELSE %] [ [% gettext("Prev") %] ] [% END %] [% IF links.get("index") %] [ [% gettext("Index") %] ] [% ELSE %] [ [% gettext("Index") %] ] [% END %] [% IF navigation.next %] [ [% gettext("Next") %] ] [% ELSE %] [ [% gettext("Next") %] ] [% END %]

[% options.empty_lines = "default" %]

[% page.title %]

[% page.body %]

[% IF not loop.last %]
[% END %]
zim-0.72.0/data/templates/html/SlideShow_(S5)/0000755000175000017500000000000013532016620020511 5ustar jaapjaap00000000000000zim-0.72.0/data/templates/html/SlideShow_(S5)/ui/0000755000175000017500000000000013532016620021126 5ustar jaapjaap00000000000000zim-0.72.0/data/templates/html/SlideShow_(S5)/ui/default/0000755000175000017500000000000013532016620022552 5ustar jaapjaap00000000000000zim-0.72.0/data/templates/html/SlideShow_(S5)/ui/default/print.css0000664000175000017500000000167113100604220024415 0ustar jaapjaap00000000000000/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * {display: none !important;} zim-0.72.0/data/templates/html/SlideShow_(S5)/ui/default/framing.css0000664000175000017500000000166613100604220024710 0ustar jaapjaap00000000000000/* The following styles size, place, and layer the slide components. Edit these if you want to change the overall slide layout. The commented lines can be uncommented (and modified, if necessary) to help you with the rearrangement process. */ /* target = 1024x768 */ div#header, div#footer, .slide {width: 100%; top: 0; left: 0;} div#header {top: 0; height: 3em; z-index: 1;} div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;} .slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;} div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;} div#controls form {position: absolute; bottom: 0; right: 0; width: 100%; margin: 0;} #currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;} html>body #currentSlide {position: fixed;} /* div#header {background: #FCC;} div#footer {background: #CCF;} div#controls {background: #BBD;} div#currentSlide {background: #FFC;} */ zim-0.72.0/data/templates/html/SlideShow_(S5)/ui/default/opera.css0000664000175000017500000000031713100604220024363 0ustar jaapjaap00000000000000/* DO NOT CHANGE THESE unless you really want to break Opera Show */ .slide { visibility: visible !important; position: static !important; page-break-before: always; } #slide0 {page-break-before: avoid;} zim-0.72.0/data/templates/html/SlideShow_(S5)/ui/default/pretty.css0000664000175000017500000000701513100604220024606 0ustar jaapjaap00000000000000/* Following are the presentation styles -- edit away! */ body {background: #FFF url(bodybg.gif) -16px 0 no-repeat; color: #000; font-size: 2em;} :link, :visited {text-decoration: none; color: #00C;} #controls :active {color: #88A !important;} #controls :focus {outline: 1px dotted #227;} h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;} ul, pre {margin: 0; line-height: 1em;} html, body {margin: 0; padding: 0;} blockquote, q {font-style: italic;} blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;} blockquote p {margin: 0;} blockquote i {font-style: normal;} blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;} blockquote b i {font-style: italic;} kbd {font-weight: bold; font-size: 1em;} sup {font-size: smaller; line-height: 1px;} .slide code {padding: 2px 0.25em; font-weight: bold; color: #533;} .slide code.bad, code del {color: red;} .slide code.old {color: silver;} .slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;} .slide pre code {display: block;} .slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;} .slide li {margin-top: 0.75em; margin-right: 0;} .slide ul ul {line-height: 1;} .slide ul ul li {margin: .2em; font-size: 85%; list-style: square;} .slide img.leader {display: block; margin: 0 auto;} div#header, div#footer {background: #005; color: #AAB; font-family: Verdana, Helvetica, sans-serif;} div#header {background: #005 url(bodybg.gif) -16px 0 no-repeat; line-height: 1px;} div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;} #footer h1, #footer h2 {display: block; padding: 0 1em;} #footer h2 {font-style: italic;} div.long {font-size: 0.75em;} .slide h1 {position: absolute; top: 0.7em; left: 87px; z-index: 1; margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap; font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize; color: #DDE; background: #005;} .slide h3 {font-size: 130%;} h1 abbr {font-variant: small-caps;} div#controls {position: absolute; left: 50%; bottom: 0; width: 50%; text-align: right; font: bold 0.9em Verdana, Helvetica, sans-serif;} html>body div#controls {position: fixed; padding: 0 0 1em 0; top: auto;} div#controls form {position: absolute; bottom: 0; right: 0; width: 100%; margin: 0; padding: 0;} #controls #navLinks a {padding: 0; margin: 0 0.5em; background: #005; border: none; color: #779; cursor: pointer;} #controls #navList {height: 1em;} #controls #navList #jumplist {position: absolute; bottom: 0; right: 0; background: #DDD; color: #227;} #currentSlide {text-align: center; font-size: 0.5em; color: #449;} #slide0 {padding-top: 3.5em; font-size: 90%;} #slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Helvetica, sans-serif; white-space: normal; color: #000; background: transparent;} #slide0 h2 {font: bold italic 1em Helvetica, sans-serif; margin: 0.25em;} #slide0 h3 {margin-top: 1.5em; font-size: 1.5em;} #slide0 h4 {margin-top: 0; font-size: 1em;} ul.urls {list-style: none; display: inline; margin: 0;} .urls li {display: inline; margin: 0;} .note {display: none;} .external {border-bottom: 1px dotted gray;} html>body .external {border-bottom: none;} .external:after {content: " \274F"; font-size: smaller; color: #77B;} .incremental, .incremental *, .incremental *:after {color: #DDE; visibility: visible;} img.incremental {visibility: hidden;} .slide .current {color: #B02;} /* diagnostics li:after {content: " [" attr(class) "]"; color: #F88;} */zim-0.72.0/data/templates/html/SlideShow_(S5)/ui/default/bodybg.gif0000664000175000017500000002360713100604220024507 0ustar jaapjaap00000000000000GIF89aN絽ֽ!,N!u@BlM|?) Bc(, Fo1DEe,pmg٢pڈԸ< (8 e= qXdK Pq<8k:a D9U3 G  ;W[hQ[ L H5 2"A0g#p~T+uABU*4QmWJ`P2PUB t 恭tIJm!P:h( |!u nE Y$PLB,&^ C[b0KvsLP$ ԙ, x³(c- + f OR4ZC 7%# \ ;]?Z Cp6h,8X@7BUF-J@pFgyr_8`@Yh6Ɂbts%!QZP!uUw&H XBb Hw`aS,eF|@|< u%`2VNx@ژJU%T$M^;Ҁ<d$!^" p!{UsїbLg7p04X #SVksEA5CAd 玐**3haߎ4< E9X9{04C)މ{@,g#4o+'cp眫Z\M#@ 8L)o@^<YA~ N(7qfh(3B\a)ihƠ0@X(>$Qy)@"YL {4(Icɣg0.BQJC.!B%8 G?a FP^Tc e$WY5\8B9Ⳗdry#f E&dp Tk02o47q9m,4A_Q ![3PBkHF/ ~*@a:+9u?BFcŒ znB#RX"$ x8h|M8Ih^hTEbXmrBjl Hp`&Low`VGT@preXf[6@C$-42x'%ɐ\KQ4PX`n>|#^8t3/pB8[`X=T- =mF)z13NpAJkh!y8U&C+,C# `Plc!Lh6(=(J wڃ] 6g[DvY~롙 zTt0)O(UVix~6fzLC#P@ h7rʛr8uޭZ3am3ƍ) qDErg P;JB"@ɑ#ۦj0 +Cr(#R֐l$/P eY9;.}0FЙ[:/ Xl$X'p`8Qsp$l(\B [uVwzBfAs;8S%$:p 7C$ȿ\9f0m0 \jmDV-GzmrUtR<P:0:J mƼN1ރ `5P]~re"1~OM 3@"À u(JJ9P RSCRFsF` 4#4qA| PU9%# ԭ]*OֿB(C:z1NW <l$uauYC 0"j) u@ujϯģuZ([B1;@D4PD`  L2Z^ cf Fa'J3GP0ju<ǖPApP-G3?VBN,(t4yّmyzw1krݼM~ o:*uZ\g$0 M}zŭ}6gx鍹@1AGb.i.[pX. F1'v)*2DCF( &hf;ELJAv09#OT?jęH~l "pWQ)#^ !2¤U~. L%+ >Iu+LGAx{ُ#N!HnFp 0L[ʃ+AcY(KdH)Q ]Ao$%HyQaMVj tJ;cz QG(lT~_ MsH A$Do[|ohj`z1Z!~K J0a Z / 8D;4.?C !Sq[(I[ `">hm h 4RgY&L岙<(&m3eRH`)jb`tD`> qh DEaP @@|$P00H%$)PT$%,Ply~,Q-A8P=<)M-,yBXX5B@,,4r%QPp&v{R%Ԫ94<0@ شD$JT҆" Wes \8 vp; <*Hd5CÃզ4L>r@fΙy:Da*$g+0G n<vj&Pxv. J;z3pp zY0V+m>p-1Tʃ$Qع.߼ iv@&J;\l8P_!LnCR83 r{84l_= \}X@IA7l1"VJ<ޒOV? M5L[xKih?3n e m5ې3 C{GFژgd݃G.B+N^=xgќ z .Oq4ؾ/*Ңҭ]n|&xfg!;ɳHCOӻam] hmF30 㯠 vdG$/߫Dcȧ8oy , ;] l44zB#BD>]J8aFD;%B rHm5 ܠ/ѲWd$pU8EhxkPC]V >zTPKZ`$H 0%%eB頀*(٨Bl'3 j2IƈF]rXe(,- /r0n&z$&sH(Zgf 00L6@^f8P-m'ic_(cUf`d3J"i+(R]d  (ʤ VHK w+D ,X2lԧr3FsbXa+ ZD 5 9s*FgU>ؕ'R&)OcZ`VD\M4p'R*D"HnD3ֶnFe)in  `0\ui0s*:vaaDz4oT Z ņ`Y%WwB0v5HH  &a<)RrBx%"a*h.E 7αi@[ e7@rH>iz S*!RLQ l3$ 5%#9P[8/`n}~gOTE۠e" )atDĐpY@4PRi/KYh9FF@?TRڀFCaNN]v)}T  4.P~uA(_[vuh,Լ@U<dN؁G m&`_˷f9Ճ{y^!.ۜqe8,T7REō|&,5=YZXB`C48(X~ED `C^ D`t 7 bcY `PpAi|C)' 8(!Z3m`Ef[5a2 A] ufCf>L '" JP,z &$9pOu$"P񕔴G"UDb(ً̢qI -a !%(rb)>i>@,>#+ :E/fI)`h" ![c~.^F:I`<^m":^c11_N z=b>7y0$$e#"!E睢Vf$ɣz]mfZUPh2 wӽWej'M)L]s*}~RNP}'q%c-mڌ'"|.h~Vd0 ԧ>m8焖<\_'vΰh(]P [g-\u5a(2'e(3f (Y7h >ߎeV wf(B v v ܭYY(0X+5 6'A]]OliNQb6 m_¡(qU&>Vd_hƩi+t6"8VqcDʌ2ԜY1JF<@>]NL6+dD֌f(Ky<&7Yb)Pݤ՟9"-g[X(bfR d$<\He>LVah~?:,'|-#[E7i ebGYJl>`2Q}k (O)֙PRW!~e(a֞ î΋db\V)r=S$)µ NKEHl]aݵfTr^f=Z-iv!ōӣ$-Zkǒ&n[(F[вJ-n`4j*KR[:b&[!ł`n1֝&:d!1f\- -6˨2"B\^Bw*( c zG/ܪbY6 Qo͹R*V],$}Ʌa¡ѥ^ hwT/f҂9PL/(pUOlZN0-yX O=^́p:%1Pff\eڠf"b bިMnGs%X܂%H0[*f c`5 O.p+\Qo ZRZdO$$K.e8$%U()';zim-0.72.0/data/templates/html/SlideShow_(S5)/ui/default/slides.js0000664000175000017500000003660613100604220024376 0ustar jaapjaap00000000000000// S5 v1.1 slides.js -- released into the Public Domain // // Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information // about all the wonderful and talented contributors to this code! var undef; var slideCSS = ''; var snum = 0; var smax = 1; var incpos = 0; var number = undef; var s5mode = true; var defaultView = 'slideshow'; var controlVis = 'visible'; var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0; var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0; var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0; function hasClass(object, className) { if (!object.className) return false; return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1); } function hasValue(object, value) { if (!object) return false; return (object.search('(^|\\s)' + value + '(\\s|$)') != -1); } function removeClass(object,className) { if (!object) return; object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2); } function addClass(object,className) { if (!object || hasClass(object, className)) return; if (object.className) { object.className += ' '+className; } else { object.className = className; } } function GetElementsWithClassName(elementName,className) { var allElements = document.getElementsByTagName(elementName); var elemColl = new Array(); for (var i = 0; i< allElements.length; i++) { if (hasClass(allElements[i], className)) { elemColl[elemColl.length] = allElements[i]; } } return elemColl; } function isParentOrSelf(element, id) { if (element == null || element.nodeName=='BODY') return false; else if (element.id == id) return true; else return isParentOrSelf(element.parentNode, id); } function nodeValue(node) { var result = ""; if (node.nodeType == 1) { var children = node.childNodes; for (var i = 0; i < children.length; ++i) { result += nodeValue(children[i]); } } else if (node.nodeType == 3) { result = node.nodeValue; } return(result); } function slideLabel() { var slideColl = GetElementsWithClassName('*','slide'); var list = document.getElementById('jumplist'); smax = slideColl.length; for (var n = 0; n < smax; n++) { var obj = slideColl[n]; var did = 'slide' + n.toString(); obj.setAttribute('id',did); if (isOp) continue; var otext = ''; var menu = obj.firstChild; if (!menu) continue; // to cope with empty slides while (menu && menu.nodeType == 3) { menu = menu.nextSibling; } if (!menu) continue; // to cope with slides with only text nodes var menunodes = menu.childNodes; for (var o = 0; o < menunodes.length; o++) { otext += nodeValue(menunodes[o]); } list.options[list.length] = new Option(n + ' : ' + otext, n); } } function currentSlide() { var cs; if (document.getElementById) { cs = document.getElementById('currentSlide'); } else { cs = document.currentSlide; } cs.innerHTML = '' + snum + '<\/span> ' + '\/<\/span> ' + '' + (smax-1) + '<\/span>'; if (snum == 0) { cs.style.visibility = 'hidden'; } else { cs.style.visibility = 'visible'; } } function go(step) { if (document.getElementById('slideProj').disabled || step == 0) return; var jl = document.getElementById('jumplist'); var cid = 'slide' + snum; var ce = document.getElementById(cid); if (incrementals[snum].length > 0) { for (var i = 0; i < incrementals[snum].length; i++) { removeClass(incrementals[snum][i], 'current'); removeClass(incrementals[snum][i], 'incremental'); } } if (step != 'j') { snum += step; lmax = smax - 1; if (snum > lmax) snum = lmax; if (snum < 0) snum = 0; } else snum = parseInt(jl.value); var nid = 'slide' + snum; var ne = document.getElementById(nid); if (!ne) { ne = document.getElementById('slide0'); snum = 0; } if (step < 0) {incpos = incrementals[snum].length} else {incpos = 0;} if (incrementals[snum].length > 0 && incpos == 0) { for (var i = 0; i < incrementals[snum].length; i++) { if (hasClass(incrementals[snum][i], 'current')) incpos = i + 1; else addClass(incrementals[snum][i], 'incremental'); } } if (incrementals[snum].length > 0 && incpos > 0) addClass(incrementals[snum][incpos - 1], 'current'); ce.style.visibility = 'hidden'; ne.style.visibility = 'visible'; jl.selectedIndex = snum; currentSlide(); number = 0; } function goTo(target) { if (target >= smax || target == snum) return; go(target - snum); } function subgo(step) { if (step > 0) { removeClass(incrementals[snum][incpos - 1],'current'); removeClass(incrementals[snum][incpos], 'incremental'); addClass(incrementals[snum][incpos],'current'); incpos++; } else { incpos--; removeClass(incrementals[snum][incpos],'current'); addClass(incrementals[snum][incpos], 'incremental'); addClass(incrementals[snum][incpos - 1],'current'); } } function toggle() { var slideColl = GetElementsWithClassName('*','slide'); var slides = document.getElementById('slideProj'); var outline = document.getElementById('outlineStyle'); if (!slides.disabled) { slides.disabled = true; outline.disabled = false; s5mode = false; fontSize('1em'); for (var n = 0; n < smax; n++) { var slide = slideColl[n]; slide.style.visibility = 'visible'; } } else { slides.disabled = false; outline.disabled = true; s5mode = true; fontScale(); for (var n = 0; n < smax; n++) { var slide = slideColl[n]; slide.style.visibility = 'hidden'; } slideColl[snum].style.visibility = 'visible'; } } function showHide(action) { var obj = GetElementsWithClassName('*','hideme')[0]; switch (action) { case 's': obj.style.visibility = 'visible'; break; case 'h': obj.style.visibility = 'hidden'; break; case 'k': if (obj.style.visibility != 'visible') { obj.style.visibility = 'visible'; } else { obj.style.visibility = 'hidden'; } break; } } // 'keys' code adapted from MozPoint (http://mozpoint.mozdev.org/) function keys(key) { if (!key) { key = event; key.which = key.keyCode; } if (key.which == 84) { toggle(); return; } if (s5mode) { switch (key.which) { case 10: // return case 13: // enter if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return; if (key.target && isParentOrSelf(key.target, 'controls')) return; if(number != undef) { goTo(number); break; } case 32: // spacebar case 34: // page down case 39: // rightkey case 40: // downkey if(number != undef) { go(number); } else if (!incrementals[snum] || incpos >= incrementals[snum].length) { go(1); } else { subgo(1); } break; case 33: // page up case 37: // leftkey case 38: // upkey if(number != undef) { go(-1 * number); } else if (!incrementals[snum] || incpos <= 0) { go(-1); } else { subgo(-1); } break; case 36: // home goTo(0); break; case 35: // end goTo(smax-1); break; case 67: // c showHide('k'); break; } if (key.which < 48 || key.which > 57) { number = undef; } else { if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return; if (key.target && isParentOrSelf(key.target, 'controls')) return; number = (((number != undef) ? number : 0) * 10) + (key.which - 48); } } return false; } function clicker(e) { number = undef; var target; if (window.event) { target = window.event.srcElement; e = window.event; } else target = e.target; if (target.getAttribute('href') != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true; if (!e.which || e.which == 1) { if (!incrementals[snum] || incpos >= incrementals[snum].length) { go(1); } else { subgo(1); } } } function findSlide(hash) { var target = null; var slides = GetElementsWithClassName('*','slide'); for (var i = 0; i < slides.length; i++) { var targetSlide = slides[i]; if ( (targetSlide.name && targetSlide.name == hash) || (targetSlide.id && targetSlide.id == hash) ) { target = targetSlide; break; } } while(target != null && target.nodeName != 'BODY') { if (hasClass(target, 'slide')) { return parseInt(target.id.slice(5)); } target = target.parentNode; } return null; } function slideJump() { if (window.location.hash == null) return; var sregex = /^#slide(\d+)$/; var matches = sregex.exec(window.location.hash); var dest = null; if (matches != null) { dest = parseInt(matches[1]); } else { dest = findSlide(window.location.hash.slice(1)); } if (dest != null) go(dest - snum); } function fixLinks() { var thisUri = window.location.href; thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length); var aelements = document.getElementsByTagName('A'); for (var i = 0; i < aelements.length; i++) { var a = aelements[i].href; var slideID = a.match('\#slide[0-9]{1,2}'); if ((slideID) && (slideID[0].slice(0,1) == '#')) { var dest = findSlide(slideID[0].slice(1)); if (dest != null) { if (aelements[i].addEventListener) { aelements[i].addEventListener("click", new Function("e", "if (document.getElementById('slideProj').disabled) return;" + "go("+dest+" - snum); " + "if (e.preventDefault) e.preventDefault();"), true); } else if (aelements[i].attachEvent) { aelements[i].attachEvent("onclick", new Function("", "if (document.getElementById('slideProj').disabled) return;" + "go("+dest+" - snum); " + "event.returnValue = false;")); } } } } } function externalLinks() { if (!document.getElementsByTagName) return; var anchors = document.getElementsByTagName('a'); for (var i=0; i' + '